失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言三子棋游戏实现

C语言三子棋游戏实现

时间:2021-04-19 06:44:31

相关推荐

C语言三子棋游戏实现

游戏思路

首选创建两个.c文件用于做游戏入口和游戏的具体实现,和一个头文件.h。三子棋游戏本质是一个二维数组,在二维数组里和电脑下棋

1.第一步打印菜单menu,让玩家选择游戏开始或退出

2.创建棋盘(二维数组),紧接着初始化二维数组全部为空格,方便打印出来观看

3.打印初始化的棋盘

4.玩家下棋,玩家下一步,要进行判断游戏的输赢,电脑下棋,电脑下一步,也要进行判断游戏的输赢

5.判断游戏输赢,游戏结束or游戏继续or游戏平局

具体代码实现如下:

第一个.c文件用作游戏入口和主函数text.c

#include"game.h"void menu() //打印菜单{printf("************************************\n");printf("*********** 1.play ********\n");printf("*********** 0.exit ********\n");printf("************************************\n");printf("************************************\n");}void game()//游戏实现入口{char board[ROW][COL];//创建棋盘(二维数组)InitBoard(board, ROW, COL); //初始化棋盘(二维数组)全为空格在传参时,传递数组和数组的横纵参数DispalyBoard(board, ROW, COL);//打印棋盘看一下———其实就是打印二维数组char ret = 0; //创建临时变量,用于判断游戏输赢while (1) //因为游戏需要玩家和电脑持续下棋,这里用的while循环{PlayerMove(board, ROW, COL); //玩家下棋DispalyBoard(board, ROW, COL);//打印棋盘看一下ret = IsWin(board, ROW, COL);//判断游戏输赢if (ret!='C') //判断游戏是否继续{break;}ComputerMove(board, ROW, COL); //电脑下棋DispalyBoard(board, ROW, COL); //打印棋盘看一下ret = IsWin(board, ROW, COL); //把判断输赢返回的值存到ret变量if (ret != 'C')//判断游戏是否继续{break;}}if (ret=='*'){printf("玩家赢\n");}else if(ret=='$'){printf("电脑赢\n");}else{printf("平局\n");}}main()//主函数{int input=0; //定义变量用于存放玩家输入的游戏选项srand((unsigned int)time(NULL)); //随机数函数do //当游戏玩完一局时,方便玩家想再玩一局,使用do while循环{menu(); //打印菜单printf("请选择\n"); scanf("%d", &input); //读取玩家输入游戏的选项switch (input){case 1:game();break;case 0:printf("游戏退出\n");break;default:printf("输入错误请重新选择\n");break;}} while (input);return 0;}

第二个.c文件,用于具体的游戏运行game.c

#include"game.h"//初始化棋盘函数实现void InitBoard(char board[ROW][COL], int row, int col){int i = 0;int j = 0;for ( i = 0; i < row; i++)//二维数组得用for循环控制arr[][]数组中[]的数值{for ( j = 0; j < col; j++){board[i][j] = ' ';//数组中的值全设为空值(空格)}}}//打印图案 //行//列void DispalyBoard(char board[ROW][COL], int row, int col)//row行数 col列数{int i = 0;for ( i = 0; i < row; i++)//总限制打印行数,3行打三次,10行循环十次打十次{int j = 0;for ( j = 0; j < col; j++){printf(" %c ", board[i][j]);//打印 ( %c )左右空格好观看if (j < col-1)//每行最后一个是没有 | 的所以增加限制条件限制输出 |printf("|");}printf("\n");//打印完第一个行,得换行,开始准备打印第二行if (i < row - 1)//打印第二行内容,注意最后一行打印总是为上一个for循环所打印的内容,所以得施加row-1的条件限制打印{int j = 0;for ( j = 0; j < col; j++)//打印及限制第二行列数的值{printf("---");if (j<col-1)//行的最后无 | 所以得增加条件限制输出printf("|");}printf("\n");}}}//玩家下棋函数实现void PlayerMove(char board[ROW][COL], int row, int col){int x = 0;int y = 0;printf("玩家走>\n");while (1){printf("请输入要下棋的坐标");scanf("%d %d", &x, &y);//判断坐标合法性if (x>=1 && x<=row && y>=1 && y<=col){//下棋的坐标是否被占用if (board[x - 1][y - 1]== ' ') //二维数组的横纵起始坐标从0开始,而玩家从1开始。所以横纵坐标都减去一个1,才等于二维数组的真实坐标{board[x - 1][y - 1] = '*'; //未占用,就输出*(下棋)break;}else{printf("坐标被占用请重新输入\n");}}else{printf("坐标非法,请重新输入\n ");}} }//电脑下棋函数实现void ComputerMove(char board[ROW][COL], int row, int col){printf("电脑走>\n");while (1){int x = rand() % row; //任何数的余数都会小于除数,也就是任意数字除以三所得余数会是0.1.2int y = rand() % col;if (board[x][y] == ' ')//看随机的坐标是否被占用{board[x][y] = '$';//输出$,电脑下棋break;}}}//判断我的棋盘中的格子下满没有,下满返回1,未满返回0int IsFull(char board[ROW][COL], int row, int col){int i = 0;int j = 0;for ( i = 0; i < row; i++){for ( j = 0; j < col; j++){if (board[i][j]==' ')//判断棋盘有没有空格,是否满棋{return 0; //未满棋返回0}}}return 1; //满棋返回1 }//判断游戏结果输赢函数实现char IsWin(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][0] == board[i][2] && board[i][1] != ' '){return board[i][1];}}//判断三列for (i = 0; i < col; i++){if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' '){return board[1][i];}}//判断对角线相等if (board[0][0]==board[1][1]==board[2][2]&&board[1][1]!=' '){return board[1][1];}if (board[0][2] == board[1][1] == board[2][0] && board[1][1] != ' '){return board[1][1];}int ret = IsFull(board, row, col);//判断平局 棋盘满了返回1 不满返回0,返回值放到ret变量里if (ret==1) {return 'Q'; //Q平局}else return 'C'; //游戏继续}

第一个.h文件用于放置函数声明和头文件game.h

#pragma once//头文件的包含#include<stdio.h>#include<stdlib.h> //srand函数头文件#include<time.h> //srand里的time函数头文件//符号的定义#define ROW 3#define COL3//函数的声明//初始化棋盘的函数void InitBoard(char board[ROW][COL],int row,int col);//打印棋盘函数void DispalyBoard(char board[ROW][COL], int row, int col);//玩家下棋void PlayerMove(char board[ROW][COL], int row, int col);//电脑下棋void ComputerMove(char board[ROW][COL], int row, int col);//判断游戏输赢char IsWin(char board[ROW][COL], int row, int col);//判断输赢返回符号//玩家赢 *// 电脑赢$// 平局Q// 游戏继续 C

如果觉得《C语言三子棋游戏实现》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。