Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2012, 21:25
Кандидат Javascript-наук
Отправить личное сообщение для lammeR Посмотреть профиль Найти все сообщения от lammeR
 
Регистрация: 15.01.2010
Сообщений: 138

Вопрос по игре морской бой
Привет всем. Пишу данную игру и появилась проблема, например, есть 4-х палубный корабль, произошло попадание по этому кораблю, как найти остальные раненные части корабля и определить убит ли корабль.
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2012, 21:37
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

lammeR,
Гы
Вы б хоть выложили текущее
Как то делал на jQuery
1. Создаем таблу
2. размещаем корабли - элементам ячеек с данным кораблем присваиваем двуклассный класс - 1 элемент которого - тип корабля - второй номер блока
3. При поадании проставляем в ячейку третий класс kill ищем остальные ячейки по классу корабля,
Ответить с цитированием
  #3 (permalink)  
Старый 11.06.2012, 23:03
Кандидат Javascript-наук
Отправить личное сообщение для lammeR Посмотреть профиль Найти все сообщения от lammeR
 
Регистрация: 15.01.2010
Сообщений: 138

Не совсем понял что за "двуклассный класс", можно пример такого класса? Это ассоциативный массив в смысле?)
Ответить с цитированием
  #4 (permalink)  
Старый 11.06.2012, 23:25
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #5 (permalink)  
Старый 12.06.2012, 02:18
Кандидат Javascript-наук
Отправить личное сообщение для lammeR Посмотреть профиль Найти все сообщения от lammeR
 
Регистрация: 15.01.2010
Сообщений: 138

Deff, Спасибо за внимание, но с выводом нет никаких проблем, я имел ввиду работу с массивом, алгоритм поиска подбитых клеток и определение ранен или убит корабль в самом массиве.
Ответить с цитированием
  #6 (permalink)  
Старый 12.06.2012, 10:18
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

Как вариант, попробуйте при создании кораблей делать массив вида:
[
[1,1,1,1],
[1,1,1],
[1],
[1,1]
]

При подбитие заменяйте 1 на 0, а потом проверяйте сколько 1 осталсь, если их не осталось, то корабль убит.
Никогда не пробовал, но как идея, может попробуете
__________________
оляля, ололо
Ответить с цитированием
  #7 (permalink)  
Старый 12.06.2012, 13:15
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 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.
Ответить с цитированием
  #8 (permalink)  
Старый 12.06.2012, 14:06
Кандидат Javascript-наук
Отправить личное сообщение для lammeR Посмотреть профиль Найти все сообщения от lammeR
 
Регистрация: 15.01.2010
Сообщений: 138

Deff,
9xakep,
спасибо, но я не хочу создавать стопиццот переменных) Я скорее всего буду при поиске подбитых палуб проверять клетки по бокам, определять в какую сторону он идет, потом считать клетки в обе стороны по ходу расположения до пустой клетки(воды) и проверять раненные клетки и целые непременно в самом игровом поле(в массиве) .
Ответить с цитированием
  #9 (permalink)  
Старый 12.06.2012, 14:11
Аватар для 9xakep
сегодня в 12:34|Комментир
Отправить личное сообщение для 9xakep Посмотреть профиль Найти все сообщения от 9xakep
 
Регистрация: 12.04.2011
Сообщений: 1,180

lammeR,
ну и кого 100500 переменных)?
__________________
оляля, ололо
Ответить с цитированием
  #10 (permalink)  
Старый 12.06.2012, 14:14
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

lammeR,
Самая простая - это идея xakep
1. При заполнении кораблями - создаём массив на каждый корабль и в массив прописываем координаты каждой клетки
Массивов будет по кол-ву кораблей
2. При клике перебираем массив и смотрим совпадения координат
убитые блоки - удаляем, если массив 0 длины - корабль - убит, -удаляем весь массив
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Вопрос авторизации. 0931454574 Серверные языки и технологии 8 12.04.2011 11:09
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49
Вопрос про ООП, цепочки прототипов. Shaci Общие вопросы Javascript 5 27.01.2010 14:50