五子棋课程设计实验报告(共27页).doc
《五子棋课程设计实验报告(共27页).doc》由会员分享,可在线阅读,更多相关《五子棋课程设计实验报告(共27页).doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上西南交通大学程序语言综合课程设计五子棋游戏课 程 程序语言综合课程设计 学 院 信息科学与技术学 专 业 软件工程 姓 名 学 号 日 期 2016年月日 目录第一章 课程设计的目的和要求1.1 课程设计的目的1.加深对C语言数据类型,运算,语句结构及其程序设计的基本方法理解和掌握;2.熟练掌握流程图的绘制、程序设计文档的书写;3.通过编写一个完整的程序,一方面可以检查我们这学期的学习情况,为以后的学习打下坚实的基础;4.熟悉C语言游戏编程,掌握五子棋游戏开发的基本原理,从而为以后的程序开发奠定基础。1.2 课程设计的要求1、编写程序代码,调试所写程序使其能够正确运行
2、;2、能进行基本的五子棋操作,有图形界面,能够用键盘操作;3、能够实现悔棋、存档和读档等附加功能1.3 课程设计的实验环境该课程设计在设计与实验过程中需要在windows XP系统/windows 2000以上系统中进行,程序设计要求在visual C+6.0平台中进行,完成代码的编写、编译、调试、测试等工作。本游戏对计算机硬件和操作系统要求极低,所以在这里只是把自己的电脑硬件参数和系统参数列下:硬件:Cpu:2.1GHZ,内存,2GB,硬盘:320GB,操作系统:windows xp软件环境:安装VC+6.0第二章 功能描述本程序用C语言实现了五子棋游戏,能进行基本的五子棋操作。程序能实现界
3、面的初始化功能、下棋功能、人机智能对战功能、胜负判断功能、悔棋功能、读档及存档功能,通过键盘操作控制下棋。(1)显示欢迎界面。在游戏开始时出现一个欢迎的界面同时介绍了游戏的规则;(2)初始化功能。程序初始化屏幕和棋盘,默认玩家先行。(3)下棋操作。利用W、S、A、D及空格键实现下棋操作,在下棋过程中能随时按ESC键退出。(4)人机智能对战功能。电脑根据玩家的下棋对棋盘进行智能分析,然后下棋,实现人机对弈。(5)悔棋功能。玩家可以有三次悔棋机会。(6)胜负判断功能。程序能对下棋的结果进行判断,分出胜负。并显示获胜方。(7)读档、存档功能。游戏中途退出会提示是否存档,如果存档,则下次开始的时候会提
4、示是否读档继续上次的游戏。第三章 总体设计3.1 功能模块设计 开始3.1.1 任务执行流程图 初始化程序 按Esc键玩家行棋 按Esc键玩家获胜?否是电脑行棋 显示玩家 获胜信息电脑获胜? 否 是显示电脑 获胜信息 结束3.1.2 下棋函数流程图 结束向键值指示的方向移动一步key=SPACE?显示获胜信息Key=ESC?boardij等于 ?玩家 获胜?下一步超出边界?交换行棋方画棋子,显示运动轨迹获取key值boardij赋值为b 开始 是 否 否 是 否 是否 否是3.2 数据结构设计3.2.1 定义结构体将棋盘上每个点的左边定义为一个结构体;typedef struct int x,
5、 y;point;3.2.2 定义数组定义数组board1515表示棋盘,用来记录棋盘上每个棋子的状态;3.2.3 全局变量定义整形数组 back4 用来记录前两步双方下棋的状态,便于后面进行悔棋操作 定义整形 n = 3; 用来记录悔棋次数3.3 函数功能描述1、显示欢迎信息 bool welcome();2、初始化棋盘 void InitBoard();3、输出棋盘 void chessboard();4、判断胜负 int Win(char c); 5、下棋 void play(point &r);6、显示获胜 void showsusscced(char c);7、悔棋 bool Bac
6、kStep(int back);8、人机对战智能算法 void ComAlgo(point &r);9、存盘函数 bool SaveLoad();10、读盘函数 bool DownLoad();第四章 程序实现4.1源码分析1、显示欢迎信息bool welcome()char ch; printf(nnnn);printf(n);printf( Welcome you to gobang World! n);printf(1、You can use the A,D,W and S key to move the chessman; n);printf(2、You can press Space
7、 key to enter after you move it; n);printf(3、You can use Esc key to exit the game; n);printf(4、Dont move the pieces out of the chessboard. n);printf( Do you want to continue?(Y/N) n);printf(n);while (! strchr(YN, ch = toupper(getch()putchar(a);if(ch = N) return false;else return true;2、初始化棋盘void Ini
8、tBoard()char ch; int i, j;printf(nn是否读档?(Y/N)n);if(ch = toupper(getch() = Y & DownLoad()printf(读档成功!n);elsefor(i = 0; i 15; i +) for(j = 0; j 15; j +)boardij = ;chessboard();3、输出棋盘void chessboard()/清屏system(cls); /输出棋盘的上边缘printf( 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 n);printf( n);printf( n);
9、for(int i = 1; i = 15; i +)/输出列序号及相应的列元素printf(%02d, i); for(int j = 1; j = 15; j +)switch (boardi - 1j - 1)/(由于在命令行模式下显示,所以,颜色是颠倒的)case : printf(); break; /如果当前位置无子,则输出棋盘case h: printf(); break; /如果是黑子,则输出黑子的符号case b: printf(); break; /如果是白子,则输出白子的符号case g: printf(); break; /显示光标/输出每列的最后一个制表符printf
10、(%02dn, i); printf( n);printf( n);printf( 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 n);4、下棋void play(point &r)char key, c;dowhile (! strchr(ADWSZ, key = toupper(getch()if(key = 27 | key = 32) break;putchar(a);switch(key)case A: /向左if(r.y = 15) break;else r.y +;c = boardr.x - 1r.y - 1;boardr.x - 1
11、r.y - 1 = g;chessboard();boardr.x - 1r.y - 1 = c;break;case W: /向上if(r.x = 15) break;else r.x +;c = boardr.x - 1r.y - 1;boardr.x - 1r.y - 1 = g;chessboard();boardr.x - 1r.y - 1 = c;break;case 32: /SPACE空格if(boardr.x - 1r.y - 1 != ) key = 0; /key的值修改为非32的数值else boardr.x - 1r.y - 1 = b;back0 = r.x - 1
12、; back1 = r.y - 1; /记录当前位置,便于悔棋 chessboard();break;case Z: /悔棋BackStep(back);break;case 27: /ESC退出printf(Game Over!n);printf(是否存档?(Y/N)n);if(c = toupper(getch() = Y & SaveLoad() printf(存档成功!n);exit(1);default:fflush(stdin);while(key != 32);注:1、W、S、A、D分别表示上下左右键。如果超出了棋盘则不进行操作。否则向键值指示的方向移动一步。2、c = boar
13、dr.x - 1r.y - 1; boardr.x - 1r.y - 1 = g; chessboard();boardr.x - 1r.y - 1 = c;这四句表示记录当前移动位置,然后显示光标,显示完以后还原棋盘。3、按空格键表示下棋,如果当前位置有棋子则不进行操作。back0 = r.x - 1; back1 = r.y - 1; 用于记录当前位置,便于悔棋 。4、按Z悔棋5、按ESC键退出,并且提示是否存档。5、判断胜负int Win(char c) int i, j, ok = 1; /判断横着的5个是否都相等for(i = 0; i 15; i +) for(j = 0; j 1
14、1; j +)if(boardij=c & boardij+1=c & boardij+2=c & boardij+3=c & boardij+4=c) return ok;/判断竖着的5个是否都相等for(j = 0; j 15; j +)for(i = 0; i 11; i +) if(boardij=c & boardi+1j=c & boardi+2j=c & boardi+3j=c & boardi+4j=c) return 1;/判断左斜5个是否都相等for(i = 0; i 11; i +)for(j = 0; j 11; j +) if(boardij=c & boardi+1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 五子棋 课程设计 实验 报告 27
限制150内