C语言编写五子棋程序
五子棋游戏我们大家很多人都玩过,规则简单但是内容千变万化,今天我用C语言写了一个五子棋程序,由于时间仓促程序中难免会有BUG,希望您多多指正阿!!
程序的功能:
两个人轮流下子,在输入下子的时候,可以输入r来进行悔棋,也可以输入q来退出程序。
在本程序中,一共有5个模块,分别为:
1.生成棋盘模块:void create_board(char (*board)[N]);
本模块的功能很简单,仅仅生成一个棋盘,因为本程序的运行环境是linux中的终端,所以出于界面的美观性考虑,将棋盘的空白位置标志为“-”(减号),白方的棋子为X(大写的X),黑方的棋子为O(大写的O)。所以在这个模块中我们给传递过来的一个二维数组所有的元素都赋值为‘-’
2.打印棋盘模块:void print_board(char (*board[N]));
本模块的功能也很简单,就是将刚才生成的棋盘打印出来,同时我们还要这个模块打印目前棋盘的状态,在主函数中循环调用这个模块。由于这个程序是在linux的终端里面运行的,所以要实现棋盘的动态显示,还要不断调用system函数要调用clear的系统命令来刷新屏幕,这个功能也是在这个模块中实现的。
3.打印相关信息的模块:void print_info(int flag,int person);这个模块的功能就是打印出相关的信息,包括:这轮该哪一方下子,输入是否有误,是否有人赢。这是我们可以设置一个标志位flag来表示不同的情况,正常情况表示为0,用户输入有误表示为-1,如果有人赢就表示为1
4.下棋:int down_board(char (*board)[N], int person, int *x, int *y);
1.打印输入格式
2.接受坐标,x, y
3.判断输入是否合法
1)如何合法,下棋,返回0
2)如何不合法,返回-1
1.越界、有子、格式有误
5.判断输赢int check_board(char (*board][N],int *person, int x, int y);
1.判断输赢
2.如果没有人赢,切换棋手
源码:
/************************************************************************* > File Name: wuziqi.c > Author: Baniel Gao > Mail: createchance@163.com > Blog: blog.csdn.net/createchance > Created Time: Fri 06 Dec 2013 10:32:41 AM CST ************************************************************************/#include#include #define N 20void create_board(char (*board)[N]);void print_board(char (*board)[N]);void print_info(int flag,int person);int play_chess(char (*board)[N],int *person,int *x,int *y);int check_board(char (*board)[N],int *person,int x,int y);int main(void){ char board[N][N]; int person = 0,flag = 0,x = 0,y = 0; create_board(board); while(1) { print_board(board); print_info(flag,person); if(flag == 1) { break; } if((flag=play_chess(board,&person,&x,&y)) == -1 || flag == 3) { continue; } else if(flag == 2) { return 0; } flag = check_board(board,&person,x,y); } return 0;}void create_board(char (*board)[N]){ int i,j; for(i=0;i N-1 || *y < 0 || *y > N-1) { choice = getchar(); if(choice == 'q' && getchar() == '/n') { return 2; } else if(choice == 'r' && getchar() == '/n') { if(board[*x][*y] == '-') { printf("You have already rescinded!/n"); return -1; } board[*x][*y] = '-'; *person = (*person + 1)%2; return 3; } return -1; } if(board[*x][*y] != '-') { return -1; } if(*person == 0) { board[*x][*y] = 'X'; } else { board[*x][*y] = 'O'; } return 0;}int check_board(char (*board)[N],int *person,int x,int y){ int i,j; int pos_x = x,pos_y = y; int cnt,sign; int a[4][2] = {{0,1},{1,1},{-1,0},{-1,1}}; for(i=0;i<4;i++) { cnt = sign = 1; j = 0; while(1) { pos_x += sign*a[i][j]; pos_y += sign*a[i][j+1]; if((board[pos_x][pos_y] == board[x][y]) && pos_x >= 0 && pos_x <= N-1 && pos_y >= 0 && pos_y <= N-1) cnt++; else { if(sign == -1) { break; } sign = -1; pos_x = x; pos_y = y; } if(cnt == 5) { return 1; } } } *person = (*person + 1)%2; return 0;}
- 09-29如何通过wrap malloc定位C/C++程序的内存泄漏
- 02-25打车软件大战升级,补贴还能维持多久?
- 12-23BMP文件右旋90度[c语言]
- 12-23寻找直方图中面积最大的矩形(C语言版)
- 12-23[ndk,2]ndk开发案例和错误处理
- 12-23[ndk,1]ndk开发,C语言入门讲解
- 12-23C语言连续存储实现队列机制
- 12-23Objective-c 数据类型
- 01-11全球最受赞誉公司揭晓:苹果连续九年第一
- 12-09罗伯特·莫里斯:让黑客真正变黑
- 12-09谁闯入了中国网络?揭秘美国绝密黑客小组TA
- 12-09警示:iOS6 惊现“闪退”BUG
- 12-05亚马逊推出新一代基础模型 任意模态生成大模
- 12-05OpenAI拓展欧洲业务 将在苏黎世设立办公室
- 12-05微软质疑美国联邦贸易委员会泄露信息 督促其
- 12-05联交所取消宝宝树上市地位 宝宝树:不会对公
- 12-04企业微信致歉:文档打开异常已完成修复