您的位置:首页 > 编程语言 > C语言/C++

c语言简单实现三子棋

2017-10-11 20:01 561 查看
利用3*3的数组,简单实现三子棋

Game.h文件

#ifndef __GAME_H__
#define __GAME_H__

#define ROWS 3
#define COLS 3

#include<stdio.h>
#include<stdlib.h>
#include <time.h>
#include<string.h>

void init_board(char arr1[ROWS][COLS], int row,int  col);
void display_board(char arr1[ROWS][COLS], int row, int  col);
void player_move(char arr1[ROWS][COLS], int row, int  col);
void computer_move(char arr1[ROWS][COLS], int row, int  col);
char check_win(char arr1[ROWS][COLS], int row, int  col);

#endif


Game.c文件

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

void display_board(char arr1[COLS][ROWS],int col,int row)
{
int i = 0;
printf("-------------\n");
for (i=0;i<row;i++)
{
printf("| %c | %c | %c |\n", arr1[i][0], arr1[i][1], arr1[i][2]);
if (i != row - 1)
printf("|---|---|---|\n");
else if (i == row - 1)
printf("-------------\n");
}
}
void player_move(char arr1[COLS][ROWS],int col,int row)
{
int x = 0;
int y = 0;
while (1)
{
printf("请输入你想下的坐标:>");
scanf("%d%d", &x, &y);
x--;
y--;
if ((x>=0) && (x<=row-1) && (y>=0) && (y<=col-1))
{
if (arr1[x][y] == ' ')
{
arr1[x][y] = 'X';
break;
}
else
{
printf("坐标已被占用,请重新输入:>\n");
}
}
}
}
void computer_move(char arr1[ROWS][COLS], int row, int  col)
{
int i = 0;
int j = 0;
while (1)
{
for (i = 0; i < row; i++)
{
if ((arr1[i][0] == arr1[i][1]) && (arr1[i][1] == '0') && (arr1[i][2]) == ' ')
{
arr1[i][2] = '0';
goto END;
}
else if ((arr1[i][1] == arr1[i][2]) && (arr1[i][2] == '0') && (arr1[i][0]) == ' ')
{
arr1[i][0] = '0';
goto END;
}
else if ((arr1[i][0] == arr1[i][2]) && (arr1[i][2] == '0')  && (arr1[i][1]) == ' ')
{
arr1[i][1] = '0';
goto END;
}

}
for (i = 0; i < col; i++)
{
if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == '0')  && (arr1[2][i]) == ' ')
{
arr1[2][i] = '0';
goto END;
}
else if ((arr1[1][i] == arr1[2][i]) && (arr1[2][i] == '0') && (arr1[0][i]) == ' ')
{
arr1[0][i] = '0';
goto END;
}
else if ((arr1[0][i] == arr1[2][i]) && (arr1[2][i] == '0')  && (arr1[2][i]) == ' ')
{
arr1[1][i] = '0';
goto END;
}
}
if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == '0') && (arr1[2][2] == ' '))
{
arr1[2][2] = '0';
break;
}
if ((arr1[1][1] == arr1[2][2]) && (arr1[1][1] == '0') && (arr1[0][0] == ' '))
{
arr1[0][0] = '0';
break;
}
if ((arr1[0][0] == arr1[2][2]) && (arr1[2][2] == '0')  && (arr1[1][1] == ' '))
{
arr1[1][1] = '0';
break;
}
if ((arr1[0][2] == arr1[1][1]) && (arr1[1][1] == '0')  && (arr1[2][0] == ' '))
{
arr1[2][0] = '0';
break;
}
if ((arr1[0][2] == arr1[2][0]) && (arr1[2][0] == '0') && (arr1[1][1] == ' '))
{
arr1[1][1] = '0';
break;
}
if ((arr1[1][1] == arr1[2][0]) && (arr1[1][1] == '0') && (arr1[0][2] == ' '))
{
arr1[0][2] = '0';
break;
}
for (i = 0; i < row; i++)
{
if ((arr1[i][0] == arr1[i][1]) && (arr1[i][1] == 'X') && (arr1[i][2]) == ' ')
{
arr1[i][2] = '0';
goto END;
}
else if ((arr1[i][1] == arr1[i][2]) && (arr1[i][2] == 'X') && (arr1[i][0]) == ' ')
{
arr1[i][0] = '0';
goto END;
}
else if ((arr1[i][0] == arr1[i][2]) && (arr1[i][2] == 'X') && (arr1[i][1]) == ' ')
{
arr1[i][1] = '0';
goto END;
}

}
for (i = 0; i < col; i++)
{
if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == 'X') && (arr1[2][i]) == ' ')
{
arr1[2][i] = '0';
goto END;
}
else if ((arr1[1][i] == arr1[2][i]) && (arr1[2][i] == 'X') && (arr1[0][i]) == ' ')
{
arr1[0][i] = '0';
goto END;
}
else if ((arr1[0][i] == arr1[2][i]) && (arr1[2][i] == 'X') && (arr1[2][i]) == ' ')
{
arr1[1][i] = '0';
goto END;
}
}
if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == 'X') && (arr1[2][2] == ' '))
{
arr1[2][2] = '0';
break;
}
if ((arr1[1][1] == arr1[2][2]) && (arr1[1][1] == 'X') && (arr1[0][0] == ' '))
{
arr1[0][0] = '0';
break;
}
if ((arr1[0][0] == arr1[2][2]) && (arr1[2][2] == 'X') && (arr1[1][1] == ' '))
{
arr1[1][1] = '0';
break;
}
if ((arr1[0][2] == arr1[1][1]) && (arr1[1][1] == 'X') && (arr1[2][0] == ' '))
{
arr1[2][0] = '0';
break;
}
if ((arr1[0][2] == arr1[2][0]) && (arr1[2][0] == 'X') && (arr1[1][1] == ' '))
{
arr1[1][1] = '0';
break;
}
if ((arr1[1][1] == arr1[2][0]) && (arr1[1][1] == 'X') && (arr1[0][2] == ' '))
{
arr1[0][2] = '0';
break;
}
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (arr1[x][y] == ' ')
{
arr1[x][y] = '0';
break;
}
}
END: break;
}

}
void init_board(char arr1[COLS][ROWS],int col,int row)
{
memset(arr1, ' ', sizeof(arr1[0][0])*row*col);
}

static int is_full(char arr1[ROWS][COLS], int row, int  col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
if (arr1[i][j] == ' ')
return 0;
}
}
return 1;
}

char check_win(char arr1[ROWS][COLS],int row,int  col)
{
int i = 0;
for (i = 0; i < row; i++)
{
if ((arr1[i][0] == arr1[i][1]) &&(arr1[i][1] == arr1[i][2]) && (arr1[i][1] != ' '))
{
return arr1[i][2];
}
}
for (i = 0; i < col; i++)
{
if ((arr1[0][i] == arr1[1][i]) && (arr1[1][i] == arr1[2][i]) && (arr1[1][i] != ' '))
{
return arr1[1][i];
}
}
if ((arr1[0][0] == arr1[1][1]) && (arr1[1][1] == arr1[2][2]) && (arr1[1][1] != ' '))
{
return arr1[1][1];
}
if ( (arr1[0][2] == arr1[1][1]) && (arr1[1][1] == arr1[2][0])&& (arr1[2][0] != ' '))
{
return arr1[1][1];
}
if(is_full(arr1, row, col))
{
return 'q';
}
return ' ';
}


Test.c文件

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void mnue()
{
printf("\n");
printf("\t\t\t\t\t***********欢乐三子棋***********\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t*       1.开始   0.退出        *\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t*                              *\n");
printf("\t\t\t\t\t********************************\n");
}

void play_game()
{
int ret = 0;
char arr[ROWS][COLS] = { 0 };
init_board(arr, ROWS, COLS);
display_board(arr, ROWS, COLS);
while(1)
{
player_move(arr, ROWS, COLS);
display_board(arr, ROWS, COLS);
ret = check_win(arr, ROWS, COLS);
if (ret != ' ')
break;
printf("电脑输入:>\n");
computer_move(arr, ROWS, COLS);
display_board(arr, ROWS, COLS);
ret = check_win(arr, ROWS, COLS);
if (ret != ' ')
break;
}
if (ret == 'X')
{
printf("玩家赢!\n");
}
else if (ret == '0')
{
printf("电脑赢!\n");
}
else
{
printf("平局!\n");
}
}

int  main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
mnue();
printf("请输入你的选择:>");
scanf("%d",&input);
switch(input)
{
case 1:
play_game();
break;
case  0:
break;
default:
break;
}

}while(input);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: