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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
#1

крестик-нолик-условие ничьи - C++

26.11.2010, 23:22. Просмотров 1369. Ответов 3
Метки нет (Все метки)

как написать условие ничьи для игры крестики нолики?
Если рассмотреть доску как матрицу,то я смог написать условие только для самого первого элемента
C++
1
2
3
4
5
6
7
 
if(x[i][j]!=x[i+1][j] && x[i][j]!=x[i][j+1] && x[i][j]!=x[i+1][j+1])
        {
        cout<<"ничья!"<<endl;
    
        return 1;
        }
то есть проверяет,если справа,снизу и по диагонали нету похожее число(я вместо Х пишу 1 вместо 0 пишу 2) то выводит на экран НИЧЬЯ
если написать условие для центрального элемента,то думаю на всех заработает...хотя для первого элемента нету соседа слева.Или сверху. Вобщем как написать условие?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2010, 23:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос крестик-нолик-условие ничьи (C++):

крестик-нолик - функция пoбеды - C++
Ну кто же!!! Помогите,функция проверки на победу не работает нормально! Даже коменты написал что бы не запутаться...помогите. вот...

крестик-нолик - функция победы - C++
пишу игру крестики нолики. функция bool win(int x; порверят на каждом шагу наличие на победу. Как мне писать грамотно условие...

Интеллект компьютера в игре Крестик-Нолик - C++
вот написал себе игру крестик нолик. Все нормально получилось. Просто вот не могу объяснить компьютеру как правильно думать. У меня есть...

Игра крестики-нолик - C++
Пишу игру крестики-нолики с хоть каким-то ИИ. Есть функция bot_attack и функция bot_def bool Game::bot_attack() { ...

Список, выводит лишний нолик - C++
Задание таково: Внести значения, выбрать количество элементов которые должны вывестись на экран с конца списка. Я почти решил но есть...

Как сделать, так, чтобы ряд действий в программе выполнялся до тех пор, пока пользователь не нажмёт на крестик - C++
Как сделать, так, чтобы ряд действий в программе выполнялся до тех пор, пока пользователь не нажмёт на крестик? Я работаю в программе...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Crudelis
Шаровик затейник
674 / 416 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
26.11.2010, 23:27 #2
создайте счетчик который считает добавление крестиков или ноликов и при добавлении крестика или 0 проверяйте равен ли он 9
1
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
27.11.2010, 12:12  [ТС] #3
Crudelis, эмм...а где именно
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <iostream>
#include <time.h>
#include <windows.h>
#include <math.h>
#include <D:\\alex\\head-files\\mathem.h>
#include <D:\\alex\\head-files\\kurs.h>
#include <D:\\alex\\head-files\\factorial.h>
using namespace std;
const int n=3;  //матрица
//объявление функций
void inp(int x[][n]);//функция ввода
void out(int x[][n]);//функиця вывода матрицы
bool win(int x[][n]);//проверка на победу/проигрыш/ничью
void comp(int x[][n]);//функция интелекта компьютера
 
 
 
 
void main()
{
    int x[n][n]={0};    //инициализованная матрица
    while(true) //бесконечный цикл
{
    out(x); //вывод матрицы
    inp(x); //ввод крестика в матрицу
    if(win(x)==1)//если конец игры
    {
        out(x);         //вывод
        win(x);         //выводит либо победителя либо ничья
        break;          //остановка цикла-игры
    }
        comp(x);    //если не конец игры,то ход компьютера
    }
}
 
void inp(int x[][n])
{
    int i=0,j=0;
loop: //цикл
    //вводим координаты-где будет Х
    cout<<"i=";
    cin>>i;
    cout<<"j=";
    cin>>j;
    if(x[i][j]==0)//если не занято то присвоить Х
    x[i][j]=1;
    else
    {
        cout<<"WRONG,TRY AGAIN"<<endl; //или же повторить ход сначала
        goto loop;
    }
}
 
void out(int x[][n]) //функция вывода матрицы
{
        system("cls");//заранее экран очищяется
    cout<<endl;
for(int i=0;i<n;i++)
{
    for(int j=0;j<n;j++)
        cout<<x[i][j]<<" ";
    cout<<endl;
}
cout<<endl;
    
}
 
bool win(int x[][n])//функция проверки игры
{
 
        for(int i = 0; i < n; i++)
        if(x[i][0] == x[i][1] && x[i][0] == x[i][2] && x[i][0]!=0)//Проверка i-ой линии
        {
        if(x[i][0]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[i][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
 
     for(int i = 0; i < n; i++)
        if(x[0][i] == x[1][i] && x[0][i] == x[i][2]  && x[0][i]!=0)//Проверка столбца
     {
        if(x[i][0]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[i][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
 
 
     if(x[0][0] == x[1][1] && x[1][1] == x[2][2]  && x[0][0]!=0)//Проверка главной диагонали
         {
        if(x[0][0]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[0][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
 
 
 
     if(x[0][2] == x[1][1] && x[1][1] == x[2][0]  && x[0][2]!=0)//Проверка побочной диагонали
        {
        if(x[1][1]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[1][1]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
         
     if(x[0][0] == x[1][0] && x[0][0] == x[2][0]  && x[0][2]!=0)//проверка первого столбца
        {
        if(x[0][0]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[0][0]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
 
      if(x[0][1] == x[1][1] && x[0][1] == x[2][1]  && x[2][1]!=0)//Проверка второго столбца
        {
        if(x[0][1]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[0][1]==2)cout<<"YOU LOSE!!!!!!"<<endl;
        return 1;
        }
 
 
    
     return 0;
}
 
 
 
void comp(int x[][n])//Ход компьютера. Если рядом с крестиком есть крестик,то рядом с другим крестиком написать 0
 
{
    int a=0,b=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {           
rrand:      a=rand()%2;
            b=rand()%2;
            if(x[a][b]==0)x[a][b]=2;
            else goto rrand;
            i=n;
                j=n;
        }
}
0
Crudelis
Шаровик затейник
674 / 416 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
27.11.2010, 16:24 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void main()
{
        int x[n][n]={0};        //инициализованная матрица
        int count = 0;
        while(count!=9) //бесконечный цикл
{
        out(x); //вывод матрицы
        inp(x); //ввод крестика в матрицу
        count++;
        if(win(x)==1)//если конец игры
        {
                out(x);                 //вывод
                win(x);                 //выводит либо победителя либо ничья
                break;                  //остановка цикла-игры
        }
                comp(x);        //если не конец игры,то ход компьютера
        }
if(count==9)
cout<<"НИЧЬЯ";
}
ход человека мы считаем, далее нужно переделать функцию хода компьютера:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void comp(int x[][n],int *count)//Ход компьютера. Если рядом с крестиком есть крестик,то рядом с другим крестиком написать 0
 
{
        int a=0,b=0;
        for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                {                       
rrand:          a=rand()%2;
                        b=rand()%2;
                        if(x[a][b]==0)x[a][b]=2;
                        else goto rrand;
                        i=n;
                                j=n;
                }
count++;
}
вызов функции:
C++
1
comp(x,&count);
передаем по ссылке, чтоб его значение менялось и в main()
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2010, 16:24
Привет! Вот еще темы с ответами:

Как из еденички сделать нолик - C (СИ)
здравствуйте. мне надо при происхождении события менять некоторое число. типа есть число х=0, происходит событие и х=1, опять происходит...

Съезжает крестик - C# WPF
Какая то непонятная фигня происходит. Я делаю для TabControl-а вкладку с крестиком закрывающим. Делаю отдельным контролом. Но когда пытаюсь...

Крестик на звуке - Windows 10
добрый день. звука нет. драйвера менял. наушники и колонки рабочие. случилось после попытки вставить наушники и проверить рабочий ли...

Нарисовать крестик - Delphi
Всем привет подскажите как нарисовать на экране средствами Delphi крестик? не в окне программы а на самом экране?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.11.2010, 16:24
Ответ Создать тему
Опции темы

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