Linux环境下五子棋游戏设计(毕业设计论文)终稿文档格式.doc
- 文档编号:6941287
- 上传时间:2023-05-07
- 格式:DOC
- 页数:38
- 大小:561KB
Linux环境下五子棋游戏设计(毕业设计论文)终稿文档格式.doc
《Linux环境下五子棋游戏设计(毕业设计论文)终稿文档格式.doc》由会员分享,可在线阅读,更多相关《Linux环境下五子棋游戏设计(毕业设计论文)终稿文档格式.doc(38页珍藏版)》请在冰点文库上搜索。
摘要 II
abstract III
1概述 1
1.1开发背景 1
1.2开发目的和意义 1
1.3开发目标 2
2程序的介绍与规划 3
2.1程序设计 3
2.3程序的实现目的 3
3程序分析与总体设计 4
3.1程序需求分析 4
3.1.1用户需求分析 4
3.1.2功能需求分析 4
3.1.3程序稳定性分析 6
3.2程序总体方案的设计 6
3.3 程序开发方法与开发平台 8
3.3.1开发方法 8
3.4本章小结 8
4程序设计与算法实现 9
4.1数据模块 9
4.1.1数据结构 9
4.1.2数据定义 10
4.2.1界面设计——创建棋盘 10
4.2.2界面设计——创建菜单 12
4.2.3相关功能函数 13
4.3核心功能函数模块 16
4.3.1相关功能 16
4.4游戏功能模块 18
4.4.1游戏主要操作流程图 18
4.4.2人人对战模块 19
4.4.3人机对战模块 20
4.4.4网络对战模块 23
4.4.5其他功能模块 25
4.5本章小结 26
5系统测试及成果展示 27
5.1测试流程 27
5.2功能测试 27
5.2.1界面功能测试 27
5.2.2输入功能测试 27
5.2.3游戏功能测试 27
5.3成果展示 28
5.4总结 31
参考文献 32
致谢 33
武汉轻工大学2014届毕业设计论文
———————————————————————————————————————
1概述
1.1开发背景
游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一。游戏软件深受广大青年人喜爱,而且在发达国家中老年人也有大部分喜欢游戏的,因此游戏软件在很大程度上给予绝大部分人精神上的娱乐。第二次世界大战以后,电子计算机技术得到了突飞猛进的发展。先是由晶体管代替了笨重的真空管,后来出现了集成电路和大规模集成电路,使电子子计算机一代一代实现更新,同时软件技术也发展迅速。在美国,集中了许多计算机软件的设计人才,他们工作之余,时常喜爱编一种能与人斗智的“游戏”,以此来锻炼编程的能力。这种“游戏”花样繁多,但其特点都是利用计算机软件事先设计好的“分析”、“判断”能力反过来与人较量。由于不断修改更新,使计算机的“智力”水平与人难分高低。到了90年代,游戏软件已经为世界各国的人使用,BLACKISLAND和Blizzard.这两个强大的游戏制作组起到了巨大的带动作用,还有中国的洛河工作室在国内也起到了巨大作用,他们让很多很多人喜欢上了游戏软件,打开了这个市场。
如今游戏软件产业已经受到了广泛的关注,它年轻有潜力而且吸引人,让人们日益丰富的生活需求得以满足。
五子棋游戏更是吸引着不同年龄段的人群,无论男女老少都可以玩,都喜欢玩,而当前微型计算机已经是在广大人群中流行着,用电脑来下五子棋更是一种时尚。
五子棋相传起源于四千多年前的尧帝时期,比围棋的历史还要悠久,可能早在“尧造围棋”之前,民间就已有五子棋游戏。
有关早期五子棋的文史资料与围棋有相似之处,因为古代五子棋的棋具与围棋是完全相同的。
在上古的神话传说中有“女娲造人,伏羲做棋”一说,《增山海经》中记载:
“休舆之山有石焉,名曰帝台之棋,五色而文状鹑卵。
”李善注引三国魏邯郸淳《艺经》中曰:
“棋局,纵横各十七道,合二百八十九道,白黑棋子,各一百五十枚”。
可见,五子棋颇有渊源。
亦有传说,五子棋最初流行于少数民族地区,以后渐渐演变成围棋并在炎黄子孙后代中遍及开来,可以说五子棋是我们的国粹之一了。
而当前五子棋程序的发展也非常快,从最初的双人发展到人机(有AI),然后到现在的网络对战,已经受到越来越多人的喜爱和重视。
1.2开发目的和意义
随着游戏行业正在逐渐成熟并多远化,前途一片光明,Linux操作系统图形化界面的出现,其使用越来越广泛,然而,Linux环境下的游戏处于一种缺乏状态,当你在Linux下工作的时候,休息期间玩一下游戏也是一种放松的方式,在Linux环境下开发游戏(以经典的五子棋为例)有其重要的经济价值和战略意义,也可以借此课题对自己所学的知识进行一次综合的运用和拓展,加强自己的专业知识水平和综合运用能力以及动手能力。
在人机智能方面其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;
其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱;
本系统注重人机对弈和网络对战功能的开发,人机对弈只有一个通用等级,未作详细分化,网络对战,借助SOCKET建立连接,进行网络传输,实时显示,并有比较简单的界面系统,简单而使用,完备又不奢华。
1.3开发目标
基于Ncurses库的Linux环境下五子棋游戏的设计与实现,使五子棋游戏的人人对战、人机对战和网络对战组合在一起。
为此,我设计是会做如下工作:
(1)Ncurses库的使用,使用Ncurses字符终端图形化处理的功能,实现界面的绘制(包括棋盘的绘制、光标的绘制、菜单的绘制、文字的显示等图形化实现功能);
(2)链表栈的实现,栈的创建、入栈、出栈与栈的销毁,栈用于记录落子的情况(包括颜色与位置);
(3)判断胜负算法的实现;
(4)人机对战算法的实现;
(5)网络编程,采用TCP的传输方式,用于网络对战的实现。
2程序的介绍与规划
2.1程序设计
本程序设计为人与人对弈,一方执黑棋,一方执白棋,轮流走棋,每方都试图在游戏结束前让自己的棋子五子相连,首先实现五子相连的一方获胜。
程序执行过程中,要求棋盘、棋子时时可见,并且人可以通过按键盘按键移动光标,摆放棋子。
本系统在Linux环境下,运用C语言知识进行系统的编码,主要实现三大功能模块,人人对战模块、人机对战模块和网络对战模块。
用菜单的功能和按键获取进行选择需要进入的游戏模块。
2.2程序的基本功能
1.显示一个十三行十四列的围棋棋盘。
2.在棋盘上面在对应位置通过点击鼠标下子,棋盘上将在相应的位置上显示棋子,并且棋子在横纵交点上。
3.可以自动判断游戏是否结束,是否黑方或者是白方已经胜利。
4.在游戏棋盘上方会有一个游戏信息,这个游戏信息是用来提示当前是黑白双方的哪一方下子,玩家可以根据这个提示来相应的下棋,而不会导致不清楚轮到哪一方下棋。
5.具有悔棋功能,在下棋时可以悔棋。
6.主要的模块功能:
人人对战,人机对战,网络对战。
2.3程序的实现目的
五子棋游戏程序所要实现的目的是让我们可以在电脑上下棋,而不需要去买,可以随时玩,方便快捷。
而且能更好的推广五子棋于世界各地,此软件也在于提供给爱好五子棋的人,也吸引更多的人喜欢上五子棋,也具有很大很大的商业价值。
使五子棋游戏程序在以后的制作中功能越来越强大,外观越来越好看。
3程序分析与总体设计
3.1程序需求分析
3.1.1用户需求分析
通过程序功能的分析,根据五子棋爱好者的需求,得出以下需求信息:
1.具有基本开始功能;
;
2.具有提示该轮到哪一方下棋的功能;
3.退出游戏功能;
4.判断胜负功能;
5.网络对战功能;
6.悔棋功能;
7.人机对战功能;
8.保存游戏功能。
3.1.2功能需求分析
程序的基本功能需求分析如下:
(1)游戏进入界面的菜单选择,有人人对战、人机对战、创建主机和加入战网,继续游戏,退出六个选项,如图3.1.3.1;
图3.1.3.1主界面菜单
(2)进入游戏之后,显示一个十三行十四列的五子棋的棋盘(如图3.1.3.2)。
用键盘的按键来控制,棋局重现功能是在某方胜利之后才能手动操作一步步查看并回顾双方下棋的过程;
上级菜单功能可以使五子棋游戏退出当前的游戏模块,回到游戏开始界面时候的菜单,进行重新选择;
退出游戏是退出整个游戏界面(如图3.1.3.3);
图3.1.3.2棋盘样式
图3.1.3.3 重现棋局操作
(3)棋盘上显示绘制的光标,可以通过键盘上的字母WASD对光标进行上下左右的移动操作。
(4)在上面棋盘将光标移动到上面对应的位置,可以落子,棋盘上将在光标显示处出现相应的棋子,并且棋子在横纵交点处;
(5)人人对战的过程中有悔棋的功能;
(6)游戏的过程中会有提示信息,如该哪一方落子,棋盘旁边显示相应按键对应的操作列表;
(7)可以自动判断胜负,胜利一方形成一列的五个或5个以上的棋子闪烁数次,显示是黑方或者白方已经胜利的字样,并且停止落子的功能;
(8)能够实现三种游戏模式,人人对战、人机对战和网络对战。
3.1.3程序稳定性分析
程序稳定性需求如下:
(1)在程序运行时程序不能崩溃,更不能造成系统崩溃;
(2)游戏运行速度不能太慢,要反应及时。
3.2程序总体方案的设计
软件的总体架构如图3.2.1:
一人游戏类
二人游戏类
游戏类指针
棋盘类
主界面
用户
图3.2.1总体架构
考虑到整个的下棋过程(无论对方是电脑抑或其他网络玩家)可以分为:
己方落子、等待对方落子、对方落子、设置己方棋盘数据这一系列过程。
3.2.1各个功能的简要说明
1.绘制十三行十四列的棋盘,每行每列的距离都是一样的。
2.棋盘上面落子:
点击鼠标以后,会在相应位置落下棋子,并被绘制出来,黑子是一个实心的黑圆,白子是一个实心的白圆加上一个等大空心的黑圆。
3.黑白双方轮流落子:
黑方落子以后就要轮到白方,交替进行,这是下棋的基本要求,因此我们就要弄一个互斥事件进去,让他们交替的落子。
不能落在相同位置:
当我们落子时,会不小心落到相同位置上去,那么就要出现提示,不能落在相同位置上,需要重新落子,实现的设想是当这个点已经绘制过棋子以后,我们就要给一个布尔变量,让它为假,那么只能在它为真时才能绘制棋子,否则就要重新落子到别的地方去。
4.判断输赢:
当五个相同颜色子都连在了一起的时候,我们就要判其为赢,这五个子可以在横竖方向上连起,也可以在斜方向上连起。
5.游戏信息:
我们应该在棋盘的上面设置一个游戏信息的,用来提示当前轮到哪一方下棋了,以便于玩家知道谁在下,这个功能只要在黑白双方轮流下棋功能的过程中添加一个提示信息用于显示到界面上的就可以了。
3.3 程序开发方法与开发平台
3.3.1开发方法
对于本系统的研究方法,通过查阅资料以及指导老师师寻求帮助等方法解决技术上的问题,具体逻辑上的一些东西需要自己仔细思考,并动手实现。
具体步骤为:
第一步,熟悉五子棋游戏规则,对系统做可行行分析,同时结合本次毕业设计的相关要求进行系统的分析与概要设计;
第二步,简要概述系统的配置,并且对系统进行详细设计,实现相关解决问题的算法;
第三步,运用以前所学的知识,选择C语言在Linux环境下调用Ncurses库进行开发,进行软件编码,实现其各项基本功能;
第四,系统开发完毕后,进行调试、运行和代码优化;
第五步,对前期的学习和工作进行全面的思考、分析、归纳和总结,完成本论文的撰写工作。
3.3.2开发平台
本系统开发所需要的开发平台如下所示:
(1)中央处理器:
双核2.1GHz;
(2)内存:
2G;
(3)硬盘:
320G;
(4)操作系统:
Linux(fodera14);
(5)开发工具:
Linux环境下vim,gedit等;
(6)编程语言:
C语言
(7)运行环境:
Linux环境(含Ncurses库)下的终端
3.4本章小结
本章是此项目简单的概要性阐述,进行功能和用户需求分析,开发平台和开发方法的介绍,确定了整体的功能模块,为下一章的详细设计做准备。
4程序设计与算法实现
4.1数据模块
4.1.1数据结构
(1)颜色的定义(枚举类型)
//定义颜色,用来设置棋盘背景的颜色
//采用枚举来定义颜色
typedefenum{GCBlack,GCRed,GCGreen,GCYellow,GCBlue,GCMagenta,GCCyan,GCWhite,GCCount}GRAPHICS_COLOR;
(2)链表节点,记录双方落子的情况,用同一条链表式栈存储双方落子情况,落子时入栈,悔棋时出栈。
//定义棋子的结构
typedefstructqizi
{
intqx;
//棋子在棋盘上的横向位置
intqy;
//棋子在棋盘上的纵向位置
intqflag;
//flag表示棋子的种类,0表示白旗,1表示黑棋
structqizi*next;
}LinkQZ;
(3)定义棋子坐标信息的结构体(人机对战时,根据这些信息分析出电脑下棋的坐标点)
typedefstructpoint //坐标信息
intx;
//记录横坐标
inty;
//记录纵坐标
intquan;
//设置权值,当max相等时,可比较权值
intcc3;
//电脑:
设置当前坐标“冲3”和“冲4”的可能性,1为可能,0为不可能
intcc4;
//表示冲4
intpc3;
//人:
intpc4;
intc[4];
//记录电脑的四个方向上的相同棋子的个数
intp[4];
//记录人的四个方向上的相同棋子的个数
}Point;
(4)绘制期盼所使用的图像如下定义(源于office中的工具图标):
//使用┏┗┓┛┳┻┣┫╋━┃画棋盘,也可以自己找另外的符号
//使用"
●"
来表示棋子
#defineCHESS"
4.1.2数据定义
程序涉及到的相关的全局变量的定义如下:
staticLinkQZ*top=NULL;
//人人对战//栈用来存放棋子下棋的行径的坐标以及棋子的颜色
staticintb[10][2]={0};
//人人对战//数组用来存放胜利时的五zi的坐标
staticint(*p)[2]=b;
//指针p来操作上述数组
staticPointinf[182];
//人机对战坐标的详细信息
4.2界面模块
本程序所使用的是ncurse终端图形库来绘制图形的。
Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。
Ncurses是一个能提供基于文本终端窗口功能的动态库。
Ncurses可以在任何遵循ANSI/POSIX标准的UNIX系统上运行,除此之外,它还可以从系统数据库中检测终端的属性,并且自动进行调整,提供一个不受终端约束的接口。
因此,Ncurses可以在不同的系统平台和不同的终端上工作的非常好。
程序相关数据定义如下:
WINDOW*g_win=NULL;
//定义终端指针,用来操作终端的属性的设置,初始化为空
GRAPHICS_COLORg_fore_color;
//定义终端的前景色
GRAPHICS_COLORg_back_color;
//定义终端的背景色
4.2.1界面设计——创建棋盘
主要使用┏┗┓┛┳┻┣┫╋━┃这些符号画棋盘,其核心思想为:
For循环的恰当利用.先用外层循环画出外围的整个方框,然后再找出内层的规律,从每一行开始绘制出每一列,再从下一行开始绘制,循环绘制即可。
函数说明如下
Voidqipan(void) //画棋盘
核心代码如下:
for(i=2;
i<
=26;
i=i+2) //两个for循环控制着的行的输入
{
for(j=11;
j<
=63;
j=j+2)
{
if(i==2) //当为第一行时,控制第一行的图形的格式
{
if(j==11) //第一行的第一个元素的样式
mvaddstr(i,j,"
┏"
);
elseif(j==63) //第一行的最后一个元素的样式
{
┓"
}
else
if(flag)
{
mvaddstr(i,j,"
━"
flag=0;
}
else
┳"
flag=1;
}
elseif(i==26) //当为最后一行时,控制最后一行的格式的输入
if(j==11) //最后一行第一个元素的样式
┗"
elseif(j==63) //最后一行最后一个元素的样式
┛"
if(temp)
temp=0;
┻"
temp=1;
else
if(j==11) //其他行的第一列的元素的样式
┣"
elseif(j==63) //其他行的最后一列的元素的样式
┫"
k=1;
if(k)
k=0;
╋"
k=1;
}
}
4.2.2界面设计——创建菜单
本程序主要涉及到了两个菜单的设计,分别为:
主菜单,下棋完成后的子菜单界面。
1.主菜单界面
Voidmenu(void);
//主菜单
核心代
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 环境 五子棋 游戏 设计 毕业设计 论文 终稿