目录
1.内容展示
2.思考
3.代码实现
1.内容展示
2.思考
由图可知我们需要构建多个函数分别表示主菜单,棋盘,玩家输入,电脑输入(随机输入)
1.主菜单的编写
void menu() { printf("\n\t*******MADE-HZKK********\n"); printf("\t*Welcome to N-word game*\n"); printf("\t***----- 1.Paly -----***\n"); printf("\t***----- 0.Exit -----***\n"); printf("\t************************\n\n"); }
2棋盘的编写
在这里我们通过一个3*3的二维数组,将内容全部初始化位空格。
void intboard(char board[ROW][COL],int row,int col) { int i,j; for(i=0;i
3棋盘的打印
通过观察下方棋盘我们看见除了空格还有'|'和'-',把棋盘拆分来看一共有五行,
第一行是' ',' | ',' ',' | ',' ';
第二行是 ---|---|--- ;
第三行是' ',' | ',' ',' | ',' ';
第四行是 ---|---|--- ;
第五行是' ',' | ',' ',' | ',' ';
下面是代码实现
void print_board(char board[ROW][COL],int row,int col) { int i,j; for(i=0;i
4.玩家输入坐标
首先要判断坐标是否出界,若不出界则要判断是否被占用,否则重新输入直到成功
void player(char board[ROW][COL],int row,int col) { int x,y,t=1; while(t) { scanf("%d,%d",&x,&y); if(x>0&&x<=row&&y>=0&&y<=col) { if(board[x-1][y-1]==' ')board[x-1][y-1]='*',t=0; else printf("Occupied!\nReebter-->"); } else printf("Out-Of-Range!\nReenter-->"); } }
5.电脑输入坐标
电脑需要随机生成坐标,这里需要调用
和 ,并且在主函数中输入srand((unsigned int)time(NULL));注意电脑生成的坐标也要判断是否以被占用 void computer(char board[ROW][COL],int row,int col) { int x,y,t=1; while(t) { x=rand()%row,y=rand()%col; if(x>0&&x<=row&&y>=0&&y<=col) if(board[x][y]==' ')board[x][y]='#',t=0; } printf("Computer-->%d,%d\n",x+1,y+1); }
6判断游戏是否继续
由于游戏的随机,所以无论是玩家还是电脑,每走一步,我们都需要判断游戏是否继续,游戏一共有四种状态,第一是玩家胜利,第二是电脑胜利,第三是平局,第四是继续游戏。在这里我用' * '表示玩家的棋子,用' # '表示电脑的棋子,所以我们可以定义一个char型的函数用return的字符表示游戏状态,' * ' # ' Q ' C '分别表示玩家胜利,电脑胜利,平局,继续游戏。
井字棋的胜利条件是行或列或对角线相同,于是我们可以通过for循环判断。
char judge(char board[ROW][COL],int row,int col) { int i,j,t; for(i=0;i
0;i++,j--) { if(board[i][j]==board[i+1][j-1]&&board[i][j]!=' ')t+=1; if(t==col-1)return board[i][j]; } for(i=0;i
3.代码实现
我们通过项目来实现,分别是game1.h(头文件)、game.cpp(编写函数)、test.cpp(主函数)。
game1.h
#include
#include #include #define ROW 3 #define COL 3 void menu(); char board[ROW][ROW]; void intboard(char board[ROW][ROW],int row,int col); void print_board(char board[ROW][ROW],int row,int col); void player(char board[ROW][COL],int row,int col); void computer(char board[ROW][COL],int row,int col); char judge(char board[ROW][COL],int row,int col); game.cpp
#include "game1.h" void menu() { printf("\n\t*******MADE-HZKK********\n"); printf("\t*Welcome to N-word game*\n"); printf("\t***----- 1.Paly -----***\n"); printf("\t***----- 0.Exit -----***\n"); printf("\t************************\n\n"); } void intboard(char board[ROW][COL],int row,int col) //初始化棋盘 { int i,j; for(i=0;i
0&&x<=row&&y>=0&&y<=col) //判断是否出界 { if(board[x-1][y-1]==' ')board[x-1][y-1]='*',t=0; //判断是否被占用 else printf("Occupied!\nReebter-->"); } else printf("Out-Of-Range!\nReenter-->"); } } void computer(char board[ROW][COL],int row,int col) { int x,y,t=1; while(t) { x=rand()%row,y=rand()%col; //随机生成坐标 if(x>0&&x<=row&&y>=0&&y<=col) if(board[x][y]==' ')board[x][y]='#',t=0; } printf("Computer-->%d,%d\n",x+1,y+1); } char judge(char board[ROW][COL],int row,int col) //判定游戏是否继续 { int i,j,t; for(i=0;i
0;i++,j--) //判断对角线是否相同 { if(board[i][j]==board[i+1][j-1]&&board[i][j]!=' ')t+=1; if(t==col-1)return board[i][j]; } for(i=0;i
test.cpp
#include "game1.h" int main() { int input;char flag='C'; srand((unsigned int)time(NULL)); do { menu(); printf("Please Chooes:"); scanf("%d",&input); switch(input) { case 1:printf("Game Start\n"); intboard(board,ROW,COL) ; print_board(board,ROW,COL); while(1) { printf("You Input-->"); player(board,ROW,COL); flag=judge(board,ROW,COL); if(flag!='C')break; print_board(board,ROW,COL); computer(board,ROW,COL); flag=judge(board,ROW,COL); if(flag!='C')break; print_board(board,ROW,COL); } print_board(board,ROW,COL); if(flag=='*')printf("\t\tYou Win!\n"); else if(flag=='#')printf("\t\tYou Lose!\nLet HZKK hug you\n"); else if(flag=='Q')printf("\tDraw!This is the most difficult thing to achieve!\n"); break; case 0:printf("\t\tGood-Bye\n");break; default:break; } }while(input); return 0; }