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

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

25.07.2012, 19:28. Просмотров 729. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 19:28
Ответы с готовыми решениями:

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

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

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

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

7
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
25.07.2012, 19:38 2
Поставь теги, пожалуйста, ато в сплошном коде без табуляций пытаться разобраться как-то совсем не хочется, ровно как и ставить их
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2012, 06:09 3
Цитата Сообщение от 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  [ТС] 4
Цитата Сообщение от alsav22 Посмотреть сообщение
Причина может быть и не в этом, но char t[9]. Максимальный индекс 8. И как выглядит бред?
Почему макс индек 8? Бред заключается в следующем:
Нельзя изменять имена ( то есть void names () даже не запускается)
После следующего цикла игра продолжается с того момента на котором закончилось в предъидущем цикле.( вот это я скорее всего знаю как исправить)
Ну и немного по мелочам

Добавлено через 41 секунду
Цитата Сообщение от nexen Посмотреть сообщение
Поставь теги, пожалуйста, ато в сплошном коде без табуляций пытаться разобраться как-то совсем не хочется, ровно как и ставить их
Как ставить теги? )))
0
Модератор
Эксперт С++
9694 / 8288 / 5056
Регистрация: 18.12.2011
Сообщений: 22,158
26.07.2012, 20:22 5
Первая ошибка
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
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2012, 01:30 6
Цитата Сообщение от 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  [ТС] 7
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что объявлен массив на 9 элементов char t[9](строка 8 кода, и там всё правильно), а в этой строке вы сколько значений присваиваете? Посчитайте.
Ой точно спасибо!!
0
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
27.07.2012, 14:40 8
Цитата Сообщение от 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2012, 14:40

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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

Система сохранений и ходов компьютера в консольных крестиках-ноликах
Вчера вечером решил продолжить изучать С++, что бы вспомнить основы начал с СИ и собрался написать...

Как реализовать мини-макс в банальных крестиках-ноликах?
Доброго всем времени суток! Не так давно взялся я первый раз в жизни написать какое-нить подобие...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.