青岛做网站seo,如何提高百度搜索排名,做家教网站怎么样,电子商务平台网站模板文章目录 前言一、前期准备二、游戏整体结构及思路1、程序主体结构#xff1a;2、代码解读3、完整源代码 总结 前言
相信大家小时候都玩过井字棋小游戏#xff0c;拿石子在地上画或是用笔在纸上画今天我们用C语言来简易的实现以下这个儿时的小游戏 在本次小游戏实现#xf… 文章目录 前言一、前期准备二、游戏整体结构及思路1、程序主体结构2、代码解读3、完整源代码 总结 前言
相信大家小时候都玩过井字棋小游戏拿石子在地上画或是用笔在纸上画······今天我们用C语言来简易的实现以下这个儿时的小游戏 在本次小游戏实现将运用到的主要内容有数组、函数、循环等。 一、前期准备
game.h头文件包含库函数、函数声明、存储常量信息 game.c文件完成实现游戏各个功能的函数 test.c文件完成实现函数主体逻辑
二、游戏整体结构及思路
1、程序主体结构
打印菜单 供用户选择1为开始游戏0则退出 选择1后打印出被初始化的棋盘紧接着玩家输入坐标即为下棋成功 玩家输入坐标后机器人通过随机数在数组中找到空位并下如棋子在双方都完成下棋后打印第一轮棋盘 当某一方对角线或者行列连起来三个即为获胜获胜后打印出获胜方并打印出棋盘紧接着下一局可以选择1继续游戏也可以选择0退出 还有一种情况就是棋盘全部下满了即为平局
2、代码解读 打印棋盘并初始化 由图可知打印棋盘需要分为两个部分一是打印数组存储棋子的部分即为数组初始化的部分、二是打印分隔行的部分 void init_board(char board[ROW][COL], int row, int col)
{int i 0, j 0;for (i 0; i row; i){for (j 0; j col; j){board[i][j] ;}}
}void display_board(char board[ROW][COL], int row, int col)
{int i 0,j 0;for (i 0; i row; i){// 数据// ---|---|---//printf( %c | %c | %c \n, board[i][0],board[i][1]);for ( j 0; j col; j){printf( %c , board[i][j]);if (j col - 1)printf(|);}printf(\n);if (i row - 1){//printf(---|---|---\n);for ( j 0; j col; j){printf(---);if (jcol-1)printf(|);}printf(\n);}}
}接着就是双方下棋的实现了 在玩家或者电脑下棋的时候要先判断该位置是否被占用如果没有被占用则成功下完。但是在电脑下棋时需要用到伪随机数的生成使用rand函数当然rand函数不会自己生成我们需要通过srand函数设置起点与库函数time配合使用 srand((unsigned int)time(NULL));//生成随机数起点void player_move(char board[ROW][COL], int row, int col)
{int x 0, y 0;printf(玩家下棋\n);while (1){printf(请输入坐标);scanf(%d %d, x, y);// 判断坐标合法性 - 是否越界// 坐标是否被占用if (x 1 x row y 1 y col){// 玩家输入坐标之后 对应数组里要做-1处理if (board[x-1][y-1] ){board[x - 1][y - 1] *;break;}else{printf(该坐标被占用请重新输入\n);}}else{printf(坐标输入有误请重新输入\n);}}
}// 电脑随机下棋 - 找空着的位置下
//
void computer_move(char board[ROW][COL], int row, int col)
{printf(电脑下棋\n);while (1){int x rand() % row;int y rand() % col;if (board[x][y] ){board[x][y] #;break;}}
}接着就是判断输or赢or平局了 判断有四种可能 1、玩家获胜返回* 2、电脑获胜返回# 3、平局返回Q 4、继续游戏C。 // 如果棋盘满了 返回1 - 不满则返回0
static int is_full(char board[ROW][COL], int row, int col)
{int i 0, j 0;for ( i 0; i row; i){for ( j 0; j col; j){if ( board[i][j]){return 0;}}}return 1;
}
char is_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];}// 判断平局if (is_full(board,row,col) 1){return Q;}return C; // 没赢 棋盘没满 则继续
}3、完整源代码 test.c文件 首先设计一个简易的游戏菜单利用switch语句对不同的指令进行不同的操作处理。为了防止误操作输入错误这里需要嵌套一个do-while语句避免bug除此之外还可以让游戏多次运行 #define _CRT_SECURE_NO_WARNINGS 1
#include game.hvoid menu()
{printf( -------------------\n);printf(| 1.paly |\n);printf(| 0.exit |\n);printf( -------------------\n);
}void game()
{char res ;//printf(三子棋游戏\n);// 数据的存储需要一个 3*3 的二维数组char board[ROW][COL] { 0 };// 初始化棋盘init_board(board, ROW, COL);// 打印棋盘display_board(board, ROW, COL);while (1){// 玩游戏 - 玩家下棋player_move(board, ROW, COL);res is_win(board, ROW, COL);display_board(board, ROW, COL);if (res ! C)break;// 电脑下棋computer_move(board, ROW, COL);res is_win(board, ROW, COL);display_board(board, ROW, COL);if (res ! C)break;}if (res *){printf(玩家获胜\n);}else if (res #){printf(电脑获胜\n);}else if (res Q){printf(平局\n);}display_board(board, ROW, COL);
}// 玩家获胜 - *
// 电脑获胜 - #
// 平局了 - Q
// 游戏继续 - Cint main()
{srand((unsigned)time(NULL));int input 0;do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误请重新选择~\n);break;}} while (input);return 0;
}game.h文件 用来对函数的声明、包含库函数的头文件、定义常量行列以便后期可以自定义棋盘大小 #define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable : 6031)#include stdio.h
#include stdlib.h
#include time.h#define ROW 3 // 定义行为3
#define COL 3 // 定义列为3// 函数的声明// 初始化棋盘
void init_board(char board[ROW][COL], int row, int col);// 打印棋盘
void display_board(char board[ROW][COL],int row,int col);// 玩家下棋
void player_move(char board[ROW][COL], int row, int col);// 电脑下棋
void computer_move(char board[ROW][COL], int row, int col);// 判断游戏状态
char is_win(char board[ROW][COL], int row, int col);game.c文件 实现各个功能函数游戏模块单独的一个文件便于阅读 #define _CRT_SECURE_NO_WARNINGS 1#include game.h// 函数的实现void init_board(char board[ROW][COL], int row, int col)
{int i 0, j 0;for (i 0; i row; i){for (j 0; j col; j){board[i][j] ;}}
}void display_board(char board[ROW][COL], int row, int col)
{int i 0,j 0;for (i 0; i row; i){// 数据// ---|---|---//printf( %c | %c | %c \n, board[i][0],board[i][1]);for ( j 0; j col; j){printf( %c , board[i][j]);if (j col - 1)printf(|);}printf(\n);if (i row - 1){//printf(---|---|---\n);for ( j 0; j col; j){printf(---);if (jcol-1)printf(|);}printf(\n);}}
}void player_move(char board[ROW][COL], int row, int col)
{int x 0, y 0;printf(玩家下棋\n);while (1){printf(请输入坐标);scanf(%d %d, x, y);// 判断坐标合法性 - 是否越界// 坐标是否被占用if (x 1 x row y 1 y col){// 玩家输入坐标之后 对应数组里要做-1处理if (board[x-1][y-1] ){board[x - 1][y - 1] *;break;}else{printf(该坐标被占用请重新输入\n);}}else{printf(坐标输入有误请重新输入\n);}}
}// 电脑随机下棋 - 找空着的位置下
//
void computer_move(char board[ROW][COL], int row, int col)
{printf(电脑下棋\n);while (1){int x rand() % row;int y rand() % col;if (board[x][y] ){board[x][y] #;break;}}
}// 如果棋盘满了 返回1 - 不满则返回0
static int is_full(char board[ROW][COL], int row, int col)
{int i 0, j 0;for ( i 0; i row; i){for ( j 0; j col; j){if ( board[i][j]){return 0;}}}return 1;
}
char is_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];}// 判断平局if (is_full(board,row,col) 1){return Q;}return C; // 没赢 棋盘没满 则继续
}总结
以上就是使用C语言数组的综合应用完成一个简易的三子棋小游戏的实现了 希望该文章对同学们的学习有帮助记得留下你的赞再走哦~。