您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > C/C++资料 > 五子棋课程设计实验报告
西南交通大学程序语言综合课程设计五子棋游戏课程《程序语言综合课程设计》学院信息科学与技术学专业软件工程姓名学号20119050日期2016年月日目录第一章课程设计的目的和要求..............................................................31.1课程设计的目的...........................................................................31.2课程设计的要求...........................................................................31.3课程设计的实验环境...................................................................3第二章功能描述.......................................................................................4第三章总体设计.......................................................................................53.1功能模块设计...............................................................................53.1.1任务执行流程图..................................................................53.1.2下棋函数流程图..................................................................63.2数据结构设计...............................................................................73.2.1定义结构体..........................................................................73.2.2定义数组..............................................................................73.2.3全局变量..............................................................................73.3函数功能描述...............................................................................7第四章程序实现.......................................................................................84.1源码分析.........................................................................................84.2运行结果及界面介绍..................................................................22第五章后记.............................................................................................27第一章课程设计的目的和要求1.1课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。1.2课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3课程设计的实验环境该课程设计在设计与实验过程中需要在windowsXP系统/windows2000以上系统中进行,程序设计要求在visualC++6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windowsxp软件环境:安装VC++6.0第二章功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。程序能实现界面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和棋盘,默认玩家先行。(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。(5)悔棋功能。玩家可以有三次悔棋机会。(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存档,则下次开始的时候会提示是否读档继续上次的游戏。第三章总体设计3.1功能模块设计3.1.1任务执行流程图否是否是初始化程序开始玩家行棋玩家获胜?按Esc键按Esc键显示玩家获胜信息电脑行棋电脑获胜?显示电脑获胜信息结束3.1.2下棋函数流程图是否否是否是否否是结束向键值指示的方向移动一步key=SPACE??显示获胜信息Key=ESC?board[i][j]等于’’?玩家获胜?下一步超出边界?交换行棋方画棋子,显示运动轨迹获取key值board[i][j]赋值为’b’开始3.2数据结构设计3.2.1定义结构体将棋盘上每个点的左边定义为一个结构体;typedefstruct{intx,y;}point;3.2.2定义数组定义数组board[15][15]表示棋盘,用来记录棋盘上每个棋子的状态;3.2.3全局变量定义整形数组back[4]用来记录前两步双方下棋的状态,便于后面进行悔棋操作定义整形n=3;用来记录悔棋次数3.3函数功能描述1、显示欢迎信息boolwelcome();2、初始化棋盘voidInitBoard();3、输出棋盘voidchessboard();4、判断胜负intWin(charc);5、下棋voidplay(point&r);6、显示获胜voidshowsusscced(charc);7、悔棋boolBackStep(intback[]);8、人机对战智能算法voidComAlgo(point&r);9、存盘函数boolSaveLoad();10、读盘函数boolDownLoad();第四章程序实现4.1源码分析1、显示欢迎信息boolwelcome(){charch;printf(\n\n\n\n);printf(┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n);printf(┃WelcomeyoutogobangWorld!┃\n);printf(┃1、YoucanusetheA,D,WandSkeytomovethechessman;┃\n);printf(┃2、YoucanpressSpacekeytoenterafteryoumoveit;┃\n);printf(┃3、YoucanuseEsckeytoexitthegame;┃\n);printf(┃4、Don'tmovethepiecesoutofthechessboard.┃\n);printf(┃Doyouwanttocontinue?(Y/N)┃\n);printf(┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n);while(!strchr(YN,ch=toupper(getch()))){putchar('\a');}if(ch=='N')returnfalse;elsereturntrue;}2、初始化棋盘voidInitBoard(){charch;inti,j;printf(\n\n是否读档?(Y/N)\n);if((ch=toupper(getch()))=='Y'&&DownLoad())printf(读档成功!\n);else{for(i=0;i15;i++)for(j=0;j15;j++)board[i][j]='';}chessboard();}3、输出棋盘voidchessboard(){//清屏system(cls);//输出棋盘的上边缘printf(010203040506070809101112131415\n);printf(┏━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┳━┓\n);printf(┃│││││││││││││││┃\n);for(inti=1;i=15;i++){//输出列序号及相应的列元素printf(%02d┣─,i);for(intj=1;j=15;j++){switch(board[i-1][j-1]){//(由于在命令行模式下显示,所以,颜色是颠倒的)case'':printf(┼─);break;//如果当前位置无子,则输出棋盘case'h':printf(○─);break;//如果是黑子,则输出黑子的符号case'b':printf(●─);break;//如果是白子,则输出白子的符号case'g':printf(⊙─);break;//显示光标}}//输出每列的最后一个制表符printf(┫%02d\n,i);printf(┃│││││││││││││││┃\n);}printf(┗━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┷━┛\n);printf(010203040506070809101112131415\n);}4、下棋voidplay(point&r){charkey,c;do{while(!strchr(ADWSZ,key=toupper(getch()))){if(key==27||key==32)break;putchar('\a');}switch(key){case'A'://向左if(r.y=1)break;elser.y--;c=board[r.x-1][r.y-1];//记录光标board[r.x-1][r.y-1]='g';chessboard();board[r.x-1][r.y-1]=c;break;case'D'://向右if(r.y=15)break;elser.y++;c=board[r.x-1][r.y-1];board[r.x-1][r.y-1]='g';chessboard();board[r.x-1][r.y-1]=c;break;case'W'://向上if(r.x=1)break;elser.x--;c=board[r.x-1][r.y-1];board[r.x-1][r.y-1]='g';chessboard();board[r.x-1][r.y-1]=c;break;case'S'://向下if(r.x=15)break;elser.x++;c=board[r.x-1][r.y-1];board[r.x-1][r.y-1]='g';
本文标题:五子棋课程设计实验报告
链接地址:https://www.777doc.com/doc-5861635 .html