《算法设计与分析课程设计报告(五子棋)(共14页).doc》由会员分享,可在线阅读,更多相关《算法设计与分析课程设计报告(五子棋)(共14页).doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上西 安 工 业 大 学计算机科学与工程学院算 法 设 计 与 分 析 课 程 设 计题 目: 五子棋 班 级: 人 数: 13人 成 员: 陈玮 高谦 侯夕杰 马涛 宋文彬 王伟 周仁文 邵文清赵瑞红 李盈超 尉建明 陈建军 张祥雄 学 号: 时 间: 2008年元月16日 班级 学号题目五子棋完成时间1月16日指导教师杨国梁、陈芳小组排名邵文清,赵瑞红,李盈超,尉建明,周仁文,侯夕杰, 陈建军 , 张祥雄 陈玮,宋文彬 , 高谦 ,马涛 , 王伟 小组成绩个人得分第1名邵文清赵瑞红贡献细节设计,完成void draw_box();void change();void
2、 judgekey()的设计并完成实验报告第2名李盈超尉建明贡献主要负责程序的整体规划,完成主函数的设及相关变量的定义,完成void attentoin()的设计第3名周仁文侯夕杰贡献完成void judgewho(int x,int y)的设计第4名 陈建军 张祥雄 贡献完成void draw_cicle(int x,int y,int color)的设计第5名陈玮宋文彬 贡献完成int judgeresult(int x,int y)的设计第6名高谦 ,马涛 王伟 贡献调试并运行程序备注考核标准:1. 个人文档资料40%2. 软件验收40%3. 考勤20%-131. 课程设计报告1.1问题
3、描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。当有任何一方想退出时,都可在算法中实现。 1.2需求分析 (1)、输出游戏规则并由用户决定是否遵守并开局。 (2)、要求动态画出棋盘大小。(3)、画棋子并确定其颜色。 (4)、玩家轮流下棋。(5)、判断键盘输入哪个键按规则执行操作 (6)、判断谁先落棋。 (7)判断赢家 开始西 安 工 业 大 学计算机科学与工程学院算 法 设 计
4、 与 分 析 课 程 设 计题 目: 五子棋 班 级: 人 数: 13人 成 员: 陈玮 高谦 侯夕杰 马涛 宋文彬 王伟 周仁文 邵文清赵瑞红 李盈超 尉建明 陈建军 张祥雄 学 号: 时 间: 2008年元月16日 目 录1课程设计报告-1 1.1问题描述-1 1.2需求分析-1 1.3概要设计-1 1.4详细设计-页码 1.5调试分析-页码2源程序-页码3程序的说明文件-页码4课设总结-页码1. 课程设计报告1.1问题描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此
5、轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。当有任何一方想退出时,都可在算法中实现。 1.2需求分析 (1)、输出游戏规则并由用户决定是否遵守并开局。 (2)、要求动态画出棋盘大小。(3)、画棋子并确定其颜色。 (4)、玩家轮流下棋。(5)、判断键盘输入哪个键按规则执行操作 (6)、判断谁先落棋。 (7)判断赢家1.3概要设计 流程图:Y Y N Y N Y N Y 1.4详细设计 1.5调试分析 运行结果:屏幕显示:Please input who is first:1 or 2 当输入1时,白棋先走;当输入2时,红棋先走。屏幕显示:Ple
6、ase input the size of chessbox:从键盘输入t值,则棋盘大小为t*t型。屏幕显示:Left, Right, Up, Down KEY to move, Space to put, ESC-quit 及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点 。当白棋赢时,显示The White Win ! 当红棋赢时,显示The Red Win !遇到的问题:算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。2源程序#include#include#include#include#include#define
7、 LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int boxNN,s; /*落子点*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewh
8、o(int x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戏规则*/ char ch ; printf(Play attentoins:nn); printf(1. Press Left,Right,Up,Down Key to move Piecenn); printf(2. Press Space to place the Piecenn); printf(3. DO NOT press Space outside of the draw_boxnn);
9、printf(Do you accept the above Playing attentoins? Y/Other:); while(1) ch=getche(); if(ch=Y|ch=y) break ; else exit(0); printf(nnwhat size of the draw_box:); scanf(%d,&s); printf(nnwho is the frist:1 or 2? ); while(1) scanf(%d,&flag); if(flag!=1&flag!=2) printf(Error!n); else break; void draw_box()
10、/*画出棋盘*/ int x1,x2,y1,y2 ; setbkcolor(LIGHTBLUE); setcolor(YELLOW); gotoxy(7,2); printf(Left, Right, Up, Down KEY to move, Space to put, ESC-quit.); for(x1=1,y1=1,y2=s;x1=s;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2+JS)*BILI); for(x1=1,y1=1,x2=s;y1=s;y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+J
11、Z)*BILI,(y1+JS)*BILI); for(x1=1;x1=s;x1+) for(y1=1;y1=s;y1+) boxx1y1=0 ;void draw_cicle(int x,int y,int color) /*棋子*/ setcolor(color); setlinestyle(SOLID_LINE,0,1); x=(x+JZ)*BILI ; y=(y+JS)*BILI ; circle(x,y,8);void judgekey() switch(key) case LEFT : if(step_x-1=1;i-) if(boxij=0) draw_cicle(step_x,s
12、tep_y,LIGHTBLUE); break ; if(is) break ; else for(i=step_x+1,j=step_y;is)break ; step_x=i ; judgewho(step_x,step_y); break ; case DOWN : if(step_y+1s) break ; else for(i=step_x,j=step_y+1;js)break ; step_y=j ; judgewho(step_x,step_y); break ; case UP : if(step_y-1=1;j-) if(boxij=0) draw_cicle(step_x
13、,step_y,LIGHTBLUE); break ; if(j=1&step_x=1&step_y=1;j-) /*水平向左数*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;j5) return(1); n=0 ; for(j=x,k=y;k=1;k-) /*垂直向上数*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;k5) return(1); n=0 ; for(j=x,k=y;j=1,k=1;j-,k-) /*向左上方数*/ if(boxjk=flag) n+; else break ; for(
14、j=x,k=y;j=s,k5) return(1); n=0 ; for(j=x,k=y;j=1;j+,k-) /*向右上方数*/ if(boxjk=flag) n+; else break ; for(j=x,k=y;j=1,k5) return(1); return(0); void main() int gdriver=VGA,gmode=VGAHI; clrscr(); attentoin(); initgraph(&gdriver,&gmode,c:tc); draw_box(); do step_x=0,step_y=0 ; judgewho(step_x-1,step_y-1);
15、 do while(bioskey(1)=0); key=bioskey(0); judgekey(); while(key!=SPACE&key!=ESC); while(key!=ESC); closegraph();_3程序的说明文件 本程序中包含一个主函数和七个子函数,它们的函数名及功能分别如下:void draw_box();画棋盘void draw_cicle(int x,int y,int color);画棋子并确定其颜色void change();改变玩家void judgewho(int x,int y);判断谁落棋void judgekey();判断键盘输入哪个键按规则执行
16、操作int judgeresult(int x,int y);判断赢家void attentoin();显示游戏规则4课设总结 从1月14日开始,我们进行了为期一周的算法课程设计。通过这次课程设计,我们拓宽了知识面,锻炼了能力,综合素质得到较大提高。 本次课程设计,使我们对从五子棋设计方案到设计的基本过程的设计方法、步骤、思路、有一定的了解与认识。在课程设计过程中,我们基本能按照规定的程序进行,先针对五子棋的设计收集、调查有关资料,其间,同组成员之间进行几次方案的讨论、修改,再讨论、再修改,最后定案。设计方案确定后,又在老师指导下进行扩充详细设计,最终用c语言实现了可视化的五子棋算法。整个过程
17、周密有序,对我们按时高质完成课程设计非常有利! 对我们计算机专业的本科生来说,实际能力的培养至关重要,而这种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。 课程设计达到了专业学习的预期目的。课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。 1.3概要设计 流程图:输出游戏规则 Error!玩家遵守?Y谁先下棋,输入棋盘
18、大小s Y画出s*s大小的棋盘用户决定谁先走白棋先走? N画红棋 画白棋 Y 下棋 改变玩家 下棋 N横竖斜有五个相同颜色的棋子相连? 白棋? Y N输出:The red win!输出:The white win! Y1.4详细设计 本程序中包含一个主函数和七个子函数,它们的函数名及功 能分别如下:void draw_box();画棋盘,确定背景色和棋盘色按用户输入大小画 出棋盘void draw_cicle(int x,int y,int color);画棋子,确定棋子大小及颜色画出棋子。void change();改变玩家,作战双方轮流下棋。void judgewho(int x,int
19、y);判断谁落棋,是1则画出白棋,是2则画出红棋。void judgekey();判断键盘输入哪个键按规则执行操作,UP 键上移,DOWN键下移,LEFT键左移,RIGHT键右移,ESC键退出,SPACE键确定棋子落点。int judgeresult(int x,int y);判断赢家,横向竖向斜向够5个相同颜色的棋子则为赢家。void attentoin();显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。1.5调试分析 运行结果:屏幕显示:Please input who is first:1 or 2 当输入1时,白棋先走;当输入2时,红棋先走。屏幕显示:
20、Please input the size of chessbox:从键盘输入t值,则棋盘大小为t*t型。屏幕显示:Left, Right, Up, Down KEY to move, Space to put, ESC-quit 及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点 。当白棋赢时,显示The White Win ! 当红棋赢时,显示The Red Win !算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。2源程序#include#include#include#include#include#define LE
21、FT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b#define SPACE 0x3920#define BILI 20#define JZ 4#define JS 3#define N 19int boxNN,s; /*落子点*/int step_x,step_y ;int key ;int flag,i,j ;void draw_box();void draw_cicle(int x,int y,int color);void change();void judgewho(i
22、nt x,int y);void judgekey();int judgeresult(int x,int y);void attentoin();void attentoin() /*游戏规则*/ char ch ; printf(Play attentoins:nn); printf(1. Press Left,Right,Up,Down Key to move Piecenn);/*方向键移动棋子*/ printf(2. Press Space to place the Piecenn);/*空格键确定棋子落点*/ printf(3. DO NOT press Space outside
23、 of the draw_boxnn);/*棋盘外不能落棋*/ printf(Do you accept the above Playing attentoins? Y/Other:);/*是否遵守*/ while(1) ch=getche(); if(ch=Y|ch=y) break ; else exit(0); printf(nnwhat size of the draw_box:); scanf(%d,&s); /*输出棋盘大小*/ printf(nnwho is the frist:1 or 2? ); /*谁先落子*/ while(1) scanf(%d,&flag); if(fl
24、ag!=1&flag!=2) printf(Error!n); else break; void draw_box() /*画出棋盘*/ int x1,x2,y1,y2 ; setbkcolor(LIGHTBLUE); /*背景色*/ setcolor(YELLOW); /*文本色*/ gotoxy(7,2); printf(Left, Right, Up, Down KEY to move, Space to put, ESC-quit.); for(x1=1,y1=1,y2=s;x1=s;x1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x1+JZ)*BILI,(y2
25、+JS)*BILI);/*画竖线*/ for(x1=1,y1=1,x2=s;y1=s;y1+) line(x1+JZ)*BILI,(y1+JS)*BILI,(x2+JZ)*BILI,(y1+JS)*BILI); /*画横线*/ for(x1=1;x1=s;x1+) for(y1=1;y1=s;y1+) boxx1y1=0 ; /*棋盘初始化*/void draw_cicle(int x,int y,int color) /*棋子*/ setcolor(color); /*棋子颜色*/ setlinestyle(SOLID_LINE,0,1); /*线条类型*/ x=(x+JZ)*BILI ; y=(y+JS)*BILI ; circle(x,y,8); /*画半径为8的棋子*/void judgekey() switch(key) case LEFT : /*左键控制棋子左移*/ if(step_x-1=1;i-)