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

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

Войти
Регистрация
Восстановить пароль
 
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
#1

Крестики нолики - установить факт выигрыша - C++

25.04.2014, 19:02. Просмотров 463. Ответов 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
#include "stdafx.h"
#include "iostream"
#include "time.h"
#include "string"
#include "vector"
using namespace std;
 
class  Matrix
{
private:
    int Width; // длинна
    int Height; //ширина
    char *Body;  // тело матрицы
public:
    Matrix(int w, int h)
    {
        Width = w;
        Height = h;
        Body = new char[w * h];
    }
    ~Matrix()
    {
        delete[] Body;
    }
    //добавляет в массив знчение value
    void Set(int col, int row, double value)
    {
        Body[col * Width + row] = value;
    }
    // достает то что нужно из матрицы
    char Get(int col, int row)
    {
        return Body[col * Width + row];
    }
    // заполняет матрицу единицами
    void SetRand()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                Set(i, j, '.');
            }
        }
    }
    // выводит матрицу на экран
    void Print()
    {
        for (int i = 0; i < Width; i++)
        {
            for (int j = 0; j < Height; j++)
            {
                cout << Get(i, j) << "    ";
            }
            cout << endl;
            cout << endl;
        }
    }
    // заполняет матрицу
    void filling(int t,int t1,char n)
    {
        Set(t, t1, n);
        system("cls");
        Print();
    }
};
 
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    Matrix A(3,3);
    A.SetRand();
    string name1; //имя первого игрока
    string name2; // имя вторго игрока
    cout << "Введите имя первого игрока" << endl << endl;
        cin >> name1;
        cout << endl;
        cout << "Введите имя вторго игрока" << endl << endl;
        cin >> name2;
        cout << endl;
        system("cls");
        int t, t1, n;
    for (int i = 0; i < 9; i++)
    {
        if (i % 2 == 0)
        {
            A.Print();
            cout << "Ходит" <<"   "<< name1 <<" "<< endl << endl;
            cout << "Введите i" << endl << endl;
            cin >> t;
            cout << "Введите j" << endl << endl;
            cin >> t1;
            n = 'X';
            A.filling(t,t1,n);
        }
        if (i % 2 != 0)
        {
            A.Print();
            cout << "Ходит"<<"   " << name2 <<" "<< endl << endl;
            cout << "Введите i" << endl << endl;
            cin >> t;
            cout << "Введите j" << endl << endl;
            cin >> t1;
            n = 'O';
            A.filling(t, t1, n);
        }
 
    }
    system("PAUSE");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2014, 19:02     Крестики нолики - установить факт выигрыша
Посмотрите здесь:

Игра Крестики-Нолики на С++ - C++
Всем привет возникла проблема,программа исправно работает но когда открывается консоль для игры вот у меня пронумерована игровая сетка...

Крестики нолики 5 в ряд - C++
Люди добрые, помогите новичку в написании программы на C++. надо написать крестики-нолики 5 в ряд, без заморочек на интерфейс, (т.е....

Программа крестики и нолики - C++
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;time.h&gt; #include&lt;stdlib.h&gt; #include&lt;dos.h&gt; #include&lt;math.h&gt; int main(void) { ...

И снова крестики-нолики - C++
Привет! Есть код: #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; char PlayerName1, ...

Крестики-нолики на массиве - C++
Здравствуйте! Учу С++ , уже перешел на массивы (http://www.youtube.com/watch?v=0G7-keQKIE4). Автор показывает как реализовать часть игры -...

Крестики-нолики в консоле - C++
Недавно начал изучать С + + и для небольшой практики хотел написать что-то, типа крестики-нолики. программа должна отображать игру в виде...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 19:26     Крестики нолики - установить факт выигрыша #2
kamish77777, сделайте функцию Check в классе, которая после каждого хода проверяла бы 3 строки, 3 столбца и 2 диагонали.

Добавлено через 2 минуты
И массив бы двумерный сделать, а не одномерный.
C++
1
2
3
4
5
6
7
8
    char **Body;  // тело матрицы
    Matrix(int w, int h)
    {
        Width = w;
        Height = h;
        Body = new char*[h];
        for(int i = 0; i<h;i++) Body[i] = new char[w];
    }
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
25.04.2014, 19:31  [ТС]     Крестики нолики - установить факт выигрыша #3
ну я думал что нужно проверять после 5 хода,смысл раньше проверять.А на счет проверки в голову кроме как проверять через if ничего не лезет,100 % есть какой то уже готовый алгоритм)

Добавлено через 2 минуты
А еще вдруг у нас матрица не 3 на 3,а к примеру 4 на 4,тогда такое уже не покатит,очень много if писать)))а если 5 на 5 и больше то там вылезет в 100и ifоф))
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 19:39     Крестики нолики - установить факт выигрыша #4
C++
1
2
3
4
5
6
Check()
{
//Строки
     for(int i = 0; i < Height; i++)
{
}
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
25.04.2014, 19:42  [ТС]     Крестики нолики - установить факт выигрыша #5
не понятно маленько(
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 19:55     Крестики нолики - установить факт выигрыша #6
Отправил случайно...

Вот в таком стиле думаю стоит проверять


Добавлено через 2 минуты
Такой же цикл еще для столбцов и еще над диагоналями надо подумать. В матрице 3 на 3 наверное не стоит придумывать универсальный алгоритм, а так в принципе можно.

Добавлено через 7 минут
один else добавил

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
Check()
{
     int tmp, tmpCnt;
     //Строки
     for(int i = 0; i < Height; i++)
     {
           tmp = 0;
           tmpCnt = 0;
           for(int j = 0; j < width; j++)
           {
                 if(Body[i][j] != tmp && Body[i][j] != '.')
                 { 
                         tmp = Body[i][j]; 
                         tmpCnt = 1;
                 }
                 else if(Body[i][j] == tmp)
                 {
                         tmpCnt++;
                         if(tmpCnt == 3) break;
                 }
                 else if(Body[i][j] == '.')
                 {
                       tmp = 0;
                       tmpCnt = 0; 
                 }
           }
           if(tmpCnt == 3) break;
     }
     if(tmpCnt == 3) cout << "Win " << tmp; 
}
imm
8 / 8 / 2
Регистрация: 25.10.2013
Сообщений: 115
Завершенные тесты: 2
25.04.2014, 19:58     Крестики нолики - установить факт выигрыша #7
Не по теме, но так и не понял, для чего тут звездочка?
C++
1
char *Body
Чисто для себя, не понимаю, что она делает и для чего.
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 20:00     Крестики нолики - установить факт выигрыша #8
imm, обозначает, что это указатель на ячейку оперативной памяти. Может указывать либо на один элемент, либо на начало массива.
kamish77777
0 / 0 / 0
Регистрация: 21.04.2014
Сообщений: 40
25.04.2014, 20:03  [ТС]     Крестики нолики - установить факт выигрыша #9
ну боди,это у нас наш массив,мы же не знаем какого он будет размера,мы его задаем только в main,а для работы в классе,нам необходим указатель))

Добавлено через 57 секунд
спасибо большое за помощь,обязательно попробую подставить все это))
imm
8 / 8 / 2
Регистрация: 25.10.2013
Сообщений: 115
Завершенные тесты: 2
25.04.2014, 20:05     Крестики нолики - установить факт выигрыша #10
Vaiz, а в каких случаях используют это?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2014, 20:13     Крестики нолики - установить факт выигрыша
Еще ссылки по теме:

Графические крестики нолики - C++
Я изучаю с++ и на курсах столкнулся с задачей написать крестики нолики с графическим интерфейсом. Логику игры понимаю и консольную версию...

Крестики нолики на Visual C++ - C++
Пытаюсь написать игру крестики нолики на Visual C++ 6.0 В связи стем что на компьютерных курсах сжатый срок обучения то из - за небольшой...

Крестики-нолики, проверка - C++
Подскажите пожалуйста как тут реализовать проверку по прямой и по диагонали? #include &lt;iostream&gt; #include &lt;cmath&gt; using...

Битовые крестики-нолики - C++
Нужно написать битовую игру в крестики нолики. Поле это int 32-бита, 4х4. Х = 10, О = 11, пустая клетка =00.


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

Или воспользуйтесь поиском по форуму:
Vaiz
104 / 98 / 30
Регистрация: 01.07.2012
Сообщений: 277
Завершенные тесты: 1
25.04.2014, 20:13     Крестики нолики - установить факт выигрыша #11
Цитата Сообщение от imm Посмотреть сообщение
Vaiz, а в каких случаях используют это?
На самом деле часто используется:
- для создания динамических массивов любого размера, с этим обычно сталкиваются в самом начале
- для передачи элементов в функции и т.д., где нужно вносить изменения в элемент, а не в его копию.

Тут можно прочитать целую лекцию, но это будет совсем уж не по теме. Ищите в гугле по ключевым словам "работа с указателями C++"
Yandex
Объявления
25.04.2014, 20:13     Крестики нолики - установить факт выигрыша
Ответ Создать тему
Опции темы

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