Skip to content

Instantly share code, notes, and snippets.

@yuxel
Created July 8, 2011 21:15
Show Gist options
  • Save yuxel/1072837 to your computer and use it in GitHub Desktop.
Save yuxel/1072837 to your computer and use it in GitHub Desktop.
sercan oyun
Array.prototype.arrayUnique = function(){
var a = [], l = this.length;
for(var i=0; i<l; i++){
for(var j=i+1; j<l; j++){
if(this[i] === this[j]){
j = ++i;
}
}
a.push(this[i]);
}
return a;
};
var Game = {};
Game.Zone = function(){
var gameZone = $('.gameZone'), box = 3, clicked = 0, score = 0, randomArr = [], lev = box-2;
$("#startGame").click(function(){
$('.infoBox').fadeOut(200).addClass('displayNone');
level.randomNumber();
});
this.randomNumber = function(){
for(var i=0; i<box; i++){
randomArr[i] = Math.floor(Math.random()*40);
}
randomArr = randomArr.arrayUnique();
if(randomArr.length !== box){
level.randomNumber();
}
this.gameZoneBox();
return randomArr;
}
this.gameZoneBox = function(){
gameZone.addClass('displayNone').fadeIn(600);
for(var i=0; i<box; i++){
$('#gameZone'+randomArr[i]).css('background-image','url(images/'+randomArr[i]+'.png)');
}
setTimeout(function(){
gameZone.css('background-image','');
},2000);
}
gameZone.click(function(e){
var x = e.currentTarget.id, element = $('#'+x);
for(var i=0; i<box; i++){
if(x !== 'gameZone'+randomArr[i]){
element.addClass("err");
}else{
element.removeClass("err").addClass("ok").toggleClass("clicked");
if(element.hasClass("clicked")){
clicked++;
}else{
clicked--;
alert('2 kez tıkladığın için tıklamayı geri aldık!');
}
if(clicked == box){
score = score+box*5; clicked = 0; box++;
gameZone.removeClass("ok err");
$('.score').text('IQ Puan: ' + score);
if(box == 23){
alert('Tebrikler, oyunu bitirdiniz! '+'Puanınız: '+score);
location.reload();
}else{
$('.level').text('Beyin Gücü: '+lev);
gameZone.removeClass("clicked");
}
level.randomNumber();
}
break;
}
}
if(element.hasClass("err")){
alert('Kaybettin! Puanın: '+score);
location.reload();
}
});
}
var level = new Game.Zone();
@yuxel
Copy link
Author

yuxel commented Jul 8, 2011

  1. Array, Object gibi şeylerin prototype'larıyla oynamak iyi bir şey değildir : http://www.codinghorror.com/blog/2008/07/monkeypatching-for-humans.html, dolayısıyla 1 ile 12. satır arasındaki kodları ayrı bir method yap util.array.unique gibi ve 26. satırdaki randomArr = randomArr.arrayUnique(); satırı randomArr = util.array.unique(randomArr); gibi değiştir.

  2. JavaScript'de, isimlendirme kuralları (kural değil de gelenek daha çok) sınıf adları büyük harfle bşalr ama Game gibi namespace'ler küçük harfle başlar

  3. var gameZone = $('.gameZone'), box = 3, clicked = 0, score = 0, randomArr = [], lev = box-2; şunun yerine
    var gameZone = $('.gameZone'),
    box = 3,
    clicked = 0,
    score = 0,
    randomArr = [],
    lev = box-2;

daha okunaklıdır.

  1. 19 satırı "level.randomNumber" yazmışsın ya, burası yanlış. Bu durumda doğru çalışır ama bu düzgün bir sınıf değil, sen sınıf içinde, sınıftan türettiğin specific bir objeyi çağırıyorsun ve bu yanlış. ben bu sınıfı var level2 =new Game.Zone() diye çağırırsam bu sınıfı çağıramayacam. Bunun bi çözümü var, bakalım onu bulabilecen mi (anahtar kelimeler: this, context)

  2. methodlara comment yaz ki, ne iş yaptıklarını, kodu okumadan da anlayabileyim :)

  3. 47 satır ne yapıyor anlamadım, hatta ordaki for ne işi yapıyor onu da anlamadım. hah şimdi for'u anladım (burada bi 45 saniye daha kodu okumam gerekti) ama x diye değişken mi olur lan? ama 47, 48 ve 49 ne yapıyor onu anlamadım

  4. click'in içindeki "işleri" methodlara ayır? "checkForMutlipleClick" diye bi method yaz atiyorum ve bu iki kere tiklanip tiklanmadigini kontrol etsin

  5. oyun çok güzel olmuş lan :) ben bunu bizim öğrencilere yaptırırım :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment