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

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

Восстановить пароль Регистрация
 
mster-doc
 Аватар для mster-doc
14 / 14 / 4
Регистрация: 10.11.2012
Сообщений: 239
13.11.2012, 17:19     Добавление компьютерного игрока #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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2012, 17:19     Добавление компьютерного игрока
Посмотрите здесь:

C++ система компьютерного обучения
вывести ФИО игрока с максимальным количеством матчей C++
добавить вирт игрока C++
C++ Как реализовать игру на два игрока
C++ Создать базу данных (БД) склада компьютерного магазина
Как считать количество жизней игрока? C++
Найти минимальный рост игрока баскетбольной команды C++
C++ Добавить второго игрока Игра Вишневый Пирог С++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denys_l
51 / 51 / 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;
                
                ...
            }
Yandex
Объявления
13.11.2012, 17:52     Добавление компьютерного игрока
Ответ Создать тему
Опции темы

Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru