智能终端软件开发课程方案设计书报告.docx

上传人:b****5 文档编号:28391365 上传时间:2023-07-10 格式:DOCX 页数:27 大小:490.95KB
下载 相关 举报
智能终端软件开发课程方案设计书报告.docx_第1页
第1页 / 共27页
智能终端软件开发课程方案设计书报告.docx_第2页
第2页 / 共27页
智能终端软件开发课程方案设计书报告.docx_第3页
第3页 / 共27页
智能终端软件开发课程方案设计书报告.docx_第4页
第4页 / 共27页
智能终端软件开发课程方案设计书报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

智能终端软件开发课程方案设计书报告.docx

《智能终端软件开发课程方案设计书报告.docx》由会员分享,可在线阅读,更多相关《智能终端软件开发课程方案设计书报告.docx(27页珍藏版)》请在冰豆网上搜索。

智能终端软件开发课程方案设计书报告.docx

智能终端软件开发课程方案设计书报告

 

中国地质大学(武汉)

智能终端软件开发

 

 

标题:

智能终端课程设计

指导老师:

徐战亚

班级:

116101

学号:

20101002130

学生:

高亚兵

 

2014年1月13日

 

摘要

本次课程设计主要内容是双人五子棋游戏的开发。

主要内容是界面布局、判断输赢,记录输赢次数。

开发想法来源,纯属娱乐。

关键词:

益智游戏Android

第一部分分析游戏

一、游戏功能简述

1、界面布局

按照象棋的表格图案绘制布局,在画布上设计表格,并标记红黑方位置。

2、棋子连线分析

标明五子棋的颜色,记录分析棋子的位置,判断是否取胜。

3、记录输赢次数

记录红黑双方输赢次数。

二、游戏核心技术

1、基本技术组成

判断路径,数据结构算法。

2、关键技术难点分析

1、技术难点

分析棋子连线是否可以取胜。

2、作为难点的原因

棋子之间有三种连线情况,横向连续连接、纵向连续连接、对角线连续连接。

3、准备突破方法

将同类棋子之间,有位置关系的棋子进行进栈处理,如果在棋盘范围内,有连续的五个棋子则为取胜。

 

第二部分设计与开发

一、前期准备工作

软件环境:

Windows

AndroidSDK;

Eclipse(windows版)

环境配置:

Windows下AndroidSDK安装。

安装步骤:

1、下载SDK包,Android-SDK,下载地址:

2、配置SDK

导入sdk文件

二、游戏预期效果

1、UI设计

背景画布选择恰当,布局清晰,结构清晰,使用简单。

2、棋盘设计

方格大小,连线之间的距离适中,确保棋子在连线上,避免棋子在棋盘上混乱摆放。

3、提示框

出现下棋位置不在棋盘内或者不在合法范围内是出现错误提示

当由一方取得胜利时,出现提示框。

三、开发过程

1、布局设计

packagecn.m.xys。

//Downloadby

importandroid.app.Activity。

importandroid.os.Bundle。

importandroid.view.Display。

importandroid.view.KeyEvent。

importandroid.view.Window。

importandroid.view.WindowManager。

publicclassFiveChessActivityextendsActivity

{

GameViewgameView=null。

@Override

publicvoidonCreate(BundlesavedInstanceState)

{

super.onCreate(savedInstanceState)。

//隐藏标题栏

requestWindowFeature(Window.FEATURE_NO_TITLE)。

//全屏显示

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

WindowManager.LayoutParams.FLAG_FULLSCREEN)。

//获取屏幕宽高

Displaydisplay=getWindowManager().getDefaultDisplay()。

//现实GameView

GameView.init(this,display.getWidth(),display.getHeight())。

gameView=GameView.getInstance()。

setContentView(gameView)。

}

@Override

publicbooleanonKeyDown(intkeyCode,KeyEventevent)

{

returnsuper.onKeyDown(keyCode,event)。

}

}

2、算法设计

packagecn.m.xys。

//Downloadby

importandroid.app.Activity。

importandroid.content.Context。

importandroid.content.res.Resources。

importandroid.graphics.Bitmap。

importandroid.graphics.BitmapFactory。

importandroid.graphics.Canvas。

importandroid.graphics.Color。

importandroid.graphics.Matrix。

importandroid.graphics.Paint。

importandroid.graphics.Rect。

importandroid.view.MotionEvent。

importandroid.view.SurfaceHolder。

importandroid.view.SurfaceView。

/**

*@authorAdministrator

*

*/

publicclassGameViewextendsSurfaceViewimplementsConst,SurfaceHolder.Callback,Runnable

{

staticGameViewsInstance=null。

publicstaticvoidinit(ActivitymActivity,intscreenWidth,intscreenHeight)

{

sInstance=newGameView(mActivity,screenWidth,screenHeight)。

}

publicstaticGameViewgetInstance()

{

returnsInstance。

}

//控制循环

booleanmbLoop=false。

//定义SurfaceHolder对象

SurfaceHoldermSurfaceHolder=null。

publicstaticPaintsPaint=null。

publicstaticCanvassCanvas=null。

publicstaticResourcessResources=null。

privateintmGameState=0。

privateintmScreenWidth=0。

privateintmScreenHeight=0。

publicint[][]mGameMap=null。

privateintmMapHeightLengh=0。

privateintmMapWidthLengh=0。

privateintmMapIndexX=0。

privateintmMapIndexY=0。

publicintmCampTurn=0。

publicintmCampWinner=0。

privatefloatmTitleSpace=0。

privateintmTitleHeight=0。

privatefloatmTitleIndex_x=0。

privatefloatmTitleIndex_y=0。

BitmapbitmapBg=null。

BitmapmBlack=null。

BitmapmWhite=null。

ContextmContext=null。

publicGameView(Activityactivity,intscreenWidth,intscreenHeight)

{

super(activity)。

sPaint=newPaint()。

sPaint.setAntiAlias(true)。

sResources=getResources()。

mContext=activity。

mScreenWidth=screenWidth。

mScreenHeight=screenHeight。

mSurfaceHolder=this.getHolder()。

mSurfaceHolder.addCallback(this)。

setFocusable(true)。

mbLoop=true。

bitmapBg=CreatMatrixBitmap(R.drawable.status,mScreenWidth,mScreenHeight)。

mBlack=BitmapFactory.decodeResource(GameView.sResources,R.drawable.ai)。

mWhite=BitmapFactory.decodeResource(GameView.sResources,R.drawable.human)。

mTitleSpace=(float)mScreenWidth/CHESS_WIDTH。

mTitleHeight=mScreenHeight/3。

mTitleIndex_x=(float)(mTitleSpace/2)。

mTitleIndex_y=(float)(mTitleSpace/2)。

setGameState(GS_GAME)。

}

publicvoidsetGameState(intnewState)

{

mGameState=newState。

switch(mGameState)

{

caseGS_GAME:

mGameMap=newint[CHESS_HEIGHT][CHESS_WIDTH]。

mMapHeightLengh=mGameMap.length。

mMapWidthLengh=mGameMap[0].length。

mCampTurn=CAMP_HERO。

break。

}

}

protectedvoidDraw()

{

sCanvas=mSurfaceHolder.lockCanvas()。

if(mSurfaceHolder==null||sCanvas==null)

{

return。

}

RenderGame()。

mSurfaceHolder.unlockCanvasAndPost(sCanvas)。

}

privatevoidRenderGame()

{

switch(mGameState)

{

caseGS_GAME:

DrawRect(Color.WHITE,0,0,mScreenWidth,mScreenHeight)。

RenderMap()。

break。

caseGS_END:

DrawRect(Color.RED,0,0,mScreenWidth,mScreenHeight)。

DrawString(Color.WHITE,sResources.getString(mCampWinner)+"胜利点击继续游戏",50,50)。

break。

}

}

privatevoidRenderMap()

{

inti,j。

DrawImage(bitmapBg,0,0,0)。

for(i=0。

i

i++)

{

for(j=0。

j

j++)

{

intCampID=mGameMap[i][j]。

floatx=(j*mTitleSpace)+mTitleIndex_x。

floaty=(i*mTitleSpace)+mTitleHeight+mTitleIndex_y。

if(CampID==CAMP_HERO)

{

DrawImage(mBlack,x,y,ALIGN_VCENTER|ALIGN_HCENTER)。

}

elseif(CampID==CAMP_ENEMY)

{

DrawImage(mWhite,x,y,ALIGN_VCENTER|ALIGN_HCENTER)。

}

}

}

}

privatevoidDrawRect(intcolor,intx,inty,intwidth,intheight)

{

sPaint.setColor(color)。

sCanvas.clipRect(x,y,width,height)。

sCanvas.drawRect(x,y,width,height,sPaint)。

}

privatevoidDrawString(intcolor,Stringstr,intx,inty)

{

sPaint.setColor(color)。

sCanvas.drawText(str,x,y,sPaint)。

}

@Override

publicbooleanonTouchEvent(MotionEventevent)

{

intx=(int)event.getX()。

inty=(int)event.getY()。

switch(event.getAction())

{

caseMotionEvent.ACTION_DOWN:

UpdateTouchEvent(x,y)。

break。

caseMotionEvent.ACTION_MOVE:

break。

caseMotionEvent.ACTION_UP:

break。

}

returnsuper.onTouchEvent(event)。

}

publicbooleanCheckPiecesMeet(intCamp)

{

intMeetCount=0。

//横向

for(inti=0。

i

i++)

{

intindex=mMapIndexX-CALU_SINGLE_COUNT+i。

if(index<0||index>=mMapWidthLengh)

{

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

MeetCount=0。

continue。

}

if(mGameMap[mMapIndexY][index]==Camp)

{

MeetCount++。

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

}else

{

MeetCount=0。

}

}

//纵向

MeetCount=0。

for(inti=0。

i

i++)

{

intindex=mMapIndexY-CALU_SINGLE_COUNT+i。

if(index<0||index>=mMapHeightLengh)

{

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

MeetCount=0。

continue。

}

if(mGameMap[index][mMapIndexX]==Camp)

{

MeetCount++。

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

}else

{

MeetCount=0。

}

}

//右斜

MeetCount=0。

for(inti=0。

i

i++)

{

intindexX=mMapIndexX-CALU_SINGLE_COUNT+i。

intindexY=mMapIndexY-CALU_SINGLE_COUNT+i。

if((indexX<0||indexX>=mMapWidthLengh)||(indexY<0||indexY>=mMapHeightLengh))

{

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

MeetCount=0。

continue。

}

if(mGameMap[indexY][indexX]==Camp)

{

MeetCount++。

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

}else

{

MeetCount=0。

}

}

//左斜

MeetCount=0。

for(inti=0。

i

i++)

{

intindexX=mMapIndexX-CALU_SINGLE_COUNT+i。

intindexY=mMapIndexY+CALU_SINGLE_COUNT-i。

if((indexX<0||indexX>=mMapWidthLengh)||(indexY<0||indexY>=mMapHeightLengh))

{

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

MeetCount=0。

continue。

}

if(mGameMap[indexY][indexX]==Camp)

{

MeetCount++。

if(MeetCount==CALU_SINGLE_COUNT)

{

returntrue。

}

}else

{

MeetCount=0。

}

}

returnfalse。

}

privatevoidUpdateTouchEvent(intx,inty)

{

switch(mGameState)

{

caseGS_GAME:

if(x>0&&y>mTitleHeight)

{

mMapIndexX=(int)(x/mTitleSpace)。

mMapIndexY=(int)((y-mTitleHeight)/mTitleSpace)。

if(mMapIndexX>mMapWidthLengh)

{

mMapIndexX=mMapWidthLengh。

}

if(mMapIndexX<0)

{

mMapIndexX=0。

}

if(mMapIndexY>mMapHeightLengh)

{

mMapIndexY=mMapHeightLengh。

}

if(mMapIndexY<0)

{

mMapIndexY=0。

}

if(mGameMap[mMapIndexY][mMapIndexX]==CAMP_DEFAULT)

{

if(mCampTurn==CAMP_HERO)

{

mGameMap[mMapIndexY][mMapIndexX]=CAMP_HERO。

if(CheckPiecesMeet(CAMP_HERO))

{

mCampWinner=R.string.Role_black。

setGameState(GS_END)。

}

else

{

mCampTurn=CAMP_ENEMY。

}

}

else

{

mGameMap[mMapIndexY][mMapIndexX]=CAMP_ENEMY。

if(CheckPiecesMeet(CAMP_ENEMY))

{

mCampWinner=R.string.Role_white。

setGameState(GS_END)。

}else

{

mCampTurn=CAMP_HERO。

}

}

}

}

break。

caseGS_END:

setGameState(GS_GAME)。

break。

}

}

publicbooleanisCheckInvite(Stringbod

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

当前位置:首页 > 求职职场 > 面试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1