c语言如何实现简单的五子棋游戏
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇"c语言如何实现简单的五子棋游戏"除了程序员外大部分人都不太理解,今天小编为了让大家更加理解"c语言如何实现简单的五子棋游戏",给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥
千家信息网最后更新 2025年01月24日c语言如何实现简单的五子棋游戏
这篇"c语言如何实现简单的五子棋游戏"除了程序员外大部分人都不太理解,今天小编为了让大家更加理解"c语言如何实现简单的五子棋游戏",给大家总结了以下内容,具有一定借鉴价值,内容详细步骤清晰,细节处理妥当,希望大家通过这篇文章有所收获,下面让我们一起来看看具体内容吧。
一、游戏设计思想
1.该代码设置为 玩家1(*) vs 玩家2(O)
2.选择玩游戏
2.1 显示棋盘,玩家1下棋,判断游戏结果
2.2 显示棋盘,玩家2下棋,判断游戏结果
3.判断游戏结果
有4种结果,玩家1赢,玩家2赢,平局,继续游戏
若结果为玩家1赢或玩家2赢或平局,则显示结果,退回菜单界面,不再循环下棋
若结果为继续,则循环2.1和2.2
4.选择退出,则退出游戏
二、图片解说
玩游戏时的棋盘如下,横向即从左往右(0-9)代表y的值,纵向即从上往下(0-9)代表x的值(这涉及到后面代码x,y)
三、代码分析
1.main.c
该部分代码为根据菜单选择游戏(1)或者退出(2)
#include "game.h"void Menu(){ printf("+-----------------------------------------------+\n"); printf("| 1.paly 2.exit |\n"); printf("+-----------------------------------------------+\n");}int main() { int quit = 0; int select = 0; while (!quit) { Menu(); printf("Please select#"); scanf("%d", &select); switch(select) { case 1: Game(); break; case 2: quit = 1; break; case 3: printf("Enter error,please try again!"); break; } } printf("===========================================\n"); printf("ByeBye!\n"); printf("===========================================\n"); system("pause"); return 0;}
2.game.c
该部分为选择游戏时代码,一旦开始游戏,先显示棋盘,然后玩家1选择下棋,然后判断游戏结果,若游戏继续继续,则显示棋盘,轮到玩家2下棋,再判断游戏结果,若游戏继续,则又轮到玩家1下棋。如此循环,直到有了别的结果(玩家1赢,玩家2赢,平局)跳出循环,输出游戏结果。
void Game(){ int board[ROW][COL] = { 0 }; int ret = 0; //int curr = PLAYER1; while (1) { //curr = (curr == PLAYER1 ? PLAYER2 : PLAYER1); ShowBoard(board,ROW,COL); int *p=PlayerMove(board, ROW, COL, PLAYER1); ret = Jude(board,ROW,COL,*p,*(p+1)); if (ret != NEXT) { break; } ShowBoard(board, ROW, COL); p=PlayerMove(board, ROW, COL, PLAYER2); ret = Jude(board,ROW,COL,*p,*(p+1)); if (ret != NEXT) { break; } } ShowBoard(board, ROW, COL); switch (ret) { case PLAYER1: printf("PLATER 1 WIN!\n"); break; case PLAYER2: printf("PLATER 2 WIN!\n"); break; case DRAW: printf("DRAW!\n"); break; default: printf("Bug!\n"); break; }}
该部分为Game()函数内调用的具体游戏函数
#include "game.h"/*还函数为显示函数,显示棋盘上棋子情况,包含画出棋盘样子(可参考2部分图片)和棋盘内容赋值显示,当棋子为空,相应位置显示"."符号,玩家1的棋子用"*"表示,玩家2的棋子用"o"表示。ShowBoard()函数历遍board[][]数组,将落子情况用相应符号表达出来*/static void ShowBoard(int board[][COL], int row,int col) { system("cls"); printf(" "); for (int j = 0; j < col; j++) { printf(" %2d", j);//棋盘从左往右数字标号 } printf("\n"); for (int i = 0; i < row; i++) { printf("%-2d ", i);//棋盘从上往下数字标号 for (int j = 0; j < col; j++) { if (board[i][j] == 0) { printf(" . "); } else if (board[i][j] == PLAYER1) { printf(" * "); } else if (board[i][j] == PLAYER2) { printf(" o "); } else { } } printf("\n"); }}/* 玩家落子,输入参数为棋盘信息,棋盘row*col大小,who代表是谁在玩,输入PLAYER1是玩家1在玩,PLAYER2是玩家2在玩*/int * PlayerMove(int board[][COL], int row, int col, int who) { int x = 0; int y = 0; static int post[2] = { 0 };//用于存放选择的位置 int *p = post;//用于查看选择的位置 while (1) { printf("Please enter[player%d]#",who); scanf("%d %d", &x, &y); //判断位置是否合法,否则重新输入选择位置 if (x<0 || x>row - 1 || y<0 || y>col - 1) { printf("this postion is error!\n"); continue; } //当所选位置为空,则该位置放入who的值,代表是哪个玩家的落子 if (board[x][y] == 0) { board[x][y] = who; break; } //所选位置非空,重新选择位置 else { printf("this postion is not empty!"); continue; } } post[0] = x; post[1] = y; return p;}//计算连子情况,输入参数为棋盘落子信息,计算方向,落子位置x,yint ChessCount(int board[][COL], int dir,int x,int y) { //将x,y值赋值给_x,_y int _x = x; int _y = y; int count = 1;//状态机 while (1) { switch (dir) { //计算方向为上,_x的依次递减, case UP: _x--; break; case RIGHT_UP: //右上,_y的值增加,_x的值减少 _x--,_y++; break; case RIGHT: _y++; break; case RIGHT_DOWN: _x++, _y++; break; case DOWN: _x++; break; case LEFT_DOWN: _x++, _y--; break; case LEFT: _y--; break; case LEFT_UP: _x--, _y--; break; } //合法范围内 if (_x>0 || _x 0 || _y
= 5) { return board[x][y]; } count = ChessCount(board, RIGHT_UP,x,y)+ ChessCount(board, LEFT_DOWN,x,y); if (count-1 >= 5) { return board[x][y]; } count = ChessCount(board, RIGHT,x,y)+ ChessCount(board, LEFT,x,y); if (count-1 >= 5) { return board[x][y]; } count = ChessCount(board, RIGHT_DOWN,x,y)+ ChessCount(board, LEFT_UP,x,y); if (count-1 >= 5) { return board[x][y]; } //当没有人赢时,判断是否平局(棋盘下满,但是没有人赢) for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { //落子位置值为0,则不空,继续游戏 if (board[i][j] == 0) { return NEXT; } } } //结果为平局 return DRAW;}
3.chess.h
该文件定义了一些参数
#ifndef __GAME_H__#define __GAME_H__#include#include #pragma warning(disable:4996)#define ROW 10#define COL 10#define PLAYER1 1 //玩家1棋子的值#define PLAYER2 2#define NEXT 3 //继续游戏 #define DRAW 4 //平局#define UP 10 //上方向#define RIGHT_UP 11 //右上方向#define RIGHT 12#define RIGHT_DOWN 13#define DOWN 14#define LEFT_DOWN 15#define LEFT 16#define LEFT_UP 17void Game();#endif
C语言是什么
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发,使用C语言可以以简易的方式编译、处理低级存储器。
感谢您的阅读,希望您对"c语言如何实现简单的五子棋游戏"这一关键问题有了一定的理解,具体使用情况还需要大家自己动手实验使用过才能领会,快去试试吧,如果想阅读更多相关知识点的文章,欢迎关注行业资讯频道!
玩家
棋盘
位置
结果
选择
语言
平局
函数
棋子
代码
代表
内容
情况
方向
循环
输入
五子棋
五子
参数
j++
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
达州软件开发规范
不熟悉软件开发流程
软件开发阶段需要写的文档
在纬创资通干软件开发
华为网络安全防范
西城区省电软件开发报价
信息化网络安全演讲会议稿
芯片软件开发减税
淄博麒祥互联网科技
文件dsn数据库MySQL
路由器连接不上DNS服务器
数码宝贝数据库
查看数据库审计策略
数据库实训小组评语
包头市网络安全宣传
群晖 mqtt服务器搭建
苏州大数据软件开发口碑推荐
ad数据库如何建表
阴阳师服务器崩溃原因
笑傲江湖服务器查询
山东高速软件开发
软件开发个人简要事迹200字
大话手游服务器人数
网络安全比例原则是什么意思
贵阳市庶足网络技术有限公司
青少年网络安全知识锦囊请收好
rust枪械数据库
中山市摩科网络技术
数据库报错1175
用手机做服务器怎么赚钱