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

Крестики-нолики, проверка - C++

Восстановить пароль Регистрация
 
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
28.07.2013, 20:13     Крестики-нолики, проверка #1
Подскажите пожалуйста как тут реализовать проверку по прямой и по диагонали?

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
#include <iostream>
#include <cmath>
using namespace std;
 
class Board
{
protected:
    char board[3][3];
    int x, y;
public:
    Board(){};
    ~Board(){};
    virtual void init_board()
    {
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
                board[i][j] = '-';
        }
    }
 
    virtual void out_board()
    {
        system ("cls");
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
                cout << " " << board[i][j];
            cout << endl;
        }
    }
    virtual void move(){}
    virtual void test(){}
};
 
class Game : public Board
{
public:
     void test()
    {
        // код
    }
};
 
class Player : public Game
{
public:
        void move()
    {
        static int count = 0;
        cin >> this->x >> this->y;
        count++;
        if (count == 1)
        board[x-1][y-1] = 'X';
        if (count == 2)
        board[x-1][y-1] = '0', count = 0;
    }
};
 
 
 
 
void main()
{
    Board *obj[2];
 
    obj[0] = new Player;
    obj[0] -> init_board();
    obj[0] -> out_board();
    while (1)
    {
        cout << "First player: " << endl;
        obj[0] -> move();   
        obj[0] -> out_board();
        obj[0] -> test();
        cout << "Second player: " << endl;
        obj[0] -> move();   
        obj[0] -> out_board();
        obj[0] -> test();
    }
    cin.get();
    cin.get();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2013, 20:13     Крестики-нолики, проверка
Посмотрите здесь:

C++ Крестики нолики на С
Крестики-нолики C++
C++ Крестики-нолики
C++ Крестики-нолики
C++ крестики-нолики
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
28.07.2013, 21:54     Крестики-нолики, проверка #2
Просто напиши на бумажке: board [0] [0] board [0] [1] и т.д.
После этого будет наглядно, как изменяются "координаты" и понятно, как реализовать циклы
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
28.07.2013, 22:24     Крестики-нолики, проверка #3
Я делал так: было 3 цикла, по горизонтали, вертикали, диоганаль. переменная count_X and count_О, они считают количество крестиков и ноликов. После каждого прохода, например после строки или столбца, проверялось их количество если один из них равен 3 то игра завершалась, игроку присваивалась победа.
ovner
7 / 7 / 0
Регистрация: 06.10.2012
Сообщений: 140
28.07.2013, 23:14  [ТС]     Крестики-нолики, проверка #4
голова уже не варит, как это поставить на цикл?
C++
1
2
3
4
5
if(board[0][2]=='X'&&board[1][1]=='X'&&board[2][0]=='X' || board[0][0]=='X'&&board[1][1]=='X'&&board[2][2]=='X') cout<<" win"; //диагонали
     
     if(board[0][0]=='X'&&board[0][1]=='X'&&board[0][2]=='X' || board[1][0]=='X'&&board[1][1]=='X'&&board[1][2]=='X' || board[2][0]=='X'&&board[2][1]=='X'&&board[2][2]=='X') cout<<" win"; //горизонталь
    
     if(board[0][0]=='X'&&board[1][0]=='X'&&board[2][0]=='X' || board[0][1]=='X'&&board[1][1]=='X'&&board[2][1]=='X' || board[0][2]=='X'&&board[1][2]=='X'&&board[2][2]=='X') cout<<" win"; //вертикаль
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
29.07.2013, 01:50     Крестики-нолики, проверка #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
for (int i = 0; i < 3; ++i) // горизонталь
        for (int j = 0; j < 3; ++j)
{
if(board[i][j] == X)
            {
                ++count_X;
                count_O = 0;
            }
            else if (board[i][j] == O)
            {
                ++count_O;
                count_X = 0;
            }
            else
            {
                count_O = 0;
                count_X = 0;
            }
            if (count_O == 5)
                return O_Win;
            if(count_X == 5)
                return X_Win;
}
 
count_O = 0;
    count_X = 0;
for (int i = 0; i < 3; ++i) // вертикаль
        for (int j = 0; j < 3; ++j)
{
if(board[j][i] == X)
            {
                ++count_X;
                count_O = 0;
            }
            else if (board[j][i] == O)
            {
                ++count_O;
                count_X = 0;
            }
            else
            {
                count_O = 0;
                count_X = 0;
            }
            if (count_O == 5)
                return O_Win;
            if(count_X == 5)
                return X_Win;
}
X_WIN, O_WIN просто перечисление. enum
Yandex
Объявления
29.07.2013, 01:50     Крестики-нолики, проверка
Ответ Создать тему
Опции темы

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