先简单介绍一下三子棋的规则,方便我们接下来的编程和理解。规则如下:
在九宫格棋盘上,只要将自己的三个棋子走成一条线(横、竖、对角线),对方就算输了。
规则很简单,但是我们应该从哪里入手完成这个三子棋程序呢?
首先,我们的游戏程序应该先有个菜单页面,这个菜单页面用来让用户操作选择玩游戏,或是退出。
界面可以很简单,只需要几条 printf 语句即可。
这里我们尽可能用函数来完成游戏的功能:
game.h
#define _CRT_SECURE_NO_WARNINGS 1
#ifndef __GAME_H__
#define __GAME_H__
#include
#include
#include
#include
#define ROW 3
#define COL 3
void menu();
void playgame();
void showchess(char chess[ROW][COL],int row,int col);
void printfchess(char chess[ROW][COL],int row,int col);
void playermove(char chess[ROW][COL],int row,int col);
void computermove(char chess[ROW][COL],int row,int col);
char iswin(char chess[ROW][COL],int row,int col);
#endif//__DAME_H__
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void showchess(char chess[ROW][COL],int row,int col)
{
memset(&chess[0][0],' ',row*col*sizeof(char));
}
void printfchess(char chess[ROW][COL],int row,int col)
{
int i=0;
int j=0;
int m=0;
int n=0;
for(i=0;i ");
while(1)
{
scanf("%d%d",&x,&y);
if(x>=1&&x<=row&&y>=1&&y<=col)
{
if(chess[x-1][y-1]==' ')
{
chess[x-1][y-1]='X';
break;
}
else
{
printf("此坐标已有棋子,请重新选择!\n");
}
}
else{
printf("输入坐标错误,请重新输入!\n");
}
}
}
}
void computermove(char chess[ROW][COL],int row,int col)
{
int x=0;
int y=0;
if(iswin(chess,row,col)=='S')
{
printf("电脑走:>\n");
while(1)
{
x=rand()%row+1;
y=rand()%col+1;
if(chess[x][y]==' ')
{
chess[x][y]='O';
printfchess(chess,ROW,COL);
break;
}
}
}
}
char iswin(char chess[ROW][COL],int row,int col)
{
int i=0;
int j=0;
int count=row*col;
for(i=0;i<=row-3;i++)
{
for(j=0;j<=col-3;j++)
{
if(chess[i][j]==chess[i+1][j+1]&&chess[i+1][j+1]==chess[i+2][j+2]&&chess[i+1][j+1]!=' ')
{
return chess[i+1][j+1];
}
}
}
for(i=0;i<=col-3;i++)
{
for(j=0;j<=row-3;j++)
{
if(chess[i][j+3]==chess[i+1][j+2]&&chess[i+1][j+2]==chess[i+2][j+1]&&chess[i+1][j+2]!=' ')
{
return chess[i+1][j+2];//1,3 2,2 3,1 出问题,判断失败???????????????
}
}
}
for(i=0;i|
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("*********************************\n");
printf("*********************************\n");
printf("******** 1 .进入游戏 ********\n");
printf("******** 0 .退出游戏 ********\n");
printf("*********************************\n");
printf("*********************************\n");
printf("*********************************\n");
}
int main()
{
int input;
system("color F9");
srand((unsigned int)time(NULL));
do{
menu();
printf("请选择:");
scanf("%d",&input);
switch(input)
{
case 0:
printf("游戏退出成功!\n");
break;
case 1:
playgame();
break;
default:
printf("选择错误,请重新选择!\n");
break;
}
}while(input);
system("pause");
return 0;
}