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

C语言实现小游戏:五子棋

时间:2023-10-28 04:46:16

相关推荐

C语言实现小游戏:五子棋

五子棋:

需要的数据:

1、定义一个15*15的棋盘

2、定义变量用于记录棋子的坐标

3、定义角色变量

业务逻辑:

是否需要对数据进行初始化

for( ; ; )

{

1、刷新屏幕,显示棋盘

2、落子

检查坐标是否合法,该位置不能有棋子

3、检查是否五子连珠

刷新屏幕

是:游戏胜利

4、交换角色

}

5、宣布平局,结束游戏

注:该程序在Linux环境下可以正常编译,Windows环境下需要修改!

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <getch.h>//Linux中没有这个头文件,需要自己手动导入库中,文末有代码,自己创建getch.h复制进去并导入库中即可// 定义棋盘char board[15][15];// 棋子坐标char key_x = 7,key_y = 7;// 角色char role = '@';// 初始化棋盘void init_board(void){for(int i=0;i<15;i++){for(int j=0;j<15;j++){board[i][j] = '*';}}}// 显示棋盘void show_board(void){system("clear");for(int i=0;i<15;i++){for(int j=0;j<15;j++){printf(" %c",board[i][j]);}printf("\n");}}// 落子void get_key(void){printf("请%c下棋\n",role);for(;;){printf("\33[%hhd;%hhdH",key_x+1,(key_y+1)*2);switch(getch()){case 183: key_x>0 && key_x--;break;case 184: key_x<14 && key_x++;break;case 185: key_y<14 && key_y++;break;case 186: key_y>0 && key_y--;break;case 10: if(board[key_x][key_y] == '*'){board[key_x][key_y] = role;return;}}}}//计算一个方向上有多少个相同的棋子int count_key(int go_x,int go_y)//0 -1{int count = 0;for(int x=key_x+go_x,y=key_y+go_y;x>=0 && y>=0 && x<15 && y<15;x+=go_x,y+=go_y){if(role == board[x][y]){count++;}else{break;}}return count;}// 检查五子连珠bool check_key(void){//左上右下if(count_key(-1,-1) + count_key(1,1) >= 4)return true;if(count_key(-1,1) + count_key(1,-1) >= 4)return true;if(count_key(1,0) + count_key(-1,0) >= 4)return true;if(count_key(0,1) + count_key(0,-1) >= 4)return true;return false;}int main(int argc,const char* argv[]){// 初始化棋盘init_board();for(;;){// 显示棋盘show_board();// 落子get_key();// 检查五子连珠if(check_key()){show_board();printf("%c胜利!!!\n",role);return 0;}// 交换角色role = role == '@'?'$':'@';}}

以下为getch.h代码,创建getch.h复制进去并导入库中即可

#ifndef GETCH_H#define GETCH_H#include <termios.h>#include <unistd.h>//修改终端的控制方式,1取消回显、确认2获取数据3还原static int getch(void){// 记录终端的配置信息struct termios old;// 获取终端的配置信息tcgetattr(STDIN_FILENO,&old);// 设置新的终端配置 struct termios new = old;// 取消确认、回显new.c_lflag &= ~(ICANON|ECHO);// 设置终端配置信息tcsetattr(STDIN_FILENO,TCSANOW,&new);// 在新模式下获取数据 int key_val = 0; do{key_val += getchar();}while(stdin->_IO_read_end - stdin->_IO_read_ptr);// 还原配置信息tcsetattr(STDIN_FILENO,TCSANOW,&old); return key_val; }#endif//GETCH_H

上图即为最终效果。有需要的同学可以自行美化棋盘和棋子

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

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