Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 15.09.2013
Сообщений: 15

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

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

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста) У меня прога крестики-нолики, рассчитанная на 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2013, 20:23
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от SoftIce Посмотреть сообщение
А стратегия в вики описана хорошо.
Да, я читал, но мне хотя бы сделать стратегию сведения к ничьей (если ставит в центр - по краям, если в любое другое - ставить в центр) - это в лучшем случае. А так хватит и самого простого варианта
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 21:12
Цитата Сообщение от 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  [ТС]
Цитата Сообщение от 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
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
11.12.2013, 21:53
Как всё запущено

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

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

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

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

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

Решение

Более-менее умные крестики-нолики:
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 Кб, 54 просмотров)
4
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
12.12.2013, 08:00
В коде небольшой баг (недостаточно хорошо протестировал ), заключающийся в том, что при заполнении последней клетки при выигрыше, пишет что ничья. Надо проверку If pass >=5 Then ... End If перенести после циклов.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
12.12.2013, 08:38
"Умные" крестики-нолики! По крайней мере так утверждает автор, а ещё автор гарантирует, что вы точно проиграете первые раза три! Если честно, то я проиграл первый раз
Конечно не от супер интеллекта программы, а от неожиданности. А вообще забавная вещь, рекомендую!
Вложения
Тип файла: zip ХО.ZIP (14.5 Кб, 51 просмотров)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2013, 08:38
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru