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

крестик-нолик - функция пoбеды - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить системное время http://www.cyberforum.ru/cpp-beginners/thread202273.html
здравствуйте. как/с помощью какой функции можно полям своей структуры присвоить значения, соответствующих системным дате и времени?
C++ Язык С.Программирование обработки структур данных. Всем добрый вечер! народ это для меня сложновато заранее всем спасибо.emal.t.bekzat_ismail@mail.ru Тема:Программирование задач обработки структур данных. Цель лабораторной работы:получить навыки... http://www.cyberforum.ru/cpp-beginners/thread202269.html
C++ Одномерные массивы на Visual C++ 2008 : я новичек HELP
Задача №1 Сформировать одномерный массив целых чисел, используя датчик случайных чисел и выполнить задание c использованием индексов: Условие: Удалить элементы, индексы которых кратны 3. Добавить...
C++ Три задачи на матрицы
здавствуйте, помогите пожалуйстарешить пару задачек оч надо: 1) найти номер перого максимального элемента среди элементов, лежащего в диапазоне от а до в и расположенных правее первого...
C++ Восьмимерка: поиск вектора в матрице http://www.cyberforum.ru/cpp-beginners/thread202260.html
Дана матрица и вектор (могут быть любых размеров). Найти в матрице линейную последовательность элементов, совпадающих с элементами данного вектора, причем вектор может располагаться по любому из...
C++ rand() генератор случайных чисел rand() подскажите пожелуста как работает ета штука. что означает %200, %200-100. какой принцип роботы подробнее

Показать сообщение отдельно
AnonymC
1173 / 455 / 28
Регистрация: 23.06.2009
Сообщений: 6,341
Завершенные тесты: 1

крестик-нолик - функция пoбеды - C++

02.12.2010, 20:32. Просмотров 1302. Ответов 17
Метки (Все метки)

Ну кто же!!!
Помогите,функция проверки на победу не работает нормально!
Даже коменты написал что бы не запутаться...помогите.
вот если крестики(или нолики) будут весь первый ряд, то есть первая вертикаль,то как я понял получается бесконечный цикл..то есть ничего не выводится и нельзя что-либо вводить
В чем проблема?
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
#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;          //остановка цикла-игры
    }
        else 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 if(i>2 || j>2 || i<0 || j<0 || x[i][j]!=0)
    {
        cout<<"WRONG,TRY AGAIN"<<endl; //или же повторить ход сначала
        goto loop;
    }
}
void out(int x[][n]) //функция вывода матрицы
{
        system("cls");//заранее экран очищяется
    cout<<endl;
for(int i=0;i<1;i++)
{
        for(int m=0;m<n;m++)
            cout<<"_____";
    cout<<endl;
}
for(int i=0;i<n;i++)
{
    for(int j=0;j<n;j++){
        
            if(x[i][j]==1)
        cout<<"I"<<" X "<<"I";
            else if(x[i][j]==2)
                cout<<"I"<<" 0 "<<"I";
            else if(x[i][j]==0)
                cout<<"I"<<"   "<<"I";      
        }
    cout<<endl;
    for(int m=0;m<n;m++)
            cout<<"_____";
    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[0][i]==1)cout<<"YOU WON!!!!!!"<<endl;
        else if(x[0][i]==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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru