Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
1

Крестики-нолики: как написать код для того, чтобы программа могла объявить победителя?

15.06.2018, 21:45. Показов 1856. Ответов 11
Метки нет (Все метки)

И да, поле 5 на 5.
Сам код:
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
#include <iostream>
#include <locale.h>
#include <Windows.h>
using namespace std;
 
void SetColor(int text, int background)
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
 
char board[25] = { '-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' };
 
void clear()
{
    for (int i = 0; i < 20; i++)
    {
        cout << "" << endl;
    }
}
 
void print_board()
{
    SetColor(15, 0);
    {
        cout << "    Игровая доска    ";
        cout << "" << endl;
        cout << "---------------------" << endl;
        cout << "| " << board[0] << " | " << board[1] << " | " << board[2] << " | " << board[3] << " | " << board[4] << " |" << endl;
        cout << "---------------------" << endl;
        cout << "| " << board[5] << " | " << board[6] << " | " << board[7] << " | " << board[8] << " | " << board[9] << " |" << endl;
        cout << "---------------------" << endl;
        cout << "| " << board[10] << " | " << board[11] << " | " << board[12] << " | " << board[13] << " | " << board[14] << " |" << endl;
        cout << "---------------------" << endl;
        cout << "| " << board[15] << " | " << board[16] << " | " << board[17] << " | " << board[18] << " | " << board[19] << " |" << endl;
        cout << "---------------------" << endl;
        cout << "| " << board[20] << " | " << board[21] << " | " << board[22] << " | " << board[23] << " | " << board[24] << " |" << endl;
        cout << "---------------------" << endl;
    }
}
 
int get_move()
{
    SetColor(15, 0);
    {
        cout << "      Диапозон       ";
        cout << "" << endl;
        cout << "---------------------" << endl;
        cout << "| 1 | 2 | 3 | 4 | 5 |" << endl;
        cout << "---------------------" << endl;
        cout << "| 6 | 7 | 8 | 9 | 10|" << endl;
        cout << "---------------------" << endl;
        cout << "| 11| 12| 13| 14| 15|" << endl;
        cout << "---------------------" << endl;
        cout << "| 16| 17| 18| 19| 20|" << endl;
        cout << "---------------------" << endl;
        cout << "| 21| 22| 23| 24| 25|" << endl;
        cout << "---------------------" << endl;
        cout << "" << endl;
    }
 
    print_board();
    cout << "Ваш ход: ";
 
    int move;
    cin >> move;
    while (move > 25 || move < 1 || board[move - 1] != '-')
    {
        SetColor(15, 4);
        {
            cout << "Вы вышли за пределы поля или сходили на занятую клетку. Пожалуйста, переходите: ";
        }
        cin >> move;
    }
    return move;
}
 
 
int main()
{
    setlocale(0, "");
    for (int i = 0; i < 26; i++)
    {
        clear();
        int move = get_move();
        cout << "Вы ходили сюда: " << move << endl;
        if (i % 2 == 0)
        {
                board[move - 1] = 'X';
        }
        else
        {
            board[move - 1] = '0';
        }
    }
    cout << "";
    print_board();
    system("pause");
    return 0;
}
С помощью этого кода я пытался перечислить все варианты победы:
C++
1
2
3
4
5
bool won()
{
    int wins[][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 } }
 
}
Пожалуйста помогите!
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2018, 21:45
Ответы с готовыми решениями:

Крестики-нолики: как определить победителя?
в некоторых местах го*** код, но всё таки. взялся сейчас делать крестики нолики, сделал рамку, а...

Крестики-нолики, поиск в массиве для выявления победителя
Здравствуйте. Имеем игру крестики-нолики, поле хранится в виде матрицы 10х10, нужно поставить 5 в...

В каком виде хранить данные в файле для того, чтобы программа могла их прочитать
Даны 2 ряда действительных чисел в текстовом документе Чем должны отделяться друг от друга числа...

Крестики-нолики: проверка на победителя
Вечер добрый, такой вопрос. Пишу игру крестики-нолики. написал проверку на победителя. можно ли...

11
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
16.06.2018, 09:34 2
И где проверка-то? Там только массив.
0
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
16.06.2018, 09:36  [ТС] 3
Я знаю что массивы. Мне нужна помощь как написать ее
0
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
16.06.2018, 09:46 4
Лучший ответ Сообщение было отмечено REST4RT как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool wonX()
{
    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 } }
 
    bool r;
 
    for (int i = 0; i < 12; ++i)
    {
        r = true;
        for (int j = 0; j < 5; ++j)
            if (board[wins[i][j]] != 'X')
            {
                r = false;
                break;
            }
 
        if (r) return true;
    }
    return false;
}
1
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
16.06.2018, 21:26  [ТС] 5
А цифра 12 что значит?

Добавлено через 13 минут
Цитата Сообщение от REST4RT Посмотреть сообщение
А цифра 12 что значит?
Все понял, что значит 12

Добавлено через 26 минут
Цитата Сообщение от nmcf Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
bool wonX()
{
    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 } }
 
    bool r;
 
    for (int i = 0; i < 12; ++i)
    {
        r = true;
        for (int j = 0; j < 5; ++j)
            if (board[wins[i][j]] != 'X')
            {
                r = false;
                break;
            }
 
        if (r) return true;
    }
    return false;
}
Почему выходит ошибка что нужно поставить ";" после перечисленных вариантов побед. я поставил ошибки пропали, но все равно не объявляет победителя, что делать?
0
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
16.06.2018, 22:49 6
Потому что надо.
0
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
17.06.2018, 16:31  [ТС] 7
Почему выходит ошибка что нужно поставить ";" после перечисленных вариантов побед. я поставил ошибки пропали, но все равно не объявляет победителя, что делать?
0
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
17.06.2018, 16:36 8
А он там есть?
0
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
17.06.2018, 16:38  [ТС] 9
нет, как его написать? Мне нужно что бы выходило "победил X или 0 или ничья" - я это не могу написать
0
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
17.06.2018, 16:42 10
Эта функция только X проверяет. Для O ещё одна нужна.
0
2 / 2 / 0
Регистрация: 15.06.2018
Сообщений: 47
17.06.2018, 16:45  [ТС] 11
Я добавил wonX, еще приписал туда cout << "X won"; но после победы ни чего не происходит игра дальше продолжается и не выходит надпись "X won". Может я не в ту строчку добавляю?
0
7157 / 6132 / 2801
Регистрация: 14.04.2014
Сообщений: 26,452
17.06.2018, 22:56 12
Куда туда? Ты результат функции учитываешь?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2018, 22:56

Программа крестики-нолики, исправить код
Написать программу крестики-нолики. Создана программа, но может чего-то пропустил. Не правильно...

Дописать определение победителя в игре крестики нолики (по столбцам и строкам, по диагоналям)
Добрый вечер, я хотел бы попросить помощи с моим домашним заданием. Дело в том что игру крестики...

Крестики-нолики. Не могу написать код проверки выигрыша
Задача состояла в том, чтобы написать игру крестики-нолики с использованием массивов. Написала все....

Определение победителя в игре "Крестики-нолики"
Доброго времени суток, форумчане! Есть следующий вопрос - сейчас пишу игру &quot;Игру-крестики&quot; ,...


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

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

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