Мобильная
версия

Сапер в 30 строк кода

Дата: Категория: JavaScript

Когда то давно, на habrahabr была "неделя игр в 30 строк кода". Я тоже успел внести свою лепту в эту игру, и написал старую добрую игрушку - "Сапер"

Конец игры, и начало. Сверху указано количество бомб на поле

Поиграть в него можно здесь

Сам код игры

(function (count,fileds) {
    function cl(id){x=document.getElementById(id);return x?(x.className.indexOf('bomb')!=-1?1:0):0;}
    var bombs=0;
    for(i=0;i<fileds;i++){
        r=document.createElement('div');
        if(Math.random()*fileds<count){r.className='bomb close',document.getElementById('text').innerHTML=(++bombs)+' bomb\'s';}
        else r.className='close';
        r.id=Math.floor(i/10)+'_'+i%10;
        document.body.appendChild(r);
    }
    for(o=0;o<fileds;o++){
        i=Math.floor(o/10),j=o%10,num=0,obj=document.getElementById(i+'_'+j);
        for(k=0;k<9;k++)num+=cl((i-(Math.floor(k/3)-1))+'_'+(j-(k%3-1)));
        obj.innerHTML=num==0?' ':num;
        obj.onclick=function(){mix=this.id.split('_'),open(mix[0],mix[1]);}
        obj.oncontextmenu=function(){this.className=this.className.indexOf('flag')!=-1?this.className.replace(/ flag/,''):this.className+' flag';return false;}
    }
    function open(i,j){
        dom=document.getElementById(i+'_'+j);
        if(!dom||dom.className.indexOf('close')==-1)return;
        if(dom.className.indexOf('bomb')!=-1){
            divs=document.getElementsByTagName('div');
            for(i=0;i<divs.length;i++)divs[i].className=divs[i].className.indexOf('bomb')!=-1?'bomb':'';
            alert('You lose!');
        }
        else {
            dom.className='';
            var elems = document.getElementsByTagName('div'),len=0;
            for (ki in elems)if(elems[ki].className&&elems[ki].className.indexOf('close')!=-1)len++;
            if(len<=bombs)alert('You win!');
        }
        if(dom.innerHTML==' ')for(var ks=0;ks<9;ks++)open(i-((Math.floor(ks/3)-1)),j-(((ks%3)-1)));
    }
}(10,100));

В заголовке, правда, немного слукавил — получилось 34 строки.
Если удалить установку флагов на мины, всякие сообщения, и еще больше запихнуть в строчки — то можно и к 30 привести, даже меньше. Но цель у меня была другая — было просто интересно написать что-то веселое и забавное.
(до попыток привести код к 30 строкам он был 54 строки ;)

Теги: #JavaScript, #Сапер, #30 строк

Ваша оценка:

Рейтинг: 9.9 (Оценок: 4)

Комментарий:

Copyright © DOC_tr 2015-2017 г. Все права защищены
Яндекс.Метрика
Перейти к мобильной версии