Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Морской, блин, бой.


Страницы:   1 2

Sholah_Weras ©   (2006-10-25 18:58:00) 

Здравствуйте!
Вот давеча решил забабахать морской бой. Решил вот как сделать - в потоке постоянно обновляются координаты Image'в (которые по совместительству и являются кораблями), вычисляется место в массиве, где должно находится начало корабля, определяется тип корабля и на оснавании типа заполняются еще несколько ячеек массива. Примнр: есть трехпалубник, координаты 15-15. В массиве [1,1] выставляется единица. Тип корабля 3, поворот=false, занчит в [1,2] и [1,3] выставляется единица:
1110000000
0000000000
0000000000
-----------
Только вот что-то не работает. Замучился выяснять ошибку. Может неверен сам подход? Может кто сталкивлся с такой проблемой?


Steep   (2006-12-12 16:40:00) [21]


> При игре по сети где хранить корабли?

да каждый у себя пусть хранить координаты кораблей
при выстреле послай координаты
у врага делай проверку координат со своими (у врага) кораблями воординатами
и шли ответ попал, мимо, убил
и усе...


Pa5ha   (2006-12-12 15:17:00) [22]

Кстати, вопрос. При игре по сети где хранить корабли? Если каждый на своей стороне, то можно считерить и посылать при каждом выстреле, что не попал. Если на стороне врага, то малоли он сможет узнать где они находятся. На своей стороне как-то безопаснее, но... Шифровать то ли? Есть идеи? Как люди делают? -)


Думкин   (2006-12-12 11:20:00) [23]


> Sholah_Weras ©   (12.12.06 08:33) [12]

Надо исходить из положения: в одну воронку снаряды дважды не попадают.
Взяв это на вооружение, бомбим пустое поле. Места попаданий - места расположения эскадры. Потом противник пусть хоть забомбится. Исходя из нашей доктрины - он не сможет подбить ни одного корабля. Удачи. :)


Sholah_Weras   (2006-12-12 08:33:00) [24]

Ну, вообщето да, тут этому нафиг ни кому не нужно)) Но чтобы не быть голословным, хочется предъявить исходники. Хотя, кому это кроме меня нужно?)))
Следующий шаг разработки - компьюиер будет расставлять корабли. Я вот думаю реализовать это рандомно, но с роверкой всевозможных условий (типа корабли рассатавлять правильно).


grisme   (2006-12-12 04:04:00) [25]

ты думаешь оно тут нужно кому? :]
ты давай релиз собери(я сомневаюсь, что такой день настанет), тогда мы его попинаем, хотя(потенциально) страшно


Sholah_Weras   (2006-12-11 22:31:00) [26]

Вот. Свершилось. Наконеч-то написал код, реализующий расстановку кораблей. Прошу заметить, что все это время (месяц, или около того) я не шибко большое внимание уделял. Так что просьба на мои черепашьи таланты не обращать внимания.
там есть одна ошибка. Указывает на

for i:=0 to 19 do
begin
 XY[i]:=0;
end;


Необходимо посмотреть выше, в раздел TForm3 = class(TForm) и там закоментировать одну из строчек XY: array [0..19] of SmallInt;

Эм да, кстать. А куда выложить то можно? А то 2000строк кода размещать здесь как-то не то)


Belorus   (2006-10-29 11:48:00) [27]

SheepEnebl - это аффца фключинайа ?
По мне так ShipEnable - несколько эстетичнее смотрелось бы в этой груде символов.

Не знаю как вам но мне отступы после бегина в 1 символ - так непривычны...
Используй TAB он вроде умалчивая :) равен двум пробелам.


Sholah_Weras   (2006-10-25 23:01:00) [28]

Переделываю, скоро отпос...тюсь? тющь? тюся? Вообщем ждите.


grouzd)ev   (2006-10-25 22:58:00) [29]

традиционно. 3 работы. полный код. хотя свою (grouzd)ev) смотреть не советую, там совсем другой метод (жууутко кривой)
http://grouzdev.nm.ru/projects/contests/15_seabattle.rar[1 884kb]

да, и на будущее - http://code.darthman.com/
+)

---
... we are walking on a thin line and you better avoid the risk ...


RzCoDer   (2006-10-25 20:43:00) [30]

блин, забей

> место в массиве, где должно находится начало корабля, определяется
> тип корабля и на оснавании типа заполняются еще несколько
> ячеек

Юзай для каждого отделения корабля свой участок в массиве.

p.s. и откуда у народа такая тяга всё усложнить?


Ketmar   (2006-10-25 20:05:00) [31]

если ты думаешь, что в этом коде можно разобраться без 0.7 сорокаградусной -- ты неисправимый оптимист. этоне код. это каша непонятного назначения. к тому же совершенно не ясно, что есть SheepEnebl (у меня появляются закономерные ассоциации с овцами и половым актом), XY, ...

вердикт: или переписать, или в "начинающим".

зыж и с такимкодом ты полез многопоточность ваять??? рано. ра-но.

ззыж маленький тестик на интеллект. посмотрим, пройдёшь ли.


Rial   (2006-10-25 20:00:00) [32]


> [0] Sholah_Weras ©   (25.10.06 18:58)

Конструктивных замечаний не могу сделать, т.к. что же
все таки происходит или должно происходить, знаешь, видимо, только ты.
Поэтому мои неконструктивные.

1. k:=k+1; <=> Inc(K);
2. n:=n+30; <=> Inc(N, 30);

3.
begin
f2:=f2+1;
end;
<=>
Inc(F1);

4.
Unit1.Mass_P1[k,k1]:=1;
Всякие там массивы не стоит относить напрямую к форме.
Либо делай просто глобальные переменные, либо заводи отдельный
класс, отвечающий за логику игры.

5.
n:=15; n1:=15; k:=0; k1:=0;; f1:=0; f2:=0;
Иногда стоит почаще клацать по клавише Enter.

6.
:SmallInt;
А чем Integer не угодил ? :)

7.
Unit1.Form1.Image1.Top;
ИМХО, жуткая иерархия. Зачем юнит то указывать ?

8.
Exit;
end;
Это что за чудо ?

9.
Назови переменные по - человечески.
И раз уж на то пошло, поставь комментарии на каждой строке.
И кода выложи побольше, хотя если он весь похож на это,
то не стоит... %)


Sholah_Weras   (2006-10-25 19:17:00) [33]

Вот привожу код. Может кто прозорливый и ткнет пальчиком в нужную строку.

procedure ObMass.UpdateMass;
var
i,j,f1,f2:Byte;
tz:boolean;
k,k1,n,n1:SmallInt;
begin
n:=15; n1:=15; k:=0; k1:=0;; f1:=0; f2:=0;

if SheepEnebl[0]=1 then      //Это чтоб массив не забивал координатами    
begin                               //корабля находящимся вне поля canvas
 XY[0]:=Unit1.Form1.Image1.Left;
 XY[1]:=Unit1.Form1.Image1.Top;
end;

for j:=0 to 9 do
begin
 tz:=false;
 for i:=0 to 9 do
 begin
  if XY[j+f1] > n then
  begin
   n:=n+30;    // Каждая клетка 30*30
   k:=k+1;      // Вычисляется номер ячейки массива, куда 1 записвать
  end
  else
  begin
   if not tz then
   begin
    f1:=f1+2;
   end;
   tz:=true;
  end;
 end;
 tz:=false;
 for i:=0 to 9 do
 begin
  if XY[j+f2] > n1 then
  begin
   n1:=n1+30; //Аналогично
   k1:=k1+1;   //
  end
  else
  begin
   if not tz then
   begin
    f2:=f2+1;
   end;
  tz:=true;
  end;
 end;
 Unit1.Form1.Edit1.Text:=IntToStr(XY[0])+' '+IntToStr(XY[1])+' '+IntToStr(n)+' '+IntToStr(n1);
 Unit1.Mass_P1[k,k1]:=1;
 k:=0; k1:=0; n:=15; n1:=15;
end;

Exit;
end;


Ketmar   (2006-10-25 19:08:00) [34]

иначе бы "что-то" обязательно заработало, ага.


Ketmar   (2006-10-25 19:07:00) [35]

в "что-то" ошибка, однозначно.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо