HTML 5 Yenilikleri ve JavaScript ile Canvas elementini Kullanan Yılan Oyunu

0
kulker
HTML 5, Web 2.0 teknolojisinin bize sunduğu en büyük nimetlerden biri. Canvas,video ve audio gibi 3 önemli elementle daha gelişmiş web uygulamaları geliştirmek mümkün.

Ne vahimdir ki MSIE desteklemediği için kullanım oranının az olduğunu görüyoruz. Buna rağmen Firefox, Opera ve Google chrome HTML5 i desteklediği için bu güzelim teknolojiyi test edip kullanmaya başlamak fazla zaman kayıp etmemek lazım.
Kişisel kanaatim HTML 5'i JavaScript'le beraber kullandığımızda, applet kullanmaya gerek kalmadan dinamik web uygulamaları geliştirebileceğiz.

http://rainbow9.org/view/99708250/index.html linkinde bunun bariz bir örneğini görebiliriz.

Özellikle canvas elementinin JavaScript fonksiyonlarını kontrol ettiğimizde Pascal, Java, C++ kullanılan graph fonksiyonlarına çok yakın olduğunu görebiliriz: http://dev.w3.org/cvsweb/~checkout~/html5/html4-differences/Overview.html?rev=1.8&content-type=text/html;%20charset=iso-8859-1 adresinden incelemeye başlıyabilirsiniz.

Ben yıllar önce Pascalda yazdığım snake oyununu kolayca uyarladım. Buyrun efendim naçizane bir örnek:

hmtl 5 test - hello word



		
			#canvas {
border:1px solid black;
			}
		

var ctx;

var step=10;
var ZeminW=300;
var ZeminH=300;
var yon=2;
var x=10;var y=10;
var x2=10;var y2=10;
var izbirak= new Array(parseInt(ZeminW/step)*parseInt(ZeminH/step));
var izbirakCordinat= new Array(parseInt(ZeminW/step));
var iz=0;
var iz2=0; 
var  bekle=200;  // bekle değeri ile ilerleme hızı ters orantılıdır. Yani burdan yılanı hızlandırabiliriz
var Int1,Int2;
var lineW=step;
var yemX,yemY;

function zeminHazirla() {
  ctx.strokeStyle = "red";
  ctx.fillStyle = "yellow";
  ctx.lineWidth = lineW;
  ctx.lineCap = "round";
   ctx.fillRect(0,0,ZeminW,ZeminH);
   ctx.moveTo(x,0);
}

function baslat(isPause) {
	if (!isPause) {
 x=10; y=10;
 x2=10; y2=10;
 izbirak= new Array(parseInt(ZeminW/step)*parseInt(ZeminH/step));
 izbirakCordinat= new Array(parseInt(ZeminW/step));
 iz=0;
 iz2=0; 
yon=2;

	  ilerle(); YemOlustur();
	    Int1=setInterval(ilerle,bekle);
  setTimeout("Int2=setInterval(izsur,bekle)",3000);
	} else {
  Int1=setInterval(ilerle,bekle);
  Int2=setInterval(izsur,bekle);
	}
	
	if(document.getElementById("BtnStop"))
	document.getElementById("BtnStop").disabled=false;
	document.body.focus();
}
function dur() {
clearInterval(Int1);
	clearInterval(Int2);	
		if(document.getElementById("Btnplay"))
	document.getElementById("Btnplay").disabled=false;
	
}

function init(){
var domZem=(document.getElementById("Zemin"))?document.getElementById("Zemin"):0;
if (!domZem) return false;
domZem.innerHTML='';
ctx = document.getElementById('canvas').getContext('2d');	

   zeminHazirla();
   baslat();
}

function YemOlustur() {

 yemX=Math.ceil(ZeminW*Math.random()); 
 yemY=Math.ceil(ZeminH*Math.random());
yemX= yemX - ( yemX % step);
yemY= yemY - ( yemY % step); // yılanın adımlarına göre yem kordinatlarını yuvarlıyoruz

if (yemX>(step*2))  yemX=yemX-step; // yem tam sınırlara denk gelmesin
if (yemY>(step*2))  yemY=yemY-step;


//addlog('['+yemX+','+yemY+']');

if (typeof izbirakCordinat[parseInt(yemX/step)]!="undefined" ) 
{
if (typeof izbirakCordinat[parseInt(yemX/step)][parseInt(yemY/step)]!="undefined" && izbirakCordinat[parseInt(yemX/step)][parseInt(yemY/step)]!=0)
  { 
  addlog("!");//üzerine geldi yem, bidaha dene
  YemOlustur(); }
}
//
ctx.save();
ctx.fillStyle = "blue";	
  ctx.fillRect(yemX,yemY,lineW,lineW);
  
}

function YonTuslari(evt) {
var kcode=(evt.charCode || evt.keyCode);	
//alert(kcode);
 switch (kcode) {
 	case 38 : yon=3;break; //yukari tusu
 	case 37 : yon=1;break; //sol tus 
 	case 39 : yon=2;break; //sag tus
 	case 40 : yon=4;break; //asagi tusu
 	
 }
return false;
	
}
function izsur() {
 switch (izbirak[iz2]) {
 	case 2:  x2=x2+step; break;
 	case 1:  x2=x2-step; break;
 	case 4:  y2=y2+step; break;
 	case 3:  y2=y2-step; break;
 	case 5:  return true; break;
 	default: return true; break; 	
 }
 	
 ctx.save();
ctx.fillStyle = "yellow";	
  ctx.fillRect(x2,y2,lineW,lineW);
  izbirak[iz2]=0;
  izbirakCordinat[parseInt(x2/step)][parseInt(y2/step)]=0;
  iz2++;
}

function burayaKadar(IsGameOver){
	if (IsGameOver) alert("Game Over");
clearInterval(Int1);
	clearInterval(Int2);	
	zeminHazirla();
	
}

function nereyeGidiyorBuMahlukat(cx,cy) {
if (typeof izbirakCordinat[parseInt(cx/step)][parseInt(cy/step)]!="undefined" && izbirakCordinat[parseInt(cx/step)][parseInt(cy/step)]!=0) 
{
	burayaKadar(true);//kendi üzerine geldi
	//addlog('!') 
}
         
//if ( parseInt(izbirak[chkiz])!=0) burayaKadar(true);
	
	if (cxZeminW) burayaKadar(true);
	if (cyZeminH) burayaKadar(true);
	
	if (cx==yemX && cy==yemY)
	 {
          //tam isabet
          	YemOlustur(); 
          	clearInterval(Int2); // uza bakalım biraz
          	 setTimeout("Int2=setInterval(izsur,bekle)",800);
	 }
	
}
function ilerle() {
 ctx.save();
ctx.fillStyle = "red";
 switch (yon) {
 	case 2:  x=x+step; break;
 	case 1:  x=x-step; break;
 	case 4:  y=y+step; break;
 	case 3:  y=y-step; break;
 	
 }
  if (typeof  izbirakCordinat[parseInt(x/step)] =="undefined") izbirakCordinat[parseInt(x/step)] =new Array(parseInt(ZeminH/step));
  
  nereyeGidiyorBuMahlukat(x,y);
  izbirak[iz]=yon;

  
  izbirakCordinat[parseInt(x/step)][parseInt(y/step)]=1;
    ctx.fillRect(x,y,lineW,lineW);
  iz++;
  
	}
	
function addlog(str) {
var domLog=(document.getElementById("log"))?document.getElementById("log"):0;
if (!domLog) return false;//domLog.innerHTML+
domLog.innerHTML=domLog.innerHTML+str;
}


	
		
		

Bastan Al Durdur Devamt Et Yemle

Görüşler

0
kulker
Haberi gönderince html taglari temizlendiği için kod haliyle eksik olmuş. Kodu çalıştırmak için id=Zemin özelliğinde bir div tagini body arasına koymanız ve init fonksiyonun 3. satırında bulunan domZem.innerHTML=''; kodunu

domZem.innerHTML='<canvas id="canvas" width="'+ZeminW+'" height="'+ZeminH+'" > </canvas>';

olarak değiştimeniz yeterli. Tabi body onload a init fonksiyonunuda çağırmayı unutmayın.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

YazBoz API'nin İlk Sürümü Çıktı

FZ

Daha önce bahsettiğimiz yazboz.com ile ilgili yeni bir gelişmeyi paylaşmak istiyoruz: sistemi kendi uygulamalarında kullanmak isteyen araştırmacılar için bir API hazırlandı.

yazboz.com geliştiricileri Can Altıneller ve Özgür Oktay'ın hazırladığı API belgesinin ilk sürümünü FM takipçisi bilgisayarcılarla paylaşmak istiyoruz:

YazBoz.com'da biriktirdiğiz verileri bilim insanları ve uygulama geliştirmek isteyen herkesle paylaşabilmek için bir API geliştirdik. Bugüne kadar Yazboz'u inceleyen yapay zekâ araştırmacıları, dilbilimciler ve bilişsel bilimciler yazboz verilerinin kendi çalışmalarına önemli katkılarda bulunabileceğini düşündüler. YAZBOZ API’nin bu ilk sürümü ile bilim insanları ve geliştiriciler yeni uygulamalar yapabilecekler. Uygulamalar çoğaldıkça ve geliştikçe biz de YAZBOZ API yi geliştireceğiz.

JavaScript 1.7

FZ

Şu anda Firefox 2 BETA içinde kullanılan ve JavaScript Shell içinden de test edilebilen JavaScript'in yeni sürümü olan JavaScript 1.7 programlama dili pek çok yeni ve güçlü özellikle birlikte geliyor.

Perl, Python ve Türk gençliğinin zihnini bulandırmak üzere hazırlanan global komplonun bir parçası olan ismi lazım değil bazı dillerin güçlü özelliklerini alan JavaScript 1.7 Internet programcılarının işlerini daha da kolaylaştıracağa ve JavaScript'in pazar payını artıracağa benziyor.

GNU/Linux için yeni bir sözlük: YZC

ridvantulunay

YZC, yeni bir GPL lisanslı sözlük uygulaması.

0.02 sürümü ile yapısına Ezberletici eklenen 65.552 kelimelik güzel bir sözlük.

http://www.yaz-ar.com/home/yzc/ adresinden sözlüğe ve kaynak koduna erişebilirsiniz.

Sözlük GAMBAS ve SQLITE kullanılarak hazırlanmaktadır, ilerleyen sürümlerde yapısına sınavcı, genişletilebilirlik ve GTK desteği eklenecektir.

DOS: Henüz Ölmedi!

FZ

DOS. Yani MS-DOS. Bugünkü gençlerin büyük bir kısmının dahi bilmediği kadar düşük işlemcili bilgisayarlarda çalışabilen, pek çok öncü yazılımın geliştirilmesine yol açmış, bazılarımızın kolayca küçümseyip aşağılayabileceği bir işletim sistemi. Çoktan öldü, cenazesini kaldırdık diye düşünedurun bazıları pek de öyle düşünmüyor.

Bu makale DOS´a yazılmış bir güzelleme şeklinde ;-) FreeDOS gibi açıkkodlu açık kodlu bir alternatifi bulunan bu ilkel ortamda (!) artık Python ile program yazmanız, MP3 dinlemeniz ve tabii en önemlisi tüm zamanların en güzel oyunlarını oynamanız mümkün ;-) Meraklısı DOSbox ve Interesting DOS Programs sitelerine bir göz atabilir.

OpenBSD 2.9 PowerMAC Versiyonu hazır

anonim

OpenBSD 2.9'un PowerMac versiyonu çıktı. İndirdim ve kurdum, gerçekten OpenBSD`nin performansı ve Apple PowerMAC`in gücünün birleşmesinin muhteşemliği karşisında çok etkilendim. Macintosh`u olanlara şiddetle tavsiye ederim. Mutlaka deneyin: www.openbsd.org/macppc.html