计算机程序设计基础课程设计论文_第1页
计算机程序设计基础课程设计论文_第2页
计算机程序设计基础课程设计论文_第3页
计算机程序设计基础课程设计论文_第4页
计算机程序设计基础课程设计论文_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、北京石油化工学院 BEIJING INSTITUTE OF PETROCHEMICAL TECHNOLOGY 课程设计用纸 计算机程序设计基础(C语言)课程设计题目:简易五子棋软件设计 院(系、部): 信息工程学院 姓 名: 班 级: 指导教师签名 2011 年7月7 日北京目录任务书-第 3 页总体设计-第 4 页模块划分-第 4 页算法说明-第 4 页流程图-第 5 页程序测试-第 9 页结论-第 22 页体会及建议-第 22 页参考文献-第 23 页任务书题目9 :简易五子棋软件设计一 设计目的:通过一个综合应用程序的开发,掌握C语言程序设计的基本方法和常用算法,学会从实际应用出发来分析

2、问题,进行软件规划和算法设计,逐步求精,养成良好的编程风格,熟悉软件设计的基本步骤,为后续课程的学习打下良好的基础。功能:在单机上通过操作键盘来进行二人对战,五个棋子连在一起时能显示输赢。二 基本要求:(1)键盘上事先设定8个按键,分作两组,每组四个,分别代表两个人用来控制棋子的上下左右键。(2) 盘,15条横线,15条竖线,在直线交点处下棋子(实心圆形)。(3) 黑子先行,黑白交替下子,在棋盘上设定一个与棋盘格大小边长相等的正方形,初始状态,正方形的中心位于期盼的中心点。当一方欲走棋的时候,应用四个按键来控制所要下棋的位置,每按一次按键,正方形都要向相应方向移动一个格,但不能让其移出边界。当

3、按下回车键时,应在正方形所在位置放下一个棋子,然后此组按键不能操作,换另一个人下棋,用另一组按键,规则同前。(4) 当任何一方有五个棋子沿着横,竖,斜连在一起时,系统自动判断赢棋,并显示黑方或白方胜利。棋局结束后,任何一方均不能继续操作。相关知识:图形绘制、音乐制作、键盘响应功能扩充:(1)让喇叭发出某种声音,将要移出边界时,发出另一种警告声音 (2)其他自己定义的功能。三 总体设计本程序是为了实现运行简易五子棋游戏的运行。基于结构化设计思想的指导,本程序在设计的同时,将各个功能分为多个自定义函数来实现,最后在”main”函数里进行功能的整合。程序设计大体思路:由欢迎界面进入主程序,介绍游戏玩

4、的方式,作者。若想进入游戏按y后回车,若想退出游戏按n即可。画16*16的五子棋棋盘,进入游戏界面,当每次落子时判断是否当前棋子是否有同色的五个棋子,当棋子接近棋盘边界时,有报警音乐响起,当有五个同色的棋子时,播放胜利的音乐并且显示赢棋的玩家。音乐制作: 播放胜利的音乐,棋子每步的音乐及接近边界的报警声音。四 模块划分声音模块棋盘模块图形绘制图形填充五 算法说明步骤1: 初始化显示器,设置背景颜色和字体颜色及大小,输出欢迎界面,等待用户输入y进入游戏界面。步骤2: 得到输入键后,进入游戏界面,画16*16的棋盘。步骤3: 根据”Key值,应用”switch”语句进行选择。步骤4: 判断当前棋子

5、是否获胜。步骤5: 清除屏幕上的棋盘,播放胜利音乐,恭喜赢得玩家。六 流程图主函数 main( )Step1 调用welcomeinfo( )进行欢迎词Step2 调用Drawboard( )画棋盘Step3 调用show message( )显示赢棋信息Step4 调用closegraph( )关闭图形系统开始调用welcomeinfo()进行欢迎词调用Drawboard()画棋盘调用show message()显示赢棋信息调用closegraph()关闭图形系统退出程序函数welcomeinfo( )Step1 移动光标到指定位置Step2 显示欢迎信息Step3 判断是否要进入游戏开始移

6、动光标到指定位置(x,y)显示欢迎信息Do you want to enter game(y/n)Ch=n|ch=N?进入程序Exit(0)10函数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函数Alternation( )开始Int flag=1Flag=1Flag=2Flag=1结 束0函数music( )Step1 定义变量初值Step2 for 语句Step3 关闭声音函数开 始Freq=50Freq=1

7、j-Statusjk=flag N1+n2-1=5Return 1breakN1+breakJ=x,k=yJ=15J+Statusjk=flagN2+break0001101011函数done ( )Step1:根据不同key值进行不同操作Step2:判断下一步是否超边界Step3:在空白的地方落棋子 开始Switch(key)leftRightDownUpEscEnter向左向右向下向上退出落棋出去运算结果结束七 程序测试#include#include#include#include#include#include/*编译预处理,定义按键码*/#define LEFT 0x4b00 /*左

8、移-方向键left*/#define RIGHT 0x4d00 /*右移-方向键right*/#define DOWN 0x5000 /*下移-方向键down*/ #define UP 0x4800 /*上移-方向键up*/#define ENTER 0x1c0d /*ENTER键表示落子*/*若想在游戏中途退出, 可按 Esc 键*/#define ESC 0x011b /*设置偏移量*/#define OFFSET 20#define OFFSET_x 4#define OFFSET_y 3/*定义数组大小*/#define N 16/*定义全局变量*/int statusNN; /*定义

9、的数组,保存状态*/int step_x,step_y;/*行走的坐标*/int key ; /*获取按下的键盘的键*/int flag; /*玩家标志*/*自定义函数原型*/void music();void WinMusic();void DrawBoard();void DrawCircle(int x,int y,int color);void Alternation();void JudgePlayer(int x,int y);void Done();int ResultCheck(int x,int y);void WelcomeInfo();void ShowMessage()

10、;/*定义函数*/*显示欢迎信息函数*/void WelcomeInfo() char ch ; /*移动光标到指定位置*/ gotoxy(12,4); /*显示欢迎信息*/ printf(Welcome you to gobang word!); gotoxy(12,6); printf(1.You can use the up,down,left and right key to move the chessman,); gotoxy(12,8); printf( and you can press ENTER key to enter after you move it !); goto

11、xy(12,10); printf(2.You can use Esc key to exit the game too !); gotoxy(12,12); printf(3.Don not move the pieces out of the chessboard !); gotoxy(12,14); printf(Game Producer: *Student Number:* school:BIPT); gotoxy(12,16); printf(DO you want to continue ?(Y/N); ch=getchar(); /*判断程序是否要继续进行*/ if(ch=n|

12、ch=N) /*如果不继续进行,则推出程序*/ exit(0);/*走棋音乐*/void music()int freq;for(freq=50;freq100;freq+=1)sound (freq);delay(1000);nosound();/*画棋盘函数*/void DrawBoard() int x1,x2; int y1,y2; /*设置背景色*/ setbkcolor(2); /*设置线条颜色*/ setcolor(1); /*设置线条风格、宽度*/ setlinestyle(DOTTED_LINE,1,1); /*按照预设的偏移量开始画棋盘*/ /*画16条竖线*/ for(x

13、1=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); /*画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;

14、x1=16;x1+) for(y1=1;y1=16;y1+) statusx1y1=0; /*显示帮助信息*/ setcolor(14); /*设置字体、大小*/ settextstyle(1,0,1); outtextxy(460,61, Player key:); setcolor(9); settextstyle(3,0,1);outtextxy(460,84,*); setcolor(5); settextstyle(3,0,1); outtextxy(460,100,play1 UP-up ); outtextxy(460,130,play1 DOWN-down ); outtext

15、xy(460,160,play1 LEFT-left); outtextxy(460,190,play1 RIGHT-right); setcolor(6); settextstyle(3,0,1); outtextxy(460,210,play2 UP-up ); outtextxy(460,240,play2 DOWN-down); outtextxy(460,270,play2 LEFT-left); outtextxy(460,300,play2 RIGHT-right); setcolor(9); settextstyle(3,0,1); outtextxy(460,330,ENTE

16、R-enter); setcolor(9); settextstyle(3,0,1); outtextxy(460,360,*); setcolor(14); settextstyle(1,0,1); outtextxy(460,380, Exit:); setcolor(9); settextstyle(3,0,1); outtextxy(460,410, ESC); setcolor(15); settextstyle(3,0,3); outtextxy(95,380,Welcome to gobang word !); outtextxy(95,420,Student Number: )

17、;/*画圆函数*/void DrawCircle(int x,int y,int color) setcolor(color); /*设置画圆线条的风格,宽度,这里设置为虚线*/ setlinestyle(SOLID_LINE,0,1); x=(x+OFFSET_x)*OFFSET+0.5; y=(y+OFFSET_y)*OFFSET+0.5; /*以(x,y)为圆心,8为半径画圆*/ circle(x,y,8); setfillstyle(1,color); floodfill(x,y,color); music();/*胜利时放的音乐*/void WinMusic()int i,j;int

18、 fr=392,392,440,294,262,262,220,294,392,392, 440,532,440,392,262,262,220,294,392,294, 262,247,220,196,392,294,330,294,262,262, 220,294,330,294,262,294,262,247,220,196;int tim=4,2,2,8,4,2,2,8,4,4,2,2,2,2,4,2,2,8,4,4, 4,2,2,4,4,4,2,2,4,2,2,2,2,2,2,2,2,2,2,12;for(i=0;i=1;j-) if(statusjk=flag) n1+; else

19、 break; /*水平向右数*/ for(j=x,k=y;j=5) return(1); /*对垂直方向进行判断是否有5个同色的圆*/ n1=0; n2=0; /*垂直向上数*/ for(j=x,k=y;k=1;k-) if(statusjk=flag) n1+; else break ; /*垂直向下数*/ for(j=x,k=y;k=5) return(1); /*从左上方到右下方进行判断是否有5个同色的圆*/ n1=0; n2=0; /*向左上方数*/ for(j=x,k=y;(j=1)&(k=1);j-,k-) if(statusjk=flag) n1+; else break; /

20、*向右下方数*/ for(j=x,k=y;(j=15)&(k=5) return(1); /*从右上方到左下方进行判断是否有5个同色的圆*/ n1=0; n2=0; /*向右上方数*/ for(j=x,k=y;(j=1);j+,k-) if(statusjk=flag) n1+; else break; /*向左下方数*/ for(j=x,k=y;(j=1)&(k=5) return(1); return(0); /*执行下棋函数*/void Done() int i ; int j ; /*根据不同的key值进行不同的操作*/ switch(key) /*如果是向左移动的*/ case LE

21、FT: /*如果下一步超出棋盘左边界则什么也不作*/ if(step_x-1=1;i-) if(statusij=0) /*每移动一步画一个圆,消除移动的过程*/ DrawCircle(step_x,step_y,2); break ; if(i15) /*报警音乐*/ sound(1000); /*扬声器的发生时间,为1秒钟*/ delay(1000); nosound(); break ; else for(i=step_x+1,j=step_y;i15)break ; step_x=i ; /*根据不同的行棋者画不同颜色的圆*/ JudgePlayer(step_x,step_y); /

22、*显示行棋一方是谁*/ break ; /*如果是向下移动的*/ case DOWN : /*如果下一步超出棋盘下边界则什么也不作*/ if(step_y+1)15) /*报警音乐*/ sound(1000); /*扬声器的发生时间,为1秒钟*/ delay(1000); nosound(); break ; else for(i=step_x,j=step_y+1;j15)break ; step_y=j ; JudgePlayer(step_x,step_y); break ; /*如果是向上移动的*/ case UP : /*报警音乐*/ if(step_y-1)=1;j-) if(st

23、atusij=0) DrawCircle(step_x,step_y,2); break ; if(j=1&step_x=1&step_y=15) /*按下确定键后,如果棋子当前位置的状态为0*/ if(statusstep_xstep_y=0) /*则更改棋子当前位置的状态在flag,表示是哪个行棋者行的棋*/ statusstep_xstep_y=flag ; /*如果判断当前行棋者获胜*/ if(ResultCheck(step_x,step_y)=1) gotoxy(30,4); setbkcolor(BLUE); /*清除图形屏幕*/ cleardevice(); /*为图形输出设置

24、当前视口*/ setviewport(100,100,540,380,1); /*绿色实填充*/ setfillstyle(1,2); setcolor(YELLOW); /*画矩形*/ rectangle(0,0,439,279); floodfill(50,50,14); setcolor(12); settextstyle(1,0,5); /*三重笔划字体, 水平放大5倍*/ outtextxy(20,20,Congratulation !); setcolor(15); settextstyle(3,0,4); /*如果是Player1获胜,显示获胜信息*/ if(flag=1) /*

25、无衬笔划字体, 水平放大5倍*/ outtextxy(20,120,Player1 win the game !); WinMusic(); /*如果是Player1获胜,显示获胜信息*/ if(flag=2) /*无衬笔划字体, 水平放大5倍*/ outtextxy(20,120,Player2 win the game !); WinMusic(); setcolor(14); settextstyle(2,0,8); getch(); exit(0); /*如果当前行棋者没有获胜,则交换行棋方*/ Alternation(); /*提示行棋方是谁*/ ShowMessage(); bre

26、ak; else break ; /*显示行棋方函数*/void ShowMessage() /*轮到Player1行棋*/ if(flag=1) setcolor(2); settextstyle(1,0,1); gotoxy(100,30); /*覆盖原有的字迹*/ outtextxy(100,30,Its turn to Player2 !); setcolor(12); settextstyle(1,0,1); outtextxy(100,30,Its turn to Player1 !); /*轮到Player2行棋*/ if(flag=2) setcolor(2); settext

27、style(1,0,1); /*覆盖原有的字迹*/ outtextxy(100,30,Its turn to Player1 !); setcolor(12); settextstyle(1,0,1); gotoxy(100,20); outtextxy(100,30,Its turn to Player2 !); /*主函数*/int main() int gdriver; int gmode; int errorcode; /*清空文本模式窗口*/ clrscr(); /*显示欢迎信息*/ WelcomeInfo(); gdriver=DETECT; gmode=0; /*初始化图形系统*

28、/ initgraph(&gdriver,&gmode,d:tc); /*设置flag初始值,默认是Player1先行*/ flag=1; /*画棋盘*/ DrawBoard(); ShowMessage(); do step_x=0 ; step_y=0 ; JudgePlayer(step_x-1,step_y-1); do /*如果没有键按下,则bioskey(1)函数将返回0*/ while(bioskey(1)=0); /*获取从键盘按下的键值*/ key=bioskey(0); /*根据获得的键值进行下棋操作*/ Done(); while(key!=ENTER&key!=ESC)

29、; while(key!=ESC); /*关闭图形系统*/ closegraph(); return 0;八 结论:本次课程设计使我学到了很多东西,当我独立将程序的主题写出来时,我很高兴,因为这个程序不象想象中的那么简单,经过几次调试后,我发现最出的程序虽然能运行,能实现预期目标,但整个程序繁杂结构不清楚,后与同学老师交流次程序设计方法,采纳了几个比较好的设计理念,将整个程序进行了模块的细致划分,并整理,将住函数中的非自定义表达式语句大幅缩减。主函数中大量使用的是自定义函数调用,这样一来使主函数结构清晰。最终程序经过几次重大修改后变得更加人性化,增加了可操作性。我认为这次课程设计进行的很成功九

30、 体会及建议:来讲通过这次综合应用程序的开发,我掌握了C语言程序设计的一些基本方法和常用算法,学会从实际应用出发来分析问题,进行软件规划和算法设计,逐步求精,熟悉软件设计的基本步骤。程序最终调试之后,我终于松了一口气,说实在的,真的很累,实现规定的程序功能是最困难的,很多功能看似简单但做起来却异常困难。从构思到实现,从修改到完善,在老师的帮助下前后更改了许多地方。伴随着修改的同时,我的程序设计能力也在不断提高,程序设计思想也在不断完善。这还只是一个开始,今后要学的东西还很多,我还要继续学习,这样的大型程序设计很能锻炼我们的程序设计能力,我很喜欢,有机会我还会来做些程序,也希望能有这样的机会,C

31、语言这门科学很有意思,我希望能继续学下去。除此之外,我还深刻的认识到在软件研发的过程中团队合作的重要性,没有最强的个人,只有最棒的团队!十 参考文献:苏小红编语言大学实用教程355361的例子刘加海编C语言程序设计清水混凝土的配合比设计中,要针对当地水泥、砂石、外掺料及外加剂等原材料影响混凝土质量的多种因素进行分析,确定主要控制因素,并从经济性和使用要求综合考虑,优选出符合生产条件的最优方案组合。obstacles, correcting misunderstandings, advocate good cadre style. 2, adhere to the scientific deci

32、sion-making and democratic decision-making decision-making law. Correctly handle to ensure that government decrees and based on the actual creative work, giving full play to subjective initiative, put an end to implement the conference meeting, to document the implementation of documents etc. Improv

33、e the scientific and democratic decision-making mechanism, improve and implement the decision to solicit the views of experts, the public hearing system. Improve the important decision of risk assessment mechanism and legal review mechanism. 3, to promote team unity. Uphold and improve the system of

34、 annual party book talk heart to heart, mind and Party members, Party members to exchange each other not less than 2 times. The implementation of sound team democratic life system, consolidate and enhance the partys mass line educational practice will promote the achievement of the topic of democrat

35、ic life, criticism and self-criticism normalization, a long-term. Adhere to the party on the basis of the principle of unity, enhance internal communication, strengthen internal supervision, self Sleep maintenance team collective image and authority. (three) to ensure the execution is not strong or disguised to resist government decrees issues. Individual Bureau leadership team members lack of learning political theory system, not from the objective reality, not with the partys interests

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论