Крестики Нолики на C++

Пример игры Крестики-Нолики на С++ (cpp). Консольный вариант игры, который был разработан на С++. В примере играем с ботом (компьютером).

[php]
#include<iostream>
#include <fstream>
#include<conio.h>
#include <ctime>

using namespace std;

char board[9]={‘ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘,’ ‘};
char v;
int choice=0;
int hod=1;
int winx=0;
int wino=0;
int nwin=0;

void savein(void)
{
ifstream input_file("save.txt");
input_file >> winx >> wino>> nwin;
input_file.close();
return;
}

void saveout(void){
ofstream fout("save.txt");
fout <<winx<<‘ ‘;
fout <<wino<<‘ ‘;
fout <<nwin;
fout.close();
return;
}

void bot_proverka(void) {

int pred_win[][3]={{6,4,2},{6,2,4},{4,2,6},{8,4,0},{8,0,4},{4,0,8},{8,5,2},
{2,8,5},{2,5,8},{4,7,1},{1,7,4},{1,4,7},{6,3,0},{0,6,3},{0,3,6},{0,1,2},
{1,2,0},{0,2,1},{3,4,5},{4,5,3},{3,5,4},{6,7,8},{7,8,6},{6,8,7}};

for(int i=0;i<24;i++){
int j=0;
if(board[pred_win[i][j]]==board[pred_win[i][j+1]] && board[pred_win[i][j+1]]!=’

‘&&board[pred_win[i][j+2]]==’ ‘ ) {
choice=pred_win[i][j+2];
return;
}
}

}

void bot(void){
srand(time(0));
choice=-1;
bot_proverka();
if (choice==-1){
choice=rand()%9;
}
return;
}

void pole(void) {
cout<<"\n\n\n";
cout<<" Игровое поле: "<<"\n";
cout<<" "<<board[6]<<" | "<<board[7]<<" | "<<board[8]<<endl;
cout<<" | | "<<endl;
cout<<" "<<board[3]<<" | "<<board[4]<<" | "<<board[5]<<endl;
cout<<" | | "<<endl;
cout<<" "<<board[0]<<" | "<<board[1]<<" | "<<board[2]<<endl;
cout<<"\n\n";
return;
}

bool win(char player) {

int win[][3]={{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};

for(int i=0;i<8;i++){
int count =0;
for(int j=0;j<3;j++){
if(board[win[i][j]]== player) {
count++;
if(count==3){
return true;
}
}
}

}
return false;
}

void get_win(void){
if(win(‘X’)){
cout<<"\n\n\n Поздравляю! Победитель X"<<"\n\n\a";
winx++;
}else if(win(‘O’)){
cout<<"\n\n\n Поздравляю! Победитель O"<<"\n\n\a";
wino++;
}
return;
}

bool nowin(){
if(hod>9){
nwin++;
return true;
}else{return false;}
}

void print_xod(void) {

if ((board[choice]==’ ‘)&&(choice<9)) //Проверка на возможность хода
{
if (hod % 2==0) { //Ход крестика(1 игрок)
board[choice]=’X’;
system("cls");};
if (hod % 2!=0) { //Ход нолика(2 игрок)
board[choice]=’O’;
system("cls");}
} else { //Если ход не возможен
hod-=1;
system("cls");
}

return;
}

void xod(void) {

//char a[1];
hod+=1;

if (hod % 2==0) {
cout<<" Ходит игрок X:";
cin>>choice;
choice=choice-1;
//cin>>a;
//choice = atoi(a)-1;
}
if (hod % 2!=0) {
if (v==’1′){
bot();
}else{
cout<<" Ходит игрок O:";
cin>>choice;
choice=choice-1;
//cin>>a;
//choice = atoi(a)-1;
}
}

print_xod();

return;
}

void question(void) {

while(v!=’1′ && v!=’2′){
cout<<"\n"<<" Вы играете вдвоем или один? ";
cin>>v;
if ((v!=’1′) && (v!=’2′)){
}
system("cls");
cout<<"\n"<<" ERORS"<<"\n\n";
}
system("cls");
return;
}

void stat(void){
cout<<" Последний ход на доске:"<<"\n";
pole();
cout<<"\n";
cout<<"Побед у X:"<<winx<<" "<<"Побед у O:"<<wino<<" "<<"Ничья:"<<nwin<<"\n";
return;
}

bool Restart() {
char s=’ ‘;

while(s!=’Y’&&s!=’N’){
cout<<"\n"<<" Играем? Y/N: ";
cin>>s;
system("cls");
}
for(int i=0;i<9;i++){
board[i]=’ ‘;
}
v=’ ‘;
hod=1;
if(s==’Y’){
system("cls");
return true;
}else {
return false;;
}
}

void save(){
char g;
cout<<"\n"<<" Хотите загрузить прошлую статистику? "<<"\n";
cout<<" Для того что бы загрузить нажмите Y"<<"\n";
cin>>g;
if(g==’Y’){
savein();}
system("cls");
return;
}

void help(void) {
cout<<"\n\n\n";
cout<<" Игровое поле: "<<"\n";
cout<<" "<<7<<" | "<<8<<" | "<<9<<endl;
cout<<" | | "<<endl;
cout<<" "<<4<<" | "<<5<<" | "<<6<<endl;
cout<<" | | "<<endl;
cout<<" "<<1<<" | "<<2<<" | "<<3<<endl;
cout<<"\n\n";
return;
}

void start(void){
setlocale(LC_ALL, "rus");
save();
cout<<"\n"<<" Вы играете в Крестики Нолики! "<<"\n"<<"\n";
help();
return;}

void game(void){
do{
question();
while((!win(‘X’) && !win(‘O’))&&!nowin()){

pole();
xod();
}
get_win();
stat();
}while(Restart());
return;
}

int main(){
start();
game();
saveout();
return(0);
}

[/php]

1 Star2 Stars3 Stars4 Stars5 Stars (8 голосов, средний:5,00 из 5)
Вы можете пропустить чтение записи и оставить комментарий. Размещение ссылок запрещено.
Оставить комментарий