
基于Linux系统的五子棋游戏开发
学 院: 信息与通信工程学院
(系)专 业: 通信工程
学 生 姓 名: 隋志浩
学 号: **********
* * * ** **
评 阅 教 师:
完 成 日 期: 2016年06月15日
大连民族大学
五子棋是一种两人对弈的纯策略型棋类游戏,通常对战双方分别使用黑色与白色两种棋子,下在棋盘上横向、纵向和对角线方向,最先完成5枚棋子相连的一方获得胜利。它最开始出现于古代中国,中期经高丽(朝鲜)传入日本得到了长足发展,在欧洲倍受人们的青睐。是一种极具趣味性和消遣性的游戏,其游戏规则通俗易懂,但游戏对战中棋局变化无常、难以捉摸,深受广大人们的喜爱。五子棋不仅能开发智力,锻炼我们的逻辑思维,而且蕴涵为人处事的道理,有助于磨炼我们的心性。
随着游戏行业正在逐渐成熟并多元化,各种类别的游戏被安装进计算机中,前途一片光明。Linux操作系统图形化界面的出现,其使用越来越广泛。然而,Linux环境下的游戏处于一种缺乏状态,当你在Linux下工作的时候,休息期间玩一下游戏也是一种放松的方式。
本系统的设计要求是一个能在Linux操作系统下运行,界面美观运行稳定且将来可能用于嵌入式移植的游戏。Linux操作系统为平台,使用GTK技术实现五子棋游戏的功能;通过Linux系统编程,GTK编程技术,五子棋游戏算法来实现趣味性地人机对战。
关键词:Linux操作系统;GTK;五子棋游戏;人机对战
Gobang game development based on Linux system
Abstract
Gobang is a game of pure strategy type two game,The two sides were usually use black and white pieces,Cross point on the chessboard line and horizontal line on the first 5 sub line wins. It originated in ancient China, the medium-term development in Japan, popular in Europe. The gobang is one kind the game which is widely liked the populace, its rule is simple, changeable, extremely rich interesting and recreational. Gobang is a puzzle game, it can enhance player's thinking ability, improve intelligence, and high in philosophy, helps to one’s self-cultivation.
With the game industry is gradually mature and diversified, the future is bright, Linux operating system graphical interface, it is used more and more widely, however, under the environment of Linux game in a lack of state, when you in Linux work during rest play the next game is a relaxed way.
The design requirements of the system is a Linux operating system to run and the interface is beautiful and stable operation and the future may be used for embedded transplant games.Linux operating system as a platform, using GTK technology to achieve Gobang game; through the Linux system programming, GTK programming technology, Gobang game algorithm to achieve interesting man-machine war.
Key Words:Linux operating system;GTK; Gobang game; Man-machine war
1 绪论
1.1 本课题选题依据
五子棋是起源于中国古代的传统黑白棋游戏之一。五子棋不仅能开发智力,锻炼我们的逻辑思维,而且蕴涵为人处事的道理,有助于磨炼我们的心性。随着Internet的迅速发展,及市场强势地带动游戏产业的发展,国家部门也越来越重视游戏产业,它渐渐成为建设新文化事业的任务之一。根据Linux环境下游戏的开发以及五子棋游戏的广泛受众和经典程度。本课题基于Linux系统下进行开发,实现游戏五子棋的功能。
随着计算机的飞速发展及游戏产业的逐渐成熟,各种各样的游戏被安装进计算机中。Linux操作系统图形化界面的出现,其使用越来越广泛。然而,Linux环境下的游戏处于一种缺乏状态,在Linux用户在经历长时间工作时,休息期间没有很好的游戏使其得以放松,做到劳逸结合,事半功倍。在Linux环境下开发游戏(以经典的五子棋为例)有其重要的经济价值和战略意义,与此同时,也可以借此课题对自己所学的知识进行一次综合的运用与拓展,加强自己的专业知识水平和综合运用能力以及实践动手能力[1]。
1.2 课题国内外发展情况
计算机发明后,人们就尝试运用其强大的计算与存储记忆能力来与棋坛高手对弈。1956年美国洛斯阿拉莫斯得研究人员首次编写了象棋对弈战胜一个刚入道6个月的棋手,但已经具有划时代的意义。
在国内市场,2000年之前,游戏产业处于一种缺乏创新的状态。许许多多游戏厂商都是拿出一种模仿的姿态在做游戏。导致国外一些先进的发达的游戏公司迅速进入了中国的游戏市场并占有了很大的份额。此时国内游戏厂商不能进行很有效的合作,在外国游戏巨头的压力下,内部形成强烈的竞争,使得国产游戏的发展十分缓慢。近年来,随着出台了各种与游戏产业相关的条例、法规,作为一种新文化事业来鼓励国产游戏的发展。国内游戏开发商也致力于开发自主的拥有中国文化的游戏,中国游戏玩家数量与日俱增,这其中越来越多的玩家开始支持国产游戏,这些都表明着,国产游戏的寒冬已然过去,国内娱乐游戏业的不断成熟与壮大。
在国际上,由自由的软件和开放免费的源代码组成的例子就是Linux操作系统。现在Linux操作系统可以被安装到多种硬件设备中,从个人PC机到企业、的办公设备甚至与嵌入式相关的硬件设备。Linux操作系统所具有的优势及潜能不断被人们开发利用,在人们的生活中渐渐占据了一定地位。随着Linux系统的完善与稳定,普通电脑用户尝试接触Linux系统的数量日益增高,部分电脑厂商发现商机开始在其销售的电脑上可以为用户免费安装Linux,在桌面电脑操作系统的市场中Linux也慢慢地占据一席之地。低成本、开放、免费这些都成了Linux操作系统的代名词,符合嵌入式开发的理念,在嵌入式市场拥有绝对优势,广泛地受到了用户的好评。KED和GNOME等桌面系统使Linux完全不同于依赖CLI(Command Line Interface,命令行界面)控制的Unix操作系统,它更像一个Mac或Windows之类的操作系统,能提供完善的提醒用户界面,给用户更好的桌面体验[2]。
1.3 本课题设计的必要性与可行性
选择必要性:随着经济的快速发展,人们生活的步调日益加快,计算机的地位在人们的生活中已越来越重要,基于各种操作系统的娱乐游戏也越来越多、越来越大众化,成为人们日常生活中密不可分的一部分。而随着人们生活品质的提高,电脑游戏也越来越多元化,五子棋就是其中一种。这一游戏简单易行,操作方便,娱乐性较强,吸引了不少人。该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具。
选题可行性:本系统的设计要求是一个能在Linux操作系统下运行,界面美观运行稳定且将来可能用于嵌入式移植的游戏。综合考虑选择C语言与GTK技术来实现本系统。C语言是一门成熟的高级语言,可用于开发各种系统,也可用于开发游戏系统。GTK是Linux下的一个图形化编程工具,其开发出来的程序能在装有GTK环境的Linux系统下顺利运行[3]。
1.4 本课题设计概述
在本课题中,通过对五子棋游戏发展背景的调查以及Linux系统下小游戏开发的了解;以Linux操作系统为平台,使用GTK技术实现五子棋游戏;通过Linux系统编程,GTK编程技术,五子棋游戏算法来实现趣味性地人机对战。
2 平台简介
2.1 系统介绍
2.1.1 Linux系统发展历程
Linux是一种类似Unix的操作系统,但它具有可以自由传播和无偿使用的特点。它开放全部的源代码以供用户进行完善修改并且可以被移植到各种各样的硬件平台。Unix作为一种经典的操作系统,在1969年最开始由贝尔实验室的计算机科学学者Ken Thompson和Dennis Ritchie提出并研发成功,但出于它对源代码知识产权的保护,它价格十分昂贵,对一般计算机用户而言,是难以接受的。
早期,Linux是由赫尔辛基大学的一位叫Linus Torvalds的芬兰大学生设计的。当时他有一台Intel386计算机,而他手上的Minix却不能很好地在他的计算机上运行。于是他开始修改Minix。经过几个月的努力,基本完成了目标。此时他发现,他几乎实现了一个新操作系统的原型。
1991年10月,Linus把Linux(意为Linus的Unix)放到FTP服务器上供其他人自由下载。Linus允许他人免费使用Linux的源代码,并且鼓励大家对其进行修改和完善。这一举动,使得盈千累万来自不同地区不同国家程序员的不懈努力下,Linux得到了转折性的发展。
目前,Linux产品存在的版本可谓不胜枚举,其中比较著名的有Red Hat、Fedora、Debian、Ubuntu、SUSE、Slackware、Mandriva、TurboLinux及Gentoo等。尽管这些系统在安装操作和界面外部表现等方面有所不同,但其内部采用的Linux内核、标准实用程序等基本一致,具有很多共性[4]。
2.1.2 Ubuntu Linux操作系统
Ubuntu Linux系统是众多Linux发型品牌之一。在Linux领域中,Ubuntu只是一个后起之秀,是一个新兴且潜力巨大的Linux发行品牌,用了短短几年的时间Ubuntu就发展成为一个流行的、成熟的、以及桌面环境丰富的Linux的系统,受到了从Linux初学者到资深专家的大批Linux用户的追捧。
Ubuntu是一个古老的非洲词汇,表示人类之间的关怀、共享、和谐。它作为一种理念,倡导个人,文化以及民族之间的融合、博爱与相互合作。
2.1.3 Ubuntu Linux的特性
1.多用户
Linux系统具有许多系统都不具有的特性,它可以使许多用户操作同一台电脑,并且他们在使用自己的操作时不会影响到其他用户的进程。并且用户与用户之间都能够顺畅地沟通与交流。但是为了防止在使用过程中,用户不经意或故意地篡改别的使用者的系统资源,所以使用不同功能的用户具有不同的使用权限。
2.多任务
支持多个任务或多个进程的执行是时下操作系统所必须具备的特点。在用户操作计算机时,能够顺利执行多种操作,运行更多软件程序,提高工作效率。而且保证任务操作及软件程序很好并行,互不影响。
3.多平台
作为一种源代码开放免费的操作系统,可以很好地移植到各种平台。作为一种应用广泛的操作系统它不仅可以在个人计算机上流畅地运行,还可以兼容在不同规模各类设备上。同时,它的运作不受CPU数量的,不论在32位还是位上都有较为突出的运行状态。
4.用户界面
为了适用不同的使用范围,Linux提供了两种不同的操作界面。当我们需要进行脚本功能编写时,可以进入字符界面通过键盘录入命令来使计算机运行。当我们需要便捷的操作时,也可以进入图形界面,通过鼠标的操作来传达指令,完成所需要的用户操作。
5.网络功能
因为Linux系统强大的内置网络功能,所以它在信息传输和互联网功能的使用有着非同寻常的表现。导致越来越多的用户选择使用Linux系统。
6.安全性
在时下对于计算机的使用过程中,安全性一直是被人们所重视的问题。在系统的运行过程中,使用了各种各样的措施来保证用户的隐私和重要资料,提高系统的稳定性。在融合了Unix操作系统的优势后,Linux具有了更稳定更高效地运行状态。所以以这种系统搭建的服务器平台数量与日俱增。
7.可移植性
因为Linux系统强大的适应能力,使得它可以在各种平台上运行。为了方便的用户的使用,它具有了良好的可移植性。这样就可以轻松地进行移植,比如,从一台个人计算机上移植到另一台硬件设备上。
8.开放和免费
为了面向更多的用户和更广阔的使用范围,Linux系统开放了操作代码,我们可以轻松的在网上查找到Linux的操作核心内容,这样可以根据自己的需求,去进行不同程序的编写和调试。相比于其它系统的收费使用,无偿的Linux毫无疑问可以让我们通过更低的代价来获取更多的内容[5-10]。
2.2 开发工具
2.2.1 VMware workstation简介
VMware Workstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。VMware Workstation可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。对于企业的 IT开发人员和系统管理员而言,VMware在虚拟网路,实时快照,拖曳共享文件夹,支持 PXE 等方面的特点使它成为必不可少的工具。
VMware Workstation作为时下一款综合表现优异的桌面虚拟计算机软件,以供用户选择安装的操作系统种类繁多,甚至包括每一种操作系统所发行的各个版本。在合理分配内存的情况下,它还可以在一台计算机下安装多个虚拟化的操作系统。每个所安装的虚拟的操作系统可以做到的运行互不干扰。同时,在虚拟机运行的状态下,可以简单快捷地回到物理机的操作系统,两个操作系统直接可以做到很好的隔离。操作界面简单明了,支持中文,适用各种计算机领域的用户[11]。
2.2.2 C语言简介
C语言是最早由贝尔实验室的Dennis Ritchie设计并实现。同时Dennis Ritchie也是Unix操作系统的主要设计者之一。C语言是目前国际上为万千程序员广泛使用并具有完整体系的计算机语言。在熟练掌握C语言的情况下,我们不仅可以利用它来编写一些应用软件,还是进行系统的程序开发,完善系统更好地服务我们的生活与工作。Linux、Unix操作系统本身都是用C语言开发。我们每天都可以用到的Windows操作系统其大部分代码也是有C语言进行开发的。C语言的绘图能力强,具备可移植性,编译方式简易,数据处理能力强,因此适于编写系统软件,三维,二维图形和动画。它是一种数据类型丰富、应用灵活方便的高级语言。
C语言具有以下特点:
1.两重性
C语言具有汇编语言的部分特性。它可以对计算机最基本的工作单元(位、字节、地址)进行操作;也可以对物理地址直接访问,对硬件进行操作。具有高级语言的基本结构和语句。
2.结构化
结构化语言落实到软件的编写,系统的开发上就是实现程序的模块化,这也是结构化语言的一个显著特点。即程序的各个部分除了必要信息交流外相对,因此各个部分开发单独开发和测试,这样的编程易于他人的阅读,自身的整改与维护,大大提高工作效率。
3.与Linux紧密结合
Linux操作系统本身是由C语言开发的,在Linux上用C语言开发的程序运行效率很高,可以实现无缝结合。相比之下,在某些对性能要求很高的领域,C语言是首选。
4.可移植性
C语言编写的程序基本可以不用做任何修改,就可以在不同硬件平台或操作系统上运行[12-16]。
2.2.3 GTK简介
GTK(GIMP Toolkit)是一套跨多种平台的图形工具包,按LGPL许可协议发布的。虽然最初是为GIMP写的,但目前已发展为一个功能强大、设计灵活的一个通用图形库。特别是被GNOME选中使得GTK+广为流传,成为Linux下开发图形界面的应用程序的主流开发工具之一。当然,GTK+并不要求必须在Linux上,事实上,目前GTK+已经有了成功的windows版本。
GTK虽然是用C语言写的,但是同样可以使用你所熟悉的语言来使用GTK,因为GTK+已经被绑定到几乎所有流行的语言上,如:C++,PHP, Guile, Perl,Python,TOM, Ada95,Objective C, Free Pascal,and Eiffel。
2.2.4 Linux编译工具GCC简介
GCC是一个用于Linux系统下编程的编译器。GCC=GNU Compiler Collection,是由Stallman所开发的Linux下的编译器,可以编译的语言包括:C,C++,Objective-C, Fortran,Java,Ada等。不过,现在GCC也有了许多Win32下的移植版本。如今的GCC借助于它的特性,具有了交叉编译器的功能,即在一个平台下编译另一个平台的代码。
本课题选用Ubuntu Linux操作系统,Ubuntu的桌面环境是gnome,gnome是使用GTK+编写,所以选用GTK来进行环境的搭建。运行环境不需要另外配置,即可直接安装开发所需要的环境。同时,Ubuntu Linux操作系统是已经默然安装GCC[17]。
3 开发环境的建立
3.1 Ubuntu Linux的安装
Ubuntu Linux系统既可以安装,也可以与Microsoft Windows系统安装在同一台计算机中——把Ubuntu Linux安装到Windows系统未占用的磁盘分区中。需要注意,在选择安装Linux与Windows双系统时,我们首先要在计算机上安装Windows操作系统并测试运行,再进行Linux系统的安装,否则会导致所安装的Ubuntu Linux操作系统无法正常启动使用。考虑到实用性而言,本课题设计以虚拟机的形式安装Ubuntu Linux操作系统。安装前的准备如下:
1.硬件要求
不同的系统与版本对硬件要求不尽相同。表3-1以桌面版Ubuntu Linux为例,给出相对合理的基本硬件要求,其中主要包括CPU、内存、磁盘空间等。
表3.1 硬件系统要求
| 硬件系统要求 | 简单说明 | 
| CPU | 至少选用1.0GHz的Intelx86系列CPU或更快的CPU | 
| 内存 | 至少配备256MB内存或更多内存 | 
| 磁盘及磁盘分区 | 6~8GB的磁盘空间或更多 | 
| VGA显卡/显示分辨率 | 分辨率1024*768像素 | 
| 引导设备 | CD/DVD驱动,USB移动盘或其他安装方式 | 
安装Ubuntu Linux系统时,至少需要两个磁盘分区,分别用于创建“/”文件系统与交换分区。如果是一个多用户系统,且系统配有足够的磁盘存储空间,最好划分多个磁盘分区,每一个磁盘分区创建单独的文件系统,如/usr、/var和/home等文件系统。
表3.2 磁盘分区的要求
| 文件系统 | 最小容量要求 | 建议容量分配 | 
| / | 250MB | 2GB | 
| /usr | 1.5GB | 2GB以上 | 
| /tmp | 50MB | 1GB且小于单独的文件系统分区 | 
| /var | 500MB | 2GB以上 | 
| /home | 2GB | 取决于用户数量与数据空间的要求 | 
| /boot | 100MB | 100MB | 
Ubuntu Linux系统的安装方式尤其灵活,可以采用不同方法的进行引导安装。本课题以虚拟机的形式进行安装,首先安装VMware Workstation(中文名“威睿工作站”),在网易开源镜像站下载ubuntu-12.04.5-desktop-amd的ISO映像文件。在VMware的基础上,通过ISO映像文件,安装Linux系统。
运行成功截图如下:
图3.1 Ubuntu Linux系统运行界面
3.2 GTK环境的搭建
在Linux系统下的文本编辑器操作方便,对于习惯使用Windows系统的用户来说,是一个不错的选择。与在Windows系统的操作大致相同,右键选项新建一个文本即可。对于编译器GCC(GNU Compiler Collection)的选择,除了其功能强大、简单灵活的特点之外,还因为它能支持各种不同的硬件平台。具有了交叉编译的功能,即在一个平台下编译另一个平台的代码,这样为后期代码的编译与调试提供的便利。可以编译多种语言,包括:C,C++,Objective-C,Fortran,Java,Ada等。由于桌面环境gnome,运行环境不需要另外配置,要做的是安装即可[18]。
在终端下输入这些命令进行完善(有网络可用状态):
1.安装gcc/g++/gdb/make等基本编程工具。
$sudo apt-get install build-essential
2.安装 libgtk2.0-dev libglib2.0-dev等开发相关的库文件。
$sudo apt-get install gnome-core-devel
3.用于在编译GTK程序时自动找出头文件及库文件位置。
$sudo apt-get install pkg-config
4.安装 devhelp GTK文档查看程序。
$sudo apt-get install devhelp
5.安装 gtk/glib 的API参考手册及其它帮助文档。
$sudo apt-get install libglib2.0-doc libgtk2.0-doc
6.安装基于GTK的界面GTK是开发Gnome窗口的c/c++语言图形库。
$sudo apt-get install glade libglade2-dev或者
$sudo apt-get install glade-gnome glade-common glade-doc
7.安装gtk2.0 或者 将gtk+2.0所需的所有文件统通下载安装完毕。
$sudo apt-get install libgtk2.0-dev或者
$sudo apt-get install libgtk2.0*
最后,用测试程序进行编译运行。
图3.2 GTK环境安装与完善
测试程序:
//Helloworld.c
#include  int main(int argc,char *argv[]) {     GtkWidget    *window;     GtkWidget    *label; } 经编译器GCC无误,运行结果如下:     图3.3 测试程序运行 4 程序设计与算法实现 4.1 数据定义 1.用一个二维数组,表示棋子,首先初始化均为空的。 } 2.程序涉及到的相关变量定义如下: i //游戏接口 i //判断获胜 i  //首步棋 i //判断单行连子 i预测双行连子 int forcast(int, int, int *, int *);  4.2 数据结构 1.这个是一个回调函数,等于是用户每放下一个棋子的时候,就会开始执行。 gint area_redraw(GtkWidget *widget, GdkEventExpose *event, gpointer data) 2.获取当前用户放棋子的坐标。 gdk_window_get_pointer(widget->window, &x1, &y1, &state); 3.对游戏结果的判定。 if(winflag==0) //如果当前没有谁输赢的话,就通过play函数,计算出电脑当前应该是放什么位置 //其中x2,y2就是电脑的坐标,x1,y1就是用户的坐标。这个返回值rtn表示比赛结果,有五种情况 ,小于0表示平局。 //等于0,表示当前没有是没有输赢,属于正常情况,还可以继续下。等于1表示电脑赢,等于2表示玩家赢。等于3表示用户放的位置不符合游戏规则。    平局   以下显示对话和对话框界面  电脑]说:请重新开始吧!");  显示对话框*/  可能已平局?!"); 4.3 界面模块 1.初始化界面,对背景、线条、棋子进行颜色选择及填充。 GDK(CIMP绘图包)是简单化编程人员使用X函数的函数库。X库是低层函数,由许多只做专门和相对简单任务的函数组成。GDK创建保存窗口配置信息的数据结构,并提供使用这些数据结构的函数。例如,色彩保存在一个GdkColor结构中,函数可以使用该结构在色彩图中自动分配颜色或定义颜色进行分配。如果在色彩图中没有可以选择的颜色,GDK会寻找一个与之相近的颜色进行填充。 int i, j;     GdkColor     color;     GdkDrawable     *canvas;     GdkGC           *gc;     2.创建游戏对话界面,设定棋盘大小,标题。 GTK+就是GIMP工具包,它把GDK提供的函数组织成对象。大部分对象是可显示对象,例如按钮、标题、文本、输入输出窗口,其中一类对象称作小部件(widget)。带有标准接口,提供颜色、尺寸、位置、鼠标、键盘、字体等必须的项目。函数gtk_window_new执行游戏界面创建的命令,在由函数gtk_widget_set_usize对所创界的界面进行尺寸的设置。最后再调用gtk_drawing_area_new()对所建立的窗口进行区域绘制。  五子棋");  //对建立窗口进行命名 g_signal_connect_swapped(G_OBJECT(window),   "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window)); gtk_widget_set_size_request(drawing_area,  DRAWING_AREA_WIDTH, DRAWING_AREA_HEIGHT); 4.4 核心算法 根据棋局的形式,判断下一次的落子会形成的棋形,遍历全盘找出最优的落子位置。并且为每一次的可能落子位置计算其重要程度(用后面所说的分值来替代)。遍历棋盘未落棋子位置,比较玩家落子的最大分值的点和机器落子的最大分值的点,来找出最佳的落子位置,最重要的落子点。在对战进行的过程中,如果机器落子的最大分值比玩家落子的最大分值要小,呈现劣势对局,机器会优先把棋子落入玩家的最大分值点的位置上(玩家最有可能获胜的位置),称其为防守;反而言之,如果机器落子的最大分值比玩家要大,呈现优势对局,机器就会将棋子置入自己最有可能获胜的位置上,称其为进攻。 通过调用judgePoint判断是否有单行连子、双行连子。 int judge(int player, int num, int *x2, int *y2) {   } 用户放了一个棋子之后,先判断电脑有没有4个连续单行棋子,有的话就直接放入凑到5个,则电脑获得胜利;如果等于0,即电脑没有连续4个的单行棋子,再判断用户有没有连续4个的,有的话,进行防守。如果等于0,则继续判断电脑有没有连续3个的单行棋子,凑成4个连续单行棋子,如果没有,则继续判断用户有没有连续3个的单行棋子,进行防守用户。反之,如果用户也没有,判断电脑有没有双行凑成3个的棋子,如下双行凑成三连棋子的情况:       图4.1 双行三连子展示 如果电脑有,则放入。如果等于0,没有的话,判断用户有没有这样的情况,进行防守用户。如果用户也没有。接下来可以不用防守用户,电脑再继续下棋,先看是否有双行2棋子,如果没有。就看电脑是否有连续两个单行棋子。如果电脑没有就在用户的周围放下一个位置,即firstStep。如果用户周边不能放棋子了,就是平局。说明棋子已经满了。 if(judge(COMPUTER, 4, x2, y2)==0)             if(judge(HUMAN, 4, x2 , y2)==0)                 if(judge(COMPUTER, 3 , x2, y2)==0)                     if(judge(HUMAN, 3, x2 ,y2)==0)                         if(forcast(COMPUTER, 3, x2, y2)==0)                             if(forcast(HUMAN, 3, x2, y2)==0)                                 if(forcast(COMPUTER, 2, x2, y2)==0)                                     if(judge(COMPUTER, 2, x2, y2)==0)                                         if(firstStep(x1 ,y1, x2, y2)==0)                                             return -1;           if(isWin(HUMAN))//判断是不是用户赢了             return HUMAN;         if(isWin(COMPUTER))//判断是不是电脑赢了             return COMPUTER;         return 0;     } } int isWin(int player) {     int i, j, drY, drX;       for(i=0; i             for(drY=-1; drY<2; drY++)//drX,drY表示方向,如:(drY=0;drX=1.表示当前棋子的→正右边方向)                 for(drX=-1; drX<2; drX++)                 {                     if(drY==0 && drX==0)                         continue;                     if( (i+drY*4)<0 || (i+drY*4)>=NUM \                                     || (j+drX*4)<0 || (j+drX*4)>=NUM )                         continue;                       int num, flag=0;                     for(num=1; num<5; num++)//在某一个方向上,有连续5个即返回1,说明赢了                     {                         if(array[i+drY*num][j+drX*num]==player)                             flag++;                         if(flag==4)                             return 1;                     }                 }         }     return 0; } 5 系统测试与成果展示 5.1 系统流程 图5.1 功能测试模块流程 5.2 系统测试 5.2.1 界面功能测试 界面功能测试的任务是对游戏过程中各种界面元素是否能够正常绘制出来的测试,由于在VMware上安装Linux虚拟系统,在程序运行的过程中,可能因为计算机的运行速率的问题而出现图像显示不完整的情况。例如在绘制棋子可能出现不完整的棋子,半圆的有缺的棋子;有的时候出现一定延时,界面刷新不及时。 测试结果:99%的情况下正常执行,只有在计算机CPU使用率很高的的情况下会出现卡顿的情况,极少出现棋子显示不完整。 5.2.2 输入功能测试 输入功能测试是为了测试出是否能够获取按键操作并且及时地作出相应的反应。例如对玩家选择落子位置的确定。 测试结果:可以正常运行。 5.2.3 游戏功能测试 游戏功能测试是测试出是否能够通过程序的运行,体验五子棋游戏功能。例如,判断是否能够正常地进行落子操作,是否及时出现相关消息提示(计算机与玩家的对话),是否能够判断输赢、停止落子的操作及赢家所消耗多少步棋等。 测试结果:可以正常运行。 5.3 成果展示 经GCC编译器对撰写程序进行编译,调试通过后,生成可以运行文件fives。运行文件得到游戏开始界面。 图5.2 游戏开始界面展示 玩家为先手,鼠标左键单击在16*16棋盘上选择落子位置。在对战过程中,机器会与玩家进行趣味性的对话。 图5.3 游戏对战界面展示 当玩家或机器中的某一方胜利之后,界面上会呈现出五子连珠的画面,同时光标也会消失,并且显示出哪一方获胜和所消耗的棋步的多少。 图5.4 电脑获胜界面展示 图5.5 玩家获胜界面展示 从论文的选题到资料的搜集,从对Linux一无所知到能为己所用,这期间使我学会了很多,同时也认清了自己的不足之处。在近三个月的毕业设计课题中,让我体会了获得新知识的喜悦,撰写代码编程的枯燥,调试编译不能通过的失落,及最后完成毕业设计课题实现功能的兴奋。 在最开始着手于课题的设计时,心里很茫然,对相关知识懵懵懂懂。古语云:“工欲善其事,必先利其器”。对于理论知识掌握不够熟练的我深深地感到了自己的不足,在指导教师的悉心指导与帮助下,通过图书馆搜集资料及网络资源知识的学习,使我对毕业设计课题的研究有了一个大的方向。在查阅资料这段时间里,使我明白,想要解决各种各样的问题,一定需要大量扎实的理论知识。在充实了自己的知识储备的同时,要实际动手去做,只有把所学的理论知识与实践相结合起来,在这二者的配合下,才能成功的完成毕业课程设计。  通过此次毕业课程设计,让我的逻辑思维得到提高,设计思维得到培养。对于C语言和Linux系统编程有了更深层次的理解。学习是一个不断积累的过程,不能一蹴而就,在将来的生活与工作中,也要养成爱学习的习惯,来弥补自己的不足之处。 本课题设计基于Ubuntu Linux操作系统实现了五子棋游戏的功能。在Linux环境下通过GTK实现简单的界面绘制,C语言的编程五子棋算法来实现。由鼠标控制光标移动进行单击选择落子位置。对战采用核心算法,是分别算出玩家和机器的最佳落子位置的分数,并进行比较,当机器最佳落子位置分数高时,机器落子的位置是它自己的分数最高的位置,如果玩家的最佳落子位置的分数高于机器,那么机器就占用玩家的最佳落子位置;在游戏对战过程中,机器会和玩家进行趣味性的对话。 由于知识水平和时间的有限,本课题设计还存在许多的不足之处,希望自己今后能够进行完善,例如: ●本设计实现的界面过于简单,对于所搭建的GTK环境使用熟练不足。 ●游戏过程中不能进行悔棋、认输等操作。 ●未能实现网络对战、人人对战的功能。 参 考 文 献 [1] 邢国庆,张广利,邹浪.Ubuntu权威指南.人民邮电出版社,2010.1. [2] 马玉军.21天学通Linux C编程.北京:电子工业出版社,2010.5. [3] Masters, Jon, Blum, Richard. Professional Linux Programming. Wiley Publishing,2007.2. [4] 曹江华,王涛.Linux常用命令手册.北京:电子工业出版社,2015. [5] 刘加海,骆建华.Linux程序设计实践与编程技巧.杭州:浙江大学出版社,2013. [6] 王友九,张艳利,郑富娥.Linux C编程80列详解.北京:电子工业出版社.2013. [7] Gancarz, Hall, Jon "Maddog".Linux and the Unix Philosophy: Operating Systems. Digital Press,2003.8. [8] 杨宗德,吕光宏,刘雍.Linux高级程序设计(第三版).北京:人民邮电出版社,2012. [9] 明日科技. Linux C从入门到精通.北京:清华大学出版社,2012. [10] 唐晓君.Linux系统及编程基础.北京:清华大学出版社,2012. [11]James Turnbull,D. Matotek,P, Lieverdink. Pro Linux System Administration. APress,2009.6 [12] 张勤,鲜学丰.Linux从初学到精通.北京:电子工业出版社,2011. [13] 孙斌,翔.Linux操作系统.西安:西安电子科技大学出版社,2011. [14] 刘循.Linux操作系统及其应用编程(第二版).北京:高等教育出版社,2011. [15] Ric Shreves. Ubuntu Linux Desktop. Visual,2009.3. [16] Mark G. Sobell. Linux configuration & installation 4th edition. Prentice Hall,2015.1. [17]Thi-Thanh-Mai Hoang.Computer Networks,the Internet and Next Generation.Peter Lang GmbH,2012.2. [18]Sander van Vugt Comm. Beginning the Linux and Line. APress.2009.4 历时近三个月的毕业设计眼看就要暂告收尾,这也意为我在大连民族大学的学习生涯即将结束。四年的大学生活好似弹指一挥间,回想一下,自己一生之中最宝贵的时光能于这样风景秀丽的滨海校园中度过,实在是荣幸之至。本科四年的学习与生活使我终身受益,在这里,我学到不仅是让我立足社会的专业知识,还有教育我为人处事的道理。引导向正确的方向前进,逐渐形成正确的价值观、成熟的人生观。我首先要感谢我的父母,他们为我创造了这样的条件和机会,让我来体验大学的生活。千里求学的四年里,离不开父母对我的支持和鼓励,生活中每当遇到什么困难波折,他们总是第一个给我鼓励给我肯定的人。太多理所应当让人觉得太平常,让我亏欠他们的太多了。再者,我要感谢我的指导教师——姚远老师。本课题在老师的悉心指导与帮助下完成,从课题的选择、具体构思及实现的方式无不聚集着老师的心血与汗水。 从开始进入课题到论文的顺利完成,这一切都离不开父母、老师、同学、朋友给我的热情的帮助和源源不断的鼓励,在此,表示最诚挚的谢意。
