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

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

02.12.2011, 20:13. Показов 3179. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru