基于Android的中国象棋毕业设计


    基Android中国象棋毕业设计


    现智操作系统迅速发展智手机智移动设备广泛普智操作系统应软件开发需服务广阔发展前景Android开放性体系架构仅具非常开发调试环境支持种扩展户体验包括丰富图形组件媒体支持功强浏览器软件业员说Android台具限吸引力方面Android系统基Linux核开发层应软件基JAVA技术开发JAVA门面象开发语言拥更移植性健壮性安全性性化设计更方便
    文分析讨Android应软件开发技术原理基础开发出基Android台中国象棋弈游戏软件通Android系统架构应开发进行初步研究设计款中国象棋单机版游戏系统进行详细需求分析基础确定系统功性求游戏欢迎界面屏幕绘制棋盘绘制布局算法等进行设计终实现界面友高效稳定富娱乐性战性Android应软件

    关键词:Android系统 中国象棋 JAVA 智手机












    Abstract

    Now the smartphone operating system is developed rapidly making smart phones and other smart mobile devices widely available so the smart operating system and application software development services required will have broad prospects for development The Android is an open architecture not only has a very good development and debugging environment but also supports a variety of scalable user experience including rich graphical components multimedia support and powerful browser Therefore for software professionals Android platform has unlimited appeal On the other hand Android system is developed based on the Linux kernel and his upper application software is based on JAVA technology development JAVA is an objectoriented development language with better portabilityrobustness and security for the userfriendly design is more convenient
    This paper discusses the analysis of Android application development technology principleon this basis for the users to develop Chinese Chess software that is based on Android system and that is just for one vs one Through the Android system architecture and application development for a preliminary study to design a standalone version of Chinese chess game In the system it needs to conduct a detailed analysis to determine the system's functional and performance requirements carries on the design to the game's welcome screen screen painting drawing board layout algorithm and ultimately to achieve a userfriendly efficient and stable and rich entertainment and Battle of Android applications

    Keywords Android system Chinese chess JAVA smartphones



    目 录

    1 绪 1
    11 中国象棋背景介绍 1
    111 中国象棋历史起源 1
    112 中国象棋发展现状前景 1
    12 Android操作系统简介 2
    121 Android操作系统背景 2
    122 Android系统优势弊端 3
    123 Android操作系统现状发展前景 4
    2 Android系统架构开发环境 6
    21 Android体系结构 6
    22 Android四组件 8
    23 Android开发环境搭建 9
    231 Java JDK安装 9
    232 eclipse载 9
    233 Android开发工具安装 9
    234 Android工程建立 10
    3 中国象棋走法规实现分析 13
    31 中国象棋走法规 13
    311 棋盘棋子介绍 13
    312 中国象棋规胜负判定 14
    32 中国象棋走法分析 15
    4 中国象棋软件功界面布局 19
    41 中国象棋软件实现功 19
    42 软件布局实现 20
    421 开始游戏选项界面 20
    422 中国象棋选项界面 22
    5 中国象棋算法设计实现 24
    51 工程建立 24
    52 工程模块介绍 25
    521 类实现功 25
    522 工程中模块介绍 26
    53 中国象棋逻辑算法实现 26
    531 棋盘棋子算法分析 26
    533 棋盘棋子绘制 28
    534 棋子算法实现 30
    6 问题软件改进 32
    61 遇问题解决方法 32
    62 软件需改进 33
    结束语 34
    参考文献 35
    致谢 36
    附录 38


    1 绪
    11 中国象棋背景介绍
    111 中国象棋历史起源
    象棋应该说源汉魏晋时期围棋早三四百年刘邦斩白蛇起义项羽约定先占咸阳者王项羽牵制秦军力刘邦快便进咸阳擒获秦二世子婴始终畏惧楚霸王威敢称王驻兵霸桥等项羽时项羽军境遇满投名帐前执戟郎名韩信刘邦部然受重怒月夜出走演出幕萧月追韩信韩信拜刘邦开始项羽分庭抗礼封汉中王划治
    刘邦采韩信明修栈道暗渡陈仓计击败守卫汉中路三秦降章邯等开始项羽争夺天序曲刘邦部西项羽军交兵屡战屡败韩信部移师东采置死生战法击溃齐王陈余称代齐王刘邦解东部危封韩信齐王请求速援韩信先骄兵计引项羽深入陔布防十面埋伏举击溃项羽力路追击迫项羽刎乌江刘邦恐功高震定天削兵权仅封淮阴候许诺韩信犯错见天杀见杀见铁器杀 
    刘邦终究韩信畏惧召入宫中诬重罪限三杀令入天牢做牢期间韩信闲事想兵法传世创种游戏称玩棋教牢卒说练熟明攻战法成代名家吕出毒计韩信关黑屋里绳子吊空中竹签扎死违三杀说玩棋渐渐流传世改成象棋
    韩信说法研究透象棋深通韬略成代兵师民间象棋远围棋开展更普深受群众喜爱
    百年实践象棋北宋末定型成代模式:32枚棋子 河界棋盘帅九宫中等等中国象棋民间广流传堪称国国粹精华
    112 中国象棋发展现状前景
    现代社会科技信息时代着社会发展传统中国象棋慢慢抛弃现已处边缘化状态前老者孩子街巷吃声音已基作中国国粹什会走坡路呢?根究底觉两方面原:
    (1)国家够重视现代国家已慢慢淡化中国传统文化发展培养意识特代校园里社会中国象棋课程学安排越越少诸国家象棋队样方基没直接导致中国象棋淡忘兴趣培养传统文化说做国应该解知道特种国粹东西更应该会悲现会中国象棋特现年轻根没接触代代传承中国传统文化终会走灭亡非常怕
    (2)现代化忙已闲暇时间互相切磋实社会现状引起够买车买房娶媳妇天早出晚甚忙深夜整天赚完钱已忘记活着赚钱外享受生活已没时间放松特中国象棋种伤筋费神事更会宝贵时间浪费种事情容易时间吧更愿意花时间网玩手机旅游睡觉着社会发展中国传统文化已暇解
    展未中国象棋中国国粹会样发展呢?会会真直走灭亡呢?觉定会
    刚刚已提现代闲暇余喜欢花量时间网玩手机觉诸中国象棋类游戏发展继承机会特年手机板等移动终端突飞猛进发展软件开发行业迅速崛起进两年Android操作台年诞生出十万款手机软件目前Android手机软件数量更接百万款基涉生活方方面面中包含关中国传统文化软件单中国象棋游戏软件数量已百款已惯手机者板游戏消磨时间中国象棋软件越越受众欢迎青睐中国传统文化传承发扬幸事事展未中国象棋发展实软件行业发展移动台普特Android操作系统现已迅速崛起成智终端霸学软件开发学Android操作系统设计显非常意义时次研究宏观意义
    12 Android操作系统简介
    121 Android操作系统背景
    Android词早出现法国作家利尔亚(Auguste Villiers de lIsleAdam)1886年发表科幻说未夏娃(Lève future)中外表机器起名Android爱机器[1]
    2005年8月17日谷歌公司收购Android科技公司Android科技公司成谷歌公司旗部分包括米奇•米纳尔克里斯•怀特等拥全资子公司Android科技公司员工入谷歌公司时没知道谷歌公司什作出项收购许猜测证明谷歌正助次收购正式进入移动领域2007年11月5日谷歌公司领导开放手持设备联盟建立开始批创始成员包括Broadcom公司HTCIntelLGMarvell等公司开放手持设备联盟建立目创建更加开放移动手机环境开放手持设备联盟创建天联盟外展示第产品台搭载Linux 26核基础Android操作系统智手机 2008年12月9日新批成员加入开放手持设备联盟包括ARM华索尼爱立信等公司2010年末数显示仅正式推出两年操作系统Android已超越称霸十年诺基亚Symbian系统跃居全球受欢迎智手机台
    AndroidLogoAscender公司设计中文字Ascender公司专门制作称Droid 字体Android全身绿色机器绿色Android标志颜色采PMS 376CRGB中十六进制#A4C639绘制Android操作系统品牌象徵
    122 Android系统优势弊端
    作短时间迅速崛起产业系统必定存着系统特点较性化优势[2]表现:
    (1)开放性
      优势方面Android台首先开放性开发台允许移动终端厂商加入Android联盟中显著开放性拥更开发者着户应日益丰富崭新台快走成熟开放性Android发展言利积累气里气包括消费者厂商消费者讲受益正丰富软件资源开放台会带更竞争消费者更低价位购心仪手机
    (2)挣脱运营商束缚
      长段时间特欧美区手机应受运营商制约什功接入什网络受运营商控制iPhoneAndroid市户更加方便连接网络运营商制约减少着EDGEHSDPA2G3G移动网络逐步渡提升手机意接入网络已运营商口中笑谈
    (3)丰富硬件选择
      点Android台开放性相关Android开放性众厂商会推出千奇百怪功特色具种产品功差异特色会影响数步甚软件兼容诺基亚Symbian风格手机改苹果iPhone时Symbian中优秀软件带iPhone联系等资料更方便转移
    (4)受限制开发商
      Android台提供第三方开发商十分宽泛环境会受种条条框框阻挠想知会少新颖致软件会诞生两面性血腥暴力情色方面程序游戏控制正留Android难题
    (5)缝结合Google应
      叱咤互联网Google已走10年度历史搜索巨全面互联网渗透Google服务图邮件搜索等已成连接户互联网重纽带Android台手机缝结合优秀Google服务
    实东西面肯定存缺点觉Android系统缺点太乱实系统身开源性关直接导致果存安全性问题户隐私容易泄露应软件市场里面APP没严格审核放面存着垃圾软件存着危险软件方面google系统升级太快厂商google步伐系统正开始普没广泛普时候新系统已发布移动终端够迅速升级导致户系统体验
    123 Android操作系统现状发展前景
    美国调查公司IDC时间2013年2月14日公布全球智手机市场调查结果显示2012年第四季度(10~12月)配备谷歌移动操作系统(OS)Android终端配备苹果iOS终端(iPhone)总出货量占全球市场911%份额两台手机总出货量2076亿部年期122亿部增加702%2012年全年出货量7224亿部市场份额年681%扩876% IDC 带 2013 年第 1 季板电脑市占率调查显示 Android 板电脑翻转年数 565 市场占率王座 IDC表示两年中AndroidiOS总份额约超50%两强体制日益巩固
    单独2012年第四季度 Android产品出货量增加88%1598亿部份额701%iOS产品出货量增加292%4780万部份额210%全年出货量方面Android产品4971亿部iOS产品1359亿部
    推动Android终端出货量增加三星电子2012年全年Android终端出货量中三星终端例42%IDC调查显示Android终端供货量中拥两位数份额厂商三星部分厂商份额1%方面着价格尺寸设计异种终端面世消费者选择范围扩IDC分析正推动Android终端爆发性增长原
    iOS终端出货量单季度全年均实现两位数增长气然旺盛OS相增长速度显较慢IDC称原2012年第二季度供货量季度减少第三季度没幅增加IDC预测苹果维持增长会2013年中期投放iPhone新机型
    OS方面排第三位黑莓(BlackBerry)2012年第四季度出货量740万部份额32%微软Windows PhoneWindows Mobile第四季度出货量600万部份额26%黑莓微软分2013年1月2012年第四季度发布新OSIDC项目理Ryan Reith预测称数年会诞生具影响力新势力新OS许会陷入激烈市场竞争台样化消费者通信运营商说必需
    说Android操作系统直呈现出增长趋势现已超越iphone成智移动终端霸现厂商常性发布非常具性价配置相高端具吸引力智手机较众化Android操作系统发展优势Android 43Android50发布想Android肯定会做出系统优化增加特色实功Android发展言锦添花
    Android会直保持霸位直增长?认定受Android击Android分庭抗礼操作系统IOS准备改变战略准备段时间推出新操作系统IOS准备发布廉价版尺寸iphoneAndroid击
    windows phone操作系统作起秀正追赶势头越越更慢慢开始接受新兴操作系统说火狐操作系统三星刚刚发布Tizen操作系统等等目前太Android构成威胁少会受影响况科技发展日新月异难说年更操作系统诞生说定说物竞天择进退霸位总者居Android做更长久立败


    2 Android系统架构开发环境
    21 Android体系结构
    Android系统架构操作系统样采分层架构[3]架构图(图21)Android结构分四层高层低层分应层(Application Level)应框架层(Application Frameworks)系统运行库层(Libraries and Android Runtime Level)Linux核层(Linux Kernel Level)面层做介绍:

    图21 Android系统框架
    (1)应层(Application Level)
    应层户交互层次户见应户操作众应开发者开发应(第三方应)Google开发Android时应层绑定核心应Email客户端SMS短消息程序日历图桌面(Home)浏览器(Browers)联系(Contacts)电话(Phone)通话记录等类应基通Java语言编写独立够完成某功应程序开发员应框架提供API编写应程序普通开发员做事情开应层程序提供该广消费者
    (2)应框架层(Application Frameworks)
    Android系统中核心部分集中体现Android系统设计思想应框架层提供组件包括活动理器(Avtivity Manager)窗口理器(Window Manager)容提供器(Content Providers)视图系统(View System)包理器(Package Manager)等等开发者言框架层直观体现SDK通系列Java功模块实现应需功普通开发者Android基应程序系统APIAndroid应框架中模块复种服务复理解机制开发员更更轻松开发出优秀Android应开发程中常基框架组件:
    活动理(Activity Manager)Activity理着应程序生命周期控制着应导航 扮演控制器角色Activity类似Windows应中wendow般应通Activity交互构成
    窗口理(Window Manager)理启动窗口
    容提供者(Content Providers)听起点抽象通俗理解Content Provider 提供 种服务通种服务应程序间实现数互相 访问享通讯录存储种服务应访问通讯录中存储联系信息
    视图系统(View System)View组件包括Button(钮)EidtView(文框)TextView(标 签)List(列表)等等灵活运组件快速方便创建良户交互界面
    包理(Package Manager)理安装Android系统应程序
    外服务框架组件资源理(Resource Manager)消息通知理(Notification Manager)位置理(Location Manager)电话理(Telephoney Manager)等等
    (3)系统运行库层(Libraries and Android Runtime Level)
    该层CC++库提供底层支持包括Bionic系统C库(C语言标准库系统底层库)媒体库(MediaFramework)SGL(2D图形引擎库)SSL(位TCPIP协议种应层协议间提供数通信支持)OpenGL ES 10(3D效果支持)SQLite(关系数库)Webkit(Web浏览器引擎)FreeType(位图bitmap矢量图vector)
    Java程序运行台样实现Java程序运行阶段二次编译Android提供运行时支撑Android运行时Java核心类库虚拟机Dalvik构成JAVA核心类库涵盖Android框架层应层基础Java库包括Android象库文件理库网络通信库等DalvikAndroid量身造Java虚拟机负责动态解析执行应分配空间理象生命周期等工作
    (4)Linux核层(Linux Kernel Level)
    AndroidLinux核层基LInux Kernel 26版Linux核层作硬件软件栈间抽象层软件栈视角Linux核硬件核层提供驱动:显示驱动(Display Driver)键盘驱动(Keyboard Driver)Flash存驱动(Flash Memory Driver)相机驱动(Camera Driver)音频驱动(Audio Driver)蓝牙驱动(Bluetooth Driver基IEEE 802151)WiFi驱动Binder IPC驱动(Android特殊驱动程序具单独设备节点提供进程间通信)Power Management(电源理)
    22 Android四组件
    Android四基组件分ActivityService服务Content Provider(容提供者)BroadcastReceiver(广播接收器)[4]
    (1)Activity(活动)Android 中Activity程序根应程序显示层程序流程运行Activity 中Activity算开发者遇频繁Android 中基模块般Android 应Activity 组成Activity 间进行相互跳转画面应应程序会Activity类扩展ActivityViews构建UI显示信息响应户行
    (2)Services(服务)Service Android 系统中种组件Activity 级差运行台运行组件进行交互Service 没界面长生命周期代码Service种程序运行长时间没户界面
    (3)Content Provider(容提供者)Content Provider Android提供第三方应数访问方案提供享数存储Android中数保护严密放SD卡中数应持数库文件等容允许直接访问Content Provider理享应程序数库应程序间Content Provider享数首选方式意味着配置Content Provider存取应程序者通应程序暴露Content Provider存取数
    (4)BroadcastReceiver(广播接收器)Android 中Broadcast种广泛运应程序间传输信息机制BroadcastReceiver 发送出Broadcast进行滤接受响应类组件BroadcastReceiver 应外部事件做出响应
    23 Android开发环境搭建
    231 Java JDK安装
    开发前需开发环境进行搭建配置中JDK安装:
    (1)载新版JDK载址:
     httpwwworaclecomtechnetworkjavajavasedownloadsindexhtml
    根系统需求选择相应载[1]
    (2)载完点击安装安装英文目录面
    (3)JDK安装完成命令窗口运行编译JAVA程序话需环境变量做设置eclipse作JAVA开发环境需设置环境变量
    Java JDK安装完毕
    232 eclipse载
    eclipse方法:
    (1)载新版eclipse载址:
      httpwwweclipseorgdownloads
    进入载页面选择Eclipse IDE for java EE Developers 进行载[5]
    (2)eclipse需安装载完成解压缩然点击eclipseexe直接运行第次运行时需设置工作空间
    233 Android开发工具安装
    JAVA运行环境安装需安装Android相关开发插件方法:
    (1)Android SDK载设置
    根开发需载相应SDK版载址:
    httpwwwicewalkerscomandroidsdk3693releaseshtml
    (2)载完成解压缩开eclipse然eclipse标题栏次选择:Window →Preference→Android点击Browse选择刚刚载Android SDK路径然点击OK[6]图22示:

    图22 添加Android SDK
    (3)完成第(2)步eclipse标题栏次选择:Window →Android SDK Manager弹出窗口中选择需开发Android开发包选择全选图23示果需更新Android开发包里更新

    图23 Android SDK理更新
    样Android开发工具安装全部完成现准备工作已做现需eclipse里面新建工程然里面开发行
    234 Android工程建立
    前面已做准备样eclipse面新建Android工程样新建工程Android虚拟机运行起呢?面详细介绍具体步骤[5]
    (1)新建Android工程eclipse标题栏面次选择File→New→Android Application Project(直接点击工具栏快捷键)然弹出窗口中填程序名工程名包名选择需开发Android API版选择Android233开发版图24示写点击Next钮进行配置直接点击Finish钮完成工程建立

    图24 Android工程建立
    (2)Android工程建需建立Android虚拟设备运行工程建立Android虚拟设备方法步骤:选择Window→Android Virtual Device Manager弹出窗口图25:

    图25 Android虚拟设备理
    选择右边New钮弹出窗口中设置Android虚拟设备配置选择需运行Android系统版图26示点OK

    图26 Android虚拟设备创建
    (3)虚拟设备建立运行刚刚建立Android工程工程右键然选择Run As→Android Application程序错eclipse会启动刚刚创建Android虚拟设备智手机样首选会漫长开机开机解锁刚刚程序运行
    般言应程序开发需弄移动设备进行安装测试应程序样弄手机呢?方法实简单需开手机开发员调试功然USB连接电脑刚样方法运行程序时运行前选择移动设备进行运行种方法运行程序右键然选择Android Tools→ Export Unsigned Application PackageAPK文件导出电脑者手机然手机进行安装测试


    3 中国象棋走法规实现分析
    31 中国象棋走法规
    311 棋盘棋子介绍
    中国象棋棋盘棋子组成面详细介绍两部分
    (1)棋盘
    棋子活动场做棋盘长方形面绘九条行竖线十条行横线相交组成九十交叉点棋子摆交叉点中间第五第六两横线间未画竖线空白带称河界整棋盘河界分相等两部分两方帅坐镇画"米字方格方做九宫图31示

    图31 中国象棋棋盘棋子
    (2)棋子
    中国象棋棋子三十二分红方黑方两组十六弈双方执组兵种样分七种:
      红方:帅仕相車馬砲兵
      黑方:士象車馬炮卒
    中帅仕士相象兵卒作完全相仅仅区分红棋黑棋
    312 中国象棋规胜负判定
    俗话说矩成方圆作成熟游戏肯定会规判定方法中国象棋规判定方法:
    (1)局时执红棋方先走双方轮流走着直分出胜负局终
      轮走棋方某棋子交叉点走交叉点者吃掉方棋子占领交叉点算走着双方走着称回合
    (2)中国象棋棋子走法
    帅():帅棋中首脑双方竭力争夺目标九宫活动左右次走动竖线横线走动格帅直线直接面否走方判负
      仕(士):仕(士)帅()贴身保镖九宫走动行棋路径九宫斜线
      相(象):相(象)作防守保护帅()走法次循角线走两格俗称象走田相(象)活动范围限河界方阵河果走田字中央棋子走俗称塞象眼
      车:车象棋中威力横线竖线均行走子阻拦步数受限制车控制十七点车十子寒称
      炮:炮吃子时候走动车完全相
      马:马走动方法直斜先横着直着走格然斜着走角线俗称马走日马次走选择点达四周八点八面威风说果方棋子挡住马法走俗称蹩马腿
      兵(卒):兵(卒)未河前前步步走河退外允许左右移动次步
    (3)吃子
    棋子走动时果目标位置方棋子方棋子出棋盘换棋子(吃子)炮吃子方式子:炮吃子间必须隔棋子进行跳吃俗称架炮炮隔子
    (4)胜负判定
    局时方出现列情况算输棋方胜
    ①帅()方死方军法应
    ②帅()军法避免方(帅)直接面
    ③困毙未方军方已棋走动
    ④封棋着法误
    ⑤走棋违犯禁例应变着变方长变长方算输
    ⑥局棋中单方面出现第三次违例
    ⑦宣布认输
    ⑧违犯纪律判输棋
    出现列情况棋:
    ①双方均取胜简单局势
    ②方提议作方表示意
    ③双方走棋出现循环反复三次符合棋例中变作关规定
    ④符合然限着回合规定连续规定回合中双方没吃
    棋子
    32 中国象棋走法分析
    明白中国象棋走法规需分析样棋盘实现中国象棋走法
    (1)帅()走法:

    图32 帅()走法图
    帅()走法图32示帅双方首脑指挥者时棋双方目标死方帅帅位两士中间行走九宫格中九宫格中走横者竖直线斜走次走步旦帅者吃掉游戏结束
    (2)士(仕)走法:

    图33 士(仕)走法图
    图32示士(仕)护卫保护帅()士(仕)走动范围九宫格士(仕)走斜线横竖走次走步图出士(仕)走动范围实际5位置
    (3)相(象)走法:

    图34 相(象)走法
    图34示相(象)走法着角线走两说相(象)走田特殊果象走斜角中间棋子(象眼)图中红色圈中棋子相(象)堵住走方位方(图中4位置走)实现时需先判断象眼处否棋子相(象)方走棋河样实相(象)走方实7
    (4)马走法:

    图35 马走法
    马走法图35示俗话说马踏日说马走日字走日字角线然日字横竖种特殊情况果马脚处棋子话马走日字图红色圈蹩马腿情况时马走1位置算法实现时应首先判断马脚出否棋子走
    (5)车走法:

    图36 车走法
    图36示整中国象棋中车走法时杀伤力整棋盘车横竖意走动者吃子车走横线者竖线面没棋子阻挡然方棋子干掉
    (6)炮走法:

    图37 炮走法
    图37示炮行走时走法规车走法样走中间没棋子阻挡意横直撞吃子时炮吃子需吃子中间棋子作炮架子时够轰掉方棋子没炮架子时走棋吃子然炮架子方棋子棋子算法实现时想吃子首先判断中间否炮架子没者够吃子
    (7)兵(卒)走法:

    图38 兵(卒)走法
    图38示兵(卒)走法兵(卒)走法分河前河河前兵(卒)前直走走步够退兵(卒)河够横走够前直走时走步然够退算法实现时需判断河前河必须设定前走
    棋子走法中符合棋子走法规需判断走位置否棋子棋子需判断枚棋子方棋子棋子棋子落子方棋子时方棋子吃掉(炮外)








    4 中国象棋软件功界面布局
    41 中国象棋软件实现功
    次设计中国象棋弈版单屏设计实现功较简单设计复杂相机弈言设计需机器走棋优算法相双屏弈说设计需实现蓝牙者WiFi通讯连接功需联网弈说设计够基实现中国象棋走法设计设计较简单软件界面美化做
    Android软件开发中界面美化重体现性化点户软件第映首先界面次功Android组件中提供布局方法开发者轻松入手设计出理想界面面介绍设计中国象棋软件功
    设计实现功:
    (1)进入软件首先欢迎提示体现性化细节方面
    (2)软件第界面中中国象棋帮助退出游戏选项点击中国象棋进入开始游戏选项点击帮助钮弹出帮助菜单信息里面介绍软件操作游戏玩法规点击退出游戏时弹出退出窗口户选择否退出
    (3)点击中国象棋钮进入开始游戏选项进入第二级菜单里面红方黑方选项钮提示户选择里户选择红方者黑方进行游戏
    (4)选红方者黑方正式进入游戏中进入红方先走棋户点击需走棋子时会相应光标提示
    (5)游戏结束吃掉方帅()时弹出红方者黑方胜利消息然游戏结束
    整软件功流程图:

    图41 软件功模块流程图
    42 软件布局实现[7]
    421 开始游戏选项界面
    开始游戏选项具体设计:
    (1)开始欢迎提示Android开发中添加TextView文框文框容设置成循环滚动形式达显示欢迎提示容代码:

    (2)设置中国象棋帮助退出钮第页面布局中添加3Button钮Button面设置钮属性实现功链接代码:


    中chessBtn实现点击中国象棋钮开始游戏函数函数体:

    exitBtn实现退出游戏函数点击钮时弹出窗口提示户否退出函数代码:

    helpBtn功:点击钮时跳出窗口显示帮助信息点击确定钮返回界面实现代码:

    422 中国象棋选项界面
    第界面中点击中国象棋进入第二选择界面里户选择操作红方黑方样添加两RadioButton实现两者选择功代码:

    界面运行效果图开始欢迎界面图42示帮助窗口图43示退出选项图44示开始前选择界面图45示

    图42 开始欢迎选项界面 图43 帮助窗口

    图44 退出选项 45 开始前选择界面

















    5 中国象棋算法设计实现
    51 工程建立
    第二章中已Android工程开发环境搭建工程建立做详细介绍现建立中国象棋弈工程实现中国象棋设计
    (1)eclipse新建Android工程工程名字命名中国象棋弈取Package包名字huangchao 面建立ChessActivity类类功目实现进入软件中国象棋帮助退出游戏三钮功实现代码函数421节中已介绍游戏开始前必须实现功
    (2)工程建立Package包取名huangchaohui包先需建立类实现中国象棋中功算法类包括:Chess01ActivityChessMoveGameViewRule类具体实现功面讲建立工程图51示:

    图51 建立工程类模块
    52 工程模块介绍
    521 类实现功
    软件开发中软件需实现功便开发检查错误增强程序移植性通常会功放类中者包中类者包均放src目录文件[8]次工程中类功:
    (1)Chess01Activity类类继承Activity类工程中作两进入软件点击中国象棋时会出现选择项选择红方黑方然选择menu键进行游戏然功选择功menu键功功进行游戏初始化类整游戏公类游戏控制器控制整游戏切屏操作详细代码见附录
    (2)ChessMove类该类棋子走法类包含什棋子(者方)起始点位置目标点位置估值时score类代码:

    (3)GameView类该类整程序核心类整游戏界面包括中国象棋棋盘棋子胜利时显示玩家家选择切换等等该界面继承SurfaceView实现SurfaceHolderCallback接口中包含刷帧线程类该类中基类引实现游戏中整界面操控该类代码详见附录
    (4)Rule类顾名思义类定义关中国象棋规类该类中类通调该类中canMove方法出起始位置结束位置该类走法核心类中国象棋中7类棋子32枚类中明确定义相关走法仅定义该棋子方规定方盘河界线代码详见附录
    522 工程中模块介绍
    工程框架图中类外模块模块具体作什呢?面详细介绍
    (1)gen目录该目录工程中需编写Android工程中尤关键类中定义方法者资源文件引文件会该文件定义较特殊点定义东西会生成R文件存放系统动生成需户进行修改工程中生成R文件工程法运行代码没错误
    (2)bin目录文件存放程序编译运行生成文件
    (3)res目录该文件子目录文件存放软件需资源文件软件布局文件中drawabledrawableldpidrawablemdpi三文件夹存放软件需资源文件图片文件声音文件者视频文件等layoutmenuvalues软件布局文件软件界面设置布局三文件进行配置
    (4)AndroidManifestxml文件关Android版配置文件
    53 中国象棋逻辑算法实现
    中国象棋实现中关键算法实现中棋盘棋子棋子走法移动范围面详细阐述实现方法
    531 棋盘棋子算法分析
    棋盘棋子算法设计:
    (1)棋盘
    棋盘设计GameView类中实现般说棋子放棋盘横竖交叉点组二维数组实现棋盘设计[9]棋盘实现图示:

    图52 中国象棋棋盘(选择黑方情况)
    图52选择黑方情况游戏中实现户意选择红方者黑方功显然两种情况样面种情况选择黑方黑方棋子置方选择红方情况时需面棋盘倒置行具体实现:

    图53 中国象棋棋盘(选择红方情况)
    图53出选择红方时红方棋子置方
    (2)棋子
    图52图53中出面实虚拟棋盘然面放虚拟棋子数字代表棋子棋子中然总32枚没边实7种棋子帅士相马车炮兵边样总实际14枚棋子需14数字代表枚棋子
    图52图53数字应棋子:1——红帅2——红车3——红马4——红炮5——红士6——红相7——红兵8——黑9——黑车10——黑马11——黑炮12——黑仕13——黑象14——黑卒棋盘方0填充0表示空位置表示位置没棋子
    棋子行走棋盘棋盘方走棋子走?样走判断算法(流程图图54):
    (1)点击棋盘时先判断红方黑方走棋
    (2)然判断点击棋盘时候否选中棋子没选中棋子
    (3)选中棋子判断选棋子红方棋子黑方棋子
    (4)选中棋子光标移动该棋子提示玩家
    (5)点击屏幕走动棋子走动时先判断点击位置否符合走动规符合走动者走位置出棋盘走动
    (6)符合棋子走动规需判定该位置否棋子没棋子走动
    (7)该位置棋子判断该棋子棋子方棋子棋子该位置走动方棋子换掉该棋子吃子
    (8)吃子需判断该棋子否帅者帅者游戏结束

    图54 棋子规走法流程图(假设红方)
    533 棋盘棋子绘制
    棋盘棋子二维数组表示进行绘制棋盘棋子绘制GameView类中实现棋盘棋子具体绘制程[10]:

    534 棋子算法实现
    棋子走法规整游戏玩法核心定义中国象棋走法规该规Rule类中实现棋子走法中均需判断棋子否出边界果出边界走棋步棋子走算法规(红方走棋例):

    关棋子走法规实现详见代码附录
    样中国象棋走法规实现整中国象棋设计已完成


    6 问题软件改进
    61 遇问题解决方法
    次设计关Android软件开发前基没关方面学应说做程中遇问题通断努力问题迎刃解典型错误:
    (1)刚开始做界面时候界面已做实现相应功出现问题分关键函数调特中国象棋钮点击中国象棋需跳第二界面进行选择界面者屏幕间进行跳转话需新建信IntentIntentAndroid开发中起着非常重作Android系统中载体者信通信Intent界面间进行跳转切换[11]
    (2)做游戏规算法程中程序没问题运行操作棋子方棋子点着没反应通交流知道出现问题原标志变量没设置游戏设置中设置标志变量初始值1红方走完棋赋值0 然轮黑方走棋次点击屏幕时先判断变量果0执行程序否执行 说点击屏幕判断现轮方走棋加标志变量 次判断手指点位置方棋子走棋
    (3)程序中出现非常引资源够识错误(R cannot be resolved to a variable)出现问题原简单程序错误程序运行 gen目录没动生成Rjava文件[12]出现问题原种Android SDK丢失者没导入import AndroidR者布局文件出错非法字符串错误通网查资料试方法知道出现错误原layout目录布局文件问题AndroidManifestxml文件出错通修改布局文件错误问题解决
    (4)游戏结束需跳出提示方胜利消息程序中调试运行没错误软件测试程中方者帅吃掉程序会出现意外停止需强制关闭错误试种方法均正确通询问学姐知道重写屏幕监听时出现错误然学姐帮助重新改正屏幕监听问题解决
    62 软件需改进
    次做中国象棋基弈弈仅限单屏操作设备间进行弈行软件需改进方
    首先基础改进成弈双屏战需软件中添加蓝牙者WiFi通讯功需设置WiFi者蓝牙状态判断设置功WiFi者蓝牙开启连接功
    次增加机战功现社会忙碌说想找起棋难样增加机弈功显尤必增加机弈增加机器算法机器算法难部分需象棋走法规增加走法估值计算计算出利走法需新建关机器走法类
    更深步开发开发出基移动运营商联网战中国象棋肯定需增加技术通讯协议者聊天功等等
    性化方面考虑点棋时候增加悔棋时间限制走棋提示者播放音效等功总明白中原理掌握基础知识加创新头脑想开发出更东西


















    结束语
    三月份开始直现历时三月毕业设计觉整学里面做意义件事情意义件事结束学四年旅程尝更意义结束呢
    首先次毕业设计中真真体会学知识种欣慰成感记刚入学校时候专业底学什事什工作等问题基太解迷迷糊糊现果问样问题实旧出明确答案说:学硬件设计软件设计实充分暴露缺点——学四年肯定没学点否认感觉四年快转眼间马快分离时刻回忆起四年风风雨雨感觉四年中没静心认认真真做件事情天抱着酱油心态现想想确实遗憾惋惜次毕业设计认真面开始设计题目感陌生茫然毕竟Android前没接触东西更说Android系统面开发软件陌生开始断书翻阅资料网视频学现已开始慢慢熟悉Android熟悉软件开发流程模块感觉欣慰
    次Android软件开发中遇问题解决问题极增强遇问题解决问题力增强信心豪感解决某问题时力量限时交流事半功倍问问题交流学表现前欠缺
    次学Android知识工作帮助少进步加深JAVA知识理解学Android软件开发流程初步解想Android技术短时间坐霸位发展前景肯定毋庸置疑说学门技术发展百利害更况找工作关Android软件开发明白门技术博精深点道行更浅浅说需学东西路长条路断拼搏努力社会席否会淘汰
    学时间里认认真真做件说具突破性事情觉价值深刻体会踏实认真怕吃苦坚持懈态度精神生发展成长关重想学四年交代画圆满句号

    参考文献

    [1] Rick RogersJohn LombardoZigurd MednieksGBlake Meike Android Application Development[M]O'Reilly Media May 2009
    [2] Sayed HanshimiPro Android 3[M]APRESSNEW2010
    [3] CSDN博客园Android项目结构体系结构
    httpblogcsdnnetwangxinfeng1990articledetails7385285 20120322
    [4] 郭宏志编著Android应开发详解[M]北京:电子工业出版社2010年
    [5] 刘新编Java开发技术全[M]北京:清华学出版社2009年
    [6] 佘志龙著Google Android SDK开发范例全[M](第三版)北京:民邮电出版社2011年
    [7] 唐仕编Java程序设计[M](修订)北京:清华学出版社2007年
    [8] E2ECloud工作室编深入浅出Google Android[M]北京:民邮电出版社2009年8月
    [9] 李兴华编著Java开发实战典[M]北京清华学出社2009年8月
    [10] Vladimir Silva Pro Android Games[M] APRESS2009
    [11] Android开发网全面Android Intent机制讲解
    httpwwwjizhuomicomandroidcourse333html 20121226
    [12] 杨丰盛编著Android应开发揭秘[M]北京:机械工业出版社2010年













    致谢

    天认真努力毕业设计终搞完毕业设计程中遇问题导师学姐周围学热心帮助困难解决非常感谢家帮忙谢谢家支持果没援手想难规定时间完成务
    里首先感谢导师XX老师没积极督促认真勤快完成毕业设计许前酱油蒙混关天工作忙带着组研究生开始文选题开题报告面软件设计完成星期细心严肃教导督促完成务帮助检查修正设计中存问题足想您说声:老师您辛苦真心谢谢您时您科研认真负责态度精神影响够认真负责完成毕业设计学旅程画圆满句号
    真心感谢学姐刘学姐没帮助毕业设计做遇问题时候遇问题时总认真耐心辅导帮助解决种疑难问题实忙准备毕业答辩耐烦帮助帮查资料真非常感谢谢谢
    XX学四年学生涯中遇老师然连名字必须谢谢新生进校时步教导课学新知识技掌握专业技断成长断进步时生活中断指导帮助初懵懂少年成长现社会接班
    时直群电信XX班兄弟姐妹直坚强盾欢乐时悲伤时困苦难耐时家庭分彼生活起然相互关相互玩耍份情谊生难忘怀永远会记里提基友舍友前黄家湖南十三125现青山学三408直起辈子兄弟时刻禁想起离敬爱柯总免遗憾伤感然已会永远想念祝福相信定会重逢日时候酒言欢醉
    敬爱恋恋舍美丽校园然离说声:爱亲爱XX学心中永远漂亮四年程中见证美快乐时光身仅留汗水抹泪水您母亲抚育已产生赖永远母亲谢谢抚养会常
    古情伤离离时候总千言万语怕见相信家缘会相聚天感谢帮助支持朋友永远会记祝福




























    附录
    中国象棋类代码

    ChessActivity类(界面美化类):
    public class ChessActivity extends Activity {
    private Button chessBtn
    private Button exitBtn
    private Button helpBtn
    public void onCreate(Bundle savedInstanceState) {
    superonCreate(savedInstanceState)
    程序标题栏
    superrequestWindowFeature(WindowFEATURE_NO_TITLE)
    supersetRequestedOrientation(ActivityInfoSCREEN_ORIENTATION_PORTRAIT)
    系统消息提示栏游戏全屏
    supergetWindow()setFlags(WindowManagerLayoutParamsFLAG_FULLSCREEN WindowManagerLayoutParamsFLAG_FULLSCREEN)
    setContentView(Rlayoutmain)
    chessBtn(Button)findViewById(RidchessBtn)
    exitBtn(Button)findViewById(RidexitBtn)
    helpBtn(Button)findViewById(RidhelpBtn)
    final AlertDialogBuilder builder new AlertDialogBuilder(this)
    chessBtnsetOnClickListener(new OnClickListener(){
    public void onClick(View v){
    Intent intent new Intent()构造信界面间跳转
    intentsetClass(ChessActivitythis Chess01Activityclass)
    ChessActivitythisstartActivity(intent)
    }
    })
    点击退出钮提示否退出 :返回欢迎界面 否:继续游戏
    exitBtnsetOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    buildersetMessage(Rstringexit_msg)
    AlertDialog alert buildersetNegativeButton(Rstringcancel_btn
    new androidcontentDialogInterfaceOnClickListener() {
    public void onClick(DialogInterface arg0int arg1) {}
    })setPositiveButton(Rstringok_btn
    new androidcontentDialogInterfaceOnClickListener() {
    public void onClick(DialogInterface arg0int arg1) {
    finish()
    }
    })create()
    alertshow()
    }
    })
    helpBtnsetOnClickListener(new OnClickListener() {
    public void onClick(View v) {
    AlertDialog alert buildersetMessage(规次红方棋子先走\n帅\n移动范围:王宫移动 )
    setPositiveButton(确定 new DialogInterfaceOnClickListener(){
    public void onClick(DialogInterface dialog int which) {
    }

    })show()
    alertshow()
    }
    })
    }
    }

    Chess01Activity类(初始化游戏界面类):
    public class Chess01Activity extends Activity {
    public static final String DEVICE_NAME device_name
    public static final String TOAST toast
    public static boolean sidefalse 选择红方棋子黑方棋子false代表黑方
    public static int returnID
    public static boolean myFlag true
    private RadioGroup select null
    private RadioButton red null
    private RadioButton black null
    public static int subWidth0
    public static int subHeight0
    public static int fullWidth0
    public static int fullHeight0
    public static int realHeight0
    public void onCreate(Bundle savedInstanceState) {重写onCreate
    superonCreate(savedInstanceState)
    supersetRequestedOrientation(ActivityInfoSCREEN_ORIENTATION_PORTRAIT) 全屏
    requestWindowFeature(WindowFEATURE_NO_TITLE) getWindow()setFlags(WindowManagerLayoutParamsFLAG_FULLSCREEN
    WindowManagerLayoutParamsFLAG_FULLSCREEN)
    setContentView(Rlayoutchess)
    select(RadioGroup)findViewById(Ridselect)
    red(RadioButton)findViewById(Ridred)
    black(RadioButton)findViewById(Ridblack)
    selectsetOnCheckedChangeListener(new RadioGroupOnCheckedChangeListener(){
    public void onCheckedChanged(RadioGroup group int checkedId) {
    if(redisChecked()){
    side true
    }
    if(blackisChecked()){
    side false
    }
    }
    })
    DisplayMetrics dmnew DisplayMetrics()获取屏幕 长宽
    getWindowManager()getDefaultDisplay()getMetrics(dm)
    fullWidthdmwidthPixels
    fullHeightdmheightPixels
    subWidthdmwidthPixels9
    subHeightfullHeight10 铺满参数值
    realHeightfullHeight 铺满参数值
    }
    public void initGameView(){初始化游戏界面
    thissetContentView(new GameView(thisthis)) 切换游戏界面
    myFlagtrue
    GameViewfocusfalse
    GameViewwhotrue
    }
    public void onStart() {
    superonStart()
    }
    public synchronized void onResume() {
    superonResume()
    }
    public synchronized void onPause() {
    superonPause()
    }
    public void onStop() {
    superonStop()
    }
    public void onDestroy() {
    myFlag false
    side false
    GameViewwhotrue
    GameViewfocusfalse
    superonDestroy()
    }
    public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater getMenuInflater()
    inflaterinflate(Rmenuoption_menu menu)
    return true
    }
    public boolean onOptionsItemSelected(MenuItem item) {
    switch (itemgetItemId()) {
    case Ridscan
    initGameView()
    }
    return false
    }
    }

    ChessMove类(棋子走法类):
    public class ChessMove {
    int ChessID表明什棋子
    int fromX起始坐标
    int fromY
    int toX目坐标
    int toY
    int score值估值时会
    public ChessMove(int ChessID int fromXint fromYint toXint toYint score){构造器
    thisChessID ChessID棋子类型
    thisfromX fromX棋子起始坐标
    thisfromY fromY
    thistoX toX棋子目标点x坐标
    thistoY toY棋子目标点y坐标
    thisscore score
    }
    }

    GameView类(棋盘棋子绘制类):
    public class GameView extends SurfaceView implements SurfaceHolderCallback{
    private static final Context Activity null
    private TutorialThread thread刷帧线程
    MyThread myThread
    static int width
    static int height
    static int fullWidth
    static int fullHeight
    static int realHeight
    static int offsetHeight
    static int befX
    static int befY
    static int curX
    static int curY
    static boolean flagBackfalse
    Chess01Activity activity声明Activity引
    Bitmap qipan棋盘
    Paint paint画笔
    static boolean who truewhotrue时轮黑方whofalse轮红方
    static boolean focus false前否选中棋子
    static int selectqizi 0 然选中棋子
    static int startI startJ记录前棋子开始位置
    static int endI endJ记录前棋子目标位置
    Bitmap[] heiZi new Bitmap[7]黑子图片数组
    Bitmap[] hongZi new Bitmap[7]红子图片数组
    Bitmap back
    Bitmap pnull
    Bitmap back2
    static Rule guiZe规类
    int status 0游戏状态0游戏中1胜利 2失败
    private Canvas canvas
    static int[][] qizi
    public GameView(Context contextChess01Activity activity) {构造器
    super(context)
    thisactivity activityActivity引
    widthChess01ActivitysubWidth
    heightChess01ActivitysubHeight
    fullWidthChess01ActivityfullWidth
    fullHeightChess01ActivityfullHeight
    realHeightChess01ActivityrealHeight
    offsetHeightfullHeightrealHeight
    getHolder()addCallback(this)
    thisthread new TutorialThread(getHolder() this)初始化刷帧线程
    init()初始化需资源
    guiZe new Rule()初始化规类
    myThread new MyThread()
    myThreadstart()
    }
    public void init(){初始化方法
    paint new Paint()初始化画笔
    qipan BitmapFactorydecodeResource(getResources() Rdrawableboard)棋盘图片
    back BitmapFactorydecodeResource(getResources() Rdrawablebackground)背景
    pnull BitmapFactorydecodeResource(getResources() Rdrawablepnull)
    back2BitmapFactorydecodeResource(getResources() Rdrawableback2)
    heiZi[0] BitmapFactorydecodeResource(getResources() Rdrawableblack_k)黑帅
    heiZi[1] BitmapFactorydecodeResource(getResources() Rdrawableblack_j)黑车
    heiZi[2] BitmapFactorydecodeResource(getResources() Rdrawableblack_m)黑马
    heiZi[3] BitmapFactorydecodeResource(getResources() Rdrawableblack_p)黑炮
    heiZi[4] BitmapFactorydecodeResource(getResources() Rdrawableblack_s)黑士
    heiZi[5] BitmapFactorydecodeResource(getResources() Rdrawableblack_x)黑象
    heiZi[6] BitmapFactorydecodeResource(getResources() Rdrawableblack_b)黑兵
    hongZi[0] BitmapFactorydecodeResource(getResources() Rdrawablered_k)红
    hongZi[1] BitmapFactorydecodeResource(getResources() Rdrawablered_j)红车
    hongZi[2] BitmapFactorydecodeResource(getResources() Rdrawablered_m)红马
    hongZi[3] BitmapFactorydecodeResource(getResources() Rdrawablered_p)红砲
    hongZi[4] BitmapFactorydecodeResource(getResources() Rdrawablered_s)红仕
    hongZi[5] BitmapFactorydecodeResource(getResources() Rdrawablered_x)红相
    hongZi[6] BitmapFactorydecodeResource(getResources() Rdrawablered_b)红卒
    if(Chess01Activitysidefalse){
    qizi new int[][]{棋盘
    {236515632} sidefalse
    {000000000}
    {040000040}
    {707070707}
    {000000000}

    {000000000} 选择黑方黑棋子显示棋盘方
    {14014014014014}
    {01100000110}
    {000000000}
    {910131281213109}
    }
    }
    else{
    qizi new int[][]{
    {910131281213109}选红方红棋子显示棋盘方
    {000000000}
    {01100000110}
    {14014014014014}
    {000000000}

    {000000000} 隐藏黑方
    {707070707}
    {040000040}
    {000000000}
    {236515632}
    }
    }

    }
    该方法定义非重写该方法死根数绘制屏幕
    public void onDraw(Canvas canvas){写绘制方法
    canvasdrawColor(ColorBLACK)
    canvasdrawBitmap(qipan null new Rect(0 offsetHeight fullWidth fullHeight) null)绘制棋盘
    for(int i0 i for(int j0 j if(flagBacktrue){ 处理光标
    if(befX>0){
    canvasdrawBitmap(back null new Rect(befY*width offsetHeight+befX*height
    (befY+1)*width offsetHeight+(befX+1)*height) paint)
    }
    canvasdrawBitmap(back null new Rect(curY*width offsetHeight+curX*height
    (curY+1)*width offsetHeight+(curX+1)*height) paint)
    }
    if(qizi[i][j] 0){
    if(qizi[i][j] 1){红帅时
    canvasdrawBitmap(heiZi[0] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 2){红车时
    canvasdrawBitmap(heiZi[1] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 3){红马时
    canvasdrawBitmap(heiZi[2] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 4){红炮时
    canvasdrawBitmap(heiZi[3] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 5){红士时
    canvasdrawBitmap(heiZi[4] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 6){红象时
    canvasdrawBitmap(heiZi[5] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 7){红兵时
    canvasdrawBitmap(heiZi[6] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 8){黑时
    canvasdrawBitmap(hongZi[0] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 9){黑车时
    canvasdrawBitmap(hongZi[1] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 10){黑马时
    canvasdrawBitmap(hongZi[2] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 11){黑砲时
    canvasdrawBitmap(hongZi[3] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 12){黑仕时
    canvasdrawBitmap(hongZi[4] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 13){黑相时
    canvasdrawBitmap(hongZi[5] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    else if(qizi[i][j] 14){黑卒时
    canvasdrawBitmap(hongZi[6] null new Rect(j*width offsetHeight+i*height
    (j+1)*width offsetHeight+(i+1)*height) paint)
    }
    }
    }
    }
    }

    该方法游戏逻辑接口接受玩家输入根点击位置前游戏状态做出相应处理需切换View时通Activity发送Handler消息处理注意取屏幕事件
    public boolean onTouchEvent(MotionEvent event) {重写屏幕监听
    if(status 1){胜利
    }
    else if(status 2){失败
    }
    游戏程中逻辑处理点击棋盘时先判断前否玩家走棋然判断然玩家否已选中棋子果没选中果前选中棋子判断点击位置空方棋子棋子空判断否走方棋子样判断否走走然吃子棋子选中该棋子
    else if(status 0){游戏中时
    if(eventgetX()>0&&eventgetX() && eventgetY()>offsetHeight && eventgetY() int i 1 j 1
    int[] pos getPos(event)根坐标换算成行列
    i pos[0]
    j pos[1]
    if(who true){果轮黑方走棋
    flagBacktrue
    if(focus false){前没选中棋子
    if(qizi[i][j] 0){点击位置棋子
    if(qizi[i][j] < 7){点击棋子面黑色棋子
    selectqizi qizi[i][j]该棋子设选中棋子
    focus true标记前选中棋子
    startI i
    startJ j
    curXi
    curYj
    befX1
    befY1
    }
    }
    }
    else{前选中棋子
    if(qizi[i][j] 0){点击位置棋子
    if(qizi[i][j] < 7){果棋子
    selectqizi qizi[i][j]该棋子设选中棋子
    startI i
    startJ j
    curXi
    curYj
    befX1
    befY1
    }
    else{果方棋子
    endI i
    endJ j保存该点
    boolean canMove guiZecanMove(qizi startI startJ endI endJ)
    if(canMove){果移动
    if(qizi[endI][endJ] 1 || qizi[endI][endJ] 8){果帅
    thissuccess()胜利
    }
    qizi[endI][endJ] qizi[startI][startJ]移动棋子
    befXcurX
    befYcurY
    curXi
    curYj
    focus false黑方移动棋子标记前没选中棋子
    qizi[startI][startJ] 0原处设空
    startI 1 原保存点
    startJ 1
    endI 1
    endJ 1
    who false黑方走完步轮红方走棋
    }
    }
    }
    end点击位置棋子
    else{果点击位置没棋子
    endI i
    endJ j
    boolean canMove guiZecanMove(qizi startI startJ endI endJ)查否走
    if(canMove){果移动
    qizi[endI][endJ] qizi[startI][startJ]移动棋子

    befXcurX
    befYcurY
    curXendI
    curYendJ
    focus false移动棋子标记前没选中棋子
    qizi[startI][startJ] 0原处置空
    startI 1 原保存点
    startJ 1
    endI 1
    endJ 1
    who false黑方走完步轮红方
    }
    }
    }end 前选中棋子
    }
    else{果红方走棋
    if(focus false){前没选中棋子
    if(qizi[i][j] 0){点击位置棋子
    if(qizi[i][j] > 7){点击棋子面红色棋子
    selectqizi qizi[i][j]该棋子设选中棋子
    focus true标记前选中棋子
    startI i
    startJ j
    curXi
    curYj
    befX1
    befY1
    }
    }
    }
    else{前选中棋子
    if(qizi[i][j] 0){点击位置棋子
    if(qizi[i][j] > 7){果棋子
    selectqizi qizi[i][j]该棋子设选中棋子
    startI i
    startJ j
    curXi
    curYj
    befX1
    befY1
    }
    else{果方棋子
    endI i
    endJ j保存该点
    boolean canMove guiZecanMove(qizi startI startJ endI endJ)
    if(canMove){果移动
    who false玩家走
    if(qizi[endI][endJ] 1 || qizi[endI][endJ] 8){果帅
    thissuccess()胜利
    }
    qizi[endI][endJ] qizi[startI][startJ]移动棋子
    befXcurX
    befYcurY
    curXi
    curYj
    focus false红方移动棋子标记前没选中棋子
    qizi[startI][startJ] 0原处设空
    startI 1 原保存点
    startJ 1
    endI 1
    endJ 1
    who true 红方走完步轮黑方走棋
    }
    }
    }
    end点击位置棋子
    else{果点击位置没棋子
    endI i
    endJ j
    boolean canMove guiZecanMove(qizi startI startJ endI endJ)查否走
    if(canMove){果移动
    qizi[endI][endJ] qizi[startI][startJ]移动棋子
    befXcurX
    befYcurY
    curXi
    curYj
    focus false移动棋子标记前没选中棋子
    qizi[startI][startJ] 0原处置空
    startI 1
    startJ 1
    endI 1
    endJ 1原保存点
    who true 红方走完步轮黑方
    }
    }
    }end 前选中棋子
    }
    }end点击位置棋盘时
    }end游戏中时
    return superonTouchEvent(event)
    }
    public int[] getPos(MotionEvent e){坐标换算成数组维数
    int[] pos new int[2]
    double x egetX()点击位置x坐标
    double y egetY()点击位置y坐标
    if(x>0 && y>offsetHeight && x pos[0] (int) ((yoffsetHeight)height)取行
    pos[1] (int)((x0)width)取列
    }
    else{点击位置棋盘时
    pos[0] 1位置设
    pos[1] 1
    }
    return pos坐标数组返回
    }
    public void success(){胜利
    status 1切换胜利状态

    }
    public void surfaceChanged(SurfaceHolder holder int format int width
    int height) {
    }
    public void surfaceCreated(SurfaceHolder holder) {重写
    thisthreadsetFlag(true)
    thisthreadstart()启动刷帧线程HOME键重启程序出问题
    }
    public void surfaceDestroyed(SurfaceHolder holder) {view释放时调
    boolean retry true
    threadsetFlag(false)停止刷帧线程
    while (retry) {
    try {
    threadjoin()
    retry false设置循环标志位false
    }
    catch (InterruptedException e) {断循环直等线程结束
    }
    }
    }
    class MyThread extends Thread{
    public void run(){
    while(Chess01ActivitymyFlag){

    try{
    sleep(50)
    }catch(Exception e){
    eprintStackTrace()
    }
    }
    flagBackfalse
    befX1
    befY1
    curX1
    curY1
    }
    }
    class TutorialThread extends Thread{刷帧线程
    private int span 50睡眠毫秒数
    private SurfaceHolder surfaceHolderSurfaceHolder引
    private GameView gameViewgameView引
    private boolean flag false循环标志位
    public TutorialThread(SurfaceHolder surfaceHolder GameView gameView) {构造器
    thissurfaceHolder surfaceHolderSurfaceHolder引
    thisgameView gameViewGameView引
    }
    public void setFlag(boolean flag) {设置循环标记
    thisflag flag
    }
    public void run() {重写方法
    Canvas c画布
    while (thisflag) {循环绘制
    c null
    try {
    c thissurfaceHolderlockCanvas(null)
    synchronized (thissurfaceHolder) {
    gameViewonDraw(c)调绘制方法
    }
    } finally {finally保证面代码定执行
    if (c null) {
    更新屏幕显示容
    thissurfaceHolderunlockCanvasAndPost(c)
    }
    }
    try{
    Threadsleep(span)睡眠span毫秒
    }catch(Exception e){会异常信息
    eprintStackTrace()印异常堆栈信息
    }
    }
    }
    }
    }

    Rule类(象棋规类):
    public class Rule {
    boolean isRedGo false红方走棋
    public boolean canMove(int[][] qizi int fromY int fromX int toY int toX){
    int i 0
    int j 0
    int moveChessID起始位置什棋子
    int targetID目什棋子空
    if(toX<0){左边出界时
    return false
    }
    if(toX>8){右边出界时
    return false
    }
    if(toY<0){边出界时
    return false
    }
    if(toY>9){边出界时
    return false
    }
    if(fromXtoX && fromYtoY){目出发点相
    return false
    }
    moveChessID qizi[fromY][fromX]起始棋子
    targetID qizi[toY][toX]带终点棋子
    if(isSameSide(moveChessIDtargetID)){果阵营
    return false
    }
    switch(moveChessID){
    case 1黑帅
    if(Chess01Activitysidefalse){ 显示黑方
    if(toY>2||toX<3||toX>5){出九宫格
    return false
    }
    }
    else{ 显示红方
    if(toY<7||toX<3||toX>5){
    return false
    }
    }
    if((Mathabs(fromYtoY)+Mathabs(toXfromX))>1){走步
    return false
    }
    break
    case 5黑士
    if(Chess01Activitysidefalse){ 显示黑方
    if(toY>2||toX<3||toX>5){出九宫格
    return false
    }
    }
    else{ 显示红方
    if(toY<7||toX<3||toX>5){出九宫格
    return false
    }
    }
    if(Mathabs(fromYtoY) 1 || Mathabs(toXfromX) 1){走斜线
    return false
    }
    break
    case 6黑象
    if(Chess01Activitysidefalse){ 显示黑方
    if(toY>4){河
    return false
    }
    }
    else{ 显示红方
    if(toY<5){河
    return false
    }
    }
    if(Mathabs(fromXtoX) 2 || Mathabs(fromYtoY) 2){相走田字
    return false
    }
    if(qizi[(fromY+toY)2][(fromX+toX)2] 0){
    return false相眼处棋子
    }
    break
    case 7黑兵
    if(Chess01Activitysidefalse){ 棋盘方显示黑方
    if(toY < fromY){回头
    return false
    }
    if(fromY<5 && fromY toY){河前直走
    return false
    }
    if(toY fromY + Mathabs(toXfromX) > 1){走步直线
    return false
    }
    }
    else{ 棋盘方显示红方
    if(toY > fromY){回头
    return false
    }
    if(fromY>4 && fromY toY){河前直走
    return false
    }
    if(fromYtoY + Mathabs(fromX toX)>1){
    return false
    }
    }
    break
    case 8红
    if(Chess01Activitysidefalse){
    if(toY<7||toX>5||toX<3){出九宫格
    return false
    }
    }
    else{
    if(toY>2||toX>5||toX<3){出九宫格
    return false
    }
    }
    if((Mathabs(fromYtoY)+Mathabs(toXfromX))>1){走步
    return false
    }
    break
    case 2黑车
    case 9红车
    if(fromY toY && fromX toX){走直线
    return false
    }
    if(fromY toY){走横线
    if(fromX < toX){右走
    for(i fromX + 1 i < toX i++){循环
    if(qizi[fromY][i] 0){
    return false返回false
    }
    }
    }
    else{左走
    for(i toX + 1 i < fromX i++){循环
    if(qizi[fromY][i] 0){
    return false返回false
    }
    }
    }
    }
    else{走竖线
    if(fromY < toY){右走
    for(j fromY + 1 j < toY j++){
    if(qizi[j][fromX] 0)
    return false返回false
    }
    }
    else{想左走
    for(j toY + 1 j < fromY j++){
    if(qizi[j][fromX] 0)
    return false返回false
    }
    }
    }
    break
    case 10红马
    case 3黑马
    if(((Mathabs(toXfromX)1 && Mathabs(toYfromY)2)
    || (Mathabs(toXfromX)2 && Mathabs(toYfromY)1))){
    return false马走日字时
    }
    if(toXfromX2){右走
    ifromX+1移动
    jfromY
    }
    else if(fromXtoX2){左走
    ifromX1移动
    jfromY
    }
    else if(toYfromY2){走
    ifromX移动
    jfromY+1
    }
    else if(fromYtoY2){走
    ifromX移动
    jfromY1
    }
    if(qizi[j][i] 0)
    return false绊马腿
    break
    case 11红砲
    case 4黑炮
    if(fromYtoY && fromXtoX){炮走直线
    return false返回false
    }
    if(qizi[toY][toX] 0){吃子时
    if(fromY toY){横线
    if(fromX < toX){想右走
    for(i fromX + 1 i < toX i++){
    if(qizi[fromY][i] 0){
    return false返回false
    }
    }
    }
    else{走走
    for(i toX + 1 i < fromX i++){
    if(qizi[fromY][i]0){
    return false返回false
    }
    }
    }
    }
    else{竖线
    if(fromY < toY){走
    for(j fromY + 1 j < toY j++){
    if(qizi[j][fromX] 0){
    return false返回false
    }
    }
    }
    else{走
    for(j toY + 1 j < fromY j++){
    if(qizi[j][fromX] 0){
    return false返回false
    }
    }
    }
    }
    }
    else{吃子时
    int count0
    if(fromY toY){走横线
    if(fromX < toX){右走
    for(ifromX+1i if(qizi[fromY][i]0){
    count++
    }
    }
    if(count 1){
    return false返回false
    }
    }
    else{左走
    for(itoX+1i if(qizi[fromY][i] 0){
    count++
    }
    }
    if(count1){
    return false返回false
    }
    }
    }
    else{走竖线
    if(fromY for(jfromY+1j if(qizi[j][fromX]0){
    count++返回false
    }
    }
    if(count1){
    return false返回false
    }
    }
    else{走
    for(jtoY+1j if(qizi[j][fromX] 0){
    count++返回false
    }
    }
    if(count1){
    return false返回false
    }
    }
    }
    }
    break
    case 12红仕
    if(Chess01Activitysidefalse){
    if(toY<7||toX>5||toX<3){出九宫格
    return false
    }
    }
    else{
    if(toY>2||toX>5||toX<3){出九宫格
    return false
    }
    }
    if(Mathabs(fromYtoY) 1 || Mathabs(toXfromX) 1){走斜线
    return false
    }
    break
    case 13红相
    if(Chess01Activitysidefalse){ 棋盘方显示黑方
    if(toY<5){河
    return false返回false
    }
    }
    else{
    if(toY>4){河
    return false返回false
    }
    }
    if(Mathabs(fromXtoX) 2 || Mathabs(fromYtoY) 2){相走田字
    return false返回false
    }
    if(qizi[(fromY+toY)2][(fromX+toX)2] 0){
    return false相眼处棋子
    }
    break
    case 14红卒
    if(Chess01Activitysidefalse){ 棋盘方显示红方
    if(toY > fromY){回头
    return false
    }
    if(fromY > 4 && fromY toY){
    return false走
    }
    if(fromY toY + Mathabs(toX fromX) > 1){走步直线
    return false返回false走
    }
    }
    else{
    if(toY < fromY){回头
    return false
    }
    if(fromY < 5 && fromY toY){
    return false走
    }
    if(toYfromY + Mathabs(fromXtoX)>1){
    return false
    }
    }
    break
    default
    return false
    }
    return true
    }
    public boolean isSameSide(int moveChessID int targetID){判断两子否阵营
    if(targetID 0){ 目标位空时
    return false
    }
    if(moveChessID>7&&targetID>7){红色棋子时
    return true
    }
    else if(moveChessID<7&&targetID<7){黑色棋子时
    return true
    }
    else{情况
    return false
    }
    }
    }
    文档香网(httpswwwxiangdangnet)户传

    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 10 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    基于Android的天气预报查询系统的实现毕业设计

     基于Android的天气预报查询系统的实现 摘要:随着智能手机一步步走进人们的生活,它将成为人们获取信息的主要设备,相关应用越来越广泛,并在人们的日常生活中扮演着越来越重要的角色。因此,...

    5年前   
    1961    0

    基于Android的FTP文件传输

     毕业设计(论文) 题 目 基于Android的FTP文件传输 姓 名 学 ...

    5年前   
    1059    0

    基于Android植物大战僵尸

    摘要 手机游戏,顾名思义就是指在手机上运行的游戏软件。目前用来编写手机程序使用最多的是 Java 语言。随着科技的发展,手机的硬件更新速度越来越快,功能也越来越强大。现在的手机游戏具有很强的...

    5年前   
    1302    0

    基于Android智能风扇的设计

    由于科技越来越发达,智能硬件也使用越来越多,基于蓝牙的技术开发以及应用也是快速的发展。其使用在Android系统和Windows系统等平台上都可以使用蓝牙无线模块。可以实现了主蓝牙设备和从设备它...

    3年前   
    969    0

    基于Android Studio的饼图账单的设计与开发Android毕业论文

    毕 业 论 文 基于Android Studio的饼图账单的设计与开发Design and Development of PieChart Billing Based on Android S...

    4年前   
    787    0

    Android实训报告基于Android的游戏开发

    通信与电子信息专业实训报告项目名称:基于Android的游戏开发 班 级 通信班 姓 名 ...

    3年前   
    1081    0

    基于Android的教学课程系统设计与开发

    摘 要移动应用已经成为人们生活必不可缺的一部分,大学生身为移动应用的最大用户群体,在生活学习娱乐各个方面都与移动应用有着紧密联系,然而针对大学生校园学习的移动应用却寥寥无几,因为不同的...

    3年前   
    612    0

    基于android的物业管理系统的设计与实现19.8

     目录基于android的物业管理系统的设计与实现 3摘 要 3Android property managemengt system 5Abstract 51 绪论 61.1 选题背景 6...

    3年前   
    801    0

    基于Android的网上订餐系统毕业论文

    XX 大 学 毕 业 设 计( 论 文 ) 题目 基于Android的网上订餐系统 作者 学院 专业 学号 指导教师 二〇XX 年 X月 X日 摘 要 ...

    5年前   
    1805    0

    基于Android手机的NFC开发与应用

    基于Android手机的NFC开发与应用摘 要随着信息时代的快速发展,NFC作为一种由RFID演变来的新型近距离无线通信技术也受到人们的关注,相较于红外、Wifi等其他无线通信有启动速度快、...

    1年前   
    370    0

    基于Android的外卖点餐类的app的设计与开发

    基于Android的外卖点餐类app的开发与设计 摘 要:在这千变万化的岁月中,手机已不是稀奇之物。规矩的传统订餐已经不能在我们生活中得到满足,用户们需要一个可以在家查看餐厅以及点餐的服务。...

    8个月前   
    192    0

    基于Android的志愿活动平台的设计与实现

     基于Android的志愿活动平台的设计与实现 ...

    11个月前   
    474    0

    论文开题报告:定稿基于Android的快递APP设计与实现

    目前,为了提高取件效率,快递公司在一些快递密集型的投放点放置了智能云柜,取件人通过快递公司发送的密码来开启云柜。虽然这种方式大大提高了取件效率,让取件人的取件时间更加自由,但是云柜只能存放一些体...

    5年前   
    2906    0

    基于安卓Android智能家居详细设计毕业论文

    基于Android的智能家居目 录第 1 章 项目概述 11.1 项目背景 11.2 术语定义 2第 2 章 技术方案 32.1 系统描述 32.2 功能描述 32.3 项目功能图 4...

    3年前   
    1132    0

    基于Android的电子书阅读器的设计与实现

    毕业设计说明书(论文)中文摘要Android平台现在非常的火,我们平时使用的智能手机,平板电脑,还有新的智能电视,有很大部分是基于Android平台的,很显然,它在人们生活中的表现得越来越重要...

    3年前   
    636    0

    基于Android的智能停车系统的设计与开发(修改版)

    在对城市停车位供给紧缺、停车难以及乱停车等问题进行解决时,可以研究其根源,对城市的有效停车位进行增加,构建现代化停车场,另外也可以针对目前已有的停车场进行科学合理的配置、控制以及调度。

    3年前   
    489    0

    基于Android移动平台图像处理系统开发

    在今天的全球化世界里,科技不断的进步与创新更加促进了外语学习途径的多样化,随着人们学习方式的便捷并迅速的发展,特别是以电子词典为主工具的出现,用户对此类产品的便捷、功能的要求越来越高。目前,电子...

    3年前   
    3344    0

    基于安卓系统的点餐系统毕业设计

     本科毕业论文(设计) 题 目: 基于安卓系统的点餐系统 专 业: 姓 名: 指导教师: ...

    5年前   
    1690    0

    基于单片机智能小车毕业设计

    毕 业 设 计(论 文)设计(论文)题目: 基于单片机的智能小车 ...

    6个月前   
    199    0

    中国象棋教案

     中 国 象 棋 教 案   第一课时 教学内容:认识棋盘和棋子 教学目标:1、了解棋盘的构成和棋子。           2、培养下中国象棋的兴趣。 教学准备:中国象棋一副 ...

    5年前   
    867    0

    文档贡献者

    文***享

    贡献于2019-06-06

    下载需要 10 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档