Вопрос по игре морской бой
Привет всем. Пишу данную игру и появилась проблема, например, есть 4-х палубный корабль, произошло попадание по этому кораблю, как найти остальные раненные части корабля и определить убит ли корабль.
|
lammeR,
Гы Вы б хоть выложили текущее Как то делал на jQuery 1. Создаем таблу 2. размещаем корабли - элементам ячеек с данным кораблем присваиваем двуклассный класс - 1 элемент которого - тип корабля - второй номер блока 3. При поадании проставляем в ячейку третий класс kill ищем остальные ячейки по классу корабля, |
Не совсем понял что за "двуклассный класс", можно пример такого класса? Это ассоциативный массив в смысле?)
|
Цитата:
<style> td{ width:14px; } .titanick { color:#fff; text-shadow:#000 1px 1px 1px; background-color:red; } .bl_1{ background-color:blue; } .kil{ background:url(http://uploads.ru/i/X/D/6/XD6Of.png) right center; color:transparent; } .bl_4{ background-color:green; } </style> <table> <tr> <td class="titanick bl_1">1</td> <td class="titanick bl_2">2</td> <td class="titanick bl_3 kil">3</td> <td class="titanick bl_4 ">4</td> </tr> </table> |
Deff, Спасибо за внимание, но с выводом нет никаких проблем, я имел ввиду работу с массивом, алгоритм поиска подбитых клеток и определение ранен или убит корабль в самом массиве.
|
Как вариант, попробуйте при создании кораблей делать массив вида:
[ [1,1,1,1], [1,1,1], [1], [1,1] ] При подбитие заменяйте 1 на 0, а потом проверяйте сколько 1 осталсь, если их не осталось, то корабль убит. Никогда не пробовал, но как идея, может попробуете |
9xakep, - нормальная Идея, ну коль я начал уже так, продолжу:
Кликаем по Квадратикам! <html> <body> <style> body{ background-color:blue; } #wrap { width:156px; background-color:#fff; } td{ text-align:center; border:2px solid #000; color:#fff; text-shadow:#000 1px 1px 1px; background-color:blue; width:14px; height:18px; } td[class*="bl_"]{ border:1px solid #FFFFFF; background-color:green; } .БАБАХ{ background-image:url(http://uploads.ru/i/L/4/q/L4qjf.png); background-position:1px 0; color:transparent; } </style> <script type="text/javascript" src="http://yandex.st/jquery/1.4.4/jquery.min.js"></script> <div id=wrap> <table class="table1"> <tr> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> </tr> <tr> <td class="bark bl_1">1</td> <td class=""> </td> <td class="titanick bl_1">1</td> <td class="titanick bl_2">2</td> <td class="titanick bl_3 БАБАХ">3</td> <td class="titanick bl_4 ">4</td> <td class=""> </td> </tr> <tr> <td class="bark bl_2 БАБАХ">2</td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class=""> </td> <td class="БАБАХ"> </td> </tr> </table> </div> <br /> <script type="text/javascript"> var TypeKorabl=[ 'titanick', // 'titanick_2', //Eще подобные // 'bark_2', //Eще подобные 'bark' ] var titanick=4; var bark=2; function TstPopad_Korabl(ThisTD) { var ThisKorabl; for(var i in TypeKorabl){ //Определяем Класс подбитого корабля if(ThisTD.hasClass(TypeKorabl[i])){ThisKorabl=TypeKorabl[i];break;} } if(typeof(ThisKorabl)=='undefined'){return false} //Промазали! return ThisKorabl } function Убит_Tst(ThisKorabl) { var a=eval(ThisKorabl) //Устанавливаем общее число блоков подбитого корабля $("."+ThisKorabl+".БАБАХ").each(function(i){ a-- ;//Удаляем убитые блоки; }); if(a!=0){alert("\""+ThisKorabl+"\" Ранен, осталось целых отсеков: " + a )} else { var index; for(var k in TypeKorabl){ if(TypeKorabl[k]==ThisKorabl){index=k; break } } TypeKorabl.splice(index,1); alert("\""+ThisKorabl+"\" Убит!"); if(!TypeKorabl.length){alert("Противник -Уничтожен!\n\n = GAME OVER! =") $('table td').unbind(); // Отключаем клики } } } $('table td').bind('click', function() { //Клик по клетке if(!$(this).hasClass('БАБАХ')){ $(this).addClass('БАБАХ'); var ThisKorabl=TstPopad_Korabl($(this)) if(ThisKorabl){Убит_Tst(ThisKorabl)} else {alert("Промазал!")} } }); </script> </body> </html> |
Deff,
9xakep, спасибо, но я не хочу создавать стопиццот переменных) Я скорее всего буду при поиске подбитых палуб проверять клетки по бокам, определять в какую сторону он идет, потом считать клетки в обе стороны по ходу расположения до пустой клетки(воды) и проверять раненные клетки и целые непременно в самом игровом поле(в массиве) . |
lammeR,
ну и кого 100500 переменных)? |
lammeR,
Самая простая - это идея xakep 1. При заполнении кораблями - создаём массив на каждый корабль и в массив прописываем координаты каждой клетки Массивов будет по кол-ву кораблей 2. При клике перебираем массив и смотрим совпадения координат убитые блоки - удаляем, если массив 0 длины - корабль - убит, -удаляем весь массив |
Часовой пояс GMT +3, время: 19:20. |