С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28

Таймер для игры крестики нолики

02.12.2011, 20:13. Показов 3140. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Игра через Form, не консольная, хочу прикрепить таймер к ходу компьютера,т.е. сделать два режима хода компьютера(через 5 секунд,через 10 секунд).

Задавать время задержки должен пользователь.

Никогда не имел дело с таймером, поэтому прошу помочь в этом деле)

выложил основные функции:

C++
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
int TForm1 :: proverka(){ 
int short i=0,j=0,x=0,y=0,x1=0,y1=0;
 
for(i=0;i<3;i++){ 
for(j=0;j<3;j++){
if(mas[i][j]!=0) x+=1;
if(mas[i][j]==0) y++;
}
if(y>0) break;
if(x==9) return -4; 
}
 
{
 
for(i=0;i<3;i++){
x=0;y=0;
for(j=0;j<3;j++){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if(x==3) return -1; 
if(y==3) return -2; 
 
}
 
for(j=0;j<3;j++){ 
x=0;y=0;
for(i=0;i<3;i++){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if(x==3) return -1; 
if(y==3) return -2; 
}
x=0;y=0;x1=0;y1=0;
 
for(i=0;i<3;i++){ 
for(j=0;j<3;j++){
if(i==j){
if(mas[i][j]==1) x+=1;
if(mas[i][j]==2) y+=1;
}
if((i+j)==2){
if(mas[i][j]==1) x1+=1;
if(mas[i][j]==2) y1+=1;
}
 
}
if(x==3) return -1; 
if(y==3) return -2; 
if(x1==3) return -1; 
if(y1==3) return -2; 
}
return -3; 
}
}
//---------------------------------------------------------------------------------------
 
void TForm1 :: ris_hod_Comp(int short &x,int short &y) {
if(x==0 && y==0){Image1->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==0 && y==1){Image2->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==0 && y==2){Image3->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==0){Image4->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==1){Image5->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==1 && y==2){Image6->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==0){Image7->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==1){Image8->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
if(x==2 && y==2){Image9->Picture->LoadFromFile(hod_ris2); mas[x][y]=2;}
 
}
bool TForm1:: hod_kompa_func(int short &n){
int short i=0,j=0,i1=0,j1=0,x=0;
for(i=0;i<3;i++) 
for(j=0;j<3;j++)
if(mas[i][j]!=0) x++;
 
if(x<=2){ 
i=1;j=1;
if(mas[i][j]==0){ 
 
ris_hod_Comp(i,j);
return true;
}
i=0;j=0;
if(mas[i][j]==0){ 
 
ris_hod_Comp(i,j);
return true;
}
    }
 
//---------
 
for(i=0;i<3;i++){ 
x=0;j1=3;
for(j=0;j<3;j++){
if(mas[i][j]==n) x++;
if(mas[i][j]==0) j1=j;
if(x==2 && j1!=3){
 
ris_hod_Comp(i,j1);
return true;
}
}
} 
 
for(j=0;j<3;j++){ 
x=0;i1=3;
for(i=0;i<3;i++){
if(mas[i][j]==n) x++;
if(mas[i][j]==0) i1=i;
if(x==2 && i1!=3){
 
ris_hod_Comp(i1,j);
return true;
}
}
} 
 
int x2=0,x1=0,i2=0,j2=0;
j1=3;j2=3;
for(i=0;i<3;i++){ for(j=0;j<3;j++){
if(i==j){
if(mas[i][j]==n) x1+=1; // 
if(mas[i][j]==0) {j1=j;i1=i;}
}
if((i+j)==2){ if(mas[i][j]==n) x2+=1;
if(mas[i][j]==0) {j2=j;i2=i;}
}
 
if(x1==2 && j1!=3){
 
ris_hod_Comp(i1,j1);
return true;
}
if(j2!=3 && x2==2){
 
ris_hod_Comp(i2,j2);
return true;
}
 
} 
} 
return false; 
}
 
void TForm1::hod_Comp(){
bool hod;
int i,j;
int prov=0;
 
prov=proverka();
switch(prov){
case -1: {vigrish_User(); return;}
case -2: {vigrish_Comp(); return;}
case -4: {vigrish_Nichia();return;}
}
 
hod=hod_kompa_func(2);
if(hod==false)hod=hod_kompa_func(1);
if(hod==false){
 
srand((unsigned)time( NULL ));
 
do{
 
i=rand()%3;
j=rand()%3;
}
while(mas[i][j]!=0);
ris_hod_Comp(i,j);
}
 
prov=proverka();
switch(prov){
case -1: {vigrish_User(); return;}
case -2: {vigrish_Comp(); return;}
case -4: {vigrish_Nichia();return;}
}
}
 
//************************************************************************************
void TForm1::initiz(){
char hod_ris3[10];
memset(hod_ris3,0,9);
strcpy(hod_ris3,"fon0.bmp");
Image1->Picture->LoadFromFile(hod_ris3);
Image2->Picture->LoadFromFile(hod_ris3);
Image3->Picture->LoadFromFile(hod_ris3);
Image4->Picture->LoadFromFile(hod_ris3);
Image5->Picture->LoadFromFile(hod_ris3);
Image6->Picture->LoadFromFile(hod_ris3);
Image7->Picture->LoadFromFile(hod_ris3);
Image8->Picture->LoadFromFile(hod_ris3);
Image9->Picture->LoadFromFile(hod_ris3);
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
mas[i][j]=0;
 
}
void TForm1::hod_User(int ris){
 
switch(ris){
case 1:{if(mas[0][0]==0){Image1->Picture->LoadFromFile(hod_ris1);
mas[0][0]=1;break;}else return;}
case 2:{if(mas[0][1]==0){Image2->Picture->LoadFromFile(hod_ris1);
mas[0][1]=1;break;}else return;}
case 3:{if(mas[0][2]==0){Image3->Picture->LoadFromFile(hod_ris1);
mas[0][2]=1;break;}else return;}
case 4:{if(mas[1][0]==0){Image4->Picture->LoadFromFile(hod_ris1);
mas[1][0]=1;break;}else return;}
case 5:{if(mas[1][1]==0){Image5->Picture->LoadFromFile(hod_ris1);
mas[1][1]=1;break;}else return;}
case 6:{if(mas[1][2]==0){Image6->Picture->LoadFromFile(hod_ris1);
mas[1][2]=1;break;}else return;}
case 7:{if(mas[2][0]==0){Image7->Picture->LoadFromFile(hod_ris1);
mas[2][0]=1;break;}else return;}
case 8:{if(mas[2][1]==0){Image8->Picture->LoadFromFile(hod_ris1);
mas[2][1]=1;break;}else return;}
case 9:{if(mas[2][2]==0){Image9->Picture->LoadFromFile(hod_ris1);
mas[2][2]=1;break;}else return;}
}
hod_Comp();
 
}
 
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 if(BitBtn1->Caption=="Начать"){
RadioButton1->Enabled=false;
RadioButton2->Enabled=false;
BitBtn1->Caption="Выбор стороны";
Panel1->Visible=false;
initiz();
if (RadioButton1->Checked){
 
}
if (RadioButton2->Checked){
 hod_Comp();
}
return;
}
 
if(BitBtn1->Caption!="Начать"){
RadioButton1->Enabled=true;
RadioButton2->Enabled=true;
BitBtn1->Caption="Начать";
Panel1->Visible=true;
return;
}
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2011, 20:13
Ответы с готовыми решениями:

Создание игры крестики-нолики
разаботка игры крестики нолики в с++

Создание игры крестики нолики
Добрый вечер. Ребята кто может написать игру крестики нолики на Борланди С++

Крестики-Нолики для локальной сети
Как организовать передачу информации куда поставить крестик а куда нолик???

19
 Аватар для daruwanov
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
02.12.2011, 20:17
Вам нужно что бы компьютер перед тем как сделать ход как бы думал 5 или 10 секунд?
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
02.12.2011, 20:20  [ТС]
да,и еще radiobutton'ы у меня заняты на выбор каким символом играет пользователь,поэтому хотел через radiogroup сделать режимы и еще думаю 1 секунду поставить на постоянное запаздывание хода компа, чтобы реалестичнее было)
0
 Аватар для daruwanov
77 / 58 / 8
Регистрация: 10.03.2011
Сообщений: 354
02.12.2011, 20:32
ну для того что бы сделать заднржку не обязательно использовать таймер- можно просто использовать функцию Sleep - а таймер чаще всего используется для выполнения определенных действий с определенной переодичностью....
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
02.12.2011, 20:54  [ТС]
впринципе можно,но как ее применить на два режима? в интернете не нашел примера.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.12.2011, 23:06
1. Задавать при необходимости, например, при клике на определенную радиокнопку:
C++
1
2
3
Timer->Interval = 5000; // 5 sec
// или
Timer->Interval = 10000; // 10 sec
1. Задавать при необходимости
C++
1
2
3
Sleep(5000); // 5 sec
// или
Sleep(10000); // 10 sec
Sleep() будет "замораживать" программу на время простоя, можно пытаться после него указывать
C++
1
Application->ProcessMessages();
И то, что упорные поиски в интернете оказались безрезультатны, мягко говоря, ненаучная фантастика .

Также можно сходить в тему "Несколько небольших игрушек", урл не помню.
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
02.12.2011, 23:10  [ТС]
Спасибо, про поиск в интернете ты прав,нашел)

Попробовал sleep,но так получилось что задерживает и ход пользователя(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.12.2011, 23:14
про sleep я предупредил, оно более-менее гламурно в подобных ситуациях
C++
1
2
3
4
5
6
7
...TForm1::Button1Click(TObject Sender)
{
  Label1->Caption = "Начали";
  Application->ProcessMessage();
  Sleep(5000);
  Label1->Caption = "Закончили";
}
и то ...
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
02.12.2011, 23:46  [ТС]
lk, спасибо)
1
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
04.12.2011, 18:49  [ТС]
Как не пробывал, не получается у меня усыпить только функцию компьютера( снова прошу помощи...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
04.12.2011, 19:24
Цитата Сообщение от boost2110 Посмотреть сообщение
усыпить только функцию компьютера
функций у него немеряно , какую именно ? или, все же, не "компьютера" ?
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
07.12.2011, 01:19  [ТС]
только ход компа, т.е. пользователь сделал ход и только через заданный интервал ходит комп.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 01:48
комп не ходит, "ходит" код вашей программы, теперь надо думать, как сделать задержку перед следующим ходом - но зачем ?
0
1 / 1 / 2
Регистрация: 05.12.2011
Сообщений: 42
07.12.2011, 15:10
Добавить компонент Timer
C++
1
2
3
4
5
6
7
void __fastcall TForm1::Timer1Timer(TObject *Sender)
}
  if(sec<=5)
    Label1->Caption="0"+IntToStr(sec);  
  else
    ShowMessage("Время вышло!");
}
 Комментарий модератора 
byMary, используйте тег вставки кода :
[CPP ]без пробелов[ /CPP] или кнопка C++ на панели окна редактирования сообщения
Правила
2.8. Используйте тэги форматирования текста для удобства восприятия ваших сообщений другими пользователями.
1
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
07.12.2011, 22:39  [ТС]
ByMary спасибо за помощь,но это не то что мне нужно(

Мы наверное друг друга не поняли)

Допустим я играю крестиками и начинаю: ставлю крестик, но затем моментально ставится нолик, а мне надо чтобы нолик ставился спустя допустим 2 секунды после моего хода и я хочу сделать три режима: чтобы нолик появлялся спустя 2, 5 и 10 секунд , и чтобы режим выбирал пользователь.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 22:45
а мне кажется, в ответе byMary именно это и есть - ставите таймер на 5000 , в else - ход компутера , т.е., появление нолика , выбор интервала - 2000,5000,10000 - вешаете на три радиокнопки, по умолчанию таймер выключен - после вашего хода - включен и тикает для разрешения хода компутера , после этого - обратно выключен
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
07.12.2011, 22:49
А что мешает использовать CheckBox или Radiogrup?
Типа три CheckBoxa и код:
C++
1
2
3
4
if (ChekBox1->Checked==true) // если выбрано 2 секунды {
Timer1->Interval=2000;// твои две секунды
Timer1->Enabled=true;// запускаем таймер
}
А в таймере пишеш код который ставит нолик или крестик...
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
08.12.2011, 00:29  [ТС]
Спасибо ребят за помощь)
0
2 / 2 / 0
Регистрация: 17.09.2011
Сообщений: 28
18.12.2011, 17:43  [ТС]
так и не получилось написать чтобы правильно работала(

вот сама программа без таймера
Вложения
Тип файла: rar крестик нолик.rar (361.4 Кб, 21 просмотров)
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.12.2011, 18:25
Я не смог разобраться в твоем коде где там ход компьютера, но я тебе написал пример с коментами с таймером и чекбоксами посмотриш думаю дальше сможеш вставить нужный код куда надо...
Вложения
Тип файла: rar крестик нолик рестайлинг.rar (375.9 Кб, 24 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2011, 18:25
Помогаю со студенческими работами здесь

Формальная постановка для игры крестики и нолики
Доброго времени суток. Написал игру крестики и нолики размерностью 4х4. Нужно написать к этой игре формалку, а я понятия даже не имею о том...

Крестики Нолики
учу си месяц дали задачу... хелп ми плиз! Игра крестики нолики. Игра в крестики нолики вдется на квадратном поле 3*3. Играют двое....

Крестики Нолики
Здравствуйте есть одна проблема нашел на этом форуме исходники к игре крестики нолики однако не получается адекватно настроить начисление...

Крестики нолики
Я вот написал алгоритм для крестиков ноликов, а он чегото не работает( посмотрите пожалуйста. ...

Крестики-нолики-ошибки
Добрый день. Я вот хотел посмотреть работу игры крестики-нолики (судя по всему, речь идет о этой теме...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru