C语言图形五子棋课程设计报告
- 格式:doc
- 大小:254.00 KB
- 文档页数:18
北京师范大学C语言课程设计报告课题名称:游戏五子棋指导教师:尹乾课题组员:罗福莉赵帅帅何虹达院系:信息科学与技术时间:摘要五子棋是一种两人对弈的纯策略型棋类游戏,应用C语言编写程序可以在计算机上实现二人对弈五子棋功能。
二人对弈五子棋程序由欢迎界面显示、游戏界面生成、光标移动与落子、判断胜负、悔棋功能、提供音效等子程序构成;程序中应用了结构体、数组、全局变量、按键处理和图形编程等元素和语句。
程序通过棋盘和棋子图像生成、二人移子与落子和判断胜负等功能的实现,在计算机上实现了二人五子棋对弈。
目录摘要---------------------------------------------- 2第1章:需求分析------------------------------------- 4五子棋背景---------------------------------------- 4五子棋需求分析和流程设计------------------------- 4第2章:概要设计------------------------------------- 9各类头文件和全局变量----------------------------- 9画面显示模块------------------------------------ 10第3章:详细设计------------------------------------ 11玩家操作模块------------------------------------ 11音效提供模块------------------------------------- 11胜负判断模块------------------------------------ 11第4章:调试分析------------------------------------ 11图形模块---------------------------------------- 11玩家操作模块------------------------------------ 11胜负判断模块------------------------------------ 12第5章:用户手册------------------------------------ 12第6章:小组分工------------------------------------ 13第7章:结论与心得---------------------------------- 14第8章:源程序代码--------------------------------- 14附录一 Color命令的使用说明----------------------- 14附录二 ASCII 码表-------------------------------- 14第1章:需求分析五子棋背景传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为18×18,棋子放置于棋盘线交叉点上。
两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
因为传统五子棋在落子后不能移动或拿掉,所以也可以用纸和笔来进行游戏。
五子棋需求分析和流程设计本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。
程序执行过程中,要求棋盘、棋子时时可见,游戏界面有提示信息轮到何方下棋,人可以通过按键盘按键移动光标,再点击enter键摆放棋子,并且每落一子都有系统声音,创新之处是可以提供悔棋功能。
程序需求分析根据功能需求,将程序分为画面显示、玩家操作、音效提供、胜负判断五个模块,以下分析各模块的需求。
画面显示模块:程序开始运行时,显示制作者和给出欢迎及退出界面;游戏开始后要求生成18×18的棋盘图像,并在棋盘上方显示欢迎信息“欢迎play our五子棋”,棋盘下方游戏显示应该轮到甲方或者乙方落子,棋盘左右显示双方操作方式,进行过程中,要求实时显示棋盘上已落下的棋子,甲方为白球,乙方为白圈;分出胜负后,要求给出游戏结束画面,并且询问用户是否需要继续游戏。
玩家操作模块:程序开始时,需玩家确定选择“人人对战”后开始游戏;游戏过程中,两个玩家通过不同的按键移动光标,选择落子;游戏进行过程中,当前玩家下棋后,另一位玩家下棋前,当前玩家可以悔棋。
悔棋提示在棋盘右下方,为按键“b”。
游戏结束时,有玩家选择是否开始新游戏。
音效提供模块:玩家每落一子,系统提供音效一声,增加下棋的趣味性。
胜负判断模块:实时监测棋盘上棋子,一旦某一色棋子出现五子连线,终止游戏程序,并着色连成一线的五子,棋盘下方弹出该色玩家胜出信息。
程序流程设计根据程序需求分析结果,可以得出程序的总体结构图如图1,程序总体流程图如图2。
图1 五子棋总体结构图退Y图2 程序总体流程图第2章:概要设计各类头文件和全局变量#include <> #include<> #include <> #include<>在玩家操作模块中,出现的最大问题之一就是棋盘已经有棋子的地方还可以覆盖另一个棋子。
解决方案:通过在PutDown()函数中添加if条件语句,判定如果所在位置对应的数组值不等于0时,不能落子。
2. 另一个问题就是之前提到的,操作定位框的时候会将定位框移到棋盘之外造成溢出。
解决方案:通过if语句判定,如果操作框超出范围则移动到对应相反位置,例如移动棋盘最上端,若继续向上移动,则移动至棋盘最下端对应位置。
3. 还有一个就是悔棋模块中,通过将现有棋子覆盖与棋盘底色相同的颜色来覆盖后,棋谱线条部分也会被覆盖。
解决方案:在go_back();即悔棋函数。
用棋谱线来覆盖棋子(例如:┌└├等)。
胜负判断模块1. 在胜负判断中一直没能想到好的办法来数据化判断哪方玩家获得胜利。
解决方案:通过参考书籍并加以优化,得出将棋谱做成数组,定义甲方落下为1,乙方落下为2,初始为0,这样即不会造成冲突,也很好的解决了判断问题。
2. 另一个问题在于一直不能优化代码做到不每次都扫描整个棋盘来判断胜负。
解决方案:至今尚未解决,尝试过局部扫描,但失败了。
第5章:用户手册1.进入演示程序后,即显示欢迎界面,几秒后,按任何键进入菜单界面,再选择人人对战可以进入主界面开始游戏或者选择退出键。
2.棋子的移动与落子有键盘上按键控制,本程序选取甲乙方都为↑、↓、←、→和回车键,分别代表上移、下移、左移、右移光标和落子。
在光标移动的过程中,光标按照玩家按键移动;在玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。
3. 在当前玩家按下落子按键后,程序自动调用棋子显示子程序和判断胜负子程序。
当前玩家下棋后,另一位玩家下棋前,当前玩家可以悔棋。
悔棋提示在棋盘右下方,为按键“b”(即backspace)。
4.游戏中Esc键可以直接退出游戏。
5.游戏过程中,如果玩家1或者玩家2有一方获得胜利后,程序自动将提示哪一方获得了胜利,并可以选择是否继续新游戏。
6.游戏结束且玩家选择不再继续后,显示谢谢使用界面,再按任意键退出游戏。
第6章:小组分工组长:罗福莉组员:赵帅帅,何虹达具体分工:第7章:结论与心得通过对各子程序的设计与优化,本程序完成了五子棋软件的主体的设计与制作,基本达到了使用五子棋软件的核心要求。
然而程序还有一些不足之处,首先,程序的界面过于简陋,其次,判断胜后没有显示连成一线的棋子是哪些,用户使用不便。
最后就是程序法实现人机对战,缺乏可玩性。
第8章:源程序代码0010 1111 47 2F /0011 0000 48 30 00011 0001 49 31 10011 0010 50 32 20011 0011 51 33 30011 0101 53 35 5 0011 0110 54 36 6 0011 0111 55 37 7 0011 1000 56 38 8 0011 1001 57 39 9 0011 1010 58 3A : 0011 1011 59 3B ; 0011 1100 60 3C < 0011 1101 61 3D = 0011 1110 62 3E > 0011 1111 63 3F 0100 0000 64 40 @可显示字符二进制十进制十六进制字符0100 0001 65 41 A 0100 0010 66 42 B 0100 0011 67 43 C 0100 0100 68 44 D 0100 0101 69 45 E 0100 0110 70 46 F 0100 0111 71 47 G 0100 1000 72 48 H 0100 1001 73 49 I0100 1011 75 4B K 0100 1100 76 4C L 0100 1101 77 4D M 0100 1110 78 4E N 0100 1111 79 4F O 0101 0000 80 50 P 0101 0001 81 51 Q 0101 0010 82 52 R 0101 0011 83 53 S 0101 0100 84 54 T 0101 0101 85 55 U 0101 0110 86 56 V 0101 0111 87 57 W 0101 1000 88 58 X 0101 1001 89 59 Y 0101 1010 90 5A Z 0101 1011 91 5B [ 0101 1100 92 5C \ 0101 1101 93 5D ] 0101 1110 94 5E ^ 0101 1111 95 5F _ 0110 0000 96 60 `可显示字符二进制十进制十六进制字符0110 0001 97 61 a 0110 0010 98 62 b 0110 0011 99 63 c 0110 0100 100 64 d 0110 0101 101 65 e 0110 0110 102 66 f 0110 0111 103 67 g 0110 1000 104 68 h 0110 1001 105 69 i 0110 1010 106 6A j 0110 1011 107 6B k 0110 1100 108 6C l 0110 1101 109 6D m 0110 1110 110 6E n 0110 1111 111 6F o 0111 0000 112 70 p 0111 0001 113 71 q 0111 0010 114 72 r 0111 0011 115 73 s 0111 0100 116 74 t 0111 0101 117 75 u 0111 0110 118 76 v 0111 0111 119 77 w 0111 1000 120 78 x0111 1001 121 79 y 0111 1010 122 7A z 0111 1011 123 7B { 0111 1100 124 7C | 0111 1101 125 7D } 0111 1110 126 7E ~。