11.06.2012, 21:25
|
Кандидат Javascript-наук
|
|
Регистрация: 15.01.2010
Сообщений: 138
|
|
Вопрос по игре морской бой
Привет всем. Пишу данную игру и появилась проблема, например, есть 4-х палубный корабль, произошло попадание по этому кораблю, как найти остальные раненные части корабля и определить убит ли корабль.
|
|
11.06.2012, 21:37
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
lammeR,
Гы
Вы б хоть выложили текущее
Как то делал на jQuery
1. Создаем таблу
2. размещаем корабли - элементам ячеек с данным кораблем присваиваем двуклассный класс - 1 элемент которого - тип корабля - второй номер блока
3. При поадании проставляем в ячейку третий класс kill ищем остальные ячейки по классу корабля,
|
|
11.06.2012, 23:03
|
Кандидат Javascript-наук
|
|
Регистрация: 15.01.2010
Сообщений: 138
|
|
Не совсем понял что за "двуклассный класс", можно пример такого класса? Это ассоциативный массив в смысле?)
|
|
11.06.2012, 23:25
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Сообщение от lammeR
|
можно пример такого класса?
|
<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, 12.06.2012 в 01:52.
|
|
12.06.2012, 02:18
|
Кандидат Javascript-наук
|
|
Регистрация: 15.01.2010
Сообщений: 138
|
|
Deff, Спасибо за внимание, но с выводом нет никаких проблем, я имел ввиду работу с массивом, алгоритм поиска подбитых клеток и определение ранен или убит корабль в самом массиве.
|
|
12.06.2012, 10:18
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
Как вариант, попробуйте при создании кораблей делать массив вида:
[
[1,1,1,1],
[1,1,1],
[1],
[1,1]
]
При подбитие заменяйте 1 на 0, а потом проверяйте сколько 1 осталсь, если их не осталось, то корабль убит.
Никогда не пробовал, но как идея, может попробуете
__________________
оляля, ололо
|
|
12.06.2012, 13:15
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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, 13.06.2012 в 00:29.
|
|
12.06.2012, 14:06
|
Кандидат Javascript-наук
|
|
Регистрация: 15.01.2010
Сообщений: 138
|
|
Deff,
9xakep,
спасибо, но я не хочу создавать стопиццот переменных) Я скорее всего буду при поиске подбитых палуб проверять клетки по бокам, определять в какую сторону он идет, потом считать клетки в обе стороны по ходу расположения до пустой клетки(воды) и проверять раненные клетки и целые непременно в самом игровом поле(в массиве) .
|
|
12.06.2012, 14:11
|
|
сегодня в 12:34|Комментир
|
|
Регистрация: 12.04.2011
Сообщений: 1,180
|
|
lammeR,
ну и кого 100500 переменных)?
__________________
оляля, ололо
|
|
12.06.2012, 14:14
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
lammeR,
Самая простая - это идея xakep
1. При заполнении кораблями - создаём массив на каждый корабль и в массив прописываем координаты каждой клетки
Массивов будет по кол-ву кораблей
2. При клике перебираем массив и смотрим совпадения координат
убитые блоки - удаляем, если массив 0 длины - корабль - убит, -удаляем весь массив
|
|
|
|