您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 算法设计与分析课程设计报告(五子棋)
西安工业大学计算机科学与工程学院算法设计与分析课程设计题目:五子棋班级:050606人数:13人成员:陈玮高谦侯夕杰马涛宋文彬王伟周仁文邵文清赵瑞红李盈超尉建明陈建军张祥雄学号:050606102050606105050606108050606114050606117050606120050606126050606129050606132040609111040606123050606101040610127时间:2008年元月16日1班级050606学号题目五子棋完成时间1月16日指导教师杨国梁、陈芳小组排名邵文清,赵瑞红,李盈超,尉建明,周仁文,侯夕杰,陈建军,张祥雄陈玮,宋文彬,高谦,马涛,王伟小组成绩个人得分第1名邵文清赵瑞红贡献细节设计,完成voiddraw_box();voidchange();voidjudgekey()的设计并完成实验报告第2名李盈超尉建明贡献主要负责程序的整体规划,完成主函数的设及相关变量的定义,完成voidattentoin()的设计第3名周仁文侯夕杰贡献完成voidjudgewho(intx,inty)的设计第4名陈建军张祥雄贡献完成voiddraw_cicle(intx,inty,intcolor)的设计第5名陈玮宋文彬贡献完成intjudgeresult(intx,inty)的设计第6名高谦,马涛王伟贡献调试并运行程序备注考核标准:1.个人文档资料40%2.软件验收40%3.考勤20%2目录1课程设计报告-------------------31.1问题描述----------------------31.2需求分析---------------------------31.3概要设计-----------------------31.4详细设计-----------------------51.5调试分析---------------------62源程序---------------------63程序的说明文件-------------------134课设总结-----------------------1331.课程设计报告1.1问题描述连珠(五子棋)是有两个人在一盘棋上进行对抗的竞技运动。在对局开始时,先由用户选择哪方先开局,先开局一方将一枚棋子落在一点上,然后由另一方在对方棋周围的交叉点上落子,如此轮流落子,直到某一方首先在棋盘的直线、横线或斜线上形成连续的五子则该方就算获胜。此时,算法结束。当有任何一方想退出时,都可在算法中实现。1.2需求分析(1)、输出游戏规则并由用户决定是否遵守并开局。(2)、要求动态画出棋盘大小。(3)、画棋子并确定其颜色。(4)、玩家轮流下棋。(5)、判断键盘输入哪个键按规则执行操作(6)、判断谁先落棋。(7)判断赢家1.3概要设计流程图:YY开始西安输出游戏规则玩家遵守?谁先下棋,输入棋盘大小sError!4NYNYNY画出s*s大小的棋盘用户决定谁先走白棋先走?画白棋画红棋改变玩家下棋横竖斜有五个相同颜色的棋子相连?白棋?下棋输出:Thewhitewin!输出:Theredwin!51.4详细设计本程序中包含一个主函数和七个子函数,它们的函数名及功能分别如下:voiddraw_box();画棋盘,确定背景色和棋盘色按用户输入大小画出棋盘voiddraw_cicle(intx,inty,intcolor);画棋子,确定棋子大小及颜色画出棋子。voidchange();改变玩家,作战双方轮流下棋。voidjudgewho(intx,inty);判断谁落棋,是1则画出白棋,是2则画出红棋。voidjudgekey();判断键盘输入哪个键按规则执行操作,UP键上移,DOWN键下移,LEFT键左移,RIGHT键右移,ESC键退出,SPACE键确定棋子落点。intjudgeresult(intx,inty);判断赢家,横向竖向斜向够5个相同颜色的棋子则为赢家。voidattentoin();显示游戏规则,按上下左右键移动棋子,按空格键确定棋子落点,不能在棋盘外按空格键。1.5调试分析运行结果:屏幕显示:Pleaseinputwhoisfirst:1or2当输入1时,白棋先走;当输入2时,红棋先走。屏幕显示:Pleaseinputthesizeofchessbox:从键盘输入t值,则6棋盘大小为t*t型。屏幕显示:Left,Right,Up,DownKEYtomove,Spacetoput,ESC-quit及棋盘,棋子,用上下左右键控制棋子向,用空格键确定棋子的落点。当白棋赢时,显示TheWhiteWin!当红棋赢时,显示TheRedWin!算法改进思想:将棋盘由原先的固定大小改进为可动态变化,由原来固定的白棋先走改进为让用户可以选择哪方先落子。2源程序#includestdio.h#includestdlib.h#includegraphics.h#includebios.h#includeconio.h#defineLEFT0x4b00#defineRIGHT0x4d00#defineDOWN0x5000#defineUP0x4800#defineESC0x011b#defineSPACE0x3920#defineBILI20#defineJZ4#defineJS3#defineN19intbox[N][N],s;/*落子点*/intstep_x,step_y;intkey;intflag,i,j;voiddraw_box();voiddraw_cicle(intx,inty,intcolor);voidchange();voidjudgewho(intx,inty);voidjudgekey();intjudgeresult(intx,inty);voidattentoin();7voidattentoin()/*游戏规则*/{charch;printf(Playattentoins:\n\n);printf(1.PressLeft,Right,Up,DownKeytomovePiece\n\n);/*方向键移动棋子*/printf(2.PressSpacetoplacethePiece\n\n);/*空格键确定棋子落点*/printf(3.DONOTpressSpaceoutsideofthedraw_box\n\n);/*棋盘外不能落棋*/printf(DoyouaccepttheabovePlayingattentoins?[Y/Other]:);/*是否遵守*/while(1){ch=getche();if(ch=='Y'||ch=='y')break;elseexit(0);}printf(\n\nwhatsizeofthedraw_box:);scanf(%d,&s);/*输出棋盘大小*/printf(\n\nwhoisthefrist:1or2?);/*谁先落子*/while(1){scanf(%d,&flag);if(flag!=1&&flag!=2)printf(Error!\n);elsebreak;}}voiddraw_box()/*画出棋盘*/{intx1,x2,y1,y2;setbkcolor(LIGHTBLUE);/*背景色*/setcolor(YELLOW);/*文本色*/gotoxy(7,2);printf(Left,Right,Up,DownKEYtomove,Spacetoput,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+JZ)*BILI,(y1+JS)*BILI);/*画横线*/for(x1=1;x1=s;x1++)for(y1=1;y1=s;y1++)box[x1][y1]=0;/*棋盘初始化*/}voiddraw_cicle(intx,inty,intcolor)/*棋子*/{8setcolor(color);/*棋子颜色*/setlinestyle(SOLID_LINE,0,1);/*线条类型*/x=(x+JZ)*BILI;y=(y+JS)*BILI;circle(x,y,8);/*画半径为8的棋子*/}voidjudgekey(){switch(key){caseLEFT:/*左键控制棋子左移*/if(step_x-10)break;else{for(i=step_x-1,j=step_y;i=1;i--)if(box[i][j]==0){draw_cicle(step_x,step_y,LIGHTBLUE);break;}if(i1)break;step_x=i;judgewho(step_x,step_y);break;}caseRIGHT:/*右键控制棋子右移*/if(step_x+1s)break;else{for(i=step_x+1,j=step_y;i=s;i++)if(box[i][j]==0){draw_cicle(step_x,step_y,LIGHTBLUE);break;}if(is)break;step_x=i;judgewho(step_x,step_y);break;}caseDOWN:/*下键控制棋子下移*/if(step_y+1s)break;else9{for(i=step_x,j=step_y+1;j=s;j++)if(box[i][j]==0){draw_cicle(step_x,step_y,LIGHTBLUE);break;}if(js)break;step_y=j;judgewho(step_x,step_y);break;}caseUP:/*上键控制棋子上移*/if(step_y-10)break;else{for(i=step_x,j=step_y-1;j=1;j--)if(box[i][j]==0){draw_cicle(step_x,step_y,LIGHTBLUE);break;}if(j1)break;step_y=j;judgewho(step_x,step_y);break;}caseESC:break;/*ESC键退出游戏*/caseSPACE:/*空格键控制落子*/if(step_x=1&&step_x=s&&step_y=1&&step_y=s){if(box[step_x][step_y]==0){box[step_x][step_y]=flag;if(judgeresult(step_x,step_y)==1){sound(1000);delay(1000);nosound();gotoxy(30,4);cleardevice();if(flag==1){settextstyle(3,0,5);outtextxy(120,120,TheWhiteWin!);/*显示白棋赢*/10setcolor(14);}if(flag==2){settextstyle(3,0,5);outtextxy(120,120,TheRedWin!);/*显示红棋赢*/setcolor(15);settextstyle(3,0,5);}getch();exit(0);}change();break;}}elsebreak;}}voidchange()/*改变玩家*/{if(flag==1)flag=2;elseflag=1;}voidjudgewho(intx,inty){if(flag==1)draw_cicle(x,y,15);/*画白棋*/if(flag==2)draw_cicle(x,y,4);/*画红棋*/}intjudgeresult(intx,inty){intj,k,n;w
本文标题:算法设计与分析课程设计报告(五子棋)
链接地址:https://www.777doc.com/doc-2174523 .html