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

Кресты и Нолики, или как спасти студента - C++

Восстановить пароль Регистрация
 
Achakoo
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 34
16.03.2014, 15:18     Кресты и Нолики, или как спасти студента #1
Написал небольшой код игры Крестики Нолики 5х5 с возможностью игры PvP (Игрок против Игрока). Ломаю голову как добавить в код возможность игры против Компьютера, а так же чтобы в начале ... при запуске был выбор ... играть против компьютера или против Игрока ... Помогите добавить в этот код необходимое для того, чтобы она запускалась как описано выше. Заранее СПАСИБО !!!

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
#include <iostream>
#include <locale.h>
char board[25] = {};
using namespace std;
void clearscreen()
{
     for(int i = 0; i<100; i++)
     {
            cout<<endl;
  }
}
 
void clearboard()
{
    for(int i = 0; i<26; i++)
    {
            board[i] = '-';
    }
 
}
 
bool has_wonQ(char player)
{
  int wins[12][5] = {{0,1,2,3,4}, {5,6,7,8,9}, {10,11,12,13,14}, {15,16,17,18,19}, {20,21,22,23,24}, {0,5,10,15,20},
                     {1,6,11,16,21}, {2,7,12,17,22}, {3,8,13,18,23}, {4,9,14,19,24}, {0,6,12,18,24}, {4,8,12,16,20}};
 
       for(int i = 0; i<12; i++)
       {
           int count = 0;
           for(int j = 0; j<5; j++)
           {
               if(board[wins[i][j]] == player)
               count++;
    }
    if(count == 5)
    {
       return true;
    }
  }
  return false;
}
 
void print_board(string indent)
{
  cout << endl;
  cout<<"\n   Таблица ваших ходов\n";
  cout<<"    --------------------- " << endl;  
  cout<<indent<<"    | "<<board[20]<<" | "<<board[21]<<" | "<<board[22]<<" | "<<board[23]<<" | "<<board[24]<<" |\n";
  cout<<"    --------------------- " << endl;
  cout<<indent<<"    | "<<board[15]<<" | "<<board[16]<<" | "<<board[17]<<" | "<<board[18]<<" | "<<board[19]<<" |\n";
  cout<<"    --------------------- " << endl;
  cout<<indent<<"    | "<<board[10]<<" | "<<board[11]<<" | "<<board[12]<<" | "<<board[13]<<" | "<<board[14]<<" |\n";
  cout<<"    --------------------- " << endl;
  cout<<indent<<"    | "<<board[5]<<" | "<<board[6]<<" | "<<board[7]<<" | "<<board[8]<<" | "<<board[9]<<" |\n";
  cout<<"    --------------------- " << endl;
  cout<<indent<<"    | "<<board[0]<<" | "<<board[1]<<" | "<<board[2]<<" | "<<board[3]<<" | "<<board[4]<<" |\n";
  cout<<"    --------------------- " << endl;
}
int get_move()
{
  cout<<"\nТаблица возможных ходов\n";  
  cout<<"      ---------------- " << endl;   
  cout<<"      |21|22|23|24|25| " << endl;
  cout<<"      ---------------- " << endl;   
  cout<<"      |16|17|18|19|20| " << endl;
  cout<<"      ---------------- " << endl; 
  cout<<"      |11|12|13|14|15| " << endl;
  cout<<"      ---------------- " << endl; 
  cout<<"      |6 |7 |8 |9 |10| " << endl;
  cout<<"      ---------------- " << endl; 
  cout<<"      |1 |2 |3 |4 |5 | " << endl;
  cout<<"      ---------------- " << endl; 
  cout<<"\n";
 
print_board("");
cout << "\nВведите цифру ячейки: ";
 
 
  int move;
  cin >> move;
  while (move > 25 || move < 1 || board[move - 1] != '-') 
  {
  cout<<"Введите число от 1 до 25:\n";
  cin >> move;
  }
  return move;
}
 
char play_and_get_winner()
{
    int turn = 1;
 
    while(!has_wonQ('X') && !has_wonQ('0'))
    {
           clearscreen();
           int move = get_move();
           clearscreen();
           if(turn%2 == 1){
              board[move-1]='X';
               if(has_wonQ('X'))
               {
               cout <<"Крестики победили!\n";
               return 'X';
               }
 
      }
       else
       {
              board[move-1]='0';
              if(has_wonQ('0'))
              {
              cout <<"Нолики выйграли!\n";
              return '0';
        }
      }
    turn++;
    if(turn == 26)
    {
    cout << "Нечья\n";
    return 'D';
    }
  }
}
 
int main()
{
    setlocale(LC_ALL,"RUSSIAN");
    string reply = "y";
    int x_wins=0, o_wins=0, ties=0;
 
    while(reply == "y")
    {
    clearboard();
    char winner = play_and_get_winner();
    print_board("");
    cout << "\n Хотите поиграть ещё? Да-(y), Нет-(n): ";
    cin  >> reply;
        while(reply != "y" && reply !="n")
        {
    cout << "!!! Сделайте выбор !!!(y/n):";
    cin  >> reply;
    }
 
   }
 
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 15:18     Кресты и Нолики, или как спасти студента
Посмотрите здесь:

Из жизни студента C++ C++
C++ средный бал студента
научите студента! C++
C++ Крестики-нолики: как определить победителя?
Структуры и файлы (посчитать средний балл каждого студента и вывести фамилию студента с наибольшим баллом) C++
C++ Как оптимизировать данный код игры крестики нолики?
C++ Спасти рядового malloc.h

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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