0 / 0 / 0
Регистрация: 12.04.2020
Сообщений: 6
1

Игра крестики-нолики с++

22.04.2020, 16:08. Показов 243. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужна проверка некорректного ввода данных. И вторым игроком сделать компьютер. Помогите,кто может. Очень срочно нужно
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
#include "pch.h"
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
using namespace std;
 
char PlayerName1[30], //Переменные для имен игроков
PlayerName2[30]; 
char cells[9] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };//в нем хранятся данные о клеточках ("-" - пустая, "Х" - первого игрока, "О" - второго)
char win = '-'; //Символ победы ("-" - ничья, "Х" - первого игрока, "О" - второго)
 
void show_cells()//функция не имеет возвращающего типа, потому что она просто выводит поле
{ 
    system("cls"); //системная функция, которая очищает экран для того чтобы выглядело солидно
    cout << "\t\t\tКрестики-нолики\n\n";
    cout << "Правила:\n";
    cout << "Играют 2 игрока на поле 3х3\n";
    cout << "Побеждает тот кто составит выиграшную комбинацию\n";
    cout << "Вид поля:\n" << endl;//Номера клеток для того, чтобы человек знал куда ходить
    cout << "-" << 1 << "-" << '|' << "-" << 2 << "-" << '|' << "-" << 3 << "-" << endl;
    cout << "-" << 4 << "-" << '|' << "-" << 5 << "-" << '|' << "-" << 6 << "-" << endl;
    cout << "-" << 7 << "-" << '|' << "-" << 8 << "-" << '|' << "-" << 9 << "-" << "\n" << endl;
    cout << "Текущая ситуация:\n" << endl;//Текущая ситуация на поле (клеточка --- - пуста)
    cout << "-" << cells[0] << "-" << '|' << "-" << cells[1] << "-" << '|' << "-" << cells[2] << "-" << endl;
    cout << "-" << cells[3] << "-" << '|' << "-" << cells[4] << "-" << '|' << "-" << cells[5] << "-" << endl;
    cout << "-" << cells[6] << "-" << '|' << "-" << cells[7] << "-" << '|' << "-" << cells[8] << "-" << "\n" << endl;
}
 
void make_move(int num)//это функция ничего не возвращает, но у нее есть аргумент - номер игрока, который будет делать ход
{
    if (num == 1) cout << PlayerName1;//Если аргумент = 1, то выводится имя первого игрока (то есть он будет ходить)
    else cout << PlayerName2;
    cout << ", введите номер клетки,чтобы сделать ход : ";
 
    int cell;
    cin >> cell; //Игрок который ходит должен указать номер клеточки
    cout << "\n";
 
    while (cell > 9 || cell < 1 || cells[cell - 1] == 'O' || cells[cell - 1] == 'X')//Проверка на валидность (клеточка не занята и ее номер не <1 и не >9
    {
        cout << "Введите номер(1-9) клетки,чтобы сделать ход: ";
        cin >> cell; //Если проверка не пройдена, то игрок должен еще раз ввести номер клеточки
        cout << "\n";
    }
 
    if (num == 1) cells[cell - 1] = 'X'; //Первый игрок играет "крестиками", а второй - "ноликами"
 
    else cells[cell - 1] = 'O';
}
 
char check()
{
    for (int i = 0; i < 3; i++) //Для победы нужны 3 клеточки
        if (cells[i * 3] == cells[i * 3 + 1] && cells[i * 3 + 1] == cells[i * 3 + 2]) //Комбинации для победы вычисляются по разным формулам
            return cells[i]; // По горизонтали  0-1-2,3-4-5 и 6-7-8
    //нумерация в массиве начинается с 0
        else if (cells[i] == cells[i + 3] && cells[i + 3] == cells[i + 6]) //Вертикальная
            return cells[i]; //0-3-6, 1-4-7 и 2-5-8
        else if ((cells[2] == cells[4] && cells[4] == cells[6]) || (cells[0] == cells[4] && cells[4] == cells[8]))
            return cells[i]; //И по диагонали: 0-4-8 и 2-4-6
    return '-'; //Иначе - ничья
}
 
void result()
{
 
    if (win == 'X') cout << PlayerName1 << " Выиграл! Поздравляю! " << endl;
    else if (win == 'O') cout << PlayerName2 << " Выиграл! Поздравляю!" << endl;
    else cout << "Ничья!!!" << endl; 
}
 
int main() 
{
    setlocale(LC_ALL, "rus");
    int move = 0;
do {        
    cout << "Введите имя 1 игрока: ";
    cin>>PlayerName1;
    cout << "Введите имя 2 игрока: ";
    cin>>PlayerName2;
    cout << "\n";
    } 
  while (!strcmp(PlayerName1, PlayerName2));/*Функция из cstring для проверки разности строк она возвращает 0, если строки равны*/
  
    show_cells();
    
    for (move = 1; move <= 9; move++) //Цикл на 9 ходов, т.к. у нас 9 клеточек
    {
        if (move % 2) make_move(1); //Если ход нечетный, то остаток от деления на будет равен 1 (то есть true)
        else make_move(2); //Если четный, то 0 (false). Тогда если ход нечетный ходит первый игрок,
        show_cells(); //а если четный, то второй
        if (move >= 5)/*Если номер хода 5 или больше, то проходит проверка на победу (раньше, чем на 5-ом ходе победить нельзя)*/
        {
            win = check(); //Символ победы - это возвращенное значение функции проверки
            if (win != '-');    //Если символ победы не "-" (то есть кто-то победил)
            {
                break;//то нету смысла в дальнейших ходах и цикл прерывается
            }
        }
    }//Цикл закончился и ничто не победил - ничья
   
        result(); //Функция, которая выводит результат
    system("pause");/*system ("pause") использовано для того, чтобы программа не закрывалась после выполнения (функция использована для того, чтобы игру можно было свободно запускать с .exe-файла, а не через cmd)*/
    return 0;       
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.04.2020, 16:08
Ответы с готовыми решениями:

Игра Крестики-нолики
Ребят, такая ситуация, задумал написать игру крестики нолики:) Суть в том чтобы сами крестики и...

Игра крестики-нолики
Здравствуйте, ребята! Вообщем такое задание: Создать класс типа игра крестики-нолики. Поле класса...

Игра Крестики Нолики
Здравствуйте, Уважаемые Пользователи и Программисты КиберФорума! Будьте добры помочь мне с...

игра крестики нолики
Есть готовая игра,работающая,как мне добавить функцию sleep,чтобы заменить это: for(int i = 0; i...

0
22.04.2020, 16:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.04.2020, 16:08
Помогаю со студенческими работами здесь

игра крестики-нолики
Доброго времени суток! собственно говоря не знаю как сделать нормально изображения Х и O...

Игра [Крестики Нолики] C++
Всем привет. Возможно кому-то пригодится исходный код игры . Все очень просто и легко. Компилятор...

Игра Крестики-нолики
Реализуйте игру «Крестики-нолики». Кроме главной функции, выделите отдельные подпрограммы для ·...

Игра крестики нолики
Помогите пожалуйста. Нужна очень срочно игра крестики-нолили Добавлено через 8 минут Люди...

игра крестики нолики
пытаюсь сделать игру крестики нолики. извиняюсь сразу за корявый код) // Example program...

Игра Крестики-нолики
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; void SetRussianLocale() {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru