Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 08.04.2019
Сообщений: 1

Крестики нолики

08.04.2019, 12:36. Показов 899. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите зделать защитить клетку от перезаписи другим игроком и написать функцию Check(), которая проверяет выиграшные комбинации, и определяет ничью.
И обясните пж. Я буду очень благодарен за помощь!
Вот код:
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
#include<iostream>
#include<conio.h>
using namespace std;
 
#define vert_line   (char)179
#define horiz_line  (char)196
#define cross       (char)197
#define middle      "\n\n\n\n\n\n\n\n\n"
 
void ASCII()
{
    for (int i = 0; i < 256; i++)
    {
        cout << i << "\t" << (char)i << endl;
    }
}
void PrintField(char Field[], const int n, char Player);
void Move(char Field[], const int n, char Player);
 
 
void main()
{
    const int n = 9;
    char Field[n] = {};
    PrintField(Field, n, 'X');
    //ASCII();
}
 
void PrintField(char Field[], const int n, char Player)
{
    system("CLS");  //Очистка экрана
    cout << middle;
    for (int i = 6; i >= 0; i -= 3)
    {
        cout.width(50);
        for (int j = 0; j < 3; j++)
        {
            if (j != 0)cout << vert_line;
            cout << " " << Field[i + j] << " ";
        }
        cout << endl;
        if (i != 0)
        {
            cout.width(50);
            cout << horiz_line << horiz_line << horiz_line << cross;
            cout << horiz_line << horiz_line << horiz_line << cross;
            cout << horiz_line << horiz_line << horiz_line;
            cout << endl;
        }
    }
    Move(Field, n, Player);
}
void Move(char Field[], const int n, char Player)
{
    char key;
    do
    {
        key = getch();
        if (key == 27)return;   //При нажатии Escape - выход из рекурсии.
        if (key < '1' || key > '9')
            cout << "Error\a" << endl;
    } while (key < '1' || key > '9');
    Field[key - 49] = Player;
    if (Player == 'X')PrintField(Field, n, '0');
    else PrintField(Field, n, 'X');
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.04.2019, 12:36
Ответы с готовыми решениями:

Крестики нолики
Доброго времени суток, недавно, я решил написать программу Крестики нолики, опираясь на свои знания в С++, но при компиляции кода...

Крестики-нолики
Добрый вечер. Хочу попробовать написать свои крестики-нолики. Игру еще не дописал, но уже появилась следующая проблема. По идее, если я...

Крестики-нолики
Пишу крестики нолики, получается смесь ООП и говнокода:senor: Вот собственно код: #include &quot;Pole.h&quot; void...

1
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
08.04.2019, 15:56
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
#include<iostream>
#include<conio.h>
using namespace std;
 
#define vert_line   (char)179
#define horiz_line  (char)196
#define cross   (char)197
#define middle  "\n\n\n\n\n\n\n\n\n"
 
void ASCII()
{
    for (int i = 0; i < 256; i++)
    {
        cout << i << "\t" << (char)i << endl;
    }
}
void PrintField(char Field[], const int n);
void Move(char Field[], const int n);
int Check(char Field[9]);
 
 
int main()
{
    const int n = 9;
    char Field[n] = {};
    Move(Field, n);
    //ASCII();
}
 
void PrintField(char Field[], const int n)
{
    system("CLS");  //Очистка экрана
    cout << middle;
    for (int i = 6; i >= 0; i -= 3)
    {
        cout.width(50);
        for (int j = 0; j < 3; j++)
        {
            if (j != 0)cout << vert_line;
            cout << " " << Field[i + j] << " ";
        }
        cout << endl;
        if (i != 0)
        {
            cout.width(50);
            cout << horiz_line << horiz_line << horiz_line << cross;
            cout << horiz_line << horiz_line << horiz_line << cross;
            cout << horiz_line << horiz_line << horiz_line;
            cout << endl;
        }
    }
}
void Move(char Field[], const int n)
{
    char key{};
    const char Player[] = { '0','X' };
    char winner = -1;
    int round = 9;
    PrintField(Field, n);
    while (round) {
        key = _getch();
        if ('1' <= key && key <= '9') {
            if (!Field[key - 49]) {
                Field[key - 49] = Player[round % 2];
                --round;
                PrintField(Field, n);
                winner = Check(Field);
                if (winner != -1) round = 0;
            }
        }
    }
    if (winner != -1) cout << "Player " << Player[winner] << " won!";
    else cout << "DRAW";
}
 
int Check(char Field[9])
{
    for (int i = 0; i < 3; ++i) {
        if (Field[i] && Field[i] == Field[i + 3] && Field[i] == Field[i + 6])
            return (Field[i] == 'X') ? 1 : 0;
        if (Field[i * 3] && Field[i * 3] == Field[i * 3 + 1] && Field[i * 3] == Field[i * 3 + 2])
            return (Field[i] == 'X') ? 1 : 0;
    }
    if (Field[4] &&
        ((Field[4] == Field[0] && Field[4] == Field[8]) ||
        (Field[4] == Field[2] && Field[4] == Field[6])))
        return (Field[4] == 'X') ? 1 : 0;
    return -1;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2019, 15:56
Помогаю со студенческими работами здесь

Крестики нолики
Доброго времени суток, недавно я решил написать игру крестики нолики, написал, но код в ~1300 строк, что очень много, в коде много похожих...

Крестики-Нолики
Помогите, именно переделать этот код, как сделать не повторения ходов, что бы например позицию 1:1 я не мог 2 раза вводить. #include...

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

Крестики-нолики
При запуске выдаёт ошибку error LNK2001: неразрешенный внешний символ &quot;&quot;char __cdecl check(void)&quot; (?check@@YADXZ)&quot; Судя по...

Крестики нолики
Всем доброе утро) Написал программу, только не могу найти там ошибку в проверке. Когда надо проверить кто выйграл, по диагоналям строкам...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru