三子棋
主文件中内容
//三子棋游戏
#include"game.h"
void menu()
{
printf("********************************\n");
printf("*******1.play 0.exit*******\n");
printf("********************************\n");
}
//整个游戏的算法实现
void game()
{
char board[row][col]={0};
//棋盘的初始化
initBoard(board,row,col);
//打印棋盘
print(board,row,col);
//下棋过程
while(1)
{
//玩家1
player1(board,row,col);
print(board,row,col);
//判断
if(judge(board,row,col)!='C')
{
break;
}
//电脑
computer(board,row,col);
print(board,row,col);
if(judge(board,row,col)!='C')
{
break;
}
}
if(judge(board,row,col)=='@')
{
printf("玩家赢\n");
}
else if(judge(board,row,col)=='#')
{
printf("电脑赢\n");
}
else if(judge(board,row,col)=='Q')
{
printf("平局\n");
}
}
void test()
{
int input=0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择:>");
scanf("%d",&input);
switch(input)
{
case 1:
printf("三子棋\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请从新选择\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
游戏实现主要函数
#include"game.h"
//棋盘初始化
void initBoard(char board[row][col],int a, int b)
{
int i=0,j=0;
for(i=0;i<row;i++)
{
for(j=0;j<row;j++)
{
board[i][j]=' ';
}
}
}
// | |
// ---|---|---
// | |
// ---|---|---
// | |
//棋盘打印
void print(char board[row][col],int a, int b)
{
int i=0,j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(j!=col-1)
{
printf(" %c |",board[i][j]);
}
else
{
printf(" %c \n",board[i][j]);
}
}
for(j=0;j<col;j++)
{
if(i!=row-1)
{
if(j!=col-1)
{
printf("---|",board[i][j]);
}
else
{
printf("---\n",board[i][j]);
}
}
}
}
}
//玩家1
void player1(char board[row][col],int a, int b)
{
int x=0,y=0;
printf("玩家1走\n");
while(1)
{
printf("请输入要下的坐标:>");
scanf("%d%d",&x,&y);
//判断xy的合法性
if(x>=1&&x<=a&&y>=1&&y<=b)
{
if(board[x-1][y-1]==' ')
{
board[x-1][y-1]='@';
break;
}
else
{
printf("该坐标被占用\n");
}
}
else
{
printf("坐标非法,请重新输入!\n");
}
}
}
//玩家2
void player2(char board[row][col],int a, int b)
{
int x=0,y=0;
printf("玩家2走\n");
while(1)
{
printf("请输入要下的坐标:>");
scanf("%d%d",&x,&y);
//判断xy的合法性
if(x>=1&&x<=a&&y>=1&&y<=b)
{
if(board[x-1][y-1]==' ')
{
board[x-1][y-1]='#';
break;
}
else
{
printf("该坐标被占用\n");
}
}
else
{
printf("坐标非法,请重新输入!\n");
}
}
}
//电脑
void computer(char board[row][col],int a, int b)
{
int x=0,y=0;
printf("电脑走:>\n");
while(1)
{
x=rand()%a;
y=rand()%b;
if(board[x][y]==' ')
{
board[x][y]='#';
break;
}
}
}
//返回1表示棋盘已满
int full(char board[row][col],int a, int b)
{
int i=0,j=0;
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
if(board[i][j]==' ')
return 0;
}
}
return 1;
}
//判断输赢的函数,返回C则继续,返回Q则平局,返回@玩家赢,返回#电脑赢
char judge(char board[row][col],int a, int b)
{
int i=0;
//判断横三行
for(i=0;i<a;i++)
{
if(board[i][0]==board[i][1]&&board[i][2]==board[i][1]&&board[i][1]!=' ')
{
return board[i][1];
}
}
//判断竖三列
for(i=0;i<b;i++)
{
if(board[1][i]==board[2][i]&&board[1][i]==board[0][i]&&board[1][i]!=' ')
{
return board[1][i];
}
}
if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[1][1]!=' ')
{
return board[1][1];
}
if(board[2][0]==board[1][1]&&board[1][1]==board[0][2]&&board[1][1]!=' ')
{
return board[1][1];
}
//判断是否平局
if (1==full(board,a,b))
{
return 'Q';
}
return 'C';
}
头文件
#include<stdio.h>
#include<stdlib.h>//rand()的头文件
#include<time.h>//time()的头文件
#define row 3
#define col 3
//函数的声明
void initBoard(char board[row][col],int a, int b);
void print(char board[row][col],int a, int b);
void player1(char board[row][col],int a, int b);
void player2(char board[row][col],int a, int b);
void computer(char board[row][col],int a, int b);
char judge(char board[row][col],int a, int b);
最后
三子棋游戏逻辑简单,很适合练手。