![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Морской, блин, бой.
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]в "что-то" ошибка, однозначно.