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

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

Войти
Регистрация
Восстановить пароль
 
mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
#1

Добавление компьютерного игрока - C++

13.11.2012, 17:19. Просмотров 280. Ответов 1
Метки нет (Все метки)

Подскажите пожалуйсто, что я не так и может не туда пишу)) но компьютерный ход в крестиках ноликах работает как-то неправильно...
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
const char* board[9] = {};
 
void clearwin()
{
     for(int c = 0; c < 9; c++)
     cout << endl;
}
 
void clear_board()
{
     for(int b = 0; b < 9; b++)
     board[b] = "-";
}
 
bool has_won(char* player)
{
     int wins[8][3] = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
     
     for(int i = 0; i < 8; i++)
     {
             int count = 0;
             
             for(int j = 0; j < 3; j++)
             {
                     if(board[wins[i][j]] == player)
                     count++;      
             }
             if(count == 3)
             {
                     return true;
             }
     }
     return false;
}
 
int comp_move()
{
    int cmove;
    
    while(cmove > 9 || cmove < 1 || board[cmove - 1] != "-")
    {
               cmove = rand()%11;           
    }
    
 return cmove;   
}
 
void print_board()
{
     cout << " Game board:  \n\n";
     cout << " "<<board[0]<<" | "<<board[1]<<" | "<<board[2]<< endl;
     cout << " "<<board[3]<<" | "<<board[4]<<" | "<<board[5]<< endl;
     cout << " "<<board[6]<<" | "<<board[7]<<" | "<<board[8]<< endl;   
}
int get_move()
{
    cout << " It is game X and O " << endl;
    cout << " Move options:  \n\n";
    cout << " 1|2|3" << endl;
    cout << " 4|5|6" << endl; 
    cout << " 7|8|9" << '\n' << endl;  
       
       print_board();
    
    int move;
 
    cout << "\n Your move! ";
    cin >> move;
    
    while(move > 9 || move < 1 || board[move-1] != "-")
    {
               cout <<" Try again! Pleas enter number (1-9):";
               cin >> move;
    }
    return move;
}
 
char play_and_get_winner()
{    
     int turn = 0;
     
     while(!has_won("X") && !has_won("O"))
    {
            clearwin();
            
            int move = get_move();
            
            int cmove = comp_move();
            
 
            
            if(turn % 2 == 0)
            {
                    cout << " You move is: " << move << endl;   
                    
                 board[move - 1] = "X";
                 if(has_won("X"))
                 {
                                 cout << "Congratulation Player! You are winner!" << endl;
                                 return 'X';
                 }
            }
            else
            {
                cout << " Computer move is: " << cmove << endl;
                
                board[cmove - 1] = "O";
                if(has_won("O"))
                {
                                cout << "Computer winn!" << endl;
                                return 'O';
                }
            }
            turn++;
            if (turn == 9)
            {
                  cout << " It is a draw! " << endl;
                  return 'D';   
            }
    }
}
 
int main()
{
    string reply = "y";
    
    int X_wins = 0, O_wins = 0, ties = 0;
    
    while(reply == "y")
    {
                clear_board();
                
                char winner = play_and_get_winner();
                
                cout << endl;
                print_board();
                
                switch(winner)
                {
                              case 'X':
                                   X_wins++;
                                   break;
                              case 'O':
                                   O_wins++;
                                   break;
                              case 'D':
                                   ties++;
                                   break;
                }
                    cout << " Player winns:  " << X_wins << endl;
                    cout << " Computer winns:  " << O_wins << endl;
                    cout << " Ties:  " << ties << endl;
                    
                    cout << " Would you like to play again? " << endl;
                    cin >> reply;
                    
                    while(reply != "y" && reply != "n")
                    {
                                cout << " Please enter a valid reply (y/n):  ";
                                cin >> reply;
                    }                
 
    }
 
    getch();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Добавление компьютерного игрока (C++):

система компьютерного обучения - C++
Уважаемые гуру! Написал прогу САБЖ. Юзер вводит ответ на пример, который задает программа. Если ответ true - выводит рандомно реплики по...

Создать базу данных (БД) склада компьютерного магазина - C++
Есть задание помоги интересует не выполнение а справка что можете посоветовать почитать на эту тему что нужно использовать и если можно...

добавить вирт игрока - C++
Суть самой игры заключается в следующем: Игрок на экране видит два квадрата, которые разбиты на 100 клеток. На первой площадке игрок...

Как реализовать игру на два игрока - C++
Есть два обьекта. Как сделать так, чтобы каждым из них можно было отдельно управлять и стрелять? #include &lt;hge.h&gt; #include...

Как сделать 5 кубиков у каждого игрока? - C++
#include &quot;stdafx.h&quot; int _tmain(int argc, _TCHAR* argv) { return 0; } #include &lt;iostream&gt; #include...

Как считать количество жизней игрока? - C++
Всем доброе время суток. Недавно мы закончили изучать в институте язык C++ Builder 6 (а также Delphi 7) и мне захотелось написать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
denys_l
52 / 52 / 4
Регистрация: 26.09.2011
Сообщений: 186
13.11.2012, 17:52 #2
ну смотри
C++
1
2
3
4
5
6
7
8
9
10
11
int comp_move()
{
    int cmove;
    
    while(cmove > 9 || cmove < 1 || board[cmove - 1] != "-")
    {
               cmove = rand()%11;           
    }
    
 return cmove;   
}
Ты объявляешь локальную переменную
C++
1
  int cmove;
а что в ней?
напиши хоть так уже
C++
1
  int cmove = 0;
потом зачем генерировать ход игрока и компьютера, потом определять кто ходит. Сначала определили кто ходит, а потом вызываем соотвествующую функцию
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
while(!has_won("X") && !has_won("O"))
    {
            clearwin();
            
            //int move = get_move();
            
            //int cmove = comp_move();
            
 
            
            if(turn % 2 == 0)
            {
int move = get_move();
                    cout << " You move is: " << move << endl;   
                    
                 ...
            }
            else
            {
int cmove = comp_move();
                cout << " Computer move is: " << cmove << endl;
                
                ...
            }
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2012, 17:52
Привет! Вот еще темы с ответами:

Не отрисовываются координаты игрока на игровом поле - C++
Должен появляться человечек на карте , по координатам икс игрик. И эти координаты соответственно должны меняться при нажатии клавиш. Карта...

Добавить второго игрока Игра Вишневый Пирог С++ - C++
Игра &quot;Вишневый пирог&quot; В эту игру могут играть два и более игроков. Перед ними пирог, разрезанный на равные куски: играющие сами определяют,...

Найти минимальный рост игрока баскетбольной команды - C++
Дан целочисленный массив из 30 элементов. Элементы могут принимать значения от 160 до 200-рост учащихся выпускного класса. В баскетбольную...

Найти наибольшую сумму костей домино игрока - C++
У игрока есть k костей домино - прямоугольников 2x1. Он кладет их на доску так, чтобы не возникало наложений, и его выигрыш вычисляется как...


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

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

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