三子棋代码内容:
1、利用二维数组,存储棋子 2、游戏开始页面
3、打印棋局 4、玩家下棋 5、电脑下棋 6、判断输赢
游戏代码思路:
好了,内容和思路都已经大概介绍完毕了;现在开始我们的C语言小游戏----三子棋。
第一步 创建三个文件
1.game.h----游戏函数的声明
2.text.c------测试游戏
3.game.c------游戏函数的实现
第二步 敲代码
第一步骤-----创建菜单
我们先想想,玩游戏时,是不是应该需要一个菜单,让我们选择 退出游戏 或者 开始游戏 而且我们不一定只玩一把游戏,所以需要一个循环,当我们游戏结束之后可以开始第二把。
所以我们先在text.c创建一个菜单函数 menu();
#include<stdio.h> void menu() { printf("***********************"); printf("********三子棋*********"); printf("***********************"); printf("开始游戏>1 退出游戏>0"); } int main() { int input=0; while (1) { menu(); printf("请选择:"): scanf("%d",&input); if(input==1) { //游戏开始 } else if(input==0) { break; //退出游戏 } else { printf("输入有误,重新输入"); }
第二步骤-----创建棋盘
三子棋、三子棋,很明显我们需要打印一个键盘,这样才能开始游戏;三子棋有9个空格,所以我们可以利用二维数组 board[3][3] 打印棋盘,先让二维数组存放的是' '(空格);之后下棋的时候,会用棋子代替;
初始化棋盘,我们可以创建init_board() 函数,也就是给二维数组赋值:
void init_board(char board[ROW][COL],int row,int col) { for(int c = 0;c < row;c++) { for(int d = 0;d < col;d++) { board[c][d] = ' '; //给二维数组赋' '; } }
用二维数组的值打印棋盘,我们可以创建print_board () 函数:
void print_board(char board[ROW][COL],int row,int col) { for(int c = 0;c < row;c++) { int d; for(d = 0;d < col;d++) { printf(" %c ",board[c][d]); if(d < col-1) { printf("|"); } } printf("\n"); if(c < row-1) { for(int q=0;q< col;q++) { printf("---"); if(q < col-1) { printf("|"); } } printf("\n"); } } } //注:以上部分则是打印棋局,|和---是棋局的布置;
第三步骤-----人机下棋
玩家需要下棋,电脑也要下棋,并且在一方下完棋之后需要判断是否胜利,又或者是否棋盘满了平局。
玩家下棋,可以创建 player_board() :
void player_board(char board[ROW][COL],int row,int col) { printf("玩家下棋,选择坐标:"); while(1) { int rows; //行 int cols; //列 scanf("%d %d",&rows,&col); if( (rows < row) && (cols < col) && board[rows][cols]==' ') { board[rows][cols] = '*';break; //当坐标是' ';用'*'代替 } else printf("坐标有误,重新输入\n:"); } }
电脑下棋,可以创建computer_board() :
void computer_board(char board[ROW][COL], int row, int col) { int a, b; printf("机器人下棋\n"); while (1) { a = rand() % (ROW+1);//行 b = rand() % (COL+1);//列 if (a <= row && b <= col && board[a][b] == ' ') { board[a][b] = 'T';//当坐标为' ' ;则用'T'代替 break; } } }
当棋手下棋之后需要判断,棋局是否满了,创建 full() 函数:
char full(char board[ROW][COL]) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (board[i][j] == ' ')return 'p';//棋盘未满,返回p值 } } return 'x'; //棋局已满,返回x值 }
有判断是否棋盘满,也应该判断是否胜利,创建使用 win() 函数:
char win(char board[ROW][COL], int row, int col) { int i = 0; //判断三行 for (i = 0; i < row; i++) { if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != ' ') { return board[i][0]; } } //判断三列 for (i = 0; i < col; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ') { return board[0][i]; } } //对角线 if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ') { return board[1][1]; } if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') { return board[1][1]; } return full(board); }
第四步骤-----人机对局
现在可以进行对局了,但是因为是棋局,所以是你来我往的,需要使用循环,直到一方胜利。
现在定义一个game() 函数;
void game() { char ret; char board[ROW][COL]; init_board(board, ROW, COL); printfboard(board, ROW, COL); while (1) { player_board(board, ROW, COL); printfboard(board, ROW, COL); //判断输赢 ret = win(board, ROW, COL); if (ret == '*') //返回值是*,则赢 { printf("我赢了\n"); break; } else if (ret == 'x') //返回值是x,则是平局 { printf("平局\n"); break; } computer_board(board, ROW, COL); printfboard(board, ROW, COL); //判断输赢 ret = win(board, ROW, COL); if (ret == 'T') //返回值是T,电脑赢了; { printf("电脑赢了\n"); break; } else if (ret == 'x') //返回值是x,则是平局 { printf("平局\n"); break; } } }
第三步 整合代码
第一小步
先在game.h头文件里申明函数名,为了更方便,还可以放入#include<stdio.h>,代码里因为使用了随机数,所以需要放置头文件#include<stdlib.h>、#include<time.h>;
还需要申明ROW的值和COL的值。
#include<stdio.h> #include<time.h> #include<stdlib.h> #define ROW 3 #define COL 3 //初始化棋盘 void init_board(char board[ROW][COL], int row, int col); //打印键盘 void printfboard(char board[ROW][COL], int row, int col); //玩家下棋 void player_board(char board[ROW][COL], int row, int col); //电脑玩家 void computer_board(char board[ROW][COL], int row, int col); //获胜条件 char win(char board[ROW][COL], int row, int col);
第二小步
先在text.c源文件里添加头文件#include"game.h",然后就可以调用头文件#include"game.h",
由于头文件里申明了函数,所以可以通过头文件访问game.c源文件,从而使用函数。
#include"game.h" void menu() { printf("*********************************\n"); printf("****************三子棋***********\n"); printf("*********************************\n"); printf("进入游戏:1 退出游戏:0\n"); } void game() { char ret; char board[ROW][COL]; init_board(board, ROW, COL); printfboard(board, ROW, COL); while (1) { player_board(board, ROW, COL); printfboard(board, ROW, COL); //判断输赢 ret = win(board, ROW, COL); if (ret == '*') { printf("我赢了\n"); break; } else if (ret == 'x') { printf("平局\n"); break; } computer_board(board, ROW, COL); printfboard(board, ROW, COL); //判断输赢 ret = win(board, ROW, COL); if (ret == 'T') { printf("电脑赢了\n"); break; } else if (ret == 'x') { printf("平局\n"); break; } } } void text() { int a=0; srand((unsigned)time(NULL)); //随机值 while (1) { menu(); scanf("%d", &a); if (a == 1) { printf("游戏开始\n"); game(); } else if (a == 0) { printf("退出游戏\n"); break; } else { printf("错误,重新输入\n"); } } } int main() { text(); return 0; }
代码如上哦;
接下来,我们来编译程序吧;
很明显,代码运行成功了,这就是三子棋的简易代码,当然如果有兴趣,可以根据这个去写一些更多完善,美观的三子棋程序;可借用 easyx图形库 来。