Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
vla18
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 1
#1

Игра "Морской бой"

04.06.2015, 20:15. Просмотров 634. Ответов 1
Метки нет (Все метки)

все сделал прога есть но никак не могу сделать так чтоб когда корабль подбит вокруг него появлялись точки,чтоб комп понимал куда бить,а то он бьет разнообразно даже если ранил корабль бьет там где пусто .помогите пожалуйста буду очень благодарен на всякий вот код программы, но не весь может я что-то не так сделал?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
procedure TForm1.nash(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);     //процедура постановки корабля
begin
x1:=(X div 20)+1;
y1:=(Y div 20)+1;
if k11>=0 then begin    //смотрит поставлены все корабли или нет
if button=mbright then  begin   //производит вращение корабля по нажатии правой кн мыши
     if rot=true then
       rot:=false
     else
       rot:=true;
       begin
iпо вертикали
begin
 
case k11 of   //смотрит какой корабль сейчас надо расстанавливать
 0: begin if  (b1[x1,y1]<>2)  then
    b1[x1,y1]:=1; end;
 1: begin if  (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2)then
    for i:=0 to 1 do  begin
    b1[x1,y1+i]:=1 end; end;
 2: begin if  (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) then
    for i:=0 to 2 do
    b1[x1,y1+i]:=1; end;
 3: begin if  (b1[x1,y1]<>2) and (b1[x1,y1+1]<>2) and (b1[x1,y1+2]<>2) and (b1[x1,y1+3]<>2)  then
    for i:=0 to 3 do
    b1[x1,y1+i]:=1; end;
   end;
 
For i:=1 to 10 do        //рисует желтым цветом корабль(ещё не поставленный)
  for j:=1 to 10 do
    begin
      if (b1[i,j]=1) then
        begin
          image1.Canvas.Brush.Color:=clyellow;
          image1.Canvas.Rectangle(20*i-20,20*j-20,20*(i),20*(j));
        end;
    end;
end;
end;
end
 
else
 
if rot=false then begin   //ставит корабль по горизонтали
 
case k11 of     //смотрит какой корабль ставить
 0: case  x1 of    //смотрит есть ли рядом с однопалубным кораблём другие корабли
     1: if (b1[x1,y1]<>2) and
       (b1[x1+1,y1+1]<>2) and
       (b1[x1,y1+1]<>2) and
       (b1[x1,y1-1]<>2) and
       (b1[x1+1,y1-1]<>2) and
       (b1[x1+1,y1]<>2) then
         begin
          b1[x1,y1]:=2;
          riad:=true
         end
        else
          riad:=false;
     2..10:  if  (b1[x1,y1]<>2) and
       (b1[x1+1,y1+1]<>2) and
       (b1[x1,y1+1]<>2) and
       (b1[x1-1,y1+1]<>2) and
       (b1[x1-1,y1]<>2)and
       (b1[x1-1,y1-1]<>2)and
       (b1[x1,y1-1]<>2) and
       (b1[x1+1,y1-1]<>2) and
       (b1[x1+1,y1]<>2) then begin
     b1[x1,y1]:=2;
     riad:=true
     end
    else
      riad:=false;
     end;
 1: case  x1 of     //смотрит есть ли рядом с двупалубным кораблём другие корабли
     
    k33:=k33-1
   end
else
    k33:=k33-1;
 
if (k11=1) and (k32=0) then
    begin
    k11:=k11-1;
    k32:=k32-1
    end
else
    k32:=k32-1;
 
if (k11=0) and (k31=0) then
    begin
    k11:=k11-1;
    k31:=k31-1
    end
else
    k31:=k31-1;
end;
end
 
else                     //ставит корабль по горизонтали
  begin
case k11 of              //смотрит какой корабль ставить
 0: case  x1 of             //смотрит есть ли рядом с однопалубным кораблём другие корабли
     1: if (b1[x1,y1]<>2) and
       (b1[x1+1,y1+1]<>2) and
       (b1[x1,y1+1]<>2) and
       (b1[x1,y1-1]<>2) and
       (b1[x1+1,y1-1]<>2) and
       (b1[x1+1,y1]<>2) then
         begin
          b1[x1,y1]:=2;
          riad:=true
         end
        else
          riad:=false;
 
     2..10:  if
       (b1[x1,y1]<>2)  and
       (b1[x1+1,y1+1]<>2) and
       (b1[x1,y1+1]<>2) and
       (b1[x1-1,y1+1]<>2) and
       (b1[x1-1,y1]<>2)and
       (b1[x1-1,y1-1]<>2)and
       (b1[x1,y1-1]<>2) and
       (b1[x1+1,y1-1]<>2) and
       (b1[x1+1,y1]<>2) then begin
     b1[x1,y1]:=2;
     riad:=true
     end
    else
      riad:=false;
     end;
 1: case x1 of                       //смотрит есть ли рядом с двупалубным кораблём другие корабли
    1:  if  (b1[x1,y1]<>2) and
       (b1[x1,y1-1]<>2)and
       (b1[x1+1,y1+1]<>2)and
       (b1[x1+1,y1]<>2) and
       (b1[x1+1,y1-1]<>2) and
 
       (b1[x1+1,y1+2]<>2) and
 
       (b1[x1,y1+2]<>2) and (y1+1<11)  then
    for i:=0 to k11 do begin
     b1[x1,y1+i]:=2;
     riad:=true
     end
    else
      riad:=false;
    2..10:
    if (b1[x1,y1]<>2) and
       (b1[x1-1,y1-1]<>2) and
       (b1[x1-1,y1]<>2) and
       (b1[x1-1,y1+1]<>2) and
       (b1[x1,y1-1]<>2)and
       (b1[x1+1,y1+1]<>2)and
       (b1[x1+1,y1]<>2) and
       (b1[x1+1,y1-1]<>2) and
 
       (b1[x1+1,y1+2]<>2) and
       (b1[x1-1,y1+2]<>2) and
 
       (b1[x1,y1+2]<>2) and (y1+1<11)  then
    for i:=0 to k11 do begin
     b1[x1,y1+i]:=2;
     riad:=true
     end
    else
      riad:=false
      end;
  2: case x1 of                     //смотрит есть ли рядом с двупалубным кораблём другие корабли
  1:if (b1[x1,y1]<>2) and
       (b1[x1,y1-1]<>2)and
       (b1[x1+1,y1+1]<>2)and
       (b1[x1+1,y1]<>2) and
       (b1[x1+1,y1-1]<>2) and
 
       (b1[x1+1,y1+2]<>2) and
 
 
       (b1[x1+1,y1+3]<>2) and
 
 
       (b1[x1,y1+3]<>2) and (y1+2<11) then
     for i:=0 to k11 do begin
     b1[x1,y1+i]:=2;
     riad:=true
     end
    else
      riad:=false;
  2..10:
    if (b1[x1,y1]<>2) and
       (b1[x1-1,y1-1]<>2) and
       (b1[x1-1,y1]<>2) and
       (b1[x1-1,y1+1]<>2) and
       (b1[x1,y1-1]<>2)and
       (b1[x1+1,y1+1]<>2)and
       (b1[x1+1,y1]<>2) and
       (b1[x1+1,y1-1]<>2) and
 
       (b1[x1+1,y1+2]<>2) and
       (b1[x1-1,y1+2]<>2) and
 
       (b1[x1+1,y1+3]<>2) and
       (b1[x1-1,y1+3]<>2) and
 
       (b1[x1,y1+3]<>2) and (y1+2<11) then
     for i:=0 to k11 do begin
     b1[x1,y1+i]:=2;
     riad:=true
     end
    else
      riad:=false
      end;                                 //ставит 4палубный корабль
  3: if y1+3<11 then
      begin
    for i:=0 to k11 do
    b1[x1,y1+i]:=2;
     riad:=true
       end
      else
       riad:=false
 
end;
 
 
if  riad=true then begin                 //смотрит если корабль поставлен то уменьшает счетчик
 
if (k11=3) then
  begin;
    k11:=k11-1;
  end;
 
if (k11=2) and (k33=0) then
   begin
    k11:=k11-1;
    k33:=k33-1
   end
else
    k33:=k33-1;
 
if (k11=1) and (k32=0) then
    begin
    k11:=k11-1;
    k32:=k32-1
    end
else
    k32:=k32-1;
 
if (k11=0) and (k31=0) then
    begin
    k11:=k11-1;
    k31:=k31-1
    end
else
    k31:=k31-1;
end;
end;
For i:=1 to 10 do            //закрашивает поставленные корабли Серым
  for j:=1 to 10 do
    begin
      if b1[i,j]=2 then
        begin
          image1.Canvas.Brush.Color:=clgray;
          image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);
        end;
    end;
 
 
if k11<0 then begin           //проверяет поставлены ли все корабли, если "да" то начинает игру с компьютером
   label12.Height:=0;
   label13.Height:=13;
   label14.Height:=13;
   label15.Height:=13;
   label16.Height:=13;
   label17.Height:=13;
   label18.Height:=13;
   label19.Height:=13;
   label20.Height:=13;
   label21.Height:=13;
   label22.Height:=13;
   label23.Height:=13;
   label26.Height:=13;
   image2.Height:=200;
   image2.Width:=200;
   for i:=1 to 10 do      //ресует белую сетку поля компьютера
   for j:=1 to 10 do begin
   image2.Canvas.Brush.Color:=clwhite;
   image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j) end
    end
end;
end;
 
 
 
 
 
procedure TForm1.N2Click(Sender: TObject);   //начинает новыю игру
begin
image1.Canvas.Brush.Color:=clwhite;
rot:=false;
k11:=3;
k33:=2;
k32:=5;
k31:=9;
label12.Height:=62;
image2.Height:=0;
For i:=1 to 10 do   //обнуляет массивы
  for j:=1 to 10 do
    begin
      b1[i,j]:=0;
      b2[i,j]:=0;
      image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);
    end;
FormCreate(self); //использует процедуру создания формы
 
 
 
 
 
 
 
 
 
 
end;
 
procedure TForm1.vistrel(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);                  //процедура обмена выстрелов
begin
x1:=(X div 20)+1;
y1:=(Y div 20)+1;
 
if kon=false then begin       //проверка закончилась игра или нет
  case b2[x1,y1] of
    0: b2[x1,y1]:=3;          //если попал в пустую клетка становится - просреленной пустой
    2: b2[x1,y1]:=4;          //если попал в клетку с кораблем то она становится- подбитой
    3,4: exit;                //если попал в клетку в которую уже стрелял то ничего не происходит
  end;
  for i:=1 to 10 do           //рисуется графическое поле компютера
   for j:=1 to 10 do
    begin
    case b2[i,j] of
    4: begin                     //клетка в котрой стоит подбитый или не доконца подбитый корабль
         if ((b2[i+1,j]=2)        //не доконца подбитый корабль
             or(b2[i,j+1]=2)
             or(b2[i-1,j]=2)
             or(b2[i,j-1]=2))
             or (((b2[i+1,j]=4)and(b2[i+2,j]=2))
             or((b2[i,j+1]=4)and(b2[i,j+2]=2))
             or((b2[i-1,j]=4)and(b2[i-2,j]=2))
             or((b2[i,j-1]=4)and(b2[i,j-2]=2)))
             or(((b2[i+1,j]=4)and(b2[i+2,j]=4) and (b2[i+3,j]=2))
             or((b2[i,j+1]=4)and(b2[i,j+2]=4)and(b2[i,j+3]=2))
             or((b2[i-1,j]=4)and(b2[i-2,j]=4)and(b2[i-3,j]=2))
             or((b2[i,j-1]=4)and(b2[i,j-2]=4)and(b2[i,j-3]=2)))
             then
              begin
               image2.Canvas.Brush.Color:=clgray;
               image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j);
               image2.Canvas.pen.Color:=clred;
               image2.Canvas.MoveTo(20*i-19,20*j-19);
               image2.Canvas.LineTo(20*i-1,20*j-1);
               image2.Canvas.MoveTo(20*i-1,20*j-19);
               image2.Canvas.LineTo(20*i-19,20*j-1);
               image2.Canvas.pen.Color:=clblack;
              end
             else                                   //подбитый корабль
              begin
               image2.Canvas.Brush.Color:=clred;
               image2.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j)
              end;
       end;
     3: begin                                     //простреленная пустая клетка
         image2.Canvas.Brush.Color:=clwhite;
         image2.Canvas.Rectangle(20*i-15,20*j-15,20*i-5,20*j-5)
        end;
 
    end;
 
        end;
win:=true;
For i:=1 to 10 do       //если находится хотябы один неподбитый корабль то победы нет
  for j:=1 to 10 do
    if b2[i,j]=2 then
      win:=false;
if win=true then        //вывод сообщения при победе
 begin
  showmessage ('Поздравляю!'+#13+'Вы победили.');
  kon:=true;
  exit
 end;
 
if b2[x1,y1]=4 then      //если игрок попал то компьютер не ходит
  exit;
 
 
bum:=false;
cokil:=true;
while (bum=false) or (cokil=true) do   //стрел-ть до тех пор пока не попал в клетку в которую не стрылял и если она пустая
begin
m:=random(10)+1;
n:=random(10)+1;
case b1[m,n] of
  0: begin
      b1[m,n]:=3;
      bum:=true;
      cokil:=false
     end;
  2: begin
      b1[m,n]:=4;
      bum:=true;
      cokil:=true
     end
end;
 
For i:=1 to 10 do                   //рисуется графическое поле игрока
  for j:=1 to 10 do
    begin
     case b1[i,j] of
     3: begin                       //простреленая пустая клетка
         image1.Canvas.Brush.Color:=clwhite;
         image1.Canvas.Rectangle(20*i-15,20*j-15,20*i-5,20*j-5)
        end;
     4:begin                       //клетка в котрой стоит подбитый или не доконца подбитый корабль
          if ((b1[i+1,j]=2)
          or(b1[i,j+1]=2)
          or(b1[i-1,j]=2)
          or(b1[i,j-1]=2))
          or(((b1[i+1,j]=4)and(b1[i+2,j]=2))
          or((b1[i,j+1]=4)and(b1[i,j+2]=2))
          or((b1[i-1,j]=4)and(b1[i-2,j]=2))
          or((b1[i,j-1]=4)and(b1[i,j-2]=2)))
          or(((b1[i+1,j]=4)and(b1[i+2,j]=4)and(b1[i+3,j]=2))
          or((b1[i,j+1]=4)and(b1[i,j+2]=4)and(b1[i,j+3]=2))
          or((b1[i-1,j]=4)and(b1[i-2,j]=4)and(b1[i-3,j]=2))
          or((b1[i,j-1]=4)and(b1[i,j-2]=4)and(b1[i,j-3]=2)))
             then begin                                       //не доконца подбитый корабль
               image1.Canvas.pen.Color:=clred;
               image1.Canvas.MoveTo(20*i-19,20*j-19);
               image1.Canvas.LineTo(20*i-1,20*j-1);
               image1.Canvas.MoveTo(20*i-1,20*j-19);
               image1.Canvas.LineTo(20*i-19,20*j-1);
               image1.Canvas.pen.Color:=clblack;
             end
             else                                           //подбитый корабль
             begin
              image1.Canvas.Brush.Color:=clred;
              image1.Canvas.Rectangle(20*i-20,20*j-20,20*i,20*j)
             end;
       end;
    end;
  end;
end;
lose:=true;
For i:=1 to 10 do              //если находится хотябы один неподбитый корабль то проигрыша нет
  for j:=1 to 10 do
    if b1[i,j]=2 then
      lose:=false;
if lose=true then
 begin
  kon:=true;
  showmessage ('Вы проиграли.'+#13+'Попробуйте ещё раз!');
  exit
 end;

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2015, 20:15
Ответы с готовыми решениями:

Игра "Морской бой"
Есть написанная игра, как сделать чтобы программа проверяла предыдущую...

Игра "Морской бой"
Здравствуйте! Передо мной стоит следующая задача: написать игру &quot;Морской бой&quot;...

Игра "Морской бой"
помогите пожалуйста пишу курсач по делфи.создаю морской бой как мне сделать...

Как создать поле для игры "Морской бой"?
Владею базовыми навыками Lazarus... С помощью чего лучше canvas, tBitmap или...

Разработать игру "морской бой" - создание двумерного массива
передомной поставили задачу, разработать игру &quot;морской бой&quot;, запоролся я на...

1
krapotkin
3339 / 2960 / 1025
Регистрация: 14.04.2014
Сообщений: 14,409
Записей в блоге: 14
05.06.2015, 06:30 #2
Морской бой. Оба игрока компьютер
http://www.cyberforum.ru/attachments/519408d1429911165
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2015, 06:30

"Морской бой", как реализовать построение кораблей?
Здрасьте, подскажете как реализовать построение кораблей? и вообще на каком...

"Морской бой" сравнение расстановок
Помогите, пожалуйста! Не первый день бьюсь над этой проблемой, никак не могу...

Морской-бой сетевая игра
Есть исходный код, EXE-файл. Нужно вставить форму. Срочно помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru