(五子棋)课程实训报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计内容与设计要求

1.设计内容:

在手机屏幕上设计一个五子棋游戏,屏幕有棋盘,可人与人对奕,人与机对弈。双方交替下棋,如果某方在水平、垂直或45度方向有连续的5个棋子,就算胜利,结束比赛,提示游戏得到的分数。

2.设计要求:

(1)论述课题的性质、内容以及本次课程实训的目的和要求。

(2)说明Android系统对计算机软、硬件环境的基本要求,对Android应用程序作简要的说明。

(3)界面设计和游戏操作设计:界面要求美观和友好(可使用图片资源文件),使用手机键盘上的2个方向键控制方向,按照手机上的操作习惯进行设计。

(4)游戏核心数据结构设计

逻辑控制信息主要双方交替下棋。下棋子和处理, 棋子只能下到棋盘的指定位置(棋盘的格子上)并不能下到已经有棋子位置,

(5)胜负判断:双方每个已下点的3个方向判断它们是否构成五连、五连就胜利。

(6)编写代码、上机输入、调试、修改并运行通过。

(7)编写实训说明书。说明书是总结性的技术文件,应全面叙述整个设计的内容及过程(可参考上述6条),发现的问题及解决方法等。

(8)源代码和参考书目应作为说明书的附录。

(9)说明书应采用A4纸张,文字说明不少于4000字。说明书中应包括系统结构示意图。

二、进度安排

第十五周星期一上午8:30——11:30,

星期二下午2:30——5:00,

星期三上午8:30——11:30,

星期四上午8:30——11:30,

第十六周星期一一天,

星期二一天

星期三上午8:30——11:30,

星期四上午8:30——11:30,

目录

一、课程实训的目的及要求-------------------------------------------6

二、游戏设计思路---------------------------------------------------7

三、主要功能实现---------------------------------------------------9

四、程序调试-------------------------------------------------------12

五、程序源代码-----------------------------------------------------13

六、总结-----------------------------------------------------------21

七、课程设计评分表-------------------------------------------------22

一、课程实训的目的及要求

本次课程实训是专门针对大四学生的一次项目实践,当前3G移动互联网发展迅速,而Android系统已经成为当前时期移动终端设备的主流操作系统之一,在这样的条件下计算机与通信学院组织这次基于Android系统的手机项目实战,紧跟当前时代电子通信业的发展,让学生学习当前主流的新技术,扩展学生们的视野,为即将大学毕业的我们进入社会求职开辟了一条新道路。

通过这次课程实训我们主要了解和掌握了以下内容:

(1)会在eclipse下搭建Android系统的开发环境;

(2)熟悉Android系统应用程序架构和代码编写;

(3)了解游戏开发的原理,能够解决游戏在不同屏幕上的移植问题;

(4)熟悉Android系统的线程机制和绘图原理;

(5)能够在eclipse中对Android系统应用程序进行调试;

二、游戏设计思路

1、游戏功能介绍

五子棋游戏通过黑白双方在固定大小的方格棋盘上进行交替落子,直到有一方在落下一棋子后在该棋子的周围形成垂直方向、水平方向、左上到右下方向或左下到右上方向形成有大于等于5个同样颜色棋子的一条直线,则执该颜色棋子的玩家赢得该棋局。

在我所设计的游戏中,主要的功能为:人与人对弈,给出当前该谁进行落棋子的提示,在游戏结束时给出游戏结束的提示对话框,实现在游戏过程中(未结束)重新开始游戏的功能,实现游戏过程中退出游戏的功能。

2、游戏模块的划分

该游戏由于是人与人之间的对弈,因此逻辑比较简单,因而实现的模块划分也较简单。这里的主要的模块有三部分:一是坐标转换模块,将屏幕点击位置的像素坐标位置转换为棋盘上的棋子的坐标位置;二是绘图模块,根据用户点击屏幕的位置,判断应该做出的响应并进行屏幕的重绘;三是游戏结束的判断模块,当用户点击落下一个棋子后,立刻判断该棋子的落下是否决定了该棋局的胜负。其它的小模块还有游戏的初始化,游戏的重置,游戏的退出模块。

3、游戏运行的界面如下所示:

4、游戏结束时的界面

三、主要功能模块的实现

1、坐标转换模块的实现

用户输入的操作为用户对屏幕的点击操作,而游戏中的棋盘为9*9方格落子点。

棋盘是一张填充整个屏幕的背景图片,为了使用户点击的位置能够与图片上的棋盘的位置相对应,这里需要对图片进行等比例缩放以适应不同分辨率的屏幕。在我的开发过程中,我使用的屏幕的分辨率为320*480,在该屏幕的分辨率下求得缩放的比例。

背景图片如下:

图一:背景图片

棋子图片如下(两个图片时分开的):

图二:棋子图片

在求解缩放比例需要获知以下信息:

(1)棋盘左上角落子位置的像素坐标(x0,y0);

(2)棋盘水平相邻两个落子点的距离unitx;

(3)棋盘垂直相邻两个落子点的距离unity;

(4)手机屏幕的分辨率大小width,height;

我的比例数据的获取是在分辨率为320*480即width=320,height=480的环境下获取的缩放比例。求解其他的数值过程如下:

【1】原点坐标比例的求解过程

将背景图片在手机屏幕上进行全屏显示,然后用点击屏幕上棋盘原点(左上角落棋子点),记录该点的水平和垂直方向的像素坐标,同样操作10次,求得平均值。

我的操作结果为:水平像素值为:x=16,垂直像素值为:y=175.8;则求得水平的比例为:320/16=20,垂直比例为:480/175.8=2.73;在程序中的书写为:

//原点位置的缩放比例

private final static float scaleX0=20f;

private final static float scaleY0=2.73f;

则得原点坐标值为:

x0=width/scaleX0;

y0=height/scaleY0;

【2】棋盘格子的长(unitx)与宽(unity)的求解过程:

沿左上到右下对角线方向,从离棋盘原点一个格子的位置开始,依次点击落棋子的位置,分别对水平和垂直方向的格子求值,最后进行求平均值即可得到棋盘格子的大小。在我的操作中最后求得的棋盘格子的缩放比为:

//棋盘点间距的缩放比例

private final static float scaleUnitx=8.858f;

private final static float scaleUnity=13.278f;

得棋盘格子的单元长度像素值为:

unitx=width/scaleUnitx;

unity=height/scaleUnity;

其他的一些缩放比例信息为:

(1)棋子图片一半的大小 chessHx,chessHy;用于绘制棋子图片时确定绘制点里棋子中心点的距离;其求解过程为:

//设置棋子图片的一半的大小值

chessHx=whiteChess.getWidth()/2.0f;

chessHy=whiteChess.getHeight()/2.0f;

相关文档
最新文档