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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76
#1

Крестики-нолики: как определить победителя? - C++

08.12.2012, 04:17. Просмотров 1748. Ответов 20
Метки нет (Все метки)

в некоторых местах го*** код, но всё таки. взялся сейчас делать крестики нолики, сделал рамку, а сейчас пытаюсь через переменную типа COORD печатать в нужном месте 'X' или 'О'. ну да, получилось. проверить занято ли там тоже получилось, НО как проверять что там написано, чтобы определить победителя. помогите кто чем может, если не тяжело. ещё нужен искусственный интеллект (алгоритм придумал), но плохо у меня с логикой и сейчас с квадратной головой тяжело соображать(

короче.

- проверить что написано по данных координатам для определения победителя...
- либо помогите это сделать другим нормальным способом
- помогите реализовать это с помощью cin.get() чтобы можно было стрелочками (клавишами) ставить X или О в определённую позицию. буду очень признателен.

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
#include <iostream> 
#include <windows.h>
 
using namespace std;
 
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); // Дескриптор окна
 
void Frame() // Ф-ия для таблички.
{
    char leftUpCorner = 201;
    char LeftDownCorber = 200;
    char RightUpCorner = 187;
    char RightDownCorner = 188;
    char vertical = 186;
    char horizontLine = 205;
    char middle = 206;
    char leftMiddle = 204;
    char rigthMiddle = 185;
    char downMiddle = 202;
    char upMiddle = 203;
 
    int size = 3;
 
    for(int i = 0; i < size; i++)
    {
        if(i == 0) // Верхушка рамки
        {
            for(int j = 0; j < size; j++)
            {
                if(j == 0)
                    cout << leftUpCorner << horizontLine << horizontLine;
                else
                    cout << upMiddle << horizontLine << horizontLine;
            }
            cout << RightUpCorner << endl;
        }
        else // Серединки рамки
        {
            for(int j = 0; j < size; j++)
            {
                if(j == 0)
                    cout << leftMiddle << horizontLine << horizontLine;
                else
                    cout << middle << horizontLine << horizontLine;
            }
            cout << rigthMiddle << endl;
        }
        for(int j = 0; j < size; j++) // Обязательный блок
        {
            cout << vertical << "  ";
        }
        cout << vertical << endl;
 
        if(i == size - 1) // Низ рамки
        {
            for(int j = 0; j < size; j++)
            {
                if(j == 0)
                    cout << LeftDownCorber << horizontLine << horizontLine;
                else
                    cout << downMiddle << horizontLine << horizontLine;
            }
            cout << RightDownCorner << endl;
        }
 
    }
    cout << endl;
}
 
void Game()
{
    COORD coord;
    cout << "Vvedite coordinaty kyda postavit X (v kakyu yacheiky)? (primer: 1 )\n";
    short input;
    cin >> input;
    if(input == 1)
    {
        coord.X = 1;
        coord.Y = 1;
        SetConsoleCursorPosition(h, coord);
        cout << " X";
        if(coord.X == 1 && coord.Y == 1)
        {
            cout << "####";
        }
        coord.X = 40;
        coord.Y = 13;
        SetConsoleCursorPosition(h, coord);
        cin >> input;
        coord.X = 1;
        coord.Y = 2;
        SetConsoleCursorPosition(h, coord);
        cout << " O";
    }
 
}
 
void main()
{
    Frame(); // Вызов ф-ии для вывода рамки.
    Game();
    CONSOLE_CURSOR_INFO cci; 
    cci.bVisible = 0;
    cci.dwSize = 100;
    SetConsoleCursorInfo(h, &cci);
    Sleep(INFINITE);
}
Добавлено через 2 часа 21 минуту
up up up. помогите пожалуйста
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 04:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Крестики-нолики: как определить победителя? (C++):

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

Как оптимизировать данный код игры крестики нолики? - C++
Привет всем! Я написал консольную игру &quot;Крестики нолики&quot;. Хочу посоветоваться как можно оптимизировать игру. Вот исходный код: ...

Как создать логическую игру “Крестики-нолики” на консоли функцию winner не могу до делать c++ - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; using namespace std; int polya; class o; class x { ...

“Крестики-нолики” - C++
Напишите игру “Крестики-нолики”. Программа выводит игровое поле для двух игроков, проверяет правильность ходов, следит за ситуацией на...

Крестики нолики - C++
Уж слишком запутался даже в такой простом коде: #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;string&gt; #include &lt;iomanip&gt; ...

Крестики/нолики - C++
Я не понимаю почему не работает, и в этом моя проблема. Буду благодарен любой помощи, а так же любой конструктивной критике по коду. Если...

20
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76
08.12.2012, 23:26  [ТС] #16
я хочу сделать так, чтобы клавишами выбирать куда поставить X, как это сделать или не стоит?
0
ValeryS
Модератор
6705 / 5114 / 482
Регистрация: 14.02.2011
Сообщений: 17,182
08.12.2012, 23:28 #17
Цитата Сообщение от owned Посмотреть сообщение
я хочу сделать так, чтобы клавишами выбирать куда поставить X, как это сделать или не стоит?
если ты в ДОСе(Консоль) собираешься писать то можно, но геморно
лучше отладить алгоритм и оболочку написать в Графическом интерфейсе(Виндос?)
0
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76
08.12.2012, 23:29  [ТС] #18
только в консольном режиме
0
ValeryS
Модератор
6705 / 5114 / 482
Регистрация: 14.02.2011
Сообщений: 17,182
08.12.2012, 23:31 #19
Цитата Сообщение от owned Посмотреть сообщение
только в консольном режиме
и думаешь много игроков у тебя будет?
0
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76
09.12.2012, 20:51  [ТС] #20
это экзаменационная работа по си

Добавлено через 21 час 18 минут
up, help please
0
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
09.10.2014, 14:11 #21
Также делаю консольные Крестики-нолики (задание в конце гл. 9 книги Дейтелов).
Появились вопросы (собственно, в общем случае эти проблемы меня мучили давно):

1. Как написать AI? Я написал такую функцию:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
void TicTacToe::AI()
{
    for(int e = 0; e <= 9; e++)
    {
        int i = 0 + rand() % 2;
        int j = 0 + rand() % 2;
        if( field[i][j] == ' ' )
        {   field[i][j] = 'o'; break;   }
    }
         // srand использовал
}

После третьего хода компьютер вообще не выставляет нолики. Я могу ходить, но комп на это совершенно не реагирует.

2. Допустим, юзер ввел неверные значения (несуществующие индексы массива указал, например). Хочется, чтобы по этому факту выводилось сообщение, а затем чтобы ввод повторился (т.е. чтобы функция ввода перезапустилась).

Вот программа хода игрока:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
void TicTacToe::ThePlayersTurn()
{
    cout << "Enter firstly the cell's row, then its collumn:\n";
    int a, b;
    cin >> a >> b;
    if( field[a - 1][b - 1] == ' ' )
        field[a - 1][b - 1] = 'x';
    else 
         // вот здесь должны находится команды, о которых я спрашиваю
}


P.S. С С++ знаком пока что только на основе тех 9 глав.
0
09.10.2014, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2014, 14:11
Привет! Вот еще темы с ответами:

Крестики-нолики - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; void show_cells(); void make_move(int num); void result(); ...

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

крестики-нолики - C++
Может у кого-то есть шаблон,чтобы расчертить поле в клетку,например 3x3. Покажите пожалуйста))

Крестики-нолики - C++
Доброго времени суток. Решил написать крестики-нолики, но возник какой-то косяк на ровном (и естесно самом неожиданном) месте. Коротко...


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

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

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