毕业论文_android游戏开发

本科生毕业论文(设计)

题 目 基于Android的黑白棋手机游戏开发 学 院 电子信息学院 专 业 电子信息工程 学生姓名 学 号 年级 2011 指导教师 教务处制表 二Ο 年 月 日

基于Andorid的黑白棋手机游戏开发

专业:电子信息工程

学生: 指导老师:

摘要

随着人们生活节奏的加快,智能手机的应用越来越广泛。而在智能手机用户中,Android用户更是占据了最大的比例,超过了总用户的七成。人们对手机的依赖度在不断提升,对能让人休闲娱乐的游戏的需求也在不断增加。近年来,手机游戏公司如雨后春笋般涌出,而手机游戏也层出不穷,收益不小。譬如由莉莉丝开发,龙图游戏代理的动作卡牌手游《刀塔传奇》,更是创造了单日流水2000万元的全新纪录。而在各种手机游戏中,棋牌类、益智类小游戏虽然盈利不高,却更能提升用户对于零散时间的利用。简要介绍了Android平台现状和手机游戏发展走向,讲述了Android平台开发环境的搭建,以及黑白棋游戏的规则。之后基于Android平台,对黑白棋游戏进行了设计,使用Java语言编写游戏算法,用Eclipse作为开发平台,完成了对黑白棋游戏的编码实现。并简要讲述了在实现过程中用到的Android相关知识,和实现黑白棋人工智能用到的评价函数和搜索算法。最后在Android真机上进行了测 试,能正常运行,各项功能也都能实现,达到了预期的结果。

关键词:Android,手机游戏,黑白棋,Eclipse,游戏算法

Development of Othello Mobil Phone Game Based on

Android Platform

Major: Electronic and Information Engineering

Student: Supervisor:

abstract

With accelerated pace of life, more and more widespread application of smart phones. In the smart phone users, Android users is accounted for the largest proportion of users than the total Qi Cheng. People on the phone's dependence on rising demand for entertainment games can make people is also increasing. In recent years, mobile gaming company mushroomed emission, and mobile games are endless, income is not small. For example, the development of the Lilith, Lung action games proxy card hand tour "turret Legend", it is to create a one-day water 20 million yuan of the new record. In a variety of mobile games, chess, puzzle games, although profit is not high, but more to enhance the user for use of fragmented time. This article briefly describes the status of the Android platform and mobile game development trend, and then tells the build Android platform development environment, as well as the rules of Othello game. After Android platform based on Othello game has been designed using the Java language game algorithm, using Eclipse as a development platform, we completed Othello game code implementation. And briefly describes the process used in the realization of Android-related knowledge, and to achieve Othello artificial intelligence algorithms.The final game on Android real machine was tested to run correctly, the function can be realized, to achieve the desired results. Key word: Android, mobile phone games, Othello, Eclipse, game algorithm

目录

第1章 绪论 ................................................................................................................................... 6

1.1 游戏开发目的及意义 ..................................................................................................... 6

1.1.1选题目的 .............................................................................................................. 6

1.1.2 开发意义 ............................................................................................................. 7

1.2 黑白棋发展 ..................................................................................................................... 7

1.2.1黑白棋简述 .......................................................................................................... 7

1.2.2黑白棋发展 .......................................................................................................... 7

1.2.3黑白棋规则 .......................................................................................................... 7

第2章 Android平台概述与相关知识 ........................................................................................ 8

2.1 Android平台发展现状 .................................................................................................. 8

2.2 Android平台架构. ........................................................................................................ 8

2.3 Android开发环境搭建 .................................................................................................. 9

2.3.1 准备工作 ............................................................................................................. 9

2.3.2 环境变量的配置 ................................................................................................. 9

2.3.3 安装配置ADT .................................................................................................... 11

2.3.4 运行、调试 ....................................................................................................... 12

2.4 Android相关知识 ........................................................................................................... 12

2.4.1 Android项目 ........................................................................................................ 12

2.4.2 相关UI组件 ....................................................................................................... 13

1 布局管理器 ............................................................................................................... 13

2.4.3 Activity .............................................................................................................. 14

2.4.4 事件处理 ............................................................................................................. 16

1 基于监听的事件处理 ............................................................................................... 16

2 基于回调的事件处理 ............................................................................................... 17

2.4.5 图形与图像处理 ................................................................................................. 17

2.4.6 SQLite数据库 ..................................................................................................... 17

第3章 黑白棋游戏总体设计 ..................................................................................................... 18

3.1 黑白棋游戏功能设计 ................................................................................................... 18

3.2 游戏界面设计 ............................................................................................................... 18

第4章 详细设计及编码实现 ..................................................................................................... 19

4.1 游戏界面详细设计及实现 ........................................................................................... 19

4.1.1 欢迎界面 ........................................................................................................... 19

4.1.2 主界面 ............................................................................................................... 20

4.1.3 背景音乐设置界面 ........................................................................................... 22

4.1.4 游戏界面 ............................................................................................................. 24

4.1.5 游戏记录界面 ................................................................................................... 25

4.1.6 游戏帮助界面 ................................................................................................... 26

第5章 游戏算法设计与编程 ..................................................................................................... 26

5.1 游戏算法设计 ............................................................................................................... 26

5.1.1 游戏技巧分析 ................................................................................................... 26

5.1.2 评估函数 ........................................................................................................... 27

5.1.2 搜索算法 ........................................................................................................... 28

5.2 游戏编码设计 ............................................................................................................... 29

5.2.1 游戏编码思路 ................................................................................................... 29

5.2.2 游戏算法编码 ................................................................................................... 29

5.2.4 游戏绘制编码 ................................................................................................... 30

第6章 游戏测试与结果 ............................................................................................................. 30

6.1 Android应用程序打包 ................................................................................................ 31

6.1.1 签名 ................................................................................................................... 31

6.1.2 游戏真机测试 ................................................................................................... 31

6.1.3 测试评价 ........................................................................................................... 32

第7章 总结 ................................................................................................................................. 33

第1章 绪论

1.1 游戏开发目的及意义

1.1.1选题目的

1.选题背景

今天的手机已经从单纯的通讯工具转变为一个集通讯、音乐、电影、游戏等多功能于一身的便携终端;手机的综合价值越来越高,这使得人们对它的依赖性越来越强。现在的生活节奏正在变快;人们除了工作和学习之外,还要花费不少的时间在往返的路途上,当然也就没有太多时间呆在电视机前,这一现状自然而然的激发了移动终端(手机、掌上游戏机)的飞速崛起 [1]。而Android手机用户占总智能手机用户的70%以上。

Android平台较主要的应用便是Android游戏,而随着Android手机用户的增多,由于用户基数较大,Android游戏用户数量也将增多。国内从事手机游戏开发的人员也在逐年增加,Android游戏也势必逐渐创新,层出不穷。虽然国产手机游戏的质量和国外相比有着各种或多或少的差距,但中国的安卓手机游戏还是有很大发展前景。

2.安卓手机游戏发展趋势

(1) 将向高性能3D游戏方向发展。

智能手机的性能逐年提高,手机游戏行业的不断发展,及玩家对手游UI的高质量需求,会使得使用空间立体编程算法的3D游戏愈加普及。有了机器性能和3D技术的支持,有着较高画面观赏度的3D游戏会逐渐取代2D游戏并成为行业霸主。一旦裸眼3D技术的运用普及,势必使裸眼3D游戏主导未来手游行业。

(2) 将向社交化方向发展

各平台对无线网络的良好支持,使得游戏的社交性更为明显。多人在线、互动、交谈,将进一步提高玩家对游戏的精神依赖度。但由于通讯网络的限制,目前手游的社交性并不能得到很好的体现。但随着无线网络的发展,4G网络的发展以及WiFi的愈加普及,游戏的社交性也必将成为未来的手机游戏发展方向之一。

(3) 将向休闲化网游方向发展。

目前移动设备上的休闲小游戏便能很好的提高用户对零散时间的利用。但随着无线网络的发展,能让用户零散利用时间的网络游戏也因此应运而生。相比于单局开始单局结束的休闲小游戏,继承了休闲特点的手机网游更能使用户产生依赖。可以随时开始与结束,充分利用用户零散时间的网游会更受用户青睐。

(4) 游戏类型更加丰富多彩,游戏更新速度更快。

一款游戏无论设计有多出彩,玩久了一样会使人感到疲劳。为了使玩家不对一款游戏很快产生疲劳,游戏的设计便会朝多元化,多内容方向发展。用难度设置或更新等手段让玩家对该游戏保持兴趣,借此延长游戏的生命周期。

1.1.2 开发意义

游戏本身就是一种学习,玩游戏时学会思考,发掘思考问题的方式,锻炼自己的思维,并能从中发现乐趣,这便是游戏自身的意义。而益智休闲类游戏,人对其的精神依赖度不高,但却能使人在空闲时既放松了又活跃了思维。

黑白棋便是这样一款游戏,然而国人对其知之甚少。通过本游戏可让不清楚黑白棋的人知道这款游戏的基本规则,以及提高对益智休闲类游戏的兴趣。

1.2 黑白棋发展

1.2.1黑白棋简述

黑白棋,又叫反棋、奥赛罗、苹果棋或翻转棋,在西方和日本很流行。在日本,黑白棋玩家数量甚至达到了6000万之多。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负,游戏规则简单,因此上手很容易,但是它的变化又非常复杂[3]。

黑白棋是19世纪末英国人发明的。直到上个世纪70年代日本人长谷川五郎将其进行发展和推广,借用莎士比亚名剧奥赛罗(Othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。

1.2.2黑白棋发展

中国最早出现黑白棋还是80年代的PC游戏了,那时由于各种原因而传播不开,90年代的文曲星虽然让更多的人认识了黑白棋,但却因棋力不佳而被众人所不齿。

90年代中期开始,互联网在中国逐渐普及,当时国内3个游戏对战平台——中游,联众和边锋,将黑白棋推上了鼎盛时期。但之后由于出现网络作弊现象,而这些平台没做好控制,导致这些平台黑白棋的衰落。

几年前至今,很多平台也推出了黑白棋游戏。由于互联网用户众多,黑白棋玩家数量也相应提升不少,中国黑白棋出现了欣欣向荣的景象。虽然在中国,黑白棋不如象棋和围棋那般耳熟能详,但是其上手性,灵活性和快速性确是象棋、围棋所不能比拟的。

1.2.3黑白棋规则

1.游戏道具

棋子:黑白棋棋子呈圆饼形,每颗棋子的两面分别为黑白两色,共64个。玩家双方各下一面棋子。

棋盘:黑白棋棋盘由64(8*8)格的正方格组成,游戏时棋子要下在方格内。

2.玩法

棋盘为8×8的方格布局,开局时在棋盘正中摆好的四枚棋子,黑白各2枚,交叉放置,通常执黑先手,交替下子。

下子方式:只要落子和棋盘上任一枚己方的棋子在一条线上(横、直、斜线皆可)夹着对方棋子,就能将对方的这些棋子转变为我己方(翻面即可);如果在任一位置落子都不能夹住对手的任一颗棋子,就要让对手下子[4]。

3.游戏结束条件:

(1)双方都无子可下游戏结束;

(2)一方的子被翻完游戏结束;

(3)棋格被全部下满;

4.胜负判断

游戏结束后,按棋盘上谁的棋子多少决定胜负,多则为胜,平则和局。

第2章 Android平台概述与相关知识

2.1 Android平台发展现状

Android是由Andy Rubin创立的一个手机操作系统,后于2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上[5]。

当前主流的操作系统还有两种,APPLE公司的IOS以及Microsoft公司的Windows Phone,但其市场占有率远不如Android,Android已成为最主流的手机操作系统。

就国内环境来说,不管是知名厂商(如华为、中兴),或是山寨手机厂商,Android平台都是首要选择。

2.2 Android平台架构.

Android平台由操作系统、中间件、用户界面和应用软件4层组成,采用软件叠层(Soft Stack)方式构建。这种方式使得层与层之间耦合度很低。下层改变时上层无须改变。体系结构如图2.2:

图2.2 Adroid系统体系结构

Android由4部分构成(图中从上往下顺序):

应用程序层:用java语言编写的运行在AVM上的程序;

应用程序框架:编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用;

系统运行库层:使用Android 应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务;

Linux内核:Android 的核心系统服务基于Linux2.6内核。Linux内核同时也作为系统硬件和软件叠层之间的抽象层。

2.3 Android开发环境搭建

2.3.1 准备工作

需要先下载4种软件或组件:JDK、ADT、Android SDK、Eclipse

下载地址不加赘述,网上很容易找到。然后安装JDK、SDK和Eclipse,过程不必多说,不过路径要记住。

2.3.2 环境变量的配置

计算机(右键)->属性->高级系统设置->高级->环境变量

如下图:

图2.3.2 环境变量的配置

然后新建6个变量:

JAVA_HOME = C:\Program Files\java\jdk1.8.0_40

JRE_HOME = C:\Program Files\java\jre1.8.0_40

JAVA_JRE_HOME = %JAVA_HOME%\jre

Android_SDK_HOME = F:\adt-bundle-windows-x86-20130917\sdk

CLASSPATH

= .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JAVA_JRE_HOME%\lib;%JAVA_JRE_HOME%\lib\rt.jar PATH

= %Android_SDK_HOME%\platform-tools;%Android_SDK_HOME%\tools;%JAVA_HOME%\bin;%JRE_HOME%\bin;%JAVA_JRE_HOME%\bin;

配置完成后,检查是否成功配置。运行cmd,分别输入java命令,javac命令,adb命令,如果都有其用法说明,则表示配置成功。

如图2.3.22以java为例:

图 2.3.22 java命令选项

2.3.3 安装配置ADT

1.安装ADT

(1)启动Eclipse,然后选择Help->Install New Software...,点击add;

(2)对话框里点击Archive,选择下载的ADT的压缩文件;

(3)输入一个名字作为更新位置,点击OK;

(4)选中Developer Tools旁边的标记框,Next->next->Finish->OK,重启Eclipse;

2.配置ADT插件

(1)Windows->Preferences... 打开Preferences面板,选择左边面板里的Android;

()在右边面板里点Browse,找到SDK路径然后确定,点击Apply->OK

这样就完成配置了。

2.3.4 运行、调试

1.使用真机

将android手机用USB线连在电脑上,安装好驱动,打开手机的开发者选项,开启“不锁定屏幕”,“USB调试”,“允许模拟位置”,也可按情况开启其他功能。

2.使用AVD(Android Virtual Device)

(1)打开Eclipse,点击Windows->AVDM,打开AVD Manager

(2)点击New可添加自定义AVD设备,各项参数设置好后点OK,便创建好了一个AVD;

(3)选择一个已有的AVD,点击Start->Launch,便可运行“虚拟手机”了,运行成功后大致界面如图2.3.4:

图2.3.4 虚拟机的运行

2.4 Android相关知识

2.4.1 Android项目

Android命令有一个create project的子命令,用于创建一个Android应用。 当一个android应用被创建时,会自动生成一些子目录和文件。

1..setting目录

存放设置文件。

2.bin目录

编译后的二进制文件

3.gen目录

由开发软件自动生成的一些java文件,。里面的R文件用于资源索引,索引值都是int类型。

4.res目录

用于存放各种资源,譬如其子目录里的drawable(drawable-hdpi,

drawable-ldpi, drawable-mdpi ,drawable-xhdpi)存放图片,layout存放界面布局文件,values中存放各种XML资源文件,如字符串资源文件strings.xml,颜色资源文件colors.xml等。

5.src 目录

用于存放开发者编写的java源文件

6.AndroidManifest.xml

Android主配置文件,系统清单文件。包含应用程序包名,包含组件,兼容的最低版本等。每个Activity都应写在AndroidManifest.xml文件里面。

2.4.2 相关UI组件

1 布局管理器

布局管理器之间的关系如图2.4.2所示

图2.4.2 布局管理器管系图

可见,绝对布局,帧布局,线形布局,网格布局和相对布局是直接继承于ViewGroup,表格布局是继承自线性布局。

(1)线形布局:线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件 横向 或者 纵向 排列, 通过android:orientation属性控制;

常用属性:

android:divider;设置分隔条;

android:gravity; 设置对齐方式;

android:orientation;设置排列方式;

子元素控制:

android:layout_gravity;设置子元素在父容器中的对齐方式;

android:layout_weight; 子元素在父容器中所占的权重;

(2)表格布局:

表格布局继承了LinearLayout, 其本质是线性布局管理器;。只需要添加TableRow 和组件就可以控制表格的行数和列数。

行为方式:可以将单元格设置为Shrinkable,Stretchable或者是Collapsed,依次表示该列所有单元格宽度可以被收缩,宽度可以被拉伸,会被隐藏。

由于继承自线性布局,所以线性布局所有属性表格布局都支持。

2. Textview及其子类

主要介绍4个方面:TextView,EditView,Button,ToggleButton

TextView

能在界面上显示文本内容。

2. EditView

继承自TextView,允许用户编辑文本内容。

3.Button

继承自TextView,在UI界面生成一个按钮,用户点击按钮时会触发一个onClick事件。

4. ToggleButton

用于切换程序中某种状态。

2.4.3 Activity

1 Activity用处

Activity是android中最重要、最常见的应用组件。Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。

2 Activity的生命周期

图2.4.3 Activity的生命周期图

Activity有四种状态:

(1)活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就处于activity或者运行状态。

(2)运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity处于文档处于焦点状态,当前的Activity就处于pause。

(3)停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在运行,但是用户却看不见。

(4)结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这是Activity就是处于结束状态了。

可以理解为三层循环

第一层,onCreate到ocDestroy,即是activity从创建好到结束状态,对应着从手机中点开程序,以及退出程序;

第二层,onStart到onStop,再到onRestart,即是activity从运行状态到停止状态之间的切换。对应着点击手机的主菜单切换到其他程序,这时activity处于后台中,再切回程序。

第三层,onResume到onPause,这种状态即是在程序内切换界面。

3 Activity的跳转

靠Intent对象来实现。在AndroidManifest.xml清单文件中配置Activity时,指定元素,用于指定该Activity可相应的Intent。

然后在Activity中通过以下语句来实现跳转,其中xxxx代表要跳转的目的activity在AndroidManifest.xml中的action属性:

Intent intent = new Intent();

Intent.setAction(“xxxx”);

startActivity(intent);

2.4.4 事件处理

1 基于监听的事件处理

为用户动作提供响应的机制就是事件处理。

Android有两套事件处理机制,分别基于监听和回调。基于监听的模型中主要涉及三类对象

(1)事件源Event Source:产生事件的来源,通常是各种组件,如按钮,窗口等。

(2)事件Event:事件封装了界面组件上发生的特定事件的具体信息,如果监听器需要获取界面组件上所发生事件的相关信息,一般通过事件Event对象来传递。

(3)事件监听器Event Listener:负责监听事件源发生的事件,并对不同的事件做相应的处理。

基于监听器的事件处理机制是一种委派式Delegation的事件处理方式,事件源将整个事件委托给事件监听器,由监听器对事件进行响应处理。这种处理方式将事件源和事件监

听器分离,有利于提供程序的可维护性。

2 基于回调的事件处理 相比基于监听器的事件处理模型,基于回调的事件处理模型要简单些,该模型中,事件源和事件监听器是合一的,也就是说没有独立的事件监听器存在。当用户在GUI组件上触发某事件时,由该组件自身特定的函数负责处理该事件。通常通过重写Override组件类的事件处理函数实现事件的处理。

2.4.5 图形与图像处理

1. Drawable对象

在android应用中增加drawable资源后,android SDK会在R文件里生成一个索引:R.drawable.file_name 。可在XML资源文件中通过@ drawable/file_name引用,或通过java程序的R.drawable.file_name引用。

2 Canvas与Paint

Canvas是画布,相当于一张纸。可以用许多方法对其实现绘制。例如:

drawCircle(float cx, float cy, float radius, Paint paint)//画一个圆

drawLine(float startX, float startY, float stopX, float stopY, Paintpaint)//画一条线

drawPoint(float x, float y, Paint paint) //画一个点

Paint是画笔,主要用于设置各种属性后,在画布上绘图。方法如:

setColor(int color)//设置颜色

setStyle(Paint.Style style)//设置风格

setAlpha(int a)//设置透明度

2.4.6 SQLite数据库

1.数据库简要概述

SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备适量数据存取。Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库[6]。QLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支

持的数据库大小为2TB。它具有量级轻,独立性,跨平台,语言接口多等特征。

2.数据库操作

(1)打开或创建数据库(存在就打开,不存在就创建):

mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);

(2).创建表

String CREATE_TABLE="create table 表名(列名,列名,……)";

mSQLiteDatabase.execSQL(CREATE_TABLE);

(3)插入记录

ContentValues cv=new ContentValues();

cv.put(TABLE_NUM,1);

cv.put(TABLE_DATA,"测试数据库数据");

mSQLiteDatabase.insert(Test,null,cv);

//同样可以使用execSQL方法来执行一条“插入“的SQL语句

String INSERT_DATA="insert into 表名(列名,……) values (值,……)";

mSQLiteDatabase.execSQL(INSERT_DATA);

第3章 黑白棋游戏总体设计

3.1 黑白棋游戏功能设计

一个最基本的黑白棋游戏,包括开始游戏,实现人机对弈,以及游戏结束后结果的正常显示。在此之上可追加各种不同的功能来满足用户的需求。考虑到设计的完成时间限制,综合分析后,决定实现以下功能:

(1)基本功能,包括:开始游戏,实现AI,显示游戏结果;

(2)基本拓展功能,包括游戏帮助,游戏记录,重新开始游戏,游戏退出;

(3)额外拓展功能,包括游戏背景音乐,登陆界面Splash(即欢迎界面)。

3.2 游戏界面设计

游戏界面设计,即实现各种功能的按钮或菜单,各界面的切换,大体设计如图3.2:

图3.2 黑白棋功能设计

第4章 详细设计及编码实现

4.1 游戏界面详细设计及实现

游戏界面设计为六个部分:欢迎界面,主界面(选择界面),游戏界面,背景音乐选项界面,游戏记录界面以及游戏帮助界面。

各个界面使用XML布局文件来控制UI界面。使用java语言编写Activity,然后在java里统一地使用如下形式代码获取UI界面:

public void onCreate(Bundle savedInstanceState)

{

}

4.1.1 欢迎界面

1.什么是Splash

Splash画面在手机app的主程序启动之前先启动,简单地介绍应用程序的一些基本信息,如厂商、版本的新特性等。多为一张或几张可以滚动的图片,显示几秒钟或用户进行

super.onCreate(savedInstanceState); setContentView(R.layout.xxxx); //xxxx代表名字为xxxx的XML文件 //这里填写需要执行的操作

点击操作后,会显示出应用程序的主体页面[7]。

2.欢迎界面的XML布局文件

使用线性布局LinearLayout,并在其中添加了一个ImageView类,该组件中由以下语句调用splash图片:

android:src=”@drawable/splash”;

即是将资源文件夹drawable下的splash文件调用。

3.实现欢迎界面的java文件

创建一个SplashScreen类使之继承Activity类,在类中获取splash布局界面,定义一个protected int _splashTime = 5000; 即是使时间过了5秒后能自动跳转到主界面。

在onCreate方法中创建一个Thread对象,并重写run(),用于运行一个线程,功能是每0.1秒去检测有无触碰发生,有触碰发生或者是过了5秒后,便运行startActivity(new Intent("com.google.app.splashy.CLEARSPLASH"));使Activity跳转到action标签为以下的Activity去

在这里,跳转到主界面的Activity

图4.1.1 欢迎界面

4.1.2 主界面

1.主界面的XML布局文件

使用线性布局LinearLayout,线性布局背景设置为

android:background=”@drawable/ background”

并在其中添加了5个Button类,text属性分别是“开始游戏”“背景音乐”

“比赛记录”

“游戏帮助”“退出游戏”

2.主界面的java文件

加载XML文件,并为每个按钮绑定一个事件监听器,通用形式为:

Button xxxxButton=(Button)findViewById(R.id.mmmm);

xxxx.setOnClickListener(new xxxxClickListener());

其中xxxx设置为每个按钮,mmmm为每个按钮的id属性。

以下事件监听器以startgame为例说明

class startgameClickListener implements View.OnClickListener

}

意为在按钮点下时,跳转到action属性为"com.gajah.game.othella2.ui.MAIN"的activity去。即是跳到游戏界面去。

同理,“背景音乐”“比赛记录”“游戏帮助”分别转到相应界面。

退出游戏的按钮的监听器为:

class gameExitClickListener implements View.OnClickListener

{ @Override public void onClick(View v) { } } { @Override public void onClick(View v) { startActivity(intent); Intent intent = new Intent("com.gajah.game.othella2.ui.MAIN"); } System.exit(0);

点下按钮后执行System.exit(0);这条语句用来结束该程序的所有activity,即实现退出应用。

图4.1.2 主界面

4.1.3 背景音乐设置界面

1.界面文件

XML文件里设置一个线性布局,在线性布局里添加一个TextView来显示“背景音乐”四个字的文本。然后添加两个Button,第一个Button的功能是播放或者暂停背景音乐。第二个Button的功能是停止背景音乐。

2.Java编程文档

获取界面,在onCreate函数里,启动控制背景音乐的Service,实现进入背景界面后,当点击“播放/暂停”按钮时,如果正在播放背景音乐则暂停,如果处于暂停状态则开始播放;点击“停止”按钮时停止背景音乐。

在两个按钮上绑定事件监听器,实现点击时发送广播。

class bgmonClickListener implements View.OnClickListener { @Override public void onClick(View v) {

Intent intent = new Intent(CTL_ACTION); intent.putExtra("control",1); sendBroadcast(intent);

} }

该段代码实现“播放/暂停”按钮的事件监听,当按钮被点击时,发送Intent属性为(CTL_ACTION),内容为("control",1)的广播。其中CTL_ACTION是一个字符串CTL_ACTION="org.action.CTL_ACTION" ;

3.音乐Service

先定义一个继承自Service的类(部分代码):

public class MusicService extends Service

在onCreate函数定义一个MediaPlayer的实例,用于实现音乐播放。然后注册一个BroadcastReceiver,用于监听action属性为CTL_ACTION的广播信息。

@Override public void onCreate() { serviceReceiver= new MyReceiver(); mediaPlayer = new MediaPlayer(); IntentFilter filter = new IntentFilter();

} filter.addAction(SetBGM.CTL_ACTION); registerReceiver(serviceReceiver, filter); super.onCreate();

图4.1.3 背景音乐设置界面

BroadcastReceiver里的代码功能为监听广播并根据信息改变播放状态。若接收到

("control",1),则先判断是否处于播放状态,然后更改状态。若接收到("control",1),则执行mediaPlayer.stop()停止播放。

4.1.4 游戏界面

该界面在XML文件中只使用了一个线性布局,其余功能由java代码完成。

代码里依然先创建activity然后获取XML文件中的UI界面。重写后的onCreate语句如下:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gameCanvas = new GameCanvas(this); setContentView(gameCanvas); dataHelper = new DataHelper(this); this.registerForContextMenu(gameCanvas); }

其中gameCanvas是关于游戏绘图的一个继承自surfaceview的类,datahelper为一个数据库类,this.registerForContextMenu(gameCanvas);为调用实现目录的函数。 在运行游戏界面,点击手机上的“menu”键,即可进行菜单选择。

目录中实现的功能为4个:新游戏,pass,high score,exit:

(1)新游戏顾名思义,就是重新开始游戏的意思;

(2)pass是指遇到自己没法下棋的时候可以点的选项,可以下棋时点击则无效;

(3)high score便连接到游戏记录;

(4)Exit 为退出游戏。

图4.1.41 开局 图4.1.42 中盘 图4.1.43 游戏结束

4.1.5 游戏记录界面

1.XML界面文件

以表格布局TableLayout来显示以前的游戏记录,tableraw设为三列,分别显示玩家名字,黑棋数和白棋数。

2.Java编程文件

除开正常的获取UI组件外,在该文件中还实现了数据库类的实例的创建,

private DataHelper dataHelper;其中DataHelper是一个数据库类,将在后文提到。

数据库用于记录游戏结果,并显示出成绩排名。

图4.1.5 游戏记录

4.1.6 游戏帮助界面

1.XML文件

在线性布局中加入一个TextView组件即可。

2.编程文件

使用textView.setText(helpContent);将TextView的内容改写为游戏帮助的内容。大概内容为黑白棋游戏规则的介绍

图4.1.6 游戏帮助

第5章 游戏算法设计与编程

5.1 游戏算法设计

5.1.1 游戏技巧分析

首先,根据游戏规则,可以得知以下信息:

(1)位于棋盘四个角的位置的棋子,由于位置的特殊性,不可能被对手的棋子“夹”到,故只要在角落落子,便不能改变棋子的颜色。即是说,四个角落是重要的“战略地点”。通常把不能被对方吃掉的棋子称为稳定子。

(2)位于棋盘边缘的棋子(除开四个角落),只可能被边缘棋子(包括角落棋子)给夹住,不可能被位于棋盘中央的棋子影响,故也是很重要的“战略地点”。

(3)中间位置的棋子则是处于随时变动的情况,变数非常大。即便现在是黑方棋子,下一步便很可能就变成白方棋子了。这样看来,和围棋有着神似的地方,“金角银边草肚皮”。

(4)在以上的基础上便出来了一些“陷阱地点”

,比如说,当黑棋走了陷阱地点后,会导致

白棋更容易获得“战略地点”的主导权。靠近角落的三个地点便是。

5.1.2 评估函数

1.权重表

故根据棋盘位置的重要性,可以给每个位置一个由数字表示的权重,代表该位置当前的重要性。建立一个权重数组如下,其中外围为不能走的地方,权重设置为0(其实只是为了计算方便,其实随便设置多少都可以,反正不会用到)。可以看出,65的地方(角落)最重要,其次6和4的地方(边)。设置为负数的地方便是“陷阱地点”,意思是“宁愿走棋盘外都不愿走这些地方”的意思。

private int score[ ][ ]= {

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 65, -3, 6, 4, 4, 6, -3, 65, 0},

{0, -3, -29, 3, 1, 1, 3, -29,-3, 0},

{0, 6, 3, 5, 3, 3, 5, 3, 6, 0},

{0, 4, 1, 3, 1, 1, 3, 1, 4, 0},

{0, 4, 1, 3, 1, 1, 3, 1, 4, 0},

{0, 6, 3, 5, 3, 3, 5, 3, 6, 0},

{0, -3, -29, 3, 1, 1, 3, -29,-3, 0},

{0, 65, -3, 6, 4, 4, 6, -3, 65, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

};

这便是权重表的初始值。怎么在下棋时去获取更高的权重,便是程序执行的关键。

2.行动力

行动力代表着合法的落子处的数量。行动力越高表示可选择的落子处越多,与此同时,行棋方式也就越灵活。行动力高的一方可以通过某些手段,压迫对手走出对己方有利的棋步。故行动力也是很重要的一项参数。

3.评估函数

评估函数是由数值的大小来估计收益情况的函数。在这里,综合权重表和行动力,设计函数如下:

Eval=(我方所有棋子权重和)+(我方行动力)-(对方所有棋子权重和)-(对方行动力)

其中行动力的数值化,设置为合法的落子处的数量。

5.1.2 搜索算法

1.MinMax搜索

极大极小原理,假设玩家的每一步棋都会让AI收益最小化,而AI走的每一步都要将收益最大化。

图5.1.2 极大极小原理举例

如图5.1.2,MAX代表AI的棋步,蓝色框代表玩家的棋步。所谓AI收益最大化,便是取其子结点的最大值。根节点为如图中的蓝色框中的“8”,它的取值便是找子结点“-2”“8”“-7”中的最大值。同理,红色框代表玩家的走棋,代表要取子结点的最小值(即让AI收益最小化),如红色框“-2”就是取的子结点“-2”“3”最小值。就这样往下搜索,便是极小极大原理的内容了。

像上述方法,只要将搜索深度增加便能增强AI难度。因为程序的计算也是需要时间的,不可能实现过深的算法。

2.α-β搜索

α-β搜索只是在MinMax搜索上进行了优化。依然如图5.1.2,如红色框内的“-2”

“8”“-7”分别为A,B,C,根结点蓝色框“8”为X。要知道X的值,则必须知道A,B,C的最大值。搜索到B时,将X设置为B的值,之后搜索C,发现C中第一个元素是-7,故C的最小值肯定是小于-7的,不可能超过B,即是8的值

,所以便不必再继续搜索C的其余子结点。这种优化便是α剪枝的过程。同理,减去最大值便是β剪枝。

α和β分别为结点的最小和最大值,根结点的α,β初始值为-INF和INF,意为正无穷和负无穷,实际只需要取稍大一点的值就行,如

final int INFINITY = 600;

5.2 游戏编码设计

5.2.1 游戏编码思路

在GameEngine类里编写游戏操作与AI的相关代码;在GameCanvas类里调用GameEngine并画出棋盘棋子等实物,并在下方显示游戏信息,然后在游戏界面显示。这样便可以实现绘图功能和算法的分离。

一共三个类:

Game:调用GameCanvas,显示棋盘;

GameCanvas:实现棋盘绘画;

GameEngine:实现算法和规则。

5.2.2 游戏算法编码

在GameEngine类里实现,主要函数及注释如下,解释放在注释里,注释在前函数在后: //定义棋盘,其中“0”表示没有棋子,1表示黑棋,2表示白棋。

public int board[][];

//定义权值表,并初始化权值表为上一章的值

private int score[][];

//将棋盘设为初始值,为开始游戏/新游戏做准备

public void resetBoard();

//AI,返回AI计算后最优的位置

public Cell computerMove();

//获得棋盘位置为(x,y)的权重

public int getScore(int x,int y);

//检查是否存在着合法的棋步

public boolean checkmovevalidity(int tempboard[][],int x, int y, int player); //实现剪枝的搜索算法

private int negamax(int negamaxboard[][], int player, int alpha, int beta);

//评价函数,于剪枝算法的子结点处调用

private int eval(int tempboard[][], int player);

由于代码较为繁杂,便不一一贴出。

5.2.4 游戏绘制编码

绘制应该包括的完整功能:游戏开始时绘制出棋盘,监测用户的动作,更新棋盘的绘制,

GameCanvas继承自SurfaceView并实现SurfaceHolder.Callback接口。

//绘制白棋

private void drawWhite(Canvas canvas, Cell cell)

//绘制黑棋

private void drawBlack(Canvas canvas, Cell cell)

//监听用户的触碰事件

public boolean onTouchEvent(MotionEvent event)

//对用户的触碰做出反应,并更新棋盘棋子的存储状态

public void touchResponse(int x, int y)

//寻找点落在棋盘哪个位置

private Cell findposition(int x, int y)

//绘制棋盘

private void doDraw(Canvas canvas)

//创建时调用,之后会调用initializeComponents()启动线程

public void surfaceCreated(SurfaceHolder holder)

//初始化各项数据并启动线程,启动线程时会调用run()

private void initializeComponents()

//run( )是对游戏结束与否的判断,和游戏进行状态时的操作,对玩家或者//电脑行棋后的处理,实现走棋后更新棋盘的操作

public void run();

第6章 游戏测试与结果

6.1 Android应用程序打包

6.1.1 签名

签名有两个作用:确定发布者身份,确保应用的完整性。

(1)在Eclipse的File菜单中选择Export,在选项中选择Export Android Application,点击Next。选择要export的工程,点击next,即出现了设置数字证书的界面。在这里,点击create new keystore,即新建一个数字证书。数字证书就是用来签名的工具。输入密码,确认密码后点下一步。

(2)Alias为数字证书别名,第2、3栏为密码、确认密码,Validity为数字证书有效期,第5栏为作者名字。其余为选填。填好点击Next

(3)然后选择APK生成路径,点击Finish,这样就完成了对APK的打包。

这里生成了一个名叫Othello的游戏

图6.1.1 数字证书的生成 图6.1.11APK的打包

6.1.2 游戏真机测试

本次测试使用两个android手机,一个是小米2S,有着较好的性能,android版本为

4.1.1,版本较新;另一个是型号为广信EF68A的手机,性能欠佳,android版本为2.3.5,版本较旧。用这样两个手机测试,可以起到对比的效果。

将APK拷好安装在手机上,打开APK,进入欢迎界面。在等待5秒或者点击屏幕任意部位时,都能跳转到开始界面。开始界面时,因为每个按钮的位置属性是设置成离顶部的位置来确定,所以两部手机的板式看起来有差别,不过不是什么大的问题。

开始游戏后行棋功能正常,AI功能正常,棋子显示也正常。在判断游戏结束时会正常弹出输入姓名并记录成绩的对话框。

背景音乐的开关,能实现背景音乐的播放与暂停,以及停止。游戏帮助与游戏记录也能正常显示。至此,宣布游戏测试成功。

6.1.3 测试评价

基本上完成了对黑白棋的开发,实现了设计时的基本功能,对黑白棋算法的研究有着一定的意义。但由于时间不够充分,程序上有一些不足之处。如关于背景音乐方面,在按HOME键之后,背景音乐并不能实现暂停。

另外,如果时间充裕一些,还可以实现的功能如悔棋,残局等,会让新手玩家对黑白棋游戏的认识起到一个很好的帮助。

第7章 总结

参考文献

[1]汪洋.细节决定成败 解读手机游戏未来发展趋势.http://mobile.zol.com.cn/

235/2357542.html

[2] 文斌.Android游戏发展趋势分析.http://blog.csdn.net/caowenbin/article/

details/5885270

[3]百度百科.黑白棋. http://baike.baidu.com/

link?url=MLgunHsKk7feEtvE-vTA_cUrmkrMUUIPr_KXReTHe-xWwR7K6fgt_J-hDz3SA4SCmFmGOANNKYdxtFwI_9nmXjqNiZ3ysbcTR2kljALXMdW

[4]黑白棋.维基百科.http://zh.wikipedia.org/wiki/黑白棋#.E6.AD.B7.E5.8F.B2

[5]李刚.疯狂Android讲义.电子工业出版社

[6] 开源中国.Android开发中使用SQLite. http://www.oschina.net/question/12_10624

[7] Linux社区.Android开发入门教程http://www.linuxidc.com/Linux/2012-09/70303.htm

本科生毕业论文(设计)

题 目 基于Android的黑白棋手机游戏开发 学 院 电子信息学院 专 业 电子信息工程 学生姓名 学 号 年级 2011 指导教师 教务处制表 二Ο 年 月 日

基于Andorid的黑白棋手机游戏开发

专业:电子信息工程

学生: 指导老师:

摘要

随着人们生活节奏的加快,智能手机的应用越来越广泛。而在智能手机用户中,Android用户更是占据了最大的比例,超过了总用户的七成。人们对手机的依赖度在不断提升,对能让人休闲娱乐的游戏的需求也在不断增加。近年来,手机游戏公司如雨后春笋般涌出,而手机游戏也层出不穷,收益不小。譬如由莉莉丝开发,龙图游戏代理的动作卡牌手游《刀塔传奇》,更是创造了单日流水2000万元的全新纪录。而在各种手机游戏中,棋牌类、益智类小游戏虽然盈利不高,却更能提升用户对于零散时间的利用。简要介绍了Android平台现状和手机游戏发展走向,讲述了Android平台开发环境的搭建,以及黑白棋游戏的规则。之后基于Android平台,对黑白棋游戏进行了设计,使用Java语言编写游戏算法,用Eclipse作为开发平台,完成了对黑白棋游戏的编码实现。并简要讲述了在实现过程中用到的Android相关知识,和实现黑白棋人工智能用到的评价函数和搜索算法。最后在Android真机上进行了测 试,能正常运行,各项功能也都能实现,达到了预期的结果。

关键词:Android,手机游戏,黑白棋,Eclipse,游戏算法

Development of Othello Mobil Phone Game Based on

Android Platform

Major: Electronic and Information Engineering

Student: Supervisor:

abstract

With accelerated pace of life, more and more widespread application of smart phones. In the smart phone users, Android users is accounted for the largest proportion of users than the total Qi Cheng. People on the phone's dependence on rising demand for entertainment games can make people is also increasing. In recent years, mobile gaming company mushroomed emission, and mobile games are endless, income is not small. For example, the development of the Lilith, Lung action games proxy card hand tour "turret Legend", it is to create a one-day water 20 million yuan of the new record. In a variety of mobile games, chess, puzzle games, although profit is not high, but more to enhance the user for use of fragmented time. This article briefly describes the status of the Android platform and mobile game development trend, and then tells the build Android platform development environment, as well as the rules of Othello game. After Android platform based on Othello game has been designed using the Java language game algorithm, using Eclipse as a development platform, we completed Othello game code implementation. And briefly describes the process used in the realization of Android-related knowledge, and to achieve Othello artificial intelligence algorithms.The final game on Android real machine was tested to run correctly, the function can be realized, to achieve the desired results. Key word: Android, mobile phone games, Othello, Eclipse, game algorithm

目录

第1章 绪论 ................................................................................................................................... 6

1.1 游戏开发目的及意义 ..................................................................................................... 6

1.1.1选题目的 .............................................................................................................. 6

1.1.2 开发意义 ............................................................................................................. 7

1.2 黑白棋发展 ..................................................................................................................... 7

1.2.1黑白棋简述 .......................................................................................................... 7

1.2.2黑白棋发展 .......................................................................................................... 7

1.2.3黑白棋规则 .......................................................................................................... 7

第2章 Android平台概述与相关知识 ........................................................................................ 8

2.1 Android平台发展现状 .................................................................................................. 8

2.2 Android平台架构. ........................................................................................................ 8

2.3 Android开发环境搭建 .................................................................................................. 9

2.3.1 准备工作 ............................................................................................................. 9

2.3.2 环境变量的配置 ................................................................................................. 9

2.3.3 安装配置ADT .................................................................................................... 11

2.3.4 运行、调试 ....................................................................................................... 12

2.4 Android相关知识 ........................................................................................................... 12

2.4.1 Android项目 ........................................................................................................ 12

2.4.2 相关UI组件 ....................................................................................................... 13

1 布局管理器 ............................................................................................................... 13

2.4.3 Activity .............................................................................................................. 14

2.4.4 事件处理 ............................................................................................................. 16

1 基于监听的事件处理 ............................................................................................... 16

2 基于回调的事件处理 ............................................................................................... 17

2.4.5 图形与图像处理 ................................................................................................. 17

2.4.6 SQLite数据库 ..................................................................................................... 17

第3章 黑白棋游戏总体设计 ..................................................................................................... 18

3.1 黑白棋游戏功能设计 ................................................................................................... 18

3.2 游戏界面设计 ............................................................................................................... 18

第4章 详细设计及编码实现 ..................................................................................................... 19

4.1 游戏界面详细设计及实现 ........................................................................................... 19

4.1.1 欢迎界面 ........................................................................................................... 19

4.1.2 主界面 ............................................................................................................... 20

4.1.3 背景音乐设置界面 ........................................................................................... 22

4.1.4 游戏界面 ............................................................................................................. 24

4.1.5 游戏记录界面 ................................................................................................... 25

4.1.6 游戏帮助界面 ................................................................................................... 26

第5章 游戏算法设计与编程 ..................................................................................................... 26

5.1 游戏算法设计 ............................................................................................................... 26

5.1.1 游戏技巧分析 ................................................................................................... 26

5.1.2 评估函数 ........................................................................................................... 27

5.1.2 搜索算法 ........................................................................................................... 28

5.2 游戏编码设计 ............................................................................................................... 29

5.2.1 游戏编码思路 ................................................................................................... 29

5.2.2 游戏算法编码 ................................................................................................... 29

5.2.4 游戏绘制编码 ................................................................................................... 30

第6章 游戏测试与结果 ............................................................................................................. 30

6.1 Android应用程序打包 ................................................................................................ 31

6.1.1 签名 ................................................................................................................... 31

6.1.2 游戏真机测试 ................................................................................................... 31

6.1.3 测试评价 ........................................................................................................... 32

第7章 总结 ................................................................................................................................. 33

第1章 绪论

1.1 游戏开发目的及意义

1.1.1选题目的

1.选题背景

今天的手机已经从单纯的通讯工具转变为一个集通讯、音乐、电影、游戏等多功能于一身的便携终端;手机的综合价值越来越高,这使得人们对它的依赖性越来越强。现在的生活节奏正在变快;人们除了工作和学习之外,还要花费不少的时间在往返的路途上,当然也就没有太多时间呆在电视机前,这一现状自然而然的激发了移动终端(手机、掌上游戏机)的飞速崛起 [1]。而Android手机用户占总智能手机用户的70%以上。

Android平台较主要的应用便是Android游戏,而随着Android手机用户的增多,由于用户基数较大,Android游戏用户数量也将增多。国内从事手机游戏开发的人员也在逐年增加,Android游戏也势必逐渐创新,层出不穷。虽然国产手机游戏的质量和国外相比有着各种或多或少的差距,但中国的安卓手机游戏还是有很大发展前景。

2.安卓手机游戏发展趋势

(1) 将向高性能3D游戏方向发展。

智能手机的性能逐年提高,手机游戏行业的不断发展,及玩家对手游UI的高质量需求,会使得使用空间立体编程算法的3D游戏愈加普及。有了机器性能和3D技术的支持,有着较高画面观赏度的3D游戏会逐渐取代2D游戏并成为行业霸主。一旦裸眼3D技术的运用普及,势必使裸眼3D游戏主导未来手游行业。

(2) 将向社交化方向发展

各平台对无线网络的良好支持,使得游戏的社交性更为明显。多人在线、互动、交谈,将进一步提高玩家对游戏的精神依赖度。但由于通讯网络的限制,目前手游的社交性并不能得到很好的体现。但随着无线网络的发展,4G网络的发展以及WiFi的愈加普及,游戏的社交性也必将成为未来的手机游戏发展方向之一。

(3) 将向休闲化网游方向发展。

目前移动设备上的休闲小游戏便能很好的提高用户对零散时间的利用。但随着无线网络的发展,能让用户零散利用时间的网络游戏也因此应运而生。相比于单局开始单局结束的休闲小游戏,继承了休闲特点的手机网游更能使用户产生依赖。可以随时开始与结束,充分利用用户零散时间的网游会更受用户青睐。

(4) 游戏类型更加丰富多彩,游戏更新速度更快。

一款游戏无论设计有多出彩,玩久了一样会使人感到疲劳。为了使玩家不对一款游戏很快产生疲劳,游戏的设计便会朝多元化,多内容方向发展。用难度设置或更新等手段让玩家对该游戏保持兴趣,借此延长游戏的生命周期。

1.1.2 开发意义

游戏本身就是一种学习,玩游戏时学会思考,发掘思考问题的方式,锻炼自己的思维,并能从中发现乐趣,这便是游戏自身的意义。而益智休闲类游戏,人对其的精神依赖度不高,但却能使人在空闲时既放松了又活跃了思维。

黑白棋便是这样一款游戏,然而国人对其知之甚少。通过本游戏可让不清楚黑白棋的人知道这款游戏的基本规则,以及提高对益智休闲类游戏的兴趣。

1.2 黑白棋发展

1.2.1黑白棋简述

黑白棋,又叫反棋、奥赛罗、苹果棋或翻转棋,在西方和日本很流行。在日本,黑白棋玩家数量甚至达到了6000万之多。游戏通过相互翻转对方的棋子,最后以棋盘上谁的棋子多来判断胜负,游戏规则简单,因此上手很容易,但是它的变化又非常复杂[3]。

黑白棋是19世纪末英国人发明的。直到上个世纪70年代日本人长谷川五郎将其进行发展和推广,借用莎士比亚名剧奥赛罗(Othello)为这个游戏重新命名,也就是现在大家玩的黑白棋。

1.2.2黑白棋发展

中国最早出现黑白棋还是80年代的PC游戏了,那时由于各种原因而传播不开,90年代的文曲星虽然让更多的人认识了黑白棋,但却因棋力不佳而被众人所不齿。

90年代中期开始,互联网在中国逐渐普及,当时国内3个游戏对战平台——中游,联众和边锋,将黑白棋推上了鼎盛时期。但之后由于出现网络作弊现象,而这些平台没做好控制,导致这些平台黑白棋的衰落。

几年前至今,很多平台也推出了黑白棋游戏。由于互联网用户众多,黑白棋玩家数量也相应提升不少,中国黑白棋出现了欣欣向荣的景象。虽然在中国,黑白棋不如象棋和围棋那般耳熟能详,但是其上手性,灵活性和快速性确是象棋、围棋所不能比拟的。

1.2.3黑白棋规则

1.游戏道具

棋子:黑白棋棋子呈圆饼形,每颗棋子的两面分别为黑白两色,共64个。玩家双方各下一面棋子。

棋盘:黑白棋棋盘由64(8*8)格的正方格组成,游戏时棋子要下在方格内。

2.玩法

棋盘为8×8的方格布局,开局时在棋盘正中摆好的四枚棋子,黑白各2枚,交叉放置,通常执黑先手,交替下子。

下子方式:只要落子和棋盘上任一枚己方的棋子在一条线上(横、直、斜线皆可)夹着对方棋子,就能将对方的这些棋子转变为我己方(翻面即可);如果在任一位置落子都不能夹住对手的任一颗棋子,就要让对手下子[4]。

3.游戏结束条件:

(1)双方都无子可下游戏结束;

(2)一方的子被翻完游戏结束;

(3)棋格被全部下满;

4.胜负判断

游戏结束后,按棋盘上谁的棋子多少决定胜负,多则为胜,平则和局。

第2章 Android平台概述与相关知识

2.1 Android平台发展现状

Android是由Andy Rubin创立的一个手机操作系统,后于2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上[5]。

当前主流的操作系统还有两种,APPLE公司的IOS以及Microsoft公司的Windows Phone,但其市场占有率远不如Android,Android已成为最主流的手机操作系统。

就国内环境来说,不管是知名厂商(如华为、中兴),或是山寨手机厂商,Android平台都是首要选择。

2.2 Android平台架构.

Android平台由操作系统、中间件、用户界面和应用软件4层组成,采用软件叠层(Soft Stack)方式构建。这种方式使得层与层之间耦合度很低。下层改变时上层无须改变。体系结构如图2.2:

图2.2 Adroid系统体系结构

Android由4部分构成(图中从上往下顺序):

应用程序层:用java语言编写的运行在AVM上的程序;

应用程序框架:编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用;

系统运行库层:使用Android 应用框架时,Android系统会通过一些C/C++库来支持对我们使用的各个组件,使其能更好地为开发者服务;

Linux内核:Android 的核心系统服务基于Linux2.6内核。Linux内核同时也作为系统硬件和软件叠层之间的抽象层。

2.3 Android开发环境搭建

2.3.1 准备工作

需要先下载4种软件或组件:JDK、ADT、Android SDK、Eclipse

下载地址不加赘述,网上很容易找到。然后安装JDK、SDK和Eclipse,过程不必多说,不过路径要记住。

2.3.2 环境变量的配置

计算机(右键)->属性->高级系统设置->高级->环境变量

如下图:

图2.3.2 环境变量的配置

然后新建6个变量:

JAVA_HOME = C:\Program Files\java\jdk1.8.0_40

JRE_HOME = C:\Program Files\java\jre1.8.0_40

JAVA_JRE_HOME = %JAVA_HOME%\jre

Android_SDK_HOME = F:\adt-bundle-windows-x86-20130917\sdk

CLASSPATH

= .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JRE_HOME%\lib;%JRE_HOME%\lib\rt.jar;%JAVA_JRE_HOME%\lib;%JAVA_JRE_HOME%\lib\rt.jar PATH

= %Android_SDK_HOME%\platform-tools;%Android_SDK_HOME%\tools;%JAVA_HOME%\bin;%JRE_HOME%\bin;%JAVA_JRE_HOME%\bin;

配置完成后,检查是否成功配置。运行cmd,分别输入java命令,javac命令,adb命令,如果都有其用法说明,则表示配置成功。

如图2.3.22以java为例:

图 2.3.22 java命令选项

2.3.3 安装配置ADT

1.安装ADT

(1)启动Eclipse,然后选择Help->Install New Software...,点击add;

(2)对话框里点击Archive,选择下载的ADT的压缩文件;

(3)输入一个名字作为更新位置,点击OK;

(4)选中Developer Tools旁边的标记框,Next->next->Finish->OK,重启Eclipse;

2.配置ADT插件

(1)Windows->Preferences... 打开Preferences面板,选择左边面板里的Android;

()在右边面板里点Browse,找到SDK路径然后确定,点击Apply->OK

这样就完成配置了。

2.3.4 运行、调试

1.使用真机

将android手机用USB线连在电脑上,安装好驱动,打开手机的开发者选项,开启“不锁定屏幕”,“USB调试”,“允许模拟位置”,也可按情况开启其他功能。

2.使用AVD(Android Virtual Device)

(1)打开Eclipse,点击Windows->AVDM,打开AVD Manager

(2)点击New可添加自定义AVD设备,各项参数设置好后点OK,便创建好了一个AVD;

(3)选择一个已有的AVD,点击Start->Launch,便可运行“虚拟手机”了,运行成功后大致界面如图2.3.4:

图2.3.4 虚拟机的运行

2.4 Android相关知识

2.4.1 Android项目

Android命令有一个create project的子命令,用于创建一个Android应用。 当一个android应用被创建时,会自动生成一些子目录和文件。

1..setting目录

存放设置文件。

2.bin目录

编译后的二进制文件

3.gen目录

由开发软件自动生成的一些java文件,。里面的R文件用于资源索引,索引值都是int类型。

4.res目录

用于存放各种资源,譬如其子目录里的drawable(drawable-hdpi,

drawable-ldpi, drawable-mdpi ,drawable-xhdpi)存放图片,layout存放界面布局文件,values中存放各种XML资源文件,如字符串资源文件strings.xml,颜色资源文件colors.xml等。

5.src 目录

用于存放开发者编写的java源文件

6.AndroidManifest.xml

Android主配置文件,系统清单文件。包含应用程序包名,包含组件,兼容的最低版本等。每个Activity都应写在AndroidManifest.xml文件里面。

2.4.2 相关UI组件

1 布局管理器

布局管理器之间的关系如图2.4.2所示

图2.4.2 布局管理器管系图

可见,绝对布局,帧布局,线形布局,网格布局和相对布局是直接继承于ViewGroup,表格布局是继承自线性布局。

(1)线形布局:线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件 横向 或者 纵向 排列, 通过android:orientation属性控制;

常用属性:

android:divider;设置分隔条;

android:gravity; 设置对齐方式;

android:orientation;设置排列方式;

子元素控制:

android:layout_gravity;设置子元素在父容器中的对齐方式;

android:layout_weight; 子元素在父容器中所占的权重;

(2)表格布局:

表格布局继承了LinearLayout, 其本质是线性布局管理器;。只需要添加TableRow 和组件就可以控制表格的行数和列数。

行为方式:可以将单元格设置为Shrinkable,Stretchable或者是Collapsed,依次表示该列所有单元格宽度可以被收缩,宽度可以被拉伸,会被隐藏。

由于继承自线性布局,所以线性布局所有属性表格布局都支持。

2. Textview及其子类

主要介绍4个方面:TextView,EditView,Button,ToggleButton

TextView

能在界面上显示文本内容。

2. EditView

继承自TextView,允许用户编辑文本内容。

3.Button

继承自TextView,在UI界面生成一个按钮,用户点击按钮时会触发一个onClick事件。

4. ToggleButton

用于切换程序中某种状态。

2.4.3 Activity

1 Activity用处

Activity是android中最重要、最常见的应用组件。Activity主要是用来做控制的,它可以选择要显示的View,也可以从View中获取数据然后把数据传给Model层进行处理,最后再来显示出处理结果。

2 Activity的生命周期

图2.4.3 Activity的生命周期图

Activity有四种状态:

(1)活动状态,当Activity处于Stack(栈)顶时,就是手机当前的现实屏幕,这是 Activity就处于activity或者运行状态。

(2)运行但是失去焦点,当Activity还处于运行状态时,但是屏幕是有另外一个Activity处于文档处于焦点状态,当前的Activity就处于pause。

(3)停止,当Activity被另一个Activity完全覆盖的时候,就被停止了,其实就是虽然在运行,但是用户却看不见。

(4)结束,当Activity处于pause或者stop时,系统可以结束 Activity,回收资源,这是Activity就是处于结束状态了。

可以理解为三层循环

第一层,onCreate到ocDestroy,即是activity从创建好到结束状态,对应着从手机中点开程序,以及退出程序;

第二层,onStart到onStop,再到onRestart,即是activity从运行状态到停止状态之间的切换。对应着点击手机的主菜单切换到其他程序,这时activity处于后台中,再切回程序。

第三层,onResume到onPause,这种状态即是在程序内切换界面。

3 Activity的跳转

靠Intent对象来实现。在AndroidManifest.xml清单文件中配置Activity时,指定元素,用于指定该Activity可相应的Intent。

然后在Activity中通过以下语句来实现跳转,其中xxxx代表要跳转的目的activity在AndroidManifest.xml中的action属性:

Intent intent = new Intent();

Intent.setAction(“xxxx”);

startActivity(intent);

2.4.4 事件处理

1 基于监听的事件处理

为用户动作提供响应的机制就是事件处理。

Android有两套事件处理机制,分别基于监听和回调。基于监听的模型中主要涉及三类对象

(1)事件源Event Source:产生事件的来源,通常是各种组件,如按钮,窗口等。

(2)事件Event:事件封装了界面组件上发生的特定事件的具体信息,如果监听器需要获取界面组件上所发生事件的相关信息,一般通过事件Event对象来传递。

(3)事件监听器Event Listener:负责监听事件源发生的事件,并对不同的事件做相应的处理。

基于监听器的事件处理机制是一种委派式Delegation的事件处理方式,事件源将整个事件委托给事件监听器,由监听器对事件进行响应处理。这种处理方式将事件源和事件监

听器分离,有利于提供程序的可维护性。

2 基于回调的事件处理 相比基于监听器的事件处理模型,基于回调的事件处理模型要简单些,该模型中,事件源和事件监听器是合一的,也就是说没有独立的事件监听器存在。当用户在GUI组件上触发某事件时,由该组件自身特定的函数负责处理该事件。通常通过重写Override组件类的事件处理函数实现事件的处理。

2.4.5 图形与图像处理

1. Drawable对象

在android应用中增加drawable资源后,android SDK会在R文件里生成一个索引:R.drawable.file_name 。可在XML资源文件中通过@ drawable/file_name引用,或通过java程序的R.drawable.file_name引用。

2 Canvas与Paint

Canvas是画布,相当于一张纸。可以用许多方法对其实现绘制。例如:

drawCircle(float cx, float cy, float radius, Paint paint)//画一个圆

drawLine(float startX, float startY, float stopX, float stopY, Paintpaint)//画一条线

drawPoint(float x, float y, Paint paint) //画一个点

Paint是画笔,主要用于设置各种属性后,在画布上绘图。方法如:

setColor(int color)//设置颜色

setStyle(Paint.Style style)//设置风格

setAlpha(int a)//设置透明度

2.4.6 SQLite数据库

1.数据库简要概述

SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备适量数据存取。Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库[6]。QLite数据库是D.Richard Hipp用C语言编写的开源嵌入式数据库,支

持的数据库大小为2TB。它具有量级轻,独立性,跨平台,语言接口多等特征。

2.数据库操作

(1)打开或创建数据库(存在就打开,不存在就创建):

mSQLiteDatabase=this.openOrCreateDatabase("Test",MODE_PRIVATE,null);

(2).创建表

String CREATE_TABLE="create table 表名(列名,列名,……)";

mSQLiteDatabase.execSQL(CREATE_TABLE);

(3)插入记录

ContentValues cv=new ContentValues();

cv.put(TABLE_NUM,1);

cv.put(TABLE_DATA,"测试数据库数据");

mSQLiteDatabase.insert(Test,null,cv);

//同样可以使用execSQL方法来执行一条“插入“的SQL语句

String INSERT_DATA="insert into 表名(列名,……) values (值,……)";

mSQLiteDatabase.execSQL(INSERT_DATA);

第3章 黑白棋游戏总体设计

3.1 黑白棋游戏功能设计

一个最基本的黑白棋游戏,包括开始游戏,实现人机对弈,以及游戏结束后结果的正常显示。在此之上可追加各种不同的功能来满足用户的需求。考虑到设计的完成时间限制,综合分析后,决定实现以下功能:

(1)基本功能,包括:开始游戏,实现AI,显示游戏结果;

(2)基本拓展功能,包括游戏帮助,游戏记录,重新开始游戏,游戏退出;

(3)额外拓展功能,包括游戏背景音乐,登陆界面Splash(即欢迎界面)。

3.2 游戏界面设计

游戏界面设计,即实现各种功能的按钮或菜单,各界面的切换,大体设计如图3.2:

图3.2 黑白棋功能设计

第4章 详细设计及编码实现

4.1 游戏界面详细设计及实现

游戏界面设计为六个部分:欢迎界面,主界面(选择界面),游戏界面,背景音乐选项界面,游戏记录界面以及游戏帮助界面。

各个界面使用XML布局文件来控制UI界面。使用java语言编写Activity,然后在java里统一地使用如下形式代码获取UI界面:

public void onCreate(Bundle savedInstanceState)

{

}

4.1.1 欢迎界面

1.什么是Splash

Splash画面在手机app的主程序启动之前先启动,简单地介绍应用程序的一些基本信息,如厂商、版本的新特性等。多为一张或几张可以滚动的图片,显示几秒钟或用户进行

super.onCreate(savedInstanceState); setContentView(R.layout.xxxx); //xxxx代表名字为xxxx的XML文件 //这里填写需要执行的操作

点击操作后,会显示出应用程序的主体页面[7]。

2.欢迎界面的XML布局文件

使用线性布局LinearLayout,并在其中添加了一个ImageView类,该组件中由以下语句调用splash图片:

android:src=”@drawable/splash”;

即是将资源文件夹drawable下的splash文件调用。

3.实现欢迎界面的java文件

创建一个SplashScreen类使之继承Activity类,在类中获取splash布局界面,定义一个protected int _splashTime = 5000; 即是使时间过了5秒后能自动跳转到主界面。

在onCreate方法中创建一个Thread对象,并重写run(),用于运行一个线程,功能是每0.1秒去检测有无触碰发生,有触碰发生或者是过了5秒后,便运行startActivity(new Intent("com.google.app.splashy.CLEARSPLASH"));使Activity跳转到action标签为以下的Activity去

在这里,跳转到主界面的Activity

图4.1.1 欢迎界面

4.1.2 主界面

1.主界面的XML布局文件

使用线性布局LinearLayout,线性布局背景设置为

android:background=”@drawable/ background”

并在其中添加了5个Button类,text属性分别是“开始游戏”“背景音乐”

“比赛记录”

“游戏帮助”“退出游戏”

2.主界面的java文件

加载XML文件,并为每个按钮绑定一个事件监听器,通用形式为:

Button xxxxButton=(Button)findViewById(R.id.mmmm);

xxxx.setOnClickListener(new xxxxClickListener());

其中xxxx设置为每个按钮,mmmm为每个按钮的id属性。

以下事件监听器以startgame为例说明

class startgameClickListener implements View.OnClickListener

}

意为在按钮点下时,跳转到action属性为"com.gajah.game.othella2.ui.MAIN"的activity去。即是跳到游戏界面去。

同理,“背景音乐”“比赛记录”“游戏帮助”分别转到相应界面。

退出游戏的按钮的监听器为:

class gameExitClickListener implements View.OnClickListener

{ @Override public void onClick(View v) { } } { @Override public void onClick(View v) { startActivity(intent); Intent intent = new Intent("com.gajah.game.othella2.ui.MAIN"); } System.exit(0);

点下按钮后执行System.exit(0);这条语句用来结束该程序的所有activity,即实现退出应用。

图4.1.2 主界面

4.1.3 背景音乐设置界面

1.界面文件

XML文件里设置一个线性布局,在线性布局里添加一个TextView来显示“背景音乐”四个字的文本。然后添加两个Button,第一个Button的功能是播放或者暂停背景音乐。第二个Button的功能是停止背景音乐。

2.Java编程文档

获取界面,在onCreate函数里,启动控制背景音乐的Service,实现进入背景界面后,当点击“播放/暂停”按钮时,如果正在播放背景音乐则暂停,如果处于暂停状态则开始播放;点击“停止”按钮时停止背景音乐。

在两个按钮上绑定事件监听器,实现点击时发送广播。

class bgmonClickListener implements View.OnClickListener { @Override public void onClick(View v) {

Intent intent = new Intent(CTL_ACTION); intent.putExtra("control",1); sendBroadcast(intent);

} }

该段代码实现“播放/暂停”按钮的事件监听,当按钮被点击时,发送Intent属性为(CTL_ACTION),内容为("control",1)的广播。其中CTL_ACTION是一个字符串CTL_ACTION="org.action.CTL_ACTION" ;

3.音乐Service

先定义一个继承自Service的类(部分代码):

public class MusicService extends Service

在onCreate函数定义一个MediaPlayer的实例,用于实现音乐播放。然后注册一个BroadcastReceiver,用于监听action属性为CTL_ACTION的广播信息。

@Override public void onCreate() { serviceReceiver= new MyReceiver(); mediaPlayer = new MediaPlayer(); IntentFilter filter = new IntentFilter();

} filter.addAction(SetBGM.CTL_ACTION); registerReceiver(serviceReceiver, filter); super.onCreate();

图4.1.3 背景音乐设置界面

BroadcastReceiver里的代码功能为监听广播并根据信息改变播放状态。若接收到

("control",1),则先判断是否处于播放状态,然后更改状态。若接收到("control",1),则执行mediaPlayer.stop()停止播放。

4.1.4 游戏界面

该界面在XML文件中只使用了一个线性布局,其余功能由java代码完成。

代码里依然先创建activity然后获取XML文件中的UI界面。重写后的onCreate语句如下:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); gameCanvas = new GameCanvas(this); setContentView(gameCanvas); dataHelper = new DataHelper(this); this.registerForContextMenu(gameCanvas); }

其中gameCanvas是关于游戏绘图的一个继承自surfaceview的类,datahelper为一个数据库类,this.registerForContextMenu(gameCanvas);为调用实现目录的函数。 在运行游戏界面,点击手机上的“menu”键,即可进行菜单选择。

目录中实现的功能为4个:新游戏,pass,high score,exit:

(1)新游戏顾名思义,就是重新开始游戏的意思;

(2)pass是指遇到自己没法下棋的时候可以点的选项,可以下棋时点击则无效;

(3)high score便连接到游戏记录;

(4)Exit 为退出游戏。

图4.1.41 开局 图4.1.42 中盘 图4.1.43 游戏结束

4.1.5 游戏记录界面

1.XML界面文件

以表格布局TableLayout来显示以前的游戏记录,tableraw设为三列,分别显示玩家名字,黑棋数和白棋数。

2.Java编程文件

除开正常的获取UI组件外,在该文件中还实现了数据库类的实例的创建,

private DataHelper dataHelper;其中DataHelper是一个数据库类,将在后文提到。

数据库用于记录游戏结果,并显示出成绩排名。

图4.1.5 游戏记录

4.1.6 游戏帮助界面

1.XML文件

在线性布局中加入一个TextView组件即可。

2.编程文件

使用textView.setText(helpContent);将TextView的内容改写为游戏帮助的内容。大概内容为黑白棋游戏规则的介绍

图4.1.6 游戏帮助

第5章 游戏算法设计与编程

5.1 游戏算法设计

5.1.1 游戏技巧分析

首先,根据游戏规则,可以得知以下信息:

(1)位于棋盘四个角的位置的棋子,由于位置的特殊性,不可能被对手的棋子“夹”到,故只要在角落落子,便不能改变棋子的颜色。即是说,四个角落是重要的“战略地点”。通常把不能被对方吃掉的棋子称为稳定子。

(2)位于棋盘边缘的棋子(除开四个角落),只可能被边缘棋子(包括角落棋子)给夹住,不可能被位于棋盘中央的棋子影响,故也是很重要的“战略地点”。

(3)中间位置的棋子则是处于随时变动的情况,变数非常大。即便现在是黑方棋子,下一步便很可能就变成白方棋子了。这样看来,和围棋有着神似的地方,“金角银边草肚皮”。

(4)在以上的基础上便出来了一些“陷阱地点”

,比如说,当黑棋走了陷阱地点后,会导致

白棋更容易获得“战略地点”的主导权。靠近角落的三个地点便是。

5.1.2 评估函数

1.权重表

故根据棋盘位置的重要性,可以给每个位置一个由数字表示的权重,代表该位置当前的重要性。建立一个权重数组如下,其中外围为不能走的地方,权重设置为0(其实只是为了计算方便,其实随便设置多少都可以,反正不会用到)。可以看出,65的地方(角落)最重要,其次6和4的地方(边)。设置为负数的地方便是“陷阱地点”,意思是“宁愿走棋盘外都不愿走这些地方”的意思。

private int score[ ][ ]= {

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},

{0, 65, -3, 6, 4, 4, 6, -3, 65, 0},

{0, -3, -29, 3, 1, 1, 3, -29,-3, 0},

{0, 6, 3, 5, 3, 3, 5, 3, 6, 0},

{0, 4, 1, 3, 1, 1, 3, 1, 4, 0},

{0, 4, 1, 3, 1, 1, 3, 1, 4, 0},

{0, 6, 3, 5, 3, 3, 5, 3, 6, 0},

{0, -3, -29, 3, 1, 1, 3, -29,-3, 0},

{0, 65, -3, 6, 4, 4, 6, -3, 65, 0},

{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

};

这便是权重表的初始值。怎么在下棋时去获取更高的权重,便是程序执行的关键。

2.行动力

行动力代表着合法的落子处的数量。行动力越高表示可选择的落子处越多,与此同时,行棋方式也就越灵活。行动力高的一方可以通过某些手段,压迫对手走出对己方有利的棋步。故行动力也是很重要的一项参数。

3.评估函数

评估函数是由数值的大小来估计收益情况的函数。在这里,综合权重表和行动力,设计函数如下:

Eval=(我方所有棋子权重和)+(我方行动力)-(对方所有棋子权重和)-(对方行动力)

其中行动力的数值化,设置为合法的落子处的数量。

5.1.2 搜索算法

1.MinMax搜索

极大极小原理,假设玩家的每一步棋都会让AI收益最小化,而AI走的每一步都要将收益最大化。

图5.1.2 极大极小原理举例

如图5.1.2,MAX代表AI的棋步,蓝色框代表玩家的棋步。所谓AI收益最大化,便是取其子结点的最大值。根节点为如图中的蓝色框中的“8”,它的取值便是找子结点“-2”“8”“-7”中的最大值。同理,红色框代表玩家的走棋,代表要取子结点的最小值(即让AI收益最小化),如红色框“-2”就是取的子结点“-2”“3”最小值。就这样往下搜索,便是极小极大原理的内容了。

像上述方法,只要将搜索深度增加便能增强AI难度。因为程序的计算也是需要时间的,不可能实现过深的算法。

2.α-β搜索

α-β搜索只是在MinMax搜索上进行了优化。依然如图5.1.2,如红色框内的“-2”

“8”“-7”分别为A,B,C,根结点蓝色框“8”为X。要知道X的值,则必须知道A,B,C的最大值。搜索到B时,将X设置为B的值,之后搜索C,发现C中第一个元素是-7,故C的最小值肯定是小于-7的,不可能超过B,即是8的值

,所以便不必再继续搜索C的其余子结点。这种优化便是α剪枝的过程。同理,减去最大值便是β剪枝。

α和β分别为结点的最小和最大值,根结点的α,β初始值为-INF和INF,意为正无穷和负无穷,实际只需要取稍大一点的值就行,如

final int INFINITY = 600;

5.2 游戏编码设计

5.2.1 游戏编码思路

在GameEngine类里编写游戏操作与AI的相关代码;在GameCanvas类里调用GameEngine并画出棋盘棋子等实物,并在下方显示游戏信息,然后在游戏界面显示。这样便可以实现绘图功能和算法的分离。

一共三个类:

Game:调用GameCanvas,显示棋盘;

GameCanvas:实现棋盘绘画;

GameEngine:实现算法和规则。

5.2.2 游戏算法编码

在GameEngine类里实现,主要函数及注释如下,解释放在注释里,注释在前函数在后: //定义棋盘,其中“0”表示没有棋子,1表示黑棋,2表示白棋。

public int board[][];

//定义权值表,并初始化权值表为上一章的值

private int score[][];

//将棋盘设为初始值,为开始游戏/新游戏做准备

public void resetBoard();

//AI,返回AI计算后最优的位置

public Cell computerMove();

//获得棋盘位置为(x,y)的权重

public int getScore(int x,int y);

//检查是否存在着合法的棋步

public boolean checkmovevalidity(int tempboard[][],int x, int y, int player); //实现剪枝的搜索算法

private int negamax(int negamaxboard[][], int player, int alpha, int beta);

//评价函数,于剪枝算法的子结点处调用

private int eval(int tempboard[][], int player);

由于代码较为繁杂,便不一一贴出。

5.2.4 游戏绘制编码

绘制应该包括的完整功能:游戏开始时绘制出棋盘,监测用户的动作,更新棋盘的绘制,

GameCanvas继承自SurfaceView并实现SurfaceHolder.Callback接口。

//绘制白棋

private void drawWhite(Canvas canvas, Cell cell)

//绘制黑棋

private void drawBlack(Canvas canvas, Cell cell)

//监听用户的触碰事件

public boolean onTouchEvent(MotionEvent event)

//对用户的触碰做出反应,并更新棋盘棋子的存储状态

public void touchResponse(int x, int y)

//寻找点落在棋盘哪个位置

private Cell findposition(int x, int y)

//绘制棋盘

private void doDraw(Canvas canvas)

//创建时调用,之后会调用initializeComponents()启动线程

public void surfaceCreated(SurfaceHolder holder)

//初始化各项数据并启动线程,启动线程时会调用run()

private void initializeComponents()

//run( )是对游戏结束与否的判断,和游戏进行状态时的操作,对玩家或者//电脑行棋后的处理,实现走棋后更新棋盘的操作

public void run();

第6章 游戏测试与结果

6.1 Android应用程序打包

6.1.1 签名

签名有两个作用:确定发布者身份,确保应用的完整性。

(1)在Eclipse的File菜单中选择Export,在选项中选择Export Android Application,点击Next。选择要export的工程,点击next,即出现了设置数字证书的界面。在这里,点击create new keystore,即新建一个数字证书。数字证书就是用来签名的工具。输入密码,确认密码后点下一步。

(2)Alias为数字证书别名,第2、3栏为密码、确认密码,Validity为数字证书有效期,第5栏为作者名字。其余为选填。填好点击Next

(3)然后选择APK生成路径,点击Finish,这样就完成了对APK的打包。

这里生成了一个名叫Othello的游戏

图6.1.1 数字证书的生成 图6.1.11APK的打包

6.1.2 游戏真机测试

本次测试使用两个android手机,一个是小米2S,有着较好的性能,android版本为

4.1.1,版本较新;另一个是型号为广信EF68A的手机,性能欠佳,android版本为2.3.5,版本较旧。用这样两个手机测试,可以起到对比的效果。

将APK拷好安装在手机上,打开APK,进入欢迎界面。在等待5秒或者点击屏幕任意部位时,都能跳转到开始界面。开始界面时,因为每个按钮的位置属性是设置成离顶部的位置来确定,所以两部手机的板式看起来有差别,不过不是什么大的问题。

开始游戏后行棋功能正常,AI功能正常,棋子显示也正常。在判断游戏结束时会正常弹出输入姓名并记录成绩的对话框。

背景音乐的开关,能实现背景音乐的播放与暂停,以及停止。游戏帮助与游戏记录也能正常显示。至此,宣布游戏测试成功。

6.1.3 测试评价

基本上完成了对黑白棋的开发,实现了设计时的基本功能,对黑白棋算法的研究有着一定的意义。但由于时间不够充分,程序上有一些不足之处。如关于背景音乐方面,在按HOME键之后,背景音乐并不能实现暂停。

另外,如果时间充裕一些,还可以实现的功能如悔棋,残局等,会让新手玩家对黑白棋游戏的认识起到一个很好的帮助。

第7章 总结

参考文献

[1]汪洋.细节决定成败 解读手机游戏未来发展趋势.http://mobile.zol.com.cn/

235/2357542.html

[2] 文斌.Android游戏发展趋势分析.http://blog.csdn.net/caowenbin/article/

details/5885270

[3]百度百科.黑白棋. http://baike.baidu.com/

link?url=MLgunHsKk7feEtvE-vTA_cUrmkrMUUIPr_KXReTHe-xWwR7K6fgt_J-hDz3SA4SCmFmGOANNKYdxtFwI_9nmXjqNiZ3ysbcTR2kljALXMdW

[4]黑白棋.维基百科.http://zh.wikipedia.org/wiki/黑白棋#.E6.AD.B7.E5.8F.B2

[5]李刚.疯狂Android讲义.电子工业出版社

[6] 开源中国.Android开发中使用SQLite. http://www.oschina.net/question/12_10624

[7] Linux社区.Android开发入门教程http://www.linuxidc.com/Linux/2012-09/70303.htm


相关内容

  • Android3G开发平台创新实验室建设方案
  • Android 3G移动智能终端.物联网创新实 验室建设方案 ICES Android平台研发中心 目 录 一.Android 3G行业背景和发展趋势 ............................................ 3 1.1 Android 3G行业背景 ........ ...

  • 广告设计与制作
  • 广告设计与制作 广告设计与制作专业采用全新校企合作实训模式,通过引进一线游戏开发制作企业商业项目案例教学,培养3D次世代游戏.手机游戏(Android和Iphone平台).移动互联新娱乐应用领域高端实用人才,通过模拟游戏开发企业制作流程,模块化教学,全面提升策划设计.原画.网游次世代高精模型.游戏动 ...

  • 拥有良好就业前景的5大专科专业
  • 高考填报志愿时,考生和家长最关心的是专业和学校的选择.对于分数不理想.只能上大专的考生来说,专业的选择决定着未来的发展.那么大专专业有哪些?考生又该如何选择好专业呢?在大学年年扩招的情况下,只有选好了专业入对行才能逆袭最难就业季.拥有好未来.我们盘点了2013比较热门的专业,供广大考生和家长参考. ...

  • 基于Android的"诸子百家"APP设计与开发毕业论文
  • 本科生毕业论文(设计) 题目: 基于Android 的"诸子百家"APP 设计与开发 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果.尽我所知,除文中特别加以标注和致谢的地方外,不 ...

  • 诺基亚营销战略研究
  • 本科毕业论文 论文题目:诺基亚(中国)发展战略研究 姓 名: 学 号: 系 (部): 专 业: 班 级: 指导老师: 刘月 2009361121 贸易经济系 市场营销 2009级1班 杨宇 完成时间: 2013 年 4 月 摘 要 伴随着全球经济的发展,手机通信也发生了很大的变化.从20世纪80年代 ...

  • Android开发人才就业前景
  • Android开发人才就业前景 据调查,2016年中国4G用户已经超过超7亿,与其他行业相比,Android开发的发展潜力和发展前景无疑是最大的,Android开发人才处于供不应求的状态,所以就业前景非常光明. 中国信息通信研究院发布数据称:2016年4G用户预计超过7亿户,占移动用户比例突破50% ...

  • 基于Android系统的手机游戏项目制作计划书
  • 一. 系统目的 设计一款能够运行于Android手机操作系统的赛车类游戏.力求使该游戏能够充分体现出Android手机硬件方面的优势,如游戏界面华丽.可通过触摸屏操作等. 二. 可行性分析 Android操作系统是美国Google公司于2007年11月5日宣布的基于Linux平台的开源手机操作系统. ...

  • [生活休闲]iPhone手机和Android手机有哪些不同
  • [生活休闲]iPhone手机和Android手机有哪些不同 自从iPhone横空出世,就以简单易用,并功能强大,作为智能手机的代名词,直到Google推出Android平台,才棋逢对手;数据显示,目前iOS和Android已经垄断了智能手机平台,那么,iPhone手机和Android手机到底哪个好用 ...

  • android毕业论文完整格式(食物相宜相克大全)
  • 财经信息工程系 2013-2014-2学期 移动网络开发技术期末考核 --食物相宜相克大全 专 业: 计算机科学与技术 班 级: 学生姓名: 学 号: 2014年6月 目 录 1.项目简介 ....................................................... ...