五子棋课程设计算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6
四 详细设计
1.程序中用到的库函数所在头文件应用 #include 命令包 含进来 2.定义符号常量:
(1) 定义画棋盘所需的制表符 (2) 定义棋盘左上角点在屏幕上的位置 (3) 定义 1 2 号玩家的操作键键码 (4) 定义游戏中途退出键 (5) 定义棋盘上交叉点的状态并指出棋子归属 (6) 定义按键类别 (7) 定义真假符号常量




学院:承德石油高等专科学校 班级:计控 1001 姓名:杨扬 学号:07 所在系:计算机与信息工程系 指导教师:马秋菊
2009 年 12 月 22 号
1
一 题目与要求 二 问题的提出 三 功能要求 1、实现人机对弈功能; 2、基本的 C 作图的方法及循环控制模块; 3、评分规则及胜负判断。 四 详细设计
9.交换行棋方 10.获取按键值, 如果用户没有按键,空循环 11.落子错误处理 12.赢棋处理赢棋处理 13.走棋: 判断交叉点上有无棋子, 若没有棋子, 则可以 落子 14.判断当前行棋方落子后是否赢棋即判断在指定方向 上是否有连续 5 个行棋方的棋子 15.判断在指定方向上是否有连续 5 个行棋方的棋子:
12
/*若有棋子, 还应能指出是哪个玩家的棋子 */ #define CHESSNULL 0 /*没有棋子*/ #define CHESS1 'O'/*一号玩家的棋子*/ #define CHESS2 'X'/*二号玩家的棋子*/ /*定义按键类别*/ #define KEYEXIT 0/*退出键*/ #define KEYFALLCHESS 1/*落子键*/ #define KEYMOVECURSOR 2/*光标移动键*/ #define KEYINVALID 3/*无效键*/ /*定义符号常量: 真, 假 --- 真为 1, 假为 0 */ #define TRUE 1 #define FALSE 0 /**********************************************************/ /* 定义数据结构 */ /*棋盘交叉点坐标的数据结构*/ struct point { int x,y; }; /**********************************************************/ /*自定义函数原型说明 */ void Init(void); int GetKey(void); int CheckKey(int press); int ChangeOrder(void); int ChessGo(int Order,struct point Cursor); void DoError(void); void DoOK(void); void DoWin(int Order); void MoveCursor(int Order,int press); void DrawCross(int x,int y); void DrawMap(void); int JudgeWin(int Order,struct point Cursor); int JudgeWinLine(int Order,struct point Cursor,int direction); void ShowOrderMsg(int Order); void EndGame(void); /**********************************************************/ /**********************************************************/ /* 定义全局变量 */ int gPlayOrder; /*指示当前行棋方 */ struct point gCursor; /*光标在棋盘上的位置 */ char gChessBoard[19][19];/*用于记录棋盘上各点的状态*/ /**********************************************************/ /**********************************************************/
14
bOutWhile = TRUE;/*退出循环标志置为真*/ } /*否则*/ else /*交换行棋方*/ ChangeOrder(); } break; /*是光标移动键*/ case KEYMOVECURSOR: MoveCursor(gPlayOrder,press); break; /*是无效键*/ case KEYINVALID: break; } if(bOutWhile==TRUE) break; } /*游戏结束*/ EndGame(); } /**********************************************************/ /*界面初始化,数据初始化*/ void Init(void) { int i,j; char *Msg[]= { "Player1 key:", " UP----w", " DOWN--s", " LEFT--a", " RIGHT-d", " DO----space", "", "Player2 key:", " UP----up", " DOWN--down", " LEFT--left", " RIGHT-right", " DO----ENTER", "", "exit game:",
4 5 6 6 6 6 7
1.程序中用到的库函数所在头文件应用 #INCLUDE 命令包含进来 7 2.定义符号常量: 7 3.定义棋盘交叉点坐标的数据结构棋盘交叉点坐标的数据结构 7 4.自定义函数原型说明 7 5.定义全局变量定义全局变量 7 6.主函数: 7 7.界面初始化,数据初始化: 7 8. 画棋盘 8 9.交换行棋方 8 10.获取按键值, 如果用户没有按键,空循环 8 11.落子错误处理 8 12.赢棋处理赢棋处理 8 13.走棋: 判断交叉点上有无棋子, 若没有棋子, 则可以落子 8 14.判断当前行百度文库方落子后是否赢棋即判断在指定方向上是否有连续 5 个行棋方的棋子 8 15.判断在指定方向上是否有连续 5 个行棋方的棋子: 8 16.移动光标 9 17.游戏结束处理 9 18.显示当前行棋方 9 19.落子正确处理落子正确处理 9 20.检查用户的按键类别: 9 五、 总体设计结构图
编译预处理
主函数
设计界面
胜负判断
定义其他功能键
10
六、调试与测试
将全部程序分块进行调试, 测试结果运行正常
11
七 、下面是五子棋原程序
/* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */ #include <stdio.h> #include <bios.h> #include <ctype.h> #include <conio.h> #include<math.h> #include<stdio.h> #include<graphics.h> #include<time.h> #define pi 3.1415926 /**********************************************************/ /* 定义符号常量 */ /*定义画棋盘所需的制表符*/ #define CROSSRU 0xbf /*右上角点*/ #define CROSSLU 0xda /*左上角点*/ #define CROSSLD 0xc0 /*左下角点*/ #define CROSSRD 0xd9 /*右下角点*/ #define CROSSL 0xc3 /*左边*/ #define CROSSR 0xb4 /*右边*/ #define CROSSU 0xc2 /*上边*/ #define CROSSD 0xc1 /*下边*/ #define CROSS 0xc5 /*十字交叉点*/ /*定义棋盘左上角点在屏幕上的位置*/ #define MAPXOFT 5 #define MAPYOFT 2 /*定义 1 号玩家的操作键键码*/ #define PLAY1UP 0x1157/*上移--'W'*/ #define PLAY1DOWN 0x1f53/*下移--'S'*/ #define PLAY1LEFT 0x1e41/*左移--'A'*/ #define PLAY1RIGHT 0x2044/*右移--'D'*/ #define PLAY1DO 0x3920/*落子--空格键*/ /*定义 2 号玩家的操作键键码*/ #define PLAY2UP 0x4800/*上移--方向键 up*/ #define PLAY2DOWN 0x5000/*下移--方向键 down*/ #define PLAY2LEFT 0x4b00/*左移--方向键 left*/ #define PLAY2RIGHT 0x4d00/*右移--方向键 right*/ #define PLAY2DO 0x1c0d/*落子--回车键 Enter*/ /*若想在游戏中途退出, 可按 Esc 键*/ #define ESCAPE 0x011b /*定义棋盘上交叉点的状态, 即该点有无棋子 */
2
10
六、调试与测试 七 、下面是五子棋原程序 八. 程序设计总结
11 12 23
3
一 题目与要求
题目:五子棋 要求:利用 C 语言实现小型的五子棋人机对弈游戏
4
二 问题的提出
本人计划编一个五子棋游戏程序,主要是实现人机对弈的功能。
5
三 功能要求
1、实现人机对弈功能; 2、基本的 C 作图的方法及循环控制模块; 3、评分规则及胜负判断。
13
/*主函数*/ void main() { int press; int bOutWhile=FALSE;/*退出循环标志*/ int i,j=0,x,y,k=1; int a=DETECT,b; initgraph(&a,&b,"d:\\tc"); while(!kbhit()) {j+=10; for(i=0;i<=2000;i++) { x=300+100*cos(2*i*pi/1000)*sin(i*pi/1000+j*pi/1000); y=240+100*cos(2*i*pi/1000)*cos(i*pi/1000+j*pi/1000); if(j%500==0) k++; putpixel(x,y,k); } delay(5000); cleardevice(); } getch(); closegraph(); Init();/*初始化图象,数据*/ while(1) { press=GetKey();/*获取用户的按键值*/ switch(CheckKey(press))/*判断按键类别*/ { /*是退出键*/ case KEYEXIT: clrscr();/*清屏*/ bOutWhile = TRUE; break; /*是落子键*/ case KEYFALLCHESS: if(ChessGo(gPlayOrder,gCursor)==FALSE)/*走棋*/ DoError();/*落子错误*/ else { DoOK();/*落子正确*/ /*如果当前行棋方赢棋*/ if(JudgeWin(gPlayOrder,gCursor)==TRUE) { DoWin(gPlayOrder);
(1) 在水平方向 (2) 在垂直方向 (3) 在左下至右上的斜方向 (4) 在左上至右下的斜方向
8
16.移动光标 17.游戏结束处理 18.显示当前行棋方 19.落子正确处理落子正确处理 20.检查用户的按键类别:
(1) 退出键 (2) 落子键 (3) 光标移动键 (4) 按键无效等。
9
五、 总体设计结构图
7.界面初始化,数据初始化:
(1) 先手方为 1 号玩家 (2) 棋盘数据清零 (3) 光标初始位置
7
(4) 显示操作键说明 (5) 显示当前行棋方 (6) 光标移至棋盘的左上角点处
8. 画棋盘
(1) 画棋盘上的交叉点 (2) 交叉点上是一号玩家的棋子 (3) 交叉点上是二号玩家的棋子 (4) 左上角交叉点 (5) 左下角交叉点 (6) 右上角交叉点 (7) 右下角交叉点 (8) 左边界交叉点 (9) 右边界交叉点 (10) 上边界交叉点上边界交叉点 (11) 下边界交叉点 (12) 棋盘中间的交叉点
3.定义棋盘交叉点坐标的数据结构棋盘交叉点坐标的数据 结构 4.自定义函数原型说明 5.定义全局变量定义全局变量 6.主函数:
(1) 初始化图象,数据 (2) 获取用户的按键值 (3) 判断按键类别 (4) 定义退出键( (5) 清屏 (6) 定义落子键( (7) 定义走棋 落子错误和正确 (8) 如果当前行棋方赢棋退出循环标志置, 否则交换行棋方 (9)定义光标移动键和无效键 (10) 游戏结束
相关文档
最新文档