Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx

上传人:b****6 文档编号:8434437 上传时间:2023-05-11 格式:DOCX 页数:59 大小:1.47MB
下载 相关 举报
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第1页
第1页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第2页
第2页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第3页
第3页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第4页
第4页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第5页
第5页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第6页
第6页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第7页
第7页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第8页
第8页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第9页
第9页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第10页
第10页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第11页
第11页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第12页
第12页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第13页
第13页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第14页
第14页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第15页
第15页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第16页
第16页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第17页
第17页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第18页
第18页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第19页
第19页 / 共59页
Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx_第20页
第20页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx

《Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx》由会员分享,可在线阅读,更多相关《Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx(59页珍藏版)》请在冰点文库上搜索。

Android版的中国象棋人机对弈游戏设计与实现设计说明文档格式.docx

第四部分:

功能简介与其运行结果

第五部分:

游戏的架构

第六部分:

游戏框架的简介

第七部分:

游戏结论

第八部分:

游戏展望

第九部分:

指导

第十部分:

游戏参考文献

中国象棋的开发背景

1、中国象棋具有悠久的历史,象棋的爱好者更是数不胜数,远在战国时代,象棋便在贵族阶层中广为流传,早期的象棋是象征着当时战斗场面的游戏,后来这种观念慢慢被改变,成了人们休闲娱乐中不可缺少的一部分。

2、而当今的人们忙于工作,很少有时间静下心来享受一下象棋对弈的乐趣,因此电脑版象棋、手机版象棋便开始受到人们的关注。

中国象棋的需求分析

该游戏是改编网络版中国象棋,使其更加满足玩家的的要求。

主要用于android手机的平台。

满足广大象棋爱好者的要求。

1)游戏的策划

游戏类型

该游戏属于棋牌类游戏的一种,并采用简单的人工智能,可达到玩家与电脑进行对弈的效果。

运行的目标平台

游戏的目标平台为Android2.2

(3)操作方式

该游戏拟采用屏幕事件进行操作,玩家可以鼠标来单击屏幕完成对游戏进行控制,游戏中部分的功能可以使用键盘操作来完成。

2)android平台下游戏的准备工作

1、相关的素材。

图片名称

用途

bacnground.png

游戏背景图片

logo2.png

欢迎界面logo2

welcomebackage.png

欢迎界面背景图片

helpbackground.png

帮助界面背景图片

vs.png

VS图片

qipan.png

游戏棋盘

menu.png

菜单按钮

ok.png

确定按钮

back.png

返回按钮

closesound.png

关闭声音按钮

opensound.png

打开声音按钮

startgame.png

开始游戏按钮

exit.png

退出游戏按钮

sound3.png

显示声音状态图片

sound2.png

声音按钮

lost.png

你输了图片

win.png

你赢了图片

left.png

指针

right.png

a.png

黑将

b.png

黑士

c.png

黑象

d.png

黑马

e.png

黑車

f.png

黑炮

g.png

黑卒

a1.png

红将

b2.png

红士

c3.png

红象

d4.png

红马

e5.png

红車

f6.png

红炮

g7.png

红卒

2、棋盘的标记

红方

黑方

8

1

12

5

13

6

10

3

9

2

11

4

14

7

{2,3,6,5,1,5,6,3,2},

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

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

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

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

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

{9,10,13,12,8,12,13,10,9},

(1)运行该游戏,首先进入的将是欢迎界面,效果如图1所示。

图1

(2)当欢迎动画播放完毕后,单击“菜单”按钮就可以进入菜单界面,如图2所示。

图2

(3)在菜单按钮界面,可以通过“打开声音”/“关闭声音”菜单来控制游戏声音的开关,单击“帮助”菜单可以进入帮助界面,如图3所示。

图3

(4)而在菜单界面单击“开始游戏”菜单将进入游戏界面,如图4所示。

图4

在游戏界面玩家可以通过单击自己的棋子来走棋,同时可以单击声音按钮来打开或者关闭声音。

当游戏一方“将”或者是另一方的“帅”被吃掉是,会出现游戏胜利的界面,如图6所示。

图6

在游戏过程中,玩家可以随时通过单击“退出”按钮返回到游戏主菜单。

共有类

Activity的实现类MyDoChessActivity,该类是通过扩展基类Activity得到的,是整个游戏的控制器,也是整个游戏程序的入口。

辅助界面相关类

欢迎界面类MyWelcomeView

该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作。

欢迎界面动画生成类MyWelcomeViewThread

该类是为了欢迎界面服务的,主要是通过更改欢迎界面中图片的坐标来实现动画效果。

帮助界面类MyHelpView

该类为帮助界面的实现类。

菜单界面类MyMenuView

该类为菜单界面的实现类,负责绘制菜单界面以与菜单界面的屏幕进行监听。

游戏界面相关类

1)游戏界面类MyGameView

该类为游戏程序中最主要的类,负责绘制游戏过程所有的信息,如棋盘、棋子、各个按钮以与胜利或者失败菜单等。

2)象棋规则类MyGuiZe

(1)该类是象棋规则的实现类,其中包含所有棋子的走棋规则与当前棋牌某方的所有可能的走法

3)走法类MyChessMove

该类为棋子的走法的封装类,包含棋子的名称、出发点以与目标点。

*帅和士的走法:

“帅”,它只能在“九宫”中行走,而且每次只能横着或者纵着行走一棋点。

首先,判断棋子是否是在“九宫”里行走,接着判断棋子是否是横向或纵向只走一个棋点。

如果棋子将符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

“士”,它只能在“九宫”中行走,而且每次只能斜着行走一格。

这样只有一种情况来考虑,即纵向走一个棋点,横向走一个棋点。

如果棋子士符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

如图所示

*象和马的走法:

“象”,它只能走“田”字格,而且不能过河,象腿不能被其它的棋子压到。

首先首先判断棋子是否出届,这样只有一种情况考虑,那就是纵向走两个棋点,横向也走两个棋点。

首先判断棋子是否走"

田"

字格,而且不能过河,接着再用判断象腿是否被其它棋子压着。

如果棋子象走动符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

“马”,它只能走“日”字格,而且马腿不能被其它的棋子压到。

设计时可两种情况来考虑,一种是横向走两个棋点,纵向走一个棋点;

一种是纵向走两个棋点,横向走一个棋点。

判断是否横向走两个棋点,纵向走一个棋点,接着来判断马腿是否被其它棋子压着。

纵向走“日”同理。

如果棋子马符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

*卒和炮的走法:

“卒”,它的行走规则分两种情况。

一种是棋子没过河界,另一种是棋子过了河界。

首先判断棋子是否出届,然后设定棋子没过河界,接着设定棋子在没过河界的情况下只能向前行走一个棋点;

然后设定棋子过了河界,紧接着设定棋子在过了河界的情况下只能向前、向左、向右行走一个棋点。

如果棋子卒符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

“炮”,它只能走直线,且中间有且只能有一个棋子。

*車的走法:

“车”,它只能走直线,且中间不能有任何棋子,设计时分为两种情况来考虑,一种是纵向行走;

一种是横向行走。

判断棋子是否纵向行走,接着再用判断判断中间有没别的棋子。

横向行走同理。

如果棋子车符合以上的走棋规则,则可以走动,否则棋子强制放回原处。

游戏框架的简介

按照程序运行的顺序介绍各个类的作用以与整体的运行框架,步骤如下:

启动游戏,首先被创建的是MyDoChessActivity,而在MyDoChessActivity中首先将用户显示成欢迎界面MyWelcomeView.

在显示欢迎界面的同时,启动MyWelcomeViewThread线程生成界面动画

当玩家单击“菜单”按钮时进入界面MyMenuView,在菜单界面会根据玩家不同的选择执行不同的操作。

当玩家单击“帮助”菜单时,将进入帮助界面MyHelpView.

而当玩家单击“开始游戏”菜单按钮时,进入的将是游戏界面MyGameView。

当玩家或者电脑走棋是,会根据规则类MyGuiZe进行判断,然后产生一个走法MyChessMove。

在游戏过程中,玩家同样可以随时单击“退出”按钮来返回到菜单界面。

通过一个星期左右的时间,终于把跟着部分网络的游戏做了出来,从来没有接触过android平台,但是通过学习,把平时所有的积累的方法和知识都用了上去,虽然并没有自己平常所使用的熟悉的基于C++语言来写程序,但是我想对于计算机编程来说,都是相通的,毕竟是使用的是方法与理论,我们学习的是方法,而不是单单的一门语言,对于计算机的日益更新速度,我们不可能学精通于每一个方法和函数,我们更需要的逻辑思路和解决方法的能力并能用于实际的实践。

该游戏实现了基本的象棋的走法与判断简单的逻辑,但是并没有真正实现相当智能的走法,我想这个也是基于算法的问题,我想需要更加严密的算法,以后通过不断的学习,通过别人的算法,能够写出一些比较理想的属于自己的想法。

把该游戏更加完善,真正能够满足基于android平台的手机的棋艺爱好者的需求。

老师教给我的知识和方法,各位网友的热心帮助,帮助我解决了很多问题,真的你们

参考文献

C/C++中国象棋程序入门与提高鹏 等著电子工业

学会用JAVA开发网络游戏

ANDROID_2[1].0游戏开发实战宝典

附件加代码:

(1)MyDoChessActivity类

package.zh.wy.sl;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.media.MediaPlayer;

importandroid.os.Handler;

importandroid.os.Message;

importandroid.view.Window;

importandroid.view.WindowManager;

publicclassMyDoChessActivityextendsActivity{

booleanisSound=true;

//是否播放声音

MediaPlayerstartSound;

//开始和菜单时的音乐

MediaPlayergamesound;

//游戏声音

HandlermyHandler=newHandler(){//用来更新UI线程中的控件

publicvoidhandleMessage(Messagemsg){

if(msg.what==1){//WelcomeView或HelpView或GameView传来的消息,切换到MenuView

initMenuView();

//初始化并切换到菜单界面

}

elseif(msg.what==2){//MenuView传来的消息,切换到GameView

initGameView();

//初始化并切换到游戏界面

elseif(msg.what==3){//MenuView传来的消息,切换到HelpView

initHelpView();

//初始化并切换到帮助界面

}

};

publicvoidonCreate(BundlesavedInstanceState){//重写的onCreate

super.onCreate(savedInstanceState);

//全屏

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

startSound=MediaPlayer.create(this,R.raw.startsound);

//加载欢迎声音

startSound.setLooping(true);

//设置游戏声音循环播放

gamesound=MediaPlayer.create(this,R.raw.gamesound);

//游戏过程的背景声音

gamesound.setLooping(true);

this.initWelcomeView();

//初始化欢迎界面

publicvoidinitWelcomeView(){//初始化欢迎界面

this.setContentView(newMyWelcomeView(this,this));

//切换到欢迎界面

if(isSound){//需要播放声音时

startSound.start();

//播放声音

publicvoidinitGameView(){//初始化游戏界面

this.setContentView(newMyGameView(this,this));

//切换到游戏界面

publicvoidinitMenuView(){//初始化菜单界面

if(startSound!

=null){//停止

startSound.stop();

//停止播放声音

startSound=null;

if(this.isSound){//是否播放声音

gamesound.start();

this.setContentView(newMyMenuView(this,this));

//切换View

}

publicvoidinitHelpView(){//初始化帮助界面

this.setContentView(newMyHelpView(this,this));

//切换到帮助界面

}

(2)MyWelcomeView类

importandroid.content.Context;

importandroid.graphics.Bitmap;

importandroid.graphics.BitmapFactory;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.view.MotionEvent;

importandroid.view.SurfaceHolder;

importandroid.view.SurfaceView;

publicclassMyWelcomeViewextendsSurfaceViewimplementsSurfaceHolder.Callback{

MyDoChessActivitymyDoChessActivity;

//的引用

privateTutorialThreadthread;

//部刷帧的线程

privateMyWelcomeViewThreadmoveThread;

//物件移动的线程

Bitmapwelcomebackage;

//大背景

Bitmaplogo2;

Bitmapmenu;

//菜单按钮

intlogo2X=100;

//初始化需要移动的图片的相应坐标

intbordbackgroundY=-100;

//背景框的y坐标

intmenuY=550;

//菜单的y坐标

publicMyWelcomeView(Contextcontext,MyDoChessActivitymyDoChessActivity){//构造器

super(context);

this.myDoChessActivity=myDoChessActivity;

//得到myDoChessActivity引用

getHolder().addCallback(this);

this.thread=newTutorialThread(getHolder(),this);

//初始化刷帧线程

this.moveThread=newMyWelcomeViewThread(this);

//初始化图片移动线程

initBitmap();

//初始化所以图片

publicvoidinitBitmap(){//初始化所以图片

welcomebackage=BitmapFactory.decodeResource(getResources(),R.drawable.welcomebackage);

logo2=BitmapFactory.decodeResource(getResources(),R.drawable.logo2);

menu=BitmapFactory.decodeResource(getResources(),R.drawable.menu);

publicvoidonDraw(Canvascanvas){//自己写的绘制方法,并非重写的

//画的容是z轴的,后画的会覆盖前面画的

canvas.drawColor(Color.BLACK);

//清屏

canvas.drawBitmap(welcomebackage,0,0,null);

//绘制welcomebackage

canvas.drawBitmap(logo2,logo2X,150,null);

//绘制logo2

canvas.drawBitmap(menu,200,menuY,null);

//绘制menu

//从写surfaceChanged方法

publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,intheight){

publicvoidsurfaceCreated(SurfaceHolderholder){//创建时启动相应进程

this.thread.setFlag(true);

//设置循环标志位

this.thread.start();

//启动线程

this.moveThread.setFlag(true);

this.moveThread.start();

publicvoidsurfaceDestroyed(SurfaceHolderholder){//摧毁时释放相应进程

booleanretry=true;

thread.setFlag(false);

moveThread.setFlag(false);

while(retry){//循环

try{

thread.join();

//等待线程结束

moveThread.join();

retry=false;

//停止循环

catch(InterruptedExceptione){//不断地循环,直到刷帧线程结束

publicbooleanonTouchEvent(MotionEventevent){//屏幕监听

if(event.getAction()==MotionEvent.ACTION_DOWN){

if(event.getX()>

200&

&

event.getX()<

200+menu.getWidth()

&

event.ge

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2