Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Andryuxa
Заблокирован
#1

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

25.07.2012, 19:28. Просмотров 536. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2012, 19:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бред в крестиках ноликах (C++):

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

Бред со счетом - C++
С начало грешил на свой компилятор, но после попробовал на Visual Studio 2010 и тот же результат. Какого черта в коде ниже, 264.088/11...

какой то бред! - C++
не могу понять что за цирк.. #include &lt;math.h&gt; #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt; main() { double a,d,n; ...

бред в результате - C++
ничего не могу понять! нужно посчитать v, для этого просим ввести пользователя h и s, в результате получается какой-то бред!!! ввожу 3 и 2,...

не использовать do/while ? бред ! - C++
меня возмутила статья http://www.cyberguru.ru/programming/cpp/cpp-programming-rules-page67.html в которой автор рекомендует вместо do...

Бред при декомпиляции - C++
Всем привет!У меня такая проблема, при дэкомпиляции у меня получается всякий бред типо jddvb:56/df;v:j/:u19vghj незнаю что делать и из за...

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

Добавлено через 41 секунду
Цитата Сообщение от nexen Посмотреть сообщение
Поставь теги, пожалуйста, ато в сплошном коде без табуляций пытаться разобраться как-то совсем не хочется, ровно как и ставить их
Как ставить теги? )))
0
zss
Модератор
Эксперт С++
6530 / 6092 / 2007
Регистрация: 18.12.2011
Сообщений: 15,844
Завершенные тесты: 1
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
alsav22
5426 / 4821 / 442
Регистрация: 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
Andryuxa
Заблокирован
27.07.2012, 13:45  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Потому что объявлен массив на 9 элементов char t[9](строка 8 кода, и там всё правильно), а в этой строке вы сколько значений присваиваете? Посчитайте.
Ой точно спасибо!!
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
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
27.07.2012, 14:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2012, 14:40
Привет! Вот еще темы с ответами:

проверка на IF что за бред - C++
/* Вариант 12 В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) номер максимального по модулю элемента...

Почему выводит бред - C++
Имеется следующий код #include &lt;iostream&gt; #include &lt;locale&gt; using namespace std; const char* rename() {

Программа считает бред какой-то - C++
#include &lt;stdio.h&gt; int main() { int t,y,v,x,n=0; scanf(&quot;%d %d&quot;, &amp;x, &amp;y); while (x&lt;y) {...

Какой то бред с передачей указателя в функцию :-) - C++
Привет! Толи бред какой - то :D Толи у меня пробел в азах :rofl: Вот например: void MegaFunction( BYTE *data ); int...


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

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

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