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

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

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

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

26.11.2010, 23:22. Просмотров 1312. Ответов 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) то выводит на экран НИЧЬЯ
если написать условие для центрального элемента,то думаю на всех заработает...хотя для первого элемента нету соседа слева.Или сверху. Вобщем как написать условие?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2010, 23:22     крестик-нолик-условие ничьи
Посмотрите здесь:

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

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

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

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

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

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

Условие - C++
Извиняюсь за данную тему, просто я чайник ,скажите что значит это условие? char buf; if(*buf=='0') *buf=0;

Условие - C++
подскажите пожалуйста как можно сделать условие: если одно из нескольких равно N, то ......

условие - C++
Если сумма трех попарно-различный действительных чисел x, y,z, меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух...

Условие - C++
Помогите составить условие: if (0=pow(x,s)+1) Выдаёт: error: lvalue required as left operand of assignment

условие - C++
Ответ скорее всего прост,но не могу придумать никак #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; int fact(int...

условие в if - C++
у меня есть условие if (str!='0' &amp;&amp; str!='1' &amp;&amp; str!='2' &amp;&amp; str!='3' &amp;&amp; str!='4' &amp;&amp; str!='5' &amp;&amp; str!='6' &amp;&amp; str!='7' &amp;&amp; str!='8' &amp;&amp;...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Crudelis
Шаровик затейник
672 / 414 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
26.11.2010, 23:27     крестик-нолик-условие ничьи #2
создайте счетчик который считает добавление крестиков или ноликов и при добавлении крестика или 0 проверяйте равен ли он 9
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 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;
        }
}
Crudelis
Шаровик затейник
672 / 414 / 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()
Yandex
Объявления
27.11.2010, 16:24     крестик-нолик-условие ничьи
Ответ Создать тему
Опции темы

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