Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
owned
2 / 2 / 0
Регистрация: 25.11.2012
Сообщений: 76
08.12.2012, 04:17     Крестики-нолики: как определить победителя? #1
в некоторых местах го*** код, но всё таки. взялся сейчас делать крестики нолики, сделал рамку, а сейчас пытаюсь через переменную типа 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. помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2012, 04:17     Крестики-нолики: как определить победителя?
Посмотрите здесь:

C++ Крестики-нолики
C++ Крестики Нолики
C++ крестики нолики
C++ Крестики-нолики
C++ Крестики нолики
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2014, 14:11     Крестики-нолики: как определить победителя?
Еще ссылки по теме:

C++ Как оптимизировать данный код игры крестики нолики?
C++ Крестики-нолики, поиск в массиве для выявления победителя
C++ Крестики нолики

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

Или воспользуйтесь поиском по форуму:
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,214
Завершенные тесты: 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 глав.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yandex
Объявления
09.10.2014, 14:11     Крестики-нолики: как определить победителя?
Ответ Создать тему
Опции темы

Текущее время: 22:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru