Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Заблокирован

Бред в крестиках ноликах

25.07.2012, 19:28. Показов 1140. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема. Написал цикдические крестики нолики ( в конце игры спрашивает хотите сыгарть еще или нет?) и после этого происходит какой то бред. Конкретнее скопируйте код и уидите сами. После 5-6 повторения все приходит в норму. Вот сам код:

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
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
char r;
char q='y';
char n1 [20], n2 [20];
char t[9] = {'_', '_', '_', '_', '_', '_', '_', '_', '_'};
int x;
int h;
void game();
void names();
void table();
void win();
void qq();
int endgame();
void playagain();
int main()
{
   cout<<"   X-O Game by Andrew_Grey\n";
   while (q='y')
   {
   cout<<"Do you want read rules? (y = 'Yes, I want!',  n = 'No, I know how play!' )\n";
   metka:
   cin>>r;
   switch (r)
   {
          case 'y':
               cout<<" RULES:\n";
               system("pause");
               system ("cls");
               goto metka2;
               break;
          case 'n':
               system ("cls");
               goto metka2;
               break;
          default:
               cout<<" Error!\n";
               goto metka;
               break;
   }
   metka2:
   playagain();
   names();
   game();
}
return 0;
}
void names()
{
     cout<<"Enter player's names (Please, make sure names are different)\n";
do
     {
     cout<<"\nEnter first player's name: ";
     gets(n1);
     gets(n1);
     cout<<"\n";
     cout<<"\nEnter second player's name: ";
     gets(n2);
     cout<<"\n";
     if (!strcmp(n1, n2)) cout<<"\nPlease, enter different names\n";
     }
while (!strcmp(n1, n2));
cout<<"Let's go!";
system ("pause");
system ("cls");
}
void game ()
{
     cout<<"Game has been started!!!\n";
     goto metka3;
     while (x<1 || x>9 || t[x-1]=='X' || t[x-1]=='O' || h>9)
     {
           metka3:
           table ();
           cout<<"Player "<<n1<<" is choosing place: ";
           cin>>x;
           if (x<1 || x>9)
           {
           cout<<"Error! Please choosing true places!\n";
           goto metka3;
           }
           if (t[x-1]=='X' || t[x-1]=='O') 
           {
           cout<<"Error! Please make sure place hasn't been taken!";
           goto metka3;
           }
           t[x-1]='X';
           h=h+1;
           system ("cls");
           qq();
           metka4:
           table ();
           cout<<"Player "<<n2<<" is choosing place: ";
           cin>>x;
           if (x<1 || x>9)
           {
           cout<<"Error! Please choosing true places!\n";
           goto metka4;
           }
           if (t[x-1]=='X' || t[x-1]=='O') 
           {
           cout<<"Error! Please make sure place hasn't been taken!";
           goto metka4;
           }
           t[x-1]='O';
           h=h+1;
           system ("cls");
           qq();
     }
}
void table ()
{
      cout<<"                                    "<<n1<<" VS "<<n2<<"\n";
      cout << t[0] << '|' << t[1] << '|' << t[2]  << endl;
      cout << t[3] << '|' << t[4] << '|' << t[5]  << endl;
      cout << t[6] << '|' << t[7] << '|' << t[8]  << "\n" << endl;
}   
void win()
{
     table();
     if(t[0]==t[1] && t[1]==t[2] && t[2]=='X' || t[3]==t[4] && t[4]==t[5] && t[5]=='X' ||t[6]==t[7] && t[8]==t[7] && t[8]=='X' ||t[0]==t[3] && t[3]==t[6] && t[6]=='X' ||t[1]==t[4] && t[4]==t[7] && t[7]=='X' ||t[5]==t[2] && t[8]==t[5] && t[8]=='X' ||t[2]==t[4] && t[6]==t[4] && t[6]=='X' ||t[0]==t[4] && t[4]==t[8] && t[8]=='X' )
     {
                   cout<<"\nPlayer "<<n1<<" win!\n";
                   endgame();
     }
     else
     {
         if (t[0]==t[1] && t[1]==t[2] && t[2]=='O' || t[3]==t[4] && t[4]==t[5] && t[5]=='O' ||t[6]==t[7] && t[8]==t[7] && t[8]=='O' ||t[0]==t[3] && t[3]==t[6] && t[6]=='O' ||t[1]==t[4] && t[4]==t[7] && t[7]=='O' ||t[5]==t[2] && t[8]==t[5] && t[8]=='O' ||t[2]==t[4] && t[6]==t[4] && t[6]=='O' ||t[0]==t[4] && t[4]==t[8] && t[8]=='O' )
         {
                   cout<<"\nPlayer "<<n2<<" win!\n";
                   endgame();
         }
         else
         {
             if (h==9)
             {
             cout<<"\nDraw!\n";
             endgame();
             }                
         }
     }
}
int endgame()
{
   cout<<" Do you want play again??? (y = 'Yes, we want!', n = 'No, next time')\n";
   cin>>q;
   switch (q)
   {
          case 'y':
               system ("cls");
               playagain();
               break;
          case 'n':
               return 0;
               break;
          default:
               cout<<" Error!\n";
               cin>>q;
               break;
   }
}
void qq()
{
     switch (h)
           {
                  case 4:
                       win();
                       break;
                  case 5:
                       win();
                       break;
                  case 6:
                       win();
                       break;
                  case 7:
                       win();
                       break;
                  case 8:
                       win();
                       break;
                  case 9:
                       win();
                       break;
           }
}
void playagain()
{
     h=0;
     t[0]='_'; t[1]='_'; t[2]='_'; t[3]='_'; t[4]='_'; t[5]='_'; t[6]='_'; t[7]='_'; t[8]='_'; t[9]='_'; 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.07.2012, 19:28
Ответы с готовыми решениями:

Бот в крестиках-ноликах
Здравствуйте. Суть такова: в код игры крестики- нолики нужно встроить бота, а также добавить третий класс в игру (полагаю, что было бы...

Проверка на победу в крестиках-ноликах
Здраствуйте! Я сделал игру крестики-нолики на языке с++, но столкнулся с тем, что у меня нету проверки на победу. Используя разные сайты...

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

7
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
25.07.2012, 19:38
Поставь теги, пожалуйста, ато в сплошном коде без табуляций пытаться разобраться как-то совсем не хочется, ровно как и ставить их
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2012, 06:09
Цитата Сообщение от Andryuxa Посмотреть сообщение
t[0]='_'; t[1]='_'; t[2]='_'; t[3]='_'; t[4]='_'; t[5]='_'; t[6]='_'; t[7]='_'; t[8]='_'; t[9]='_';
Причина может быть и не в этом, но char t[9]. Максимальный индекс 8. И как выглядит бред?
0
Заблокирован
26.07.2012, 19:15  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Причина может быть и не в этом, но char t[9]. Максимальный индекс 8. И как выглядит бред?
Почему макс индек 8? Бред заключается в следующем:
Нельзя изменять имена ( то есть void names () даже не запускается)
После следующего цикла игра продолжается с того момента на котором закончилось в предъидущем цикле.( вот это я скорее всего знаю как исправить)
Ну и немного по мелочам

Добавлено через 41 секунду
Цитата Сообщение от nexen Посмотреть сообщение
Поставь теги, пожалуйста, ато в сплошном коде без табуляций пытаться разобраться как-то совсем не хочется, ровно как и ставить их
Как ставить теги? )))
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
26.07.2012, 20:22
Первая ошибка
while (q='y')
всегда присваивает переменной q значение 'y',
поэтому условие всегда истинно.
Может быть надо
while (q=='y')

Второе.
Не смешивайте ввод из <iostream> и <stdio.h>
C++
1
2
3
4
5
6
    cin.getline(n1,19);
     //gets(n1);
     cout<<"\n";
     cout<<"\nEnter second player's name: ";
      cin.getline(n1,19);
    //gets(n2);
2
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 01:30
Цитата Сообщение от Andryuxa Посмотреть сообщение
Почему макс индек 8?
Потому что объявлен массив на 9 элементов char t[9](строка 8 кода, и там всё правильно), а в этой строке вы сколько значений присваиваете?
t[0]='_'; t[1]='_'; t[2]='_'; t[3]='_'; t[4]='_'; t[5]='_'; t[6]='_'; t[7]='_'; t[8]='_'; t[9]='_';
Посчитайте.
1
Заблокирован
27.07.2012, 13:45  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что объявлен массив на 9 элементов char t[9](строка 8 кода, и там всё правильно), а в этой строке вы сколько значений присваиваете? Посчитайте.
Ой точно спасибо!!
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
27.07.2012, 14:40
Цитата Сообщение от Andryuxa Посмотреть сообщение
Почему макс индек 8?
А ты сосчитай. 1-й - index=0, 2-й - index=2. 3-й - index=2, 4-й - index=3, 5-й -index=4, 6-й - index=5, 7-й - index=6, 8-й - index=7, 9-й - index=8. Всё. С индексом равным 9 будет уже 10-й, а согласно декларации их сего 9.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2012, 14:40
Помогаю со студенческими работами здесь

Очередность ходов в крестиках ноликах
Как сделать чтоб крестики и нолики ставились по очереди?

Определение победителя в крестиках ноликах
Не знаю как определять победителя в игре,принцип игры основан на кнопках(QPushButton),при нажатии на кнопку в зависимости от хода кнопка...

Сброс игры в крестиках-ноликах
Есть вот такой вот код. public partial class MainWindow : Window { public MainWindow() { new...

Реализовать действие в крестиках ноликах
помогите реализовать так чтобы он выдовал кто победитель(или ничья) и когда закончина игра. Заранее благодарю. using System; ...

Абстракция игрока в крестиках-ноликах
Я пишу крестики-нолики. хочу создать единый метод для проведения игры внезависимости от типа игроков(человек/компьютер) то есть должны...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru