Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
#1

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

28.06.2015, 18:15. Просмотров 985. Ответов 10
Метки нет (Все метки)

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
#include <iostream>
#include <cstdlib>
#include <string>
 
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
 
char board[9] = {};
 
void clearscreen() {
    for (int i = 0; i < 40; i++){
        std::cout << std::endl;
    }
}
 
void clearboard() {
    for (int i = 0; i < 9; i++) {
        board[i] = '-';
    }
}
 
bool has_wonQ(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[8][3]] == player)
                count++;
        }
        if(count == 3) {
            return true;
        }
    }
    return false;
}
 
void print_board(std::string indent) {
    std::cout <<"\n";
    std::cout << indent << "-" << board[6] << "-|-" << board[7] << "-|-" << board[8] << "-" << std::endl;
    std::cout << indent << "-" << board[3] << "-|-" << board[4] << "-|-" << board[5] << "-" << std::endl;
    std::cout << indent << "-" << board[0] << "-|-" << board[1] << "-|-" << board[2] << "-" << std::endl;
}
 
int get_move() {
    std::cout << "Варианты хода:\n";
    std::cout <<"\n";
    std::cout <<"\t" << "-7-|-8-|-9-" << std::endl;
            std::cout <<"\t" << "-4-|-5-|-6-" << std::endl;
    std::cout <<"\t" << "-1-|-2-|-3-" << std::endl;
    std::cout <<"\n";
 
    print_board("");
    std::cout << "\nВаш ход: ";
 
    int move;
    std::cin >> move;
    while (move > 9 || move < 1 || board[move-1] != '-') {
        std::cout <<"Пожалуйста введите легальный ход (1-9):\n";
        std::cin >> move;
    }
    return move;
}
 
char play_and_get_winner() {
    int turn = 1;
    while(!has_wonQ('X') && !has_wonQ('O')) {
        clearscreen();
        int move = get_move();
        clearscreen();
        if(turn%2 == 1) {
            board[move-1] = 'X';
            if(has_wonQ('X')) {
                std::cout << "Поздравляю игрок X! Вы выиграли!\n";
                return 'X';
            }
        }
        else {
            board[move-1] = 'O';
            if(has_wonQ('O')) {
                std::cout << "Поздравляю игрок O! Вы выиграли!\n";
                return 'O';
            }
        }
        turn++;
        if(turn == 10) {
            std::cout << "\t У вас ничья!\n";
            return 'D';
        }
    }
}
 
int main() {
    SetRussianLocale();
    std::cout << "Добро пожаловать в крестики нолики!\n";
    std::string reply = "y";
    int x_wins = 0, o_wins = 0, ties = 0;
    while (reply == "y") {
        clearboard();
        char winner = play_and_get_winner();
        print_board("\t  ");
        switch(winner) {
        case 'X': x_wins++;
            break;
        case 'O': o_wins++;
            break;
        case 'D': ties++;
            break;
        }
        std::cout << "\n\t*Статистика*\nИгрок X: " << x_wins << ", Игрок O: " << o_wins << "Ничья: " << ties << "\n";
        std::cout << "\nХотите еще сыграть? (y/n):";
        std::cin >> reply;
        while (reply != "y" && reply != "n") {
            std::cout << "Пожалуйста введите ответ (y/n)";
            std::cin >> reply;
        }
    }
    system ("pause");
    return 0;
}
Добавлено через 52 секунды
где ошибка не работает столько писал, плиз посмотрите

Добавлено через 6 минут
C++
1
2
3
4
for (int j = 0; j < 3; j++) {
            if(board[wins[i][j]] == player)
                count++;
        }
Добавлено через 35 секунд
неужели нашел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2015, 18:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Игра Крестики-нолики (C++):

игра крестики нолики - C++
пытаюсь сделать игру крестики нолики. извиняюсь сразу за корявый код) // Example program #include &lt;iostream&gt; #include &lt;string&gt; ...

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

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

игра крестики-нолики - C++
Доброго времени суток! собственно говоря не знаю как сделать нормально изображения Х и O программа вот #include &lt;allegro.h&gt; ...

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

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

10
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
28.06.2015, 18:34 #2
Обращайтесь
0
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
02.07.2015, 15:34  [ТС] #3
кто нибудь помогите создать к ним искусственный интеллект принцип понял, но реализовать не могу

Добавлено через 38 секунд
1) Проверяем в цикле все линии на возможность проигрыша. Если на линии есть два крестика, ставим нолик, чтобы блокировать. Если нет переходим к п2.
2) Проверяем в цикле можно ли выиграть. Если на линии есть два нолика ставим нолик, что бы выиграть. Если нет переходим к п3.
3)Находим в цикле линию в которой уже есть один нолик и два пустых поля. Ставим нолик в любое из них. Если нет переходим к п4.
4)Проверяем пуст ли центр. Если да, ставим нолик в центр. Если нет, то в любое пустое поле.

Добавлено через 1 минуту
в цикле проблема (не могу сделать ввод на нужное место)
0
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
02.07.2015, 16:01 #4
легче взять все комбинации крестиков ноликов и заставить ИИ или выигрывать, и если первое не возможное сыграть в ничью
0
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
04.07.2015, 12:44  [ТС] #5
rikimaru2013, и как?
0
rjxk
7 / 7 / 6
Регистрация: 18.06.2015
Сообщений: 30
05.07.2015, 02:02 #6
Цитата Сообщение от MuslimPalit Посмотреть сообщение
1) Проверяем в цикле все линии на возможность проигрыша.
Сначала нужно проверить строки, столбцы, главную и побочную диагональ на возможность выигрыша.
0
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
05.07.2015, 13:55  [ТС] #7
rjxk, ну это понятно, не понятно как реализовать
0
rjxk
7 / 7 / 6
Регистрация: 18.06.2015
Сообщений: 30
05.07.2015, 14:13 #8
MuslimPalit, недавно написал эту игру на WinApi
0
Вложения
Тип файла: 7z TicTackToe.7z (70.8 Кб, 12 просмотров)
ПерС
375 / 291 / 90
Регистрация: 05.11.2013
Сообщений: 821
Записей в блоге: 5
Завершенные тесты: 1
05.07.2015, 19:16 #9
создать к ним искусственный интеллект
имхо, вам нужно про минимакс почитать
вот к примеру дельная статья
0
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
06.07.2015, 11:41  [ТС] #10
ПерС, мда лучше бы на С++ было бы
0
TrueTerm
167 / 115 / 38
Регистрация: 25.12.2014
Сообщений: 382
06.07.2015, 11:48 #11
MuslimPalit, программа крестики-нолики была в книге "Турбо Паскаль для Windows. (в 2 томах.) Рубенкинг, Н.". Правда исходный текст на Паскале, но алгоритм там подробно описан, несложно переписать на Си или любой другой язык.
0
06.07.2015, 11:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 11:48
Привет! Вот еще темы с ответами:

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

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

Игра крестики-нолики в классах - C++
Здравствуйте. Вот код написанный без классов: #include &lt;iostream&gt; //Стандартная библиотека ввода-вывода #include &lt;cstring&gt;...

Игра: Трехмерные крестики-нолики - C++
Здравствуй. Не могли бы помочь вот в коком вопросе. Такая проблема:задали курсовую работу по программировании ,игру &quot;трехмерные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru