基于Android操作系统的中国象棋手机游戏.docx
- 文档编号:28140532
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:32
- 大小:200.97KB
基于Android操作系统的中国象棋手机游戏.docx
《基于Android操作系统的中国象棋手机游戏.docx》由会员分享,可在线阅读,更多相关《基于Android操作系统的中国象棋手机游戏.docx(32页珍藏版)》请在冰豆网上搜索。
基于Android操作系统的中国象棋手机游戏
基于Android操作系统的中国象棋手机游戏
石家庄科技信息职业学院
毕业论文
题目:
基于Android操作系统的中国象棋手机游戏
学号:
090124012
姓名:
王麒
专业班级:
软件技术(游戏方向)09-24班
指导教师:
刘永伟
完成日期:
2011-12-18
摘要:
Chess是运行在Android平台上的一款支持双人联网对局、即时聊天、对弈记录的休闲棋牌类手机游戏。
系统采用面向对象的编程思想进行构思与分析设计;使用UML构建软件模型;使用MVC架构模式实现系统的整体架构及各模块之间的接口设计;在系统的实践过程中还采用了部分GoF的设计模式进行编码与开发。
本文详细系统地阐述了在Android平台上,面向对象的软件开发思想对Chess游戏系统的分析、设计及实现过程。
在项目的实践过程中,主要用到了以下技术:
手机布局主要使用了XML设计,程序及其子模块的生命周期管理用到了Activity流程控制,数据储存方面使用的是轻量级数据库SQLite、网络通讯部分使用的是XMPP即时通讯协议进行数据的传输、对弈的画面更新使用的是手机的2D图形编程。
本论文的前半部分将简要介绍系统相关的行业信息及基础的技术知识,后半部分将对本人在系统各模块中所使用的关键技术的实现进行了全面的介绍。
关键词:
联网对弈;中国象棋;手机游戏;Android平台
ABSTRACT:
CnChessisaChineseChessgamethatrunningontheAndroidplatform.Itsupportmanyofthefeaturessuchasplayinggamesthroughthenetwork,real-timechat,andplaychessrecordsofcasualmobilegames.
TheCnChessgameisobject-orientedprogrammingdesignandanalysisoftheideaofthinking;buildsoftwaremodelsusingUML;useofMVCarchitecturepatternstoachievetheoverallsystemandtheinterfacebetweenthemoduledesigns;inpracticethesystemalsousessomeoftheGoF'sdesignpatternstocodinganddevelopment.
ThispapersystematicallyexpoundedintheAndroidplatform,theapplicationofMVCpatternandhierarchicalstructureofobject-orientedsoftwaredevelopmentthoughtscnChessgamesystemanalysis,designandimplementationprocess.Practiceinthecourseoftheproject,mainlyusedinthefollowingtechnologies:
cellphonesprimarilyuseXMLlayoutdesign,processandlifecyclemanagementsub-moduleusestheActivityprocesscontrol,datastorageareasusingalightweightdatabaseSQLite,netwrokcommunicationSomeusetheXMPPinstantmessagingprotocolfordatatransmission,publicdebateoftheframeusingamobilephone2Dgraphicsprogramming.Thefirstpartofthispaperwillbrieflyintroducethesystembasedonrelevantindustryinformationandtechnicalknowledge,thelatterpartofeachmoduleinthesystem;Iwillbeinthekeytechnologyusedintherealizationofacomprehensiveintroduction.
Keywords:
Networkofgames;Chinesechess;MobileGames;Androidplatform
一、前言………………………………………………………………….…4
1.1绪论……………………………………………………………..…4
1.2相关研究综述……………………………………………….….…4
Androi.d手机操作系统的发展历程…………….……………..….4
1.3研究的目的与内容……………………………………………..…5
1.3.1研究目标…………………………………………………….…5
1.3.2研究主要内容………………………………………………….5
二、Android程序设计相关技术概论…………………………………..6
2.1XUL界面布局……………………………………………….….6
2.2Android的Activity组件……………………………………6
2.3SQLite数据库………………………………………………….7
2.4Android2D图形编程…………………………………………7
三、游戏所需类的分析与实现…………………………………………6
3.1游戏的框架简介…………………………………………..……8
3.2各个类的简要介绍…………………………………..…………8
3.3游戏中象棋规则类的实现………………….…………….….10
四、论文总结……………………………………………………………27
五、参考文献……………………………………………………………28
致谢………………………………………………………………………...29
一、前言
1、绪论
随着3G移动网络应用的推广,手机游戏的规模、复杂程度日益增强;其技术手段、设计思想、系统体系结构都发生了深刻的变化。
手机操作系统正朝着高处理能力、多功能、智能化的方向发展。
近年来,网络文化市场发展很快,随着互联网的迅速普及、宽带的接入社区和家庭,我国网络游戏市场发展迅速并进入了一个高速增长期,并已经创造了较大的产值,带动了相关产业的发展。
如今网络上的提供免费中国象棋游戏,大多数是单机版的,界面单一,功能单一。
本系统将实现在网络上对战的中国象棋功能;还对在下棋界面美化,以及下棋中可能出现的意外进行了处理。
这样中国象棋休闲游戏将不在是一个功能单一界面枯燥的游戏,而是一个较完善的休闲游戏。
在国内外Android手机应用开发如火如荼、日益盛行的大背景下,本人决定开发一款界面友好、操作简单,支持人机对弈、数据记录、智能规则判断的手机休闲游戏。
2、相关研究综述
近年来,国内外的专家学者以及一线的开发人员从理论、方法、技术等不同的角度对Android手机操作系统进行了一定的研究。
本小节将从Android手机操作系统的发展历程、研究现状、程序开发设计简介四个方面分析总结国内外的相关研究结果2.1Android手机操作系统的发展历程
Android是Google于2007年11月5日宣布的基于Linux平台开源手机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。
表2.1Android手机操作系统的发展阶段
发展阶段
阶段特征
2007.11.5
Android平台发布
2008.9.22
T-Mobile
2009年1季度
G1销售100万台
2009.3
MWC华为发布Android手机,Moto,三星,LG计划2009年下半年推出Android手机
2009
获得Orange,Vodafone,O2,Telefonica支持
2009
进军上网本
3、研究的目标与内容
3.1研究目标
本项目主要研究的目标分为:
程序设计思想实践改进目标、Android平台手机开发技术的研究目标。
(1)运用面向对象的编程思想统一过程,对Chess中国象棋手机游戏的系统结构、过程、功能等要素进行可视化的描述,为Android程序设计的可视化提供方法、技术上的支持,为系统的理论模型和软件建模提供参照。
(2)本系统中使用了多种基于Android平台的软件开发技术,根据要实现的系统功能,系统需要使用到的技术及技术研究的目标主要有:
手机游戏用户界面的人性化、个性化界面布局,给用户以良好的游戏体验;
移动设备上的图形编程,提供流畅靓丽的游戏过程界面;
3.2研究主要内容
项目研究的内容主要有以下二大块:
第一部分是手机游戏的界面设计和背景音效的设计。
和PC上的游戏开发有些许不同,手机游戏更加的注重用户体验,一个人性化的、时尚靓丽的游戏界面和优美个性化的音效设计是一个成功的手机游戏要达到的基本要求。
第二部分是对局智能程序的设计。
可以和设计好的AI(ArtificialIntelligence)算法进行游戏。
人工智能程序设计是一项对算法要求很高的程序设计,特别是在手机这种硬件资源紧缺的环境中,更是需要一个高效的算法来提供强大的AI对局支持
二、Android程序设计相关技术概论
Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。
根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:
图2.1Android系统架构
2.1XUL界面布局
XUL是一种基于XML的语言,因此需要对XML(特别是XML名称空间)很熟悉。
XUL是英文“XMLUserInterfaceLanguage”的首字母缩写。
顾名思义,它是一种应用XML来描述使用者界面的标示语言。
2.2Android的Activity组件
Activity,一般代表手机屏幕的一屏,相当于浏览器的一个页面。
在Activity中添加view,实现应用界面和用户交互。
一个应用程序一般由多个Activity构成,这些Activity之间可互相跳转,可进行页面间的数据传递。
每个Activity都有自己的生命周期。
2.3SQLite数据库
在Android平台上,集成了一个嵌入式关系型数据库—SQLite。
SQLite是支持结构化查询的轻量级数据库,能很好得适应于移动设备的应用。
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。
2.4Android2D图形编程
1、SimpleGraphicsinView:
就是直接使用Android已经实现的一些画图操作,比如说images,shapes,colors,pre-definedanimation等等。
这种方式只能画静态或者极为简单的2D图画,对于实时性很强的动画,高品质的游戏都是没法实现的。
2、Canvas:
首先我们要明白这个Canvas是一个2D的概念,是在Skia中定义的。
也就是说在这个方式下还是说的画2D图形。
图2.2游戏流程图
三、游戏所需类的分析与实现
3.1游戏的框架简介
图5.1游戏的类框架
按照程序运行的顺序介绍各个类的作用以及整个运行框架,步骤如下:
(1)启动游戏,首先被创建的是ChessActivity,而在ChessActivity中首先将用户界面显示成欢迎界面WelcomeView。
(2)在显示欢迎界面的同时,启动WelcomeViewThread线程生成欢迎界面动画。
(3)当玩家单击“菜单”按钮时将进入菜单界面MenuView,在菜单界面会根据玩家的不同选择执行不同的操作。
(4)当玩家单击“帮助”菜单时,将进入帮助界面HelpView。
(5)而当玩家单击开始游戏菜单时,进入的将是游戏界面GameView,进入游戏界面的同时启动TimeThread线程计算玩家的思考时间。
(6)当玩家或者电脑走棋时,会根据规则类GuiZe进行判断,然后产生一个走法ChessMove。
(7)当游戏过程中,玩家同样可以随时单击“退出”按钮来返回到菜单界面。
3.2各个类的简要介绍
(1)共有类
Activity的实现类ChessActivity,该类是通过扩展基类Activity得到的,是整个游戏的控制器,也是整个游戏程序的入口。
(2)辅助界面相关类
欢迎界面类WelcomeView:
该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作。
欢迎界面动画生成类WelcomeViewThread:
该类是为欢迎界面服务的,主要是通过更改欢迎界面中图片的坐标来实现动画效果。
帮助界面类HelpView:
该类为帮助界面的实现类。
菜单界面类MenuView:
该类为菜单界面的实现类,负责绘制菜单界面以及对菜单界面的屏幕进行监听。
图3.2.1欢迎界面
(3)游戏界面相关类
游戏界面类GameView:
该类为游戏程序中最重要的类,负责绘制游戏过程中所有的信息,如棋盘、棋子、各个按钮以及胜利或失败菜单等。
象棋规则类GuiZe:
该类是象棋规则的实现类,其中包含所有棋子的走棋规则以及当前棋牌某方的所有可能走法。
思考时间线程TimeThread:
该类为计算思考时间的线程类。
走法类ChessMove:
该类为棋子的走法的封装类,包含棋子的名称、出发点以及目标点。
图3.2.2游戏界面
3.3游戏中象棋规则类的实现
packagewyf.ytl;
importjava.util.ArrayList;//引入相关包
importjava.util.List;
/**
*
*该类是象棋的规则类,其他类通过调用canMove方法给出起始位置与结束位置
*其他类通过调用searchAGoodMove方法得到最当然棋局最好的走法
*而其中的allPossibleMoves方法得到的是当前棋局的所有的走法
*
*/
publicclassGuiZe{
booleanisRedGo=false;//是不是红方走棋
publicbooleancanMove(int[][]qizi,intfromY,intfromX,inttoY,inttoX){
inti=0;
intj=0;
intmoveChessID;//起始位置是什么棋子
inttargetID;//目的地是什么棋子或空地
if(toX<0){//当左边出界时
returnfalse;
}
if(toX>8){//当右边出界时
returnfalse;
}
if(toY<0){//当上边出界时
returnfalse;
}
if(toY>9){//当下边出界时
returnfalse;
}
if(fromX==toX&&fromY==toY){//目的地与出发点相同,
returnfalse;
}
moveChessID=qizi[fromY][fromX];//得到起始棋子
targetID=qizi[toY][toX];//得带终点棋子
if(isSameSide(moveChessID,targetID)){//如果是同一阵营的
returnfalse;
}
switch(moveChessID){
case1:
//黑帅
if(toY>2||toX<3||toX>5){//出了九宫格
returnfalse;
}
if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步
returnfalse;
}
break;
case5:
//黑士
if(toY>2||toX<3||toX>5){//出了九宫格
returnfalse;
}
if(Math.abs(fromY-toY)!
=1||Math.abs(toX-fromX)!
=1){//走斜线
returnfalse;
}
break;
case6:
//黑象
if(toY>4){//不能过河
returnfalse;
}
if(Math.abs(fromX-toX)!
=2||Math.abs(fromY-toY)!
=2){//相走“田”字
returnfalse;
}
if(qizi[(fromY+toY)/2][(fromX+toX)/2]!
=0){
returnfalse;//相眼处有棋子
}
break;
case7:
//黑兵
if(toY returnfalse; } if(fromY<5&&fromY==toY){//过河前只能直走 returnfalse; } if(toY-fromY+Math.abs(toX-fromX)>1){//只能走一步,并且是直线 returnfalse; } break; case8: //红将 if(toY<7||toX>5||toX<3){//出了九宫格 returnfalse; } if((Math.abs(fromY-toY)+Math.abs(toX-fromX))>1){//只能走一步 returnfalse; } break; case2: //黑车 case9: //红车 if(fromY! =toY&&fromX! =toX){//只能走直线 returnfalse; } if(fromY==toY){//走横线 if(fromX for(i=fromX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } else{//向左走 for(i=toX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } } else{//走的是竖线 if(fromY for(j=fromY+1;j if(qizi[j][fromX]! =0) returnfalse;//返回false } } else{//想左走 for(j=toY+1;j if(qizi[j][fromX]! =0) returnfalse;//返回false } } } break; case10: //红马 case3: //黑马 if(! ((Math.abs(toX-fromX)==1&&Math.abs(toY-fromY)==2) ||(Math.abs(toX-fromX)==2&&Math.abs(toY-fromY)==1))){ returnfalse;//马走的不是日字时 } if(toX-fromX==2){//向右走 i=fromX+1;//移动 j=fromY; } elseif(fromX-toX==2){//向左走 i=fromX-1;//移动 j=fromY; } elseif(toY-fromY==2){//向下走 i=fromX;//移动 j=fromY+1; } elseif(fromY-toY==2){//向上走 i=fromX;//移动 j=fromY-1; } if(qizi[j][i]! =0) returnfalse;//绊马腿 break; case11: //红砲 case4: //黑炮 if(fromY! =toY&&fromX! =toX){//炮走直线 returnfalse;//返回false } if(qizi[toY][toX]==0){//不吃子时 if(fromY==toY){//横线 if(fromX for(i=fromX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } else{//向走走 for(i=toX+1;i if(qizi[fromY][i]! =0){ returnfalse;//返回false } } } } else{//竖线 if(fromY for(j=fromY+1;j if(qizi[j][fromX]! =0){ returnfalse;//返回false } } } else{//向上走 for(j=toY+1;j if(qizi[j][fromX]! =0){ returnfalse;//返回false } } } } } else{//吃子时 intcount=0; if(fromY==toY){//走的是横线 if(fromX for(i=fromX+1;i if(qizi[fromY][i]! =0){ count++; } } if(count! =1){ returnfalse;//返回false } } else{//向左走 for(i=toX+1;i if(qizi[fromY][i]! =0){ count++; } } if(count! =1){ returnfalse;//返回false } } } else{//走的是竖线 if(fromY for(j=fromY+1;j if(qizi[j][fromX]! =0){ count++;//返回false } } if(count! =1){ returnfalse;//返回false } } else{//向上走 for(j=toY+1;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Android 操作系统 中国象棋 手机 游戏