Gönderen Konu: Html 5 ile yılan oyunu yapmak.  (Okunma sayısı 2333 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı Yasin_0023

  • İleti: 157
  • Puan: 148
  • Cinsiyet: Bay
    • SİYAHSERİT
Html 5 ile yılan oyunu yapmak.
« : Aralık 14, 2008, 23:18:14 ÖS »
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

MSIE desteklemediği için örnek uygulamalarımızı  Firefox, Opera veya  Google chrome browserleri ile test etmemiz gerekecek.

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

Kod: [Seç]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>hmtl 5 test - hello word </title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />

<style type="text/css">
#canvas {
border:1px solid black;
}
</style>
<script language="JavaScript" type="text/javascript">
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='<canvas id="canvas" width="'+ZeminW+'" height="'+ZeminH+'"></canvas>';
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 (cx<1 || cx+lineW>ZeminW) burayaKadar(true);
if (cy<1 || cy+lineW>ZeminH) 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;
}
</script>
</head>
<body onload="init()" onkeypress="return YonTuslari(event)">
<div id=Zemin></div>
<p>
<button onclick="burayaKadar(false);baslat();" >Bastan Al</button>
<button onclick="dur();this.disabled=true;" id=BtnStop disabled="disabled">Durdur</button>
<button onclick="baslat(true);this.disabled=true;this.blur()" id=Btnplay disabled="disabled">Devamt Et</button>
<button onclick="YemOlustur()">Yemle</button>
</p>
<div id=log style="width:400px;height:200px;overflow:auto"> </div>
</body>
</html>
Konuyu Paylaş:
  delicious  facebook  twitter  google
|www .siyahserit.tr.cx | 
|www .siyahserit.tr.gg  |  |www.uzmanweb.yetkinblog.com |  |www.uzmanweb.yetkinforum.com | |www.siyahserit.turkforumpro.com  |

 

Benzer Konular

  Konu / Başlatan Yanıt Son İleti
2 Yanıt
4547 Gösterim
Son İleti Mayıs 11, 2011, 19:26:25 ÖS
Gönderen: AdmiN
0 Yanıt
2170 Gösterim
Son İleti Ekim 08, 2006, 19:08:23 ÖS
Gönderen: burajan
6 Yanıt
2721 Gösterim
Son İleti Temmuz 07, 2010, 10:23:39 ÖÖ
Gönderen: _TheBoss
6 Yanıt
1651 Gösterim
Son İleti Mart 24, 2011, 17:07:39 ÖS
Gönderen: ataktos
10 Yanıt
1941 Gösterim
Son İleti Nisan 03, 2011, 19:14:13 ÖS
Gönderen: ataktos