北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第1页共23页计算机程序设计基础(C语言)课程设计题目:简易五子棋软件设计院(系、部):信息工程学院姓名:班级:指导教师签名2011年7月7日·北京北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第2页共23页目录任务书--------------------------------------------第3页总体设计------------------------------------------第4页模块划分------------------------------------------第4页算法说明------------------------------------------第4页流程图--------------------------------------------第5页程序测试------------------------------------------第9页结论----------------------------------------------第22页体会及建议----------------------------------------第22页参考文献------------------------------------------第23页北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第3页共23页任务书题目9:简易五子棋软件设计一设计目的:通过一个综合应用程序的开发,掌握C语言程序设计的基本方法和常用算法,学会从实际应用出发来分析问题,进行软件规划和算法设计,逐步求精,养成良好的编程风格,熟悉软件设计的基本步骤,为后续课程的学习打下良好的基础。功能:在单机上通过操作键盘来进行二人对战,五个棋子连在一起时能显示输赢。二基本要求:(1)键盘上事先设定8个按键,分作两组,每组四个,分别代表两个人用来控制棋子的上下左右键。(2)盘,15条横线,15条竖线,在直线交点处下棋子(实心圆形)。(3)黑子先行,黑白交替下子,在棋盘上设定一个与棋盘格大小边长相等的正方形,初始状态,正方形的中心位于期盼的中心点。当一方欲走棋的时候,应用四个按键来控制所要下棋的位置,每按一次按键,正方形都要向相应方向移动一个格,但不能让其移出边界。当按下回车键时,应在正方形所在位置放下一个棋子,然后此组按键不能操作,换另一个人下棋,用另一组按键,规则同前。(4)当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。棋局结束后,任何一方均不能继续操作。相关知识:图形绘制、音乐制作、键盘响应功能扩充:(1)让喇叭发出某种声音,将要移出边界时,发出另一种警告声音(2)其他自己定义的功能。北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第4页共23页三总体设计本程序是为了实现运行简易五子棋游戏的运行。基于结构化设计思想的指导,本程序在设计的同时,将各个功能分为多个自定义函数来实现,最后在”main”函数里进行功能的整合。程序设计大体思路:由欢迎界面进入主程序,介绍游戏玩的方式,作者。若想进入游戏按y后回车,若想退出游戏按n即可。画16*16的五子棋棋盘,进入游戏界面,当每次落子时判断是否当前棋子是否有同色的五个棋子,当棋子接近棋盘边界时,有报警音乐响起,当有五个同色的棋子时,播放胜利的音乐并且显示赢棋的玩家。音乐制作:播放胜利的音乐,棋子每步的音乐及接近边界的报警声音。四模块划分声音模块棋盘模块图形绘制图形填充五算法说明步骤1:初始化显示器,设置背景颜色和字体颜色及大小,输出欢迎界面,等待用户输入y进入游戏界面。步骤2:得到输入键后,进入游戏界面,画16*16的棋盘。步骤3:根据”Key值,应用”switch”语句进行选择。步骤4:判断当前棋子是否获胜。步骤5:清除屏幕上的棋盘,播放胜利音乐,恭喜赢得玩家。北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第5页共23页六流程图主函数main()Step1调用welcomeinfo()进行欢迎词Step2调用Drawboard()画棋盘Step3调用showmessage()显示赢棋信息Step4调用closegraph()关闭图形系统函数welcomeinfo()Step1移动光标到指定位置Step2显示欢迎信息Step3判断是否要进入游戏开始调用welcomeinfo()进行欢迎词调用Drawboard()画棋盘调用showmessage()显示赢棋信息调用closegraph()关闭图形系统退出程序开始移动光标到指定位置(x,y)显示欢迎信息Doyouwanttoentergame(y/n)Ch=’n’||ch=’N’?进入程序Exit(0)10北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第6页共23页函数Drawboard()Step1定义X1,X2,Y1,Y2和背景Step1画16条竖线Step1画16条横线开始X1=1,X2=16X1=16X1+1=X1X1++Y1=1,Y2=16Y2=16Y1+1=Y1Y1++结束00北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第7页共23页函数Alternation()函数music()Step1定义变量初值Step2for语句Step3关闭声音函数函数Resultcheck()Step1向八个方向数棋子Step2判断同一种棋子是否为5个Step3退出函数开始Intflag=1Flag==1Flag=2Flag=1结束0开始Freq=50Freq100Freq+=1Freq++结束nosound01北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第8页共23页开始Intj,k,n1=0,n2=0;While(1)J=x,k=yj=1j--Status[j][k]==flagN1+n2-1=5Return1breakN1++breakJ=x,k=yJ=15J++Status[j][k]==flagN2++break0001101011北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第9页共23页函数done()Step1:根据不同key值进行不同操作Step2:判断下一步是否超边界Step3:在空白的地方落棋子七程序测试#includestdio.h#includestdlib.h#includegraphics.h#includebios.h#includeconio.h#includedos.h/*编译预处理,定义按键码*/#defineLEFT0x4b00/*左移--方向键left*/#defineRIGHT0x4d00/*右移--方向键right*/#defineDOWN0x5000/*下移--方向键down*/开始Switch(key)leftRightDownUpEscEnter向左向右向下向上退出落棋出去运算结果结束北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第10页共23页#defineUP0x4800/*上移--方向键up*/#defineENTER0x1c0d/*ENTER键表示落子*//*若想在游戏中途退出,可按Esc键*/#defineESC0x011b/*设置偏移量*/#defineOFFSET20#defineOFFSET_x4#defineOFFSET_y3/*定义数组大小*/#defineN16/*定义全局变量*/intstatus[N][N];/*定义的数组,保存状态*/intstep_x,step_y;/*行走的坐标*/intkey;/*获取按下的键盘的键*/intflag;/*玩家标志*//*自定义函数原型*/voidmusic();voidWinMusic();voidDrawBoard();voidDrawCircle(intx,inty,intcolor);voidAlternation();voidJudgePlayer(intx,inty);voidDone();intResultCheck(intx,inty);voidWelcomeInfo();voidShowMessage();/*定义函数*//*显示欢迎信息函数*/voidWelcomeInfo(){charch;/*移动光标到指定位置*/gotoxy(12,4);/*显示欢迎信息*/printf(Welcomeyoutogobangword!);gotoxy(12,6);printf(1.Youcanusetheup,down,leftandrightkeytomovethechessman,);gotoxy(12,8);printf(andyoucanpressENTERkeytoenterafteryoumoveit!);gotoxy(12,10);北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第11页共23页printf(2.YoucanuseEsckeytoexitthegametoo!);gotoxy(12,12);printf(3.Donnotmovethepiecesoutofthechessboard!);gotoxy(12,14);printf(GameProducer:********StudentNumber:******school:BIPT);gotoxy(12,16);printf(DOyouwanttocontinue?(Y/N));ch=getchar();/*判断程序是否要继续进行*/if(ch=='n'||ch=='N')/*如果不继续进行,则推出程序*/exit(0);}/*走棋音乐*/voidmusic(){intfreq;for(freq=50;freq100;freq+=1){sound(freq);delay(1000);}nosound();}/*画棋盘函数*/voidDrawBoard(){intx1,x2;inty1,y2;/*设置背景色*/setbkcolor(2);/*设置线条颜色*/setcolor(1);/*设置线条风格、宽度*/setlinestyle(DOTTED_LINE,1,1);/*按照预设的偏移量开始画棋盘*//*画16条竖线*/for(x1=1,y1=1,y2=16;x1=16;x1++)line((x1+OFFSET_x)*OFFSET-8.5,(y1+OFFSET_y)*OFFSET-8,(x1+OFFSET_x)*OFFSET-8.5,(y2+OFFSET_y)*OFFSET-8);北京石油化工学院BEIJINGINSTITUTEOFPETROCHEMICALTECHNOLOGY课程设计用纸第12页共23页/*画16条横线*/for(x1=1,y1=1,x2=16;y1=16;y1++)line((x1+OFFSET_x)*OFFSET-8.5,(y1+OFFSET_y)*OFFSET-8.5,(x2+OFFSET_x)*OFFSET-8.5,(y1+OFFSET_y)*OFFSET-8.5);/*将各个点的状态设置为0*/for(x1=1;x1=16;x1++)for(y1=1;y1=16;y1++)statu