1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15
1

Крестики-нолики с компьютером

11.12.2013, 20:23. Показов 3675. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста) У меня прога крестики-нолики, рассчитанная на 2х игроков. На ее основе нужно сделать версию игры с компьютером. Как это сделать - пока без понятия.
Код кривоватый, но уже что есть.
Поле состоит из 27 клеток (9 пустых, 9 ноликов, 9 крестиков). Нолики-крестики - вставленные картинки.
переменные k147,k258,k369 и т.д. - счетчики и одновременно лейблы-метки на формы (счетчики обнуляются путем обращения к меткам с другой формы)
Visual Basic
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
Private Sub Form_Load()
AutoRedraw = True
ScaleMode = 3
Cls
Line (0, 0)-Step(ScaleWidth, 0), QBColor(8)
Line (0, 1)-Step(ScaleWidth, 0), QBColor(15)
AutoRedraw = False 'Этот код дабовляет полоску под меню
main.Show
hod.Caption = Op.igKREST.Text
N = 0
k147 = 0
k258 = 0
k369 = 0
k123 = 0
k456 = 0
k789 = 0
k357 = 0
k159 = 0
n147 = 0
n258 = 0
n369 = 0
n123 = 0
n456 = 0
n789 = 0
n357 = 0
n159 = 0
 
End Sub
 
 
 
Private Sub Image2_Click()
Call mciExecute("close vanessa.mp3")
Image2.Visible = False
Image1.Visible = True
End Sub
 
Private Sub Image1_Click()
Play
Image1.Visible = False
Image2.Visible = True
End Sub
 
Private Sub kl1_Click()
 
N = N + 1
If hod.Caption = Op.igKREST Then
kl1.Visible = False
kn1.Visible = False
kr1.Visible = True
k147 = k147 + 1
k123 = k123 + 1
k159 = k159 + 1
Else
kl1.Visible = False
kn1.Visible = True
kr1.Visible = False
n147 = n147 + 1
n123 = n123 + 1
n159 = n159 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl2_Click()
N = N + 1
If hod.Caption = Op.igKREST.Text Then
kl2.Visible = False
kn2.Visible = False
kr2.Visible = True
k258 = k258 + 1
k123 = k123 + 1
ElseIf hod.Caption = Op.igNUL.Text Then
kl2.Visible = False
kn2.Visible = True
kr2.Visible = False
n258 = n258 + 1
n123 = n123 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl3_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl3.Visible = False
kn3.Visible = False
kr3.Visible = True
k369 = k369 + 1
k123 = k123 + 1
k357 = k357 + 1
Else
kl3.Visible = False
kn3.Visible = True
kr3.Visible = False
n369 = n369 + 1
n123 = n123 + 1
n357 = n357 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl4_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl4.Visible = False
kn4.Visible = False
kr4.Visible = True
k147 = k147 + 1
k456 = k456 + 1
Else
kl4.Visible = False
kn4.Visible = True
kr4.Visible = False
n147 = n147 + 1
n456 = n456 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl5_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl5.Visible = False
kn5.Visible = False
kr5.Visible = True
k258 = k258 + 1
k456 = k456 + 1
k159 = k159 + 1
k357 = k357 + 1
Else
kl5.Visible = False
kn5.Visible = True
kr5.Visible = False
n258 = n258 + 1
n456 = n456 + 1
n159 = n159 + 1
n357 = n357 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl6_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl6.Visible = False
kn6.Visible = False
kr6.Visible = True
k369 = k369 + 1
k456 = k456 + 1
Else
kl6.Visible = False
kn6.Visible = True
kr6.Visible = False
n369 = n369 + 1
n456 = n456 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl7_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl7.Visible = False
kn7.Visible = False
kr7.Visible = True
k147 = k147 + 1
k789 = k789 + 1
k357 = k357 + 1
Else
kl7.Visible = False
kn7.Visible = True
kr7.Visible = False
n147 = n147 + 1
n789 = n789 + 1
n357 = n357 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl8_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl8.Visible = False
kn8.Visible = False
kr8.Visible = True
k258 = k258 + 1
k789 = k789 + 1
Else
kl8.Visible = False
kn8.Visible = True
kr8.Visible = False
n258 = n258 + 1
n789 = n789 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub kl9_Click()
N = N + 1
If hod.Caption = Op.igKREST Then
kl9.Visible = False
kn9.Visible = False
kr9.Visible = True
k369 = k369 + 1
k789 = k789 + 1
k159 = k159 + 1
Else
kl9.Visible = False
kn9.Visible = True
kr9.Visible = False
n369 = n369 + 1
n789 = n789 + 1
n159 = n159 + 1
End If
If hod.Caption = Op.igKREST.Text Then
hod.Caption = Op.igNUL
ElseIf hod.Caption = Op.igNUL.Text Then
hod.Caption = Op.igKREST.Text
End If
If k147 = 3 Or k258 = 3 Or k369 = 3 Or k123 = 3 Or k456 = 3 Or k789 = 3 Or k357 = 3 Or k159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igKREST.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf n147 = 3 Or n258 = 3 Or n369 = 3 Or n123 = 3 Or n456 = 3 Or n789 = 3 Or n357 = 3 Or n159 = 3 Then
Gover.Show
Gover.i.Caption = Op.igNUL.Text
Gover.p.Visible = True
KrestikNolik.Enabled = False
ElseIf N = 9 Then Play2
Gover.Show
Gover.p.Visible = False
Gover.i.Caption = "Ничья!!!"
KrestikNolik.Enabled = False
End If
End Sub
 
Private Sub New_Click()
If MsgBox("Начать новую игру?", 36, "Новая игра") = vbYes Then
hod.Caption = Op.igKREST.Text
N = 0
k147 = 0
k258 = 0
k369 = 0
k123 = 0
k456 = 0
k789 = 0
k357 = 0
k159 = 0
n147 = 0
n258 = 0
n369 = 0
n123 = 0
n456 = 0
n789 = 0
n357 = 0
n159 = 0
kl1.Visible = True
kl2.Visible = True
kl3.Visible = True
kl4.Visible = True
kl5.Visible = True
kl6.Visible = True
kl7.Visible = True
kl8.Visible = True
kl9.Visible = True
kr1.Visible = False
kr2.Visible = False
kr3.Visible = False
kr4.Visible = False
kr5.Visible = False
kr6.Visible = False
kr7.Visible = False
kr8.Visible = False
kr9.Visible = False
kn1.Visible = False
kn2.Visible = False
kn3.Visible = False
kn4.Visible = False
kn5.Visible = False
kn6.Visible = False
kn7.Visible = False
kn8.Visible = False
kn9.Visible = False
End If
End Sub
Во вложениях скрин формы
Миниатюры
Крестики-нолики с компьютером  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2013, 20:23
Ответы с готовыми решениями:

Крестики-нолики
Программа практически сделана, но я не знаю как добавить игру со вторым игроком , по этому прошу у...

Крестики-нолики
Я пытаюсь сделать крестики нолики... Dim Arr Private Sub Command1_Click() If...

Крестики-нолики
Всем привет, недавно начал изучать VB, решаю не простые, но и не сложные задачи. Хочу попробовать...

Крестики нолики: как сделать выигрышные комбинации
Добрый вечер! Начал писать крестики нолики. Использую два изображение(крестик и нолик), но с...

12
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 20:31 2
Значит понятия о массивах нет?

Цитата Сообщение от klimweb Посмотреть сообщение
На ее основе нужно сделать
нужно все это выбросить ф топку, и написать заново, по-человечески.
0
1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15
11.12.2013, 20:46  [ТС] 3
Цитата Сообщение от SoftIce Посмотреть сообщение
Значит понятия о массивах нет?
просто не представляю, как массивы применить именно к данному случаю.

Цитата Сообщение от SoftIce Посмотреть сообщение
нужно все это выбросить ф топку, и написать заново, по-человечески.
да, понятно, что тут все криво, но уже не успею с нуля все сделать(

Добавлено через 5 минут
В общем, по сути нужно как-то для каждой кнопки написать алгоритм действий компьютера, для данного случая. Напишите, пожалуйста, как это сделать
0
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 20:51 4
Цитата Сообщение от klimweb Посмотреть сообщение
Напишите, пожалуйста, как это сделать
Там кода на 500 строк.
Долго разжёвывать придётся.

Добавлено через 2 минуты
А стратегия в вики описана хорошо.
0
1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15
11.12.2013, 20:54  [ТС] 5
Цитата Сообщение от SoftIce Посмотреть сообщение
Там кода на 500 строк.
Долго разжёвывать придётся.
А сделать хотя бы так, чтобы комп просто рандомно ставил нолик в свободную ячейку - не получится? Хоть как-то

Добавлено через 1 минуту
Цитата Сообщение от SoftIce Посмотреть сообщение
А стратегия в вики описана хорошо.
Да, я читал, но мне хотя бы сделать стратегию сведения к ничьей (если ставит в центр - по краям, если в любое другое - ставить в центр) - это в лучшем случае. А так хватит и самого простого варианта
0
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 21:12 6
Цитата Сообщение от klimweb Посмотреть сообщение
чтобы комп просто рандомно ставил нолик
Вот когда-то писал

но там нет кода для ходов компа. Вот только что набросал (Без стратегии.)

Visual Basic
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
Option Explicit
Dim clicknumber As Integer, i As Integer, H As Boolean
Private Sub Image1_Click(Index As Integer)
       clicknumber = clicknumber + 1
       If clicknumber Mod 2 = 0 Then
           Image1(Index).Picture = Image2.Picture
       Else
           Image1(Index).Picture = Image3.Picture
       End If
       
       Select Case Win
              Case 1: MsgBox "Победил крестик": GameOver: Exit Sub
              Case 2: MsgBox "Победил нолик": GameOver: Exit Sub
       End Select
       
       If clicknumber >= 9 Then MsgBox "Ничья": GameOver: Exit Sub
       Call Comp
End Sub
Sub Comp()
    Dim n As Integer
m:    n = Int(Rnd * 9) + 1
    If Image1(n).Picture <> Image1(0).Picture Then GoTo m
       clicknumber = clicknumber + 1
       If clicknumber Mod 2 = 0 Then
           Image1(n).Picture = Image2.Picture
       Else
           Image1(n).Picture = Image3.Picture
       End If
       
       Select Case Win
              Case 1: MsgBox "Победил крестик": GameOver: Exit Sub
              Case 2: MsgBox "Победил нолик": GameOver: Exit Sub
       End Select
       
       If clicknumber >= 9 Then MsgBox "Ничья": GameOver: Exit Sub
End Sub
Sub GameOver()
    clicknumber = 0
    For i = 1 To 9
       Image1(i).Picture = Image1(0).Picture
    Next i
End Sub
 
Function Win() As Integer
    If Image1(1).Picture = Image2.Picture And Image1(2).Picture = Image2.Picture And Image1(3).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(4).Picture = Image2.Picture And Image1(5).Picture = Image2.Picture And Image1(6).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(7).Picture = Image2.Picture And Image1(8).Picture = Image2.Picture And Image1(9).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(1).Picture = Image2.Picture And Image1(4).Picture = Image2.Picture And Image1(7).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(2).Picture = Image2.Picture And Image1(5).Picture = Image2.Picture And Image1(8).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(3).Picture = Image2.Picture And Image1(6).Picture = Image2.Picture And Image1(9).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(1).Picture = Image2.Picture And Image1(5).Picture = Image2.Picture And Image1(9).Picture = Image2.Picture Then Win = 1: Exit Function
    If Image1(3).Picture = Image2.Picture And Image1(5).Picture = Image2.Picture And Image1(7).Picture = Image2.Picture Then Win = 1: Exit Function
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    If Image1(1).Picture = Image3.Picture And Image1(2).Picture = Image3.Picture And Image1(3).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(4).Picture = Image3.Picture And Image1(5).Picture = Image3.Picture And Image1(6).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(7).Picture = Image3.Picture And Image1(8).Picture = Image3.Picture And Image1(9).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(1).Picture = Image3.Picture And Image1(4).Picture = Image3.Picture And Image1(7).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(2).Picture = Image3.Picture And Image1(5).Picture = Image3.Picture And Image1(8).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(3).Picture = Image3.Picture And Image1(6).Picture = Image3.Picture And Image1(9).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(1).Picture = Image3.Picture And Image1(5).Picture = Image3.Picture And Image1(9).Picture = Image3.Picture Then Win = 2: Exit Function
    If Image1(3).Picture = Image3.Picture And Image1(5).Picture = Image3.Picture And Image1(7).Picture = Image3.Picture Then Win = 2: Exit Function
    ''''''''''''''''''''''''''
    Win = 0
End Function

Мне стыдно за функцию Win
0
1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15
11.12.2013, 21:48  [ТС] 7
Цитата Сообщение от SoftIce Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Image1_Click(Index As Integer)
   clicknumber = clicknumber + 1
   If clicknumber Mod 2 = 0 Then
     Image1(Index).Picture = Image2.Picture
   Else
     Image1(Index).Picture = Image3[B].Picture[/B]
   End If
Select Case Win
       Case 1: MsgBox "Победил крестик": GameOver: Exit Sub
       Case 2: MsgBox "Победил нолик": GameOver: Exit Sub
   End Select
If clicknumber >= 9 Then MsgBox "Ничья": GameOver: Exit Sub
   Call Comp
End Sub
Делаю ход в первую клетку - мне выдает ошибку "Method or data member not found".
И еще вопрос, как собсно сделать так, чтобы компьютер делал следующий после меня ход?
Прошу прощения за тупняк, но потерпите меня еще чуть-чуть, пожалуйста)
0
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 21:53 8
Как всё запущено

Крестик-Нолик.rar

а это со стратегией компа

ХХХООО.rar
0
1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15
11.12.2013, 22:02  [ТС] 9
Цитата Сообщение от SoftIce Посмотреть сообщение
а это со стратегией компа
ХХХООО.rar
а можно исходники этого?)
просто я скопировал ваш код в новую форму, создал в ней нужные элементы, а все равно ошибка и выделяется .Picture
0
es geht mir gut
11271 / 4753 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 22:19 10
Цитата Сообщение от klimweb Посмотреть сообщение
просто я скопировал ваш код в новую форму
Да на фига????

Я же дал готовый рабочий проект.

Добавлено через 14 минут
Цитата Сообщение от klimweb Посмотреть сообщение
ошибка и выделяется .Picture
Там создан массив из 10-ти Image1
0
Модератор
9736 / 3697 / 871
Регистрация: 22.02.2013
Сообщений: 5,537
Записей в блоге: 78
12.12.2013, 01:57 11
Лучший ответ Сообщение было отмечено как решение

Решение

Более-менее умные крестики-нолики:
Visual Basic
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
Option Explicit
 
' Крестики-нолики
' © Кривоус Анатолий Анатольевич (The trick), 2013
 
Dim i As Long, j As Long, r As Long, c As Long, dd As Boolean, di As Boolean, ct As Long, pass As Long
Dim dx As Single, dy As Single
Dim Fld() As Byte '  0 - пусто, 1 - крестик, 4 - нолик
 
Private Sub Win(ByVal Value As Long)
    MsgBox "Победили " & IIf(Value = 3, "крестики", "нолики")
    ReDim Fld(2, 2): ct = 0: r = 0: c = 0: dd = False: di = False: pass = 0: Redraw: If Rnd > 0.5 Then NextPass
End Sub
Private Sub NextPass()
    Dim sr As Byte, sc As Byte, sd As Byte, si As Byte
    pass = pass + 1
    If pass >= 5 Then
        pass = 0
        MsgBox "Ничья": ReDim Fld(2, 2): ct = 0: r = 0: c = 0: dd = False: di = False: Redraw
        Exit Sub
    End If
    If NewDirect = 1 Then
        For i = 0 To 2
            If r Then If Fld(i, r - 1) = 0 Then Call SetPass(i, r - 1, 1): Exit For
            If c Then If Fld(c - 1, i) = 0 Then Call SetPass(c - 1, i, 1): Exit For
            If dd Then If Fld(i, i) = 0 Then Call SetPass(i, i, 1): Exit For
            If di Then If Fld(2 - i, i) = 0 Then Call SetPass(2 - i, i, 1): Exit For
        Next
    End If
    For i = 0 To 2: For j = 0 To 2
            sr = sr + Fld(j, i): sc = sc + Fld(i, j)
        Next
        sd = sd + Fld(i, i): si = si + Fld(2 - i, i)
        If sr = 12 Or sr = 3 Then Me.Line (0, i * dy + dy / 2)-Step(Me.ScaleWidth, 0), vbRed: Win sr: Exit Sub
        If sc = 12 Or sc = 3 Then Me.Line (i * dx + dx / 2, 0)-Step(0, Me.ScaleHeight), vbRed: Win sc: Exit Sub
        If sd = 12 Or sd = 3 Then Me.Line (0, 0)-Step(Me.ScaleWidth, Me.ScaleHeight), vbRed: Win sd: Exit Sub
        If si = 12 Or si = 3 Then Me.Line (0, Me.ScaleHeight)-(Me.ScaleWidth, 0), vbRed: Win si: Exit Sub
        sr = 0: sc = 0
    Next
End Sub
Private Sub SetPass(ByVal X As Long, ByVal Y As Long, ByVal Value As Byte)
    Fld(X, Y) = Value
    Redraw
End Sub
Private Sub Redraw()
    Dim Value As Byte
    dx = Me.ScaleWidth / 3: dy = Me.ScaleHeight / 3
    Me.Cls: Me.DrawWidth = 1
    Me.Line (dx, -1)-Step(dx, Me.ScaleHeight + 1), RGB(200, 200, 200), B
    Me.Line (-1, dy)-Step(Me.ScaleWidth + 1, dy), RGB(200, 200, 200), B
    Me.DrawWidth = 4
    For i = 0 To 2: For j = 0 To 2
        Value = Fld(i, j)
        Select Case Value
        Case 1: Me.Line (i * dx + 10, j * dy + 10)-Step(dx - 20, dy - 20), &HA0: _
                Me.Line (i * dx + dx - 10, j * dy + 10)-Step(20 - dx, dy - 20), &HA0
        Case 4: Me.Circle (i * dx + dx / 2, j * dy + dy / 2), dx / 2 - 10, &HA00000, , , dy / dx
        End Select
    Next: Next
End Sub
Private Function NewDirect() As Long
    Dim sr As Byte, sc As Byte, sd As Byte, si As Byte, ir As Long, ic As Long, id As Long, ii As Long, p As Long
    NewDirect = 2
    For p = 0 To 1: For i = 0 To 2: For j = 0 To 2
            sr = sr + Fld(j, i): sc = sc + Fld(i, j)
            ir = IIf(Fld(j, i) = 0, j, ir): ic = IIf(Fld(i, j) = 0, j, ic)
        Next
        sd = sd + Fld(i, i): si = si + Fld(2 - i, i)
        id = IIf(Fld(i, i) = 0, i, id): ii = IIf(Fld(2 - i, i) = 0, i, ii)
        If sr = p * 6 + 2 Then Call SetPass(ir, i, 1): Exit Function
        If sc = p * 6 + 2 Then Call SetPass(i, ic, 1): Exit Function
        If i = 2 Then
            If sd = p * 6 + 2 Then Call SetPass(id, id, 1): Exit Function
            If si = p * 6 + 2 Then Call SetPass(2 - ii, ii, 1): Exit Function
        End If
        sr = 0: sc = 0
    Next: si = 0: sd = 0: id = 0: ii = 0: Next
    NewDirect = 1
    If r Then If (Fld(0, r - 1) + Fld(1, r - 1) + Fld(2, r - 1)) < 2 Then ct = ct + 1: Exit Function
    If c Then If (Fld(c - 1, 0) + Fld(c - 1, 1) + Fld(c - 1, 2)) < 2 Then ct = ct + 1: Exit Function
    If dd Then If (Fld(0, 0) + Fld(1, 1) + Fld(2, 2)) < 2 Then ct = ct + 1: Exit Function
    If di Then If (Fld(2, 0) + Fld(1, 1) + Fld(0, 2)) < 2 Then ct = ct + 1: Exit Function
    c = 0: r = 0: dd = False: di = False
    For i = 0 To 2
        sc = Fld(i, 0) + Fld(i, 1) + Fld(i, 2): sr = Fld(0, i) + Fld(1, i) + Fld(2, i)
        If sc < 2 Then If c Then If Rnd > 0.5 Then c = i + 1 Else c = c Else c = i + 1
        If sr < 2 Then If r Then If Rnd > 0.5 Then r = i + 1 Else r = r Else r = i + 1
    Next
    If (Fld(0, 0) + Fld(1, 1) + Fld(2, 2)) < 2 Then dd = True
    If (Fld(2, 0) + Fld(1, 1) + Fld(0, 2)) < 2 Then di = True
    ct = 1: If NewDirect = 2 Then Exit Function
    If r > 0 And (Rnd > 0.75 Or Not (c > 0 Or dd Or di)) Then c = 0: dd = False: di = False: Exit Function
    If c > 0 And (Rnd > 0.75 Or Not (r > 0 Or dd Or di)) Then r = 0: dd = False: di = False: Exit Function
    If dd And (Rnd > 0.75 Or Not (c > 0 Or r > 0 Or di)) Then c = 0: r = 0: di = False: Exit Function
    If di Then c = 0: r = 0: dd = False: Exit Function
    NewDirect = 0   ' Нет больше выигрышных ходов
    For i = 0 To 2: For j = 0 To 2
        If Fld(i, j) = 0 Then Call SetPass(i, j, 1): Exit Function
    Next: Next
End Function
Private Sub Form_Load()
    Me.AutoRedraw = True: Me.ScaleMode = vbPixels: Randomize
    ReDim Fld(2, 2)
    If Rnd > 0.5 Then NextPass
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    i = Fix(X / (Me.ScaleWidth / 3)): j = Fix(Y / (Me.ScaleHeight / 3))
    If Fld(i, j) = 0 Then SetPass i, j, 4: NextPass
End Sub
Private Sub Form_Resize()
    Redraw
End Sub
Миниатюры
Крестики-нолики с компьютером  
Вложения
Тип файла: rar TicTacToe.rar (2.3 Кб, 52 просмотров)
4
Модератор
9736 / 3697 / 871
Регистрация: 22.02.2013
Сообщений: 5,537
Записей в блоге: 78
12.12.2013, 08:00 12
В коде небольшой баг (недостаточно хорошо протестировал ), заключающийся в том, что при заполнении последней клетки при выигрыше, пишет что ничья. Надо проверку If pass >=5 Then ... End If перенести после циклов.
0
6804 / 2833 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
12.12.2013, 08:38 13
"Умные" крестики-нолики! По крайней мере так утверждает автор, а ещё автор гарантирует, что вы точно проиграете первые раза три! Если честно, то я проиграл первый раз
Конечно не от супер интеллекта программы, а от неожиданности. А вообще забавная вещь, рекомендую!
Вложения
Тип файла: zip ХО.ZIP (14.5 Кб, 51 просмотров)
2
12.12.2013, 08:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2013, 08:38
Помогаю со студенческими работами здесь

Создание игры крестики нолики на поле произвольного размера
Всем привет! Столкнулся с такой проблемой: Необходимо сделать поле для игры в крестики нолики...

Игра Крестики - нолики: реализовать выбор размера игрового поля
Привет всем. Это игра крестики нолики, играть можно в режиме 3х3. А можно сделать, чтобы был выбор...

Крестики Нолики 4x4: как научить компьютер "играть"
Всем привет! Я пока еще только начинаю программировать, поэтому обращаюсь к вам, может вы поможете....

Крестики-нолики с компьютером
Мне необходимо создать игру крестики-нолики в delphi (игра против человека и против компьютера на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru