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

Интеллект компьютера в игре Крестик-Нолик - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выполнить сортировку по убыванию. Пирамидальная сортировка http://www.cyberforum.ru/cpp-beginners/thread1136392.html
Выполнить сортировку по убыванию. Пирамидальная сортировка и сортировка слияния. Размерность массива меняется от 10 до 100 шагом 10. Массив заполнен случайным образом (неупорядочен). template< class T > void downHeap(T a, long k, long n) { // процедура просеивания следующего элемента // До процедуры: a...a - пирамида // После: a...a - пирамида T new_elem;
C++ Проверить что цифры данного трехзначного числа образуют возрастающую последовательность 1 Проверить истинность высказывания: "Цифры данного трехзначного числа образуют возрастающую последовательность" помогите написать программу :( Добавлено через 29 минут Что не кто не знает? мне надо с операторами if , else http://www.cyberforum.ru/cpp-beginners/thread1136332.html
Определить попадание произвольной точки в заштрихованную область C++
Помогите пожалуйста, не могу сделать эту задачу (С++)
Определить количество элементов файла, величина которых меньше среднего арифметического всех элементов данного файла C++
В файле находятся вещественные числа. Определить количество элементов файла, величина которых меньше среднего арифметического всех элементов данного файла. Мой код, который следует дополнить, пока выглядит вот так: #include <stdio.h> #include <conio.h> int main() { int n,i; float m; char str,str1,ch;
C++ Вычислить значение заданной функции y = f(x) на данном интервале [a,b] с заданным шагом \Delta x http://www.cyberforum.ru/cpp-beginners/thread1136303.html
Вычислить значение заданной функции y = f(x) на данном интервале с заданным шагом \Delta X y=ln\frac{x+1}{x} x\epsilon \Delta x=0.5 Напишите программу пожалуйста =*
C++ Словари и множества. SET MAP Помогите с задачей Пишите задачу в тело сообщения! подробнее

Показать сообщение отдельно
^Tecktonik_KiLLeR
 Аватар для ^Tecktonik_KiLLeR
1144 / 426 / 19
Регистрация: 23.06.2009
Сообщений: 6,141
Завершенные тесты: 1
01.04.2014, 22:47     Интеллект компьютера в игре Крестик-Нолик
вот написал себе игру крестик нолик. Все нормально получилось. Просто вот не могу объяснить компьютеру как правильно думать.
У меня есть схема тактики в игре.
Вот:Интеллект компьютера в игре Крестик-Нолик
А вот и сам код
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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <time.h>
using namespace std;
 
void out(int board[][3], int);  //Matrix print
int CFW(int board[][3], int);   //Check For Win
void CT(int board[][3], int,char,bool); //Computer turn
void UT(int board[][3], int);   //User turn
int main()
{
    srand(time(NULL));
    char turn;  //Начальный спрос, игра юзера или компьюера
    bool first=true;    
    const int a=3;  //размер матрицы
    int board[a][a];    //сама матрица
    for(int i=0;i<a;i++)
        for(int j=0;j<a;j++)
            board[i][j]=0;  // обнуление служит для пустой доски. 0-пустой квадрат, 1-крестик юзера, 2-ноль компьютера
    out(board,a);
    trn: cout<<"Your first turn? y/n: ";    //кто первым начнет
    cin>>turn;
    if(turn=='y' || turn=='n');
    else
    {
        cout<<"Illegal symbol."<<endl;
        goto trn;
    }
    system("cls");
    //Game Start
    while(true)
    {
        cout<<"KRESTIK NOLIK"<<endl;    
        if(CFW(board,a))    //Проверка на случай ничьи
            break;      // конец цикла
        if(turn=='y')
        {
        //ход игрока
        out(board,a);
        UT(board,a);
        //ход компьютера
        CT(board,a,turn,first);
        }
        else
        {
        //comp turn
        CT(board,a,turn,first); 
        out(board,a);
        //user turn
        UT(board,a);            
        }       
        system("cls");
        first=false;    //после этого уже не первый ход
    }
    out(board,a);
    if(CFW(board,a)==1)
        cout<<endl<<"YOU WIN!!!"<<endl;
    else if(CFW(board,a)==2)
        cout<<endl<<"YOU LOSE!!!"<<endl;
    else
        cout<<endl<<"DRAW"<<endl;
    system("pause");
    return 0;
}
 
void out(int board[][3], int a)
{
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<a;j++)
        {
            if(board[i][j]==0)
            cout<<"| ";
            else if(board[i][j]==1)
                cout<<"|X";
            else if(board[i][j]==2)
                cout<<"|0";
        }
        cout<<"|"<<endl;
    }
}
int CFW(int board[][3], int a)
{
    for(int i=0;i<a;i++)
    {
        if(board[i][0]==board[i][1]
        && board[i][1]==board[i][2]
        && board[i][2]==1) // user win 
            return 1;       
    }
 
    for(int i=0;i<a;i++)
    {
        if(board[0][i]==board[1][i]
        && board[1][i]==board[2][i]
        && board[2][i]==1) // user win 
            return 1;       
    }
 
    if(board[0][0]==board[1][1]
    && board[1][1]==board[2][2]
    && board[2][2]==1)  //user win
        return 1;
    if(board[0][2]==board[1][1]
    && board[1][1]==board[2][0]
    && board[1][1]==1)  //user win
        return 1;
 
 
    ////////////////////////
 
 
    for(int i=0;i<a;i++)
    {
        if(board[i][0]==board[i][1]
        && board[i][1]==board[i][2]
        && board[i][2]==2) // comp win 
            return 2;       
    }
 
    for(int i=0;i<a;i++)
    {
        if(board[0][i]==board[1][i]
        && board[1][i]==board[2][i]
        && board[2][i]==2) // comp win 
            return 2;       
    }
 
    if(board[0][0]==board[1][1]
    && board[1][1]==board[2][2]
    && board[2][2]==2)  //comp win
        return 2;
    if(board[0][2]==board[1][1]
    && board[1][1]==board[2][0]
    && board[1][1]==2)  //comp win
        return 2;
 
    return 0;   //draw
}
void UT(int board[][3], int a)
{
    int x,y;
    loop: cin>>x>>y;
        x--;y--;        //пользователь не будет вводит координаты типа 0.0, а 1.1
        if(board[x][y]==0)
        board[x][y]=1;
        else
        {
            cout<<"again!"<<endl;
            goto loop;
        }
}
void CT(int board[][3],int a,char turn,bool first)
{
    //first turn
    int r;
    int c;  
    if(turn=='n' && first==true)
    {
        r=rand()%5;
        if(r==0)
            board[0][0]=2;
        else if(r==1)
            board[0][2]=2;
        else if(r==2)
            board[2][0]=2;
        else if(r==3)
            board[2][2]==2;
        else if(r==4)
            board[1][1]==2;
        return;
    }
 
 
    //вот здесь уже компьютер играет "рандом"-не думает
    random: r=rand()%3;
            c=rand()%3;
    if(board[r][c]!=0)
        goto random;
    else
        board[r][c]=2;
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru