İçeriğe geç

Php ile oyun programlama – 1

Merhabalar daha öncede bahsettiğim youtube ders serimize başlamadan önce elimizde yazılı bir kaynak olması adına belirli kısımlara ayrılmış şekilde bu tarz içerikler hazırlamaya karar verdim. Haydi başlayalım 🙂

Kurduğunuzu varsaydığım localhost programının ana dizini içinde yer alan www(xampp için htdocs) dizinine girelim. Aşağıda ki görselde olduğu gibi gerekli dosyaları oluşturalım.

imaj dizini proje ile ilgili görselleri koyacağımız yer olacak, js dizini projemizi daha interaktif bir hale getirmemizi sağlayacak javascript kodlarını koyacağımız yer olacak, sistem dizini projemizin back-end işlerini yapacağımız yer olacak, stil dizini ise projemizin css kodlarını barındıracak alan olacak.

İlk etap – Tile map harita sistemi üretmek!

tile map harita sistemi 2 boyutlu oyunlarda popüler olarak kullanılan haritalama sistemidir.

  • sistem dizini içine ayar.php ve helper.php adında iki php dosyası koyalım,bu php dosyaları projemiz ile ilgili yapacağımız düzenlemelerde işimizi kolaylaştıracak.

helper.php dosyasında çalışmaya başlayalım.

    class oyun { //oyun adında bir sınıf oluşturur
		function haritaOlustur(){ // haritamızı oluşturacak fonksiyon
			$harita=[ 
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
			];// haritanın kordinat düzlemi ve hangi objeleri barındırdığını
			//belirten dizi yapısı.
			for($y=0;$y<count($harita);$y++){ 
				for($x=0;$x<count($harita[$y]);$x++){
					echo '<div class="tile">'.$y.'/'.$x.'</div>';
				}
			}
			
		}
	}

Sakın korkma! Hepsini anlatıyorum,hazır mısın?

class oyun {
    //oyun adında bir kütüphanem var!!
}

class php içinde bulunan kendi kütüphanelerimizi oluşturmamızı sağlayan bir yapıdır. classtan sonra yazdığımız oyun kelimesi bu kütüphaneye verdiğimiz isim oluyor. açıp kapattığımız süslü parantezler bu kütüphanenin kapsayıcıları oluyor. Yani süslü parantezler içine yazdığımız her kod bu kütüphaneye ait oluyor.

function haritaOlustur(){
    //buraya yazılan her şey bu metoda ait! 
}

function php içinde metodlar üretmemizi sağlayan bir yapıdır. function sonrasında yazılan haritaOlustur kelimesi metoda verdiğimiz isim oluyor. sonrasında açılmış parantezler bu metoda dışarıdan göndereceğimiz değerleri alıp fonksiyona taşıyan kısım oluyor. Fark ettiğiniz gibi içi boş çünkü şimdilik dışarıdan bir parametre göndermeyeceğiz. süslü parantezler içine yazılan her kod parçası da bu metoda ait olmuş oluyor (Bak ne kadar basit dimi). Metodları kütüphane içinde kitaplar olarak düşüne bilirsiniz. Önce kütüphaneye gideceğiz sonrasında ihtiyacımız olan fonksiyonu çalıştıracağız bu kadar basit.

	class oyun {
		function haritaOlustur(){
			$harita=[
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
			];
		}
	}

İşte şimdi tile map sisteminin atar damarına geldik. Eğer programlama kariyerine oyun yaparak devam edeceksen burada anlatacaklarım işine gerçekten yarayacak. Diğer seçenekte isen çokta kendini yıpratma :). dolar işareti php dilinde değişken tanımlamaya yarar. $harita demek harita adında bir değişken oluşturduğumuz anlamına geliyor ve bu değişkeni bir çok boyutlu dizi olarak tanımladık. Diziler özetle bizim için taşeron işçiler gibidir. içlerine bir sürü şey koyarız sonra kimliklerine göre canımız sıkılınca buraya gel deriz. Peki Dizilerde nedir diyorsanız aşağıya bakarak anlayabilirsiniz.

$okul=array();
/** okul adında bir değişkene boş bir dizi atadık. 
array() alternatifi olarak direk $okul=[]; de yazabiliriz.
**/
$okul[0]='Hebele hübele okulu';
/**
    dizinin 0'ıncı elemanını yarattık ve içine string(metin) tipinde
    bir veri girdik. 0'ıncı eleman dizinin anahtar değeri olarak geçer
    ve istenirse string bir ifadede olabilir mesela şöyle ->
**/

$okul['tupras_ilk_ogretim']='Hocam beni dövdü';
/** Bu sefer dizimize tupras_ilk_ogretim adında bir anahtar verdik ve içine
string bir ifade koyduk. Bu değeri ekrana basmak istersek şunu yapmalıyız. **/

echo $okul['tupras_ilk_ogretim']; 
/** köşeli parantezler içi değere ulaşmamızı
sağlayan anahtar değerdir. ekrana Hocam beni dövdü yazar. 
**/


Peki neden çok boyutlu bir dizi oluşturduk?

Aslında o dizi lise çağında gördüğümüz sayısal derslerin bize merhaba demesidir. Aşağıya bakınız..

Anlayacağınız o dizi yapısı aslında bir kordinat düzlemini temsil ediyor. içindeki sıfırlar ise o kordinat içinde hangi harita şeklinin olacağını temsil etmekte. yani sıfır yerine bir yazarsak yerde çim yerine bir ağaç belirecek gibi gibi. Oldukça basit gördüğünüz üzere. Şimdi bu kordinat düzlemini kullanıp nasıl bir harita oluşturacağız ona bakalım.

$harita=[
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
				[0,0,0,0,0],
			];
			for($y=0;$y<count($harita);$y++){
				for($x=0;$x<count($harita[$y]);$x++){
					echo '<div class="tile">'.$y.'/'.$x.'</div>';
				}
			}
			
/**
    for döngüler kurmamıza yarar. 
    for($y=0;$y<count($harita);$y++);
   $y 0'a eşittir. ikinci parametredeki count($harita) bize $harita içinde ki
   elemanların toplamını verir. yani $y değeri dizimizde ki 
   y kordinat toplamını sayar. sonrasında $y++ ile $y değerini
   her defasında bir arttırırz. $y değeri toplam değerden büyük olursa
   işlem tamamlanır.
   
   for içinde ki diğer for döngüsü ise ilk döngünün ulaştığı dizinin içindeki
   dizinin elemanlarını yani ikincil dizilerin elemanlarını sayar.
    
    sonrasında ikinci döngü içinde echo komutu ile bir html öğe ekrana yazdırılır
    
**/

Nasıl çalıştıracağız ona bakalım.

ana dizinde bulunan index.php içine girelim ve şu kodları yazalım.

<?php 
	include 'sistem/helper.php';
	$game=new oyun();
?>
<html>
	<head>
		<meta charset="utf8">
		<title>Game is coming!</title>
	</head>
	<body>
		<?
			$game->haritaOlustur();	
		?>
	</body>

</html>

Yukarıda ne yaptık hemen ona bakalım!

include 'sistem/helper.php';
	$game=new oyun();
	
	/**
	    include komutu belirttiğimiz dosya yolunda bulunan php
	    dosyasını projemize dahil eder.
	    
	    new oyun(); ise oyun adını verdiğimiz class yapımızı nesne olarak
	    oluşturmamızı sağlar.
	    
	    $game=new oyun();
	    
	    yani kütüphanemizi $game değişkenine atadık. artık
	    $game değişkenini kullanarak içindeki fonksiyonlara ulaşabiliriz.
	
	
	**/

Şimdide kütüphane içinde ki metodumuzu çalıştıralım.

		<?
			$game->haritaOlustur();	
/**
$game değişkenine atadığımız
 haritaOlustur adında ki metodu çalıştırdık.
 -> kütüphane içinden her hangi bir metoda veya değişkene ulaşmamızı
 sağlar. kalan kısmı zaten direk metod halledecek.
**/
		?>

Ekran çıktısı

şuan bu şekilde bir görüntü ile karşılaşmış olmalısınız. Bunun sebebi henüz ekrana bastığımız div elementine bir stil vermememiz. Hemen onuda halledelim ve ekran çıktısına bakalım.

 

Ne öğrendik ?

  • php değişken tanımlama
  • sınıf yapısı(class)
  • fonksiyon oluşturmak
  • döngüler
  • iç içe döngüler
  • dizi kullanımının temeli
  • çok boyutlu dizilerin temeli
  • basit bir kordinat düzlemini işlemek
  • sayfaya dışarıdan php dosyası dahil etmek
  • ekrana html element basmak(echo komutu)
  • nesne tanımlama
  • nesne içinden bir fonksiyon çağırma
     

4 Yorum

  1. for döngüsü içerisinde tekrar tekrar count edilmesi performans kaybı yaşatır, bir üst satırda bunu count ettirip ram den direk value’yu almak, her defasında count ettirmekten daha hızlı olur

    • boraozercom boraozercom

      Evet haklısın,gözümden kaçmış müsait olunca tekrar düzeltirim 🙂

  2. mde mde

    Derslerin devamı nerede

Merve Alaçatı için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir