安卓大作业

合集下载

android程序设计大作业

android程序设计大作业

你的Android程序设计大作业需要包含以下内容:
1. 需求分析:描述你的应用程序的需求,包括它的目标用户、主要功能和特殊需求。

2. 设计:详细描述你的应用程序的设计,包括用户界面(UI)设计、交互设计、数据存储设计等。

你应该考虑应用程序的整体架构,包括主要组件和它们之间的交互。

3. 实现:详细描述你如何实现你的应用程序,包括使用的编程语言(主要是Java和Kotlin)、开发工具、技术堆栈等。

你应该提供一些关键代码片段,展示你的实现过程。

4. 测试:描述你将如何测试你的应用程序,包括测试类型、测试工具和测试计划。

你应该提供一些测试结果,展示你的应用程序的性能和功能。

5. 部署:描述你将如何部署你的应用程序,包括发布到Google Play商店或其他应用市场、更新和维护等。

6. 总结:总结你的整个开发过程,包括你遇到的挑战、解决方案和你从中学到的东西。

以上内容应该根据你的具体应用程序进行修改和扩展。

同时,你应该在每个部分中提供足够的细节和解释,以便其他人能够理解你的应用程序的设计和实现。

android期末大作业论文1

android期末大作业论文1

淮阴工学院《Android》期末作品系(院):计算机工程学院专业:计算机科学与技术(NIIT方向)班级:计算机1124 学生姓名: sky学号: ******任课教师: ****学年学期:2014 ~ 2015 学年第 2 学期2015 年7 月 1 日1.课题综述1.1 项目背景Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。

随着智能手机的普及化,赛班等系统逐渐提出时代潮流,智能机时代来临,而安卓系统智能手机以其低廉的价格逐渐成为大众化的主流手机系统。

与此同时随着现代音乐播放器的发展,一款能在安卓系统里能够运行的音乐播放器是大众所急需的应用软件。

考虑到音乐播放器的开发价值和很好的应用前景,本文主要研究基于Android移动平台的音乐播放器的开发。

音乐播放器,将机器上的各种音乐文件转换为视听效果文件的一种强大的软件。

它能够通过数字手段来模拟出声音效果。

使得人们可以从传统音乐中解放出来,尤其是现代歌曲,结合了各种音乐器材的综合效果,颠覆了传统的音乐传统,这就更需要一款强大的软件来解析各种音乐器材所独有的效果。

1.2 预期目标本次设计的主要功能是能播放Mp3,Wav多种格式的音乐文件,并且能够控制歌曲的播放,暂停,上、下一曲,音量调节,背景更换,播放列表和歌曲文件的管理操作等多种播放控制功能,界面简明,操作简单。

2、系统分析2.1 运行环境操作系统:Android手机基于Linux操作系统支持环境:Android 1.5 - 2.0.1版本开发环境:Eclipse 3.5 ADT 0.952.2 功能模块框图3、系统设计3.1 本地音乐:先将安卓程序从Eclipse里导出,安装到手机上。

当点击进入时,程序将自动导入手机本地音乐。

效果如图:图(1)本地音乐页面3.2 音乐播放在本地歌曲里点击想听的音乐则音乐开始播放,如点击“光辉岁月”,效果如图图(2)音乐播放图(3)音乐暂停图(4)上一首图(5)随即播放。

移动应用开发安卓选题

移动应用开发安卓选题

移动应用开发安卓选题移动应用开发课程大作业选题注意:以下所有系统均要实现(1)管理者的登陆;(2)用户的注册和登陆;(3)数据的存储和提取.(第(12),(14),(15),(17)题可以不要求“(1)管理者的登陆”和“(2)用户的注册和登陆”)不要附上核心代码,全文汉字字数不少于7500。

每个班内不能有重复选题,班级内部每2人组成一组选题。

学生提交大作业设计报告打印稿(A4纸,最好双面打印)和源程序。

设计报告电子版以“移动应用开发_学号_姓名.doc(或docx)”命名。

上交电子版文件时上交“移动应用开发_学号_姓名”命名的文件夹,设计报告电子版和源代码放在“移动应用开发_学号_姓名”命名的文件夹内,其中源代码用压缩软件打包。

每组同学上交一份电子版,文件名只要以该组同学其中一位同学名字和学号命名即可,但是其中应该包含一个readme.txt文件,里面列出该组全体同学姓名和学号。

纸质版如何上交另外通知。

1.基于安卓的火车票购票系统基于Android系统,实现对于火车票的预定功能。

具体需要完成的主要功能:火车票信息查询,火车票订单管理,预定火车票,用户账户管理和软件帮助功能。

在完成系统功能的基础上实现合理的界面设计,并进行相应的软件测试。

2.基于安卓的手机快递管理查询系统设计内容主要包括:完成用户登录功能(包括普通用户,快件录入人员,公司管理员);用户快件查询;快件信息管理,包括信息录入,修改等;员工信息维护。

3.基于安卓的网上药店管理系统的设计与实现实现:(1)管理者和用户的注册,登陆;(2)用户在登陆后才能购买商品;(3)管理者在登陆后才能对商品进行发布,通过一定的步骤生成药品信息;(4)管理员有权删除不符合规定的发布信息;(5)管理员有权删除不符合规定的用户信息;(6)用户可对管理员留言,完善网站结构;(7)用户在购买商品后可对商品留言。

4.基于安卓的网上航班时刻表查询系统设计与实现基于Android系统,实现管理者和用户的注册、登陆;设计实现手机在线航班时刻表查询系统。

Android大作业题目5篇

Android大作业题目5篇

Android大作业题目5篇第一篇:Android大作业题目《Android软件开发》课程考查作业题目注意事项:1、每人可选下列题目中的一题完成课程设计。

2、学习委员于10月31日收齐上交。

3、本次要求打印稿(正反打印)。

一、题目及要求:1、基于Android平台的在线通信录功能要求:实现通信录的在线备份还原功能,服务器端技术自定。

2、基于Android平台的云记事本软件功能要求:具有记事本的基本功能。

同时具备在线备份功能。

服务器端技术自定。

3、基于BaiDu在线地图的轨迹跟踪服务功能要求:1、能动态、实时记录设备位置。

2、能在手机或者网页上显示地图轨迹。

服务端技术自定。

用例场景:小明今天80岁,患老年痴呆又喜欢出远门,经常发生走丢事故。

小小明为了能实时掌握小明的行踪,特意为他配备了装有跟踪服务的智能机,从此小明再也不怕走丢了。

4、基于Android平台的财务软件功能要求:1、记账和统计功能。

2.实时备份实现要求:客户端基于Android,服务端技术自定用例场景:随手记,一家人共用一个账号,所有支出都清清楚楚5、基于Android平台的社交软件功能要求:参考QQ、微信、微博等实现要求:客户端基于Android,服务端技术自定6、基于Android平台的新闻客户端功能要求:参考网易新闻客户端实现要求:客户端基于Android,服务端技术自定.7.基于Android平台的天气预报系统功能要求:从服务器端下载天气预报数据并显示.实现要求:客户端基于Android,服务端技术自定8.自拟题目。

要求有客户端和服务端,具备一定的实用性。

二、设计文档要求(格式同上学期多核开发课程报告格式)整体要求:使用Eclipse集成开发环境完成课程设计,界面友好,代码的可维护性好,有必要的注释和相应的文档。

文档具体书写内容要求如下:λ系统的需求概述λ系统的概要设计λ设计与实现部分λ运行画面截图λ每一部分附上关键性代码λ心得体会(每个人都要写)第二篇:Android大作业报告移动设备软件应用与开发大作业报告姓名:学号:班级:院系:日期:任课教师:一、程序的运行环境、安装步骤1、运行环境游戏运行环境:Android1.5以上版本2、程序的组成部份:2.1、JDK安装1.我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:2.JAVA_HOME值为: D:Program FilesJavajdk1.6.0_18(你安装JDK的目录)3.CLASSPATH值为:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;%JAVA_ HOME%bin;4.Path: 在开始追加 %JAVA_HOME%bin;5.NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。

android移动终端开发大作业

android移动终端开发大作业

Android移动终端开发大作业
一、大作业总体要求
(1)2人一组,分工合作。

如果愿意独立完成,也可1人。

(2)按照个人兴趣方向,从推荐范围自选题目,完成系统。

(3)在规定的时间里完成系统主体功能,程序比较稳定的运行。

(第8周二、五开发系统,
第9周周二上课上台讲真机演示系统。

考完后一周内提交完整的代码、文档。

代码统一刻盘留存,文档提交纸质版,电子版和代码一起刻盘。

文档参考项目式教程课本,要求三部分内容1 项目总体介绍,模块介绍2各模块任务分析和任务实施3 系统开发总结)
(4)手机界面要求简洁、美观。

(5)至少要5个Activity以上。

(6)要使用Sqlite数据库。

(7) 欢迎好的创意作品、实用作品。

(8) 大作业成绩从工作量、功能点、创新性、实用性、系统演示、报告等方面的成绩构

二、推荐以下范围选题,题目自选
1移动工具类
聊天工具类(网络通讯)
前台和后台服务器
2 图形图像工具类
画点、线、面、曲线、折线、园
3游戏类
4移动日常应用类
移动学习、
移动管理信息系统、
移动考试、
5与位置相关的应用类LBS
移动监控类
移动采集
6 多媒体开发类。

移动设备应用程序开发大作业

移动设备应用程序开发大作业

移动设备应用程序开发大作业移动设备应用程序开发是当前互联网行业中最受欢迎和热门的技能之一。

由于人们对于移动设备的依赖越来越高,越来越多的开发人员开始涉足这个领域。

移动设备应用程序能够为人们的生活带来非常便利的服务,无论是购物、旅游、娱乐等各个方面都有着广泛的应用。

任务需求在本次移动设备应用程序开发大作业中,我们要求学生们开发一款手机应用程序,可以根据自己的兴趣爱好和专业知识来自由选择开发主题。

该应用程序应具备以下基本功能:•能够实现用户的注册和登录功能;•能够实现用户的基本资料编辑、修改等操作;•能够实现用户的数据存储和读取;•能够实现用户的数据统计、分析等操作;•能够实现用户与其他用户交互等操作。

技术选型在开发该应用程序时,我们建议采用目前流行和成熟的开发工具和技术,以保障应用程序的技术支持和稳定性。

以下列出几种常用的移动应用程序开发技术:1. 原生应用程序开发原生应用程序开发指的是在某个特定的操作系统上(如 iOS 或 Android)使用该系统所提供的软件开发工具包(SDK)来开发应用程序。

原生应用程序的优点是具备更好的性能和用户体验,并且可以充分利用操作系统的特性,实现更加丰富的功能。

但是,原生应用程序的开发成本较高,需要花费更多的时间和人力开发,同时也需要考虑应用程序的兼容性和可维护性等问题。

2. Hybrid 应用程序开发Hybrid 应用程序开发指的是在手机应用程序的基础上,使用 Web 技术(如HTML、CSS 和 JavaScript)来实现应用程序的界面和功能。

Hybrid 应用程序的优点是相比于原生应用程序开发,开发成本较低,并且具备较好的兼容性,同时还能够利用 Web 技术的优势实现更加复杂的应用程序。

但是,Hybrid 应用程序的性能和用户体验相对较差,且受限于手机浏览器的限制。

3. 跨平台应用程序开发跨平台应用程序开发指的是使用一种特定的开发语言或者框架来实现可在不同操作系统和设备上运行的应用程序。

《Android手机高级开发》大作业试卷及评分标准_A卷

《Android手机高级开发》大作业试卷及评分标准_A卷

宁波大红鹰学院2015-2016学年第二学期2013级本科计算机科学与技术专业《Android手机高级开发》期末考试试卷(A卷)考核方式:大作业题目:智能手机软件的设计与实现要求:一、作品要求描述随着智能手机的普及,基于Android平台的应用软件需求也越来越多。

宁波东蓝数码有限公司是一家规模较大的软件公司,随着公司规模的不断扩大,目前新增了大量基于Android智能手机方面的业务,但由于业务量较大,公司内部开发人员一时无法满足要求,现需要外包一些智能手机应用软件。

现假设你所在的公司承接了该公司智能手机外包项目的开发工作,并明确了外包的项目范围如下:(1)带共享功能的文件管理、多媒体技术制作类项目;(2)带共享功能的地图处理类项目;(3)带有服务器处理的移动端APP。

将其中一项任务下达给你,并提出了如下要求:1.界面美观,功能实用、丰富;2.项目中至少应包含如下四种数据存贮(SharedPreferneces/SQLite/文件/ContentProvider)中的其中一种;3.项目中需要包含地图处理功能;4.项目中需要包含多媒体或物理传感方面的功能;5.项目中对比较费时的工作,需要采用异步处理技术。

二、上交的资料(纸质及电子稿)(1)大作业报告,报告中要求项目分工明确,格式参照模板。

(2)项目源代码,如有服务器端程序,还应包括服务器端程序源码及导出的数据库sql文件。

三、考核方式(1)以小组方式(原则上为3人/组),于18周课外时间安排答辩,按照给定评分标准打分;(2)各小组项目主题不能相同,否则以作品类同处理;(3)各小组答辩完毕,立即将其纸质稿及电子稿上交,截止时间:第十八周周末。

四、评分标准:(写明各项分值,总分值为100分)1、大作业报告(40分)要求及评分标准:1)及时上交。

(5分)2)需求分析:需求描述准确简练,意思表达清楚,无明显错误;需要画出UML需求用例图及用例分析说明。

(10分)3)系统设计:需要画出参与整个系统的各个模块,解释各模块功能;用UML 画出核心模块时序图、类图,及其各个模块之间的关系。

Android程序设计大作业

Android程序设计大作业

项目必须能够调试通过;android平台选择选择2.2或是2.3.3。
6. c.作业设计说明,word文件,按照毕业论文的格式进行编写,要求包括 需求(功能描述)、设计(代码说明)与最终实现(截屏)。
7.
可以借鉴网络上的代码。
Android程序设计
期末大作业
作业题目

1.
2. 3. 4. 5. 6. •
可以按照自己的兴趣,选择完成如下内容:
设计并实现一个应用,可以完成类似天气,股票,课程 表等显示; 设计并实现一个类似于手机助手的应用; 设计并实现一个播放器,能够完成视频、音频文件的播 放; 设计一个Widget,可以完成事件提醒,工作日志等功能; 设计一个GoogleMap,完成地图相关功能。 其他自己感兴趣的内容 要求:功能完备,界面漂亮。
• 不许相互抄袭,一旦发现成绩为零。
作业要求
1.
2. 3.
作业请在2013年4月9日前,发送至dlutandroid@,过时不候。
作业文件命名及格式:班级+序号+姓名.rar 作业内容包括三部分:
Байду номын сангаас
4.
5.
a.作业内容说明,txt文件。
b.作业项目文件夹,项目命名规则是自己的姓名拼音,例如lidakui;项 目package命名规则:姓名拼音.xh学号,例如:lidakui.xh200992001;

android studio 期末大作业

android studio 期末大作业

android studio 期末大作业android studio 期末大作业_寒假学习及作业温馨提示-CSDN 博客亲爱的同学们:一学期紧张忙碌的学习生活已渐入尾声,翘首以盼的寒假假期即将到来。

于很多同学而言,寒假既是继续学习新知的调整期,也是查缺补漏的“挽救期”和巩固提高的“非常时期”。

因此,在适度放松的同时,希望同学们安排好每天的学习,按时、保质保量地完成寒假作业;认真查找平时学习中遗留的薄弱环节和知识点,进行重点突破,争取为下学期的学习创造更高的起点。

寒假学习计划安排攻略一、合理规划时间,制订学习计划放假后的第一件事,应该是整理出可利用的时间,以每一天为单位做出时间安排表;接下来,梳理自身学习情况,找出需要提高的科目,合理分配复习和预习时间,有针对性地制订假期学习计划。

平均每天有效学习时间最好保持在6个小时左右,可以根据自己的情况合理规划一下。

学习时间最好固定在上午8:00-12:00,下午13:30-17:30;晚上19:30-21:30。

既不要睡懒觉,也不要开夜车。

习惯比聪明更重要!只要按照计划来,每天坚持,成绩不会没有进步的!不要忘了,一定要预留出锻炼身体、休闲活动和阅读的时间。

一旦制定就应该严格遵守。

相信你的假期一定会有意想不到的收获。

二、确定学习目标,攻克薄弱环节,有针对性地进行复习和预习七年级学生适宜重点攻克薄弱学科和想提高的科目;八年级学生要以下学期结业的地理、生物为重点学习科目,再在薄弱科目上花些时间;九年级学生面临中考,学习任务较重,寒假要进行非常重要的一轮复习,所以每天要多投入一些学习时间。

辽河油田实验中学分校各科学习温馨提示语文学科教师温馨提示及作业安排七年级一.寒假作业安排时间:1月18—2月26日二.寒假作业内容:1.完成《期末大考卷》。

2.复习七上、七下1、2单元生字,预习七下3单元----6单元生字。

3.中考古诗的预习背诵。

三.具体安排1月18--19日,书写七上生字1、2单元,默写古诗《观沧海》《夜雨寄北》;完成《期末大考卷》(一)到二部分,阅读名著《骆驼祥子》1月20--21日,书写七上生字3、4单元,默写古诗《闻王昌龄左迁龙标遥有此寄》《次北固上下》《天净沙·秋思》,完成《期末大考卷》(二)到二部分,阅读名著《骆驼祥子》1月22--23日,书写七上生字5、6单元,默写古诗《木兰诗1~4自然段》,完成《期末大考卷》(三)到二部分,阅读名著《骆驼祥子》1月24--25日,七下书写生字1、2单元,《木兰诗5~7自然段》,完成《期末大考卷》(四)到二部分,阅读名著《骆驼祥子》1月26—29日,书写七下生字3、4单元,默写《论语十二章》,完成《期末大考卷》(五)到二部分,阅读名著《骆驼祥子》1月31日,书写七下生字5、6单元,默写古诗《登幽州台歌》,完成《期末大考卷》(六)到二部分,阅读名著《骆驼祥子》2月1—3日,默写古诗《望岳》,完成《期末大考卷》(七)到二部分,阅读名著《骆驼祥子》2月4日,休息2月5-7日,默写古诗《登飞来峰》,完成《期末大考卷》(八)到二部分,阅读名著《骆驼祥子》2月8—10日,默写古诗《游山西村》,完成《期末大考卷》(九)到二部分,阅读名著《海底两万里》2月11---14,休息2月15—16,默写古诗《己亥杂诗》,完成《期末大考卷》(十)到二部分,阅读名著《海底两万里》2月17—18,默写古诗《送杜少府之任蜀州》,完成《期末大考卷》(一)、(二)作文,阅读名著《海底两万里》2月19-20,默写古诗《泊秦淮》,完成《期末大考卷》(三)、(四)作文,阅读名著《海底两万里》2月21-22,默写古诗《黄鹤楼》,完成《期末大考卷》(五)、(六)作文,阅读名著《海底两万里》2月23-24,默写古诗《使至塞上》,完成《期末大考卷》(七)、(八)作文,阅读名著《海底两万里》2月25-26,默写古诗《钱塘湖春行》,完成《期末大考卷》(九)、(十)作文,阅读名著《海底两万里》2月27日,休息注:语文名著阅读按照页数平均一天读多少页,在日记本上写读书笔记,生字,古诗用大笔记本完成,作文用作文本书写,每天作业按日期按计划完成。

android大作业(十二生肖)

android大作业(十二生肖)

《移动网络开发技术》大作业——十二生肖专业:计算机科学与技术班级:学号:姓名:一、实现功能:十二张图片底部小图片滚动浏览,用户点击任意小图片屏幕显示该图放大的图片。

二、需求分析:十二张十二生肖的图片,Eclipse软件三、实验步骤:1.新建Android工程2.编写代码3.导入图片4.虚拟机测试四、关键代码:ShengxiaoActivity.Javapackage com.shengxiao;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.LinearLayout;import android.widget.Toast;public class ShengxiaoActivity extends Activity {LinearLayout LL;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);/* LL = (LinearLayout)this.findViewById(R.id.LL1);*/}public boolean onCreateOptionsMenu(Menu menu) {getWindow().setBackgroundDrawableResource(R.drawable.bg);Toast.makeText(this,"菜单建立",Toast.LENGTH_SHORT).show();menu.add(1,1,1,"鼠").setIcon(R.drawable.a1);menu.add(1,2,2,"牛").setIcon(R.drawable.b1);menu.add(1,3,3,"虎").setIcon(R.drawable.c1);menu.add(1,4,4,"兔").setIcon(R.drawable.d1);menu.add(1,5,5,"龙").setIcon(R.drawable.e1);menu.add(1,6,6,"蛇").setIcon(R.drawable.f1);menu.add(1,7,7,"马").setIcon(R.drawable.g1);menu.add(1,8,7,"羊").setIcon(R.drawable.h1);menu.add(1,9,7,"猴").setIcon(R.drawable.i1);menu.add(1,10,7,"鸡").setIcon(R.drawable.j1);menu.add(1,11,7,"狗").setIcon(R.drawable.k1);menu.add(1,12,7,"猪").setIcon(R.drawable.l1);return true;}public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case 1:getWindow().setBackgroundDrawableResource(R.drawable.a);break;case 2:getWindow().setBackgroundDrawableResource(R.drawable.b);break;case 3:getWindow().setBackgroundDrawableResource(R.drawable.c);break;case 4:getWindow().setBackgroundDrawableResource(R.drawable.d);break;case 5:getWindow().setBackgroundDrawableResource(R.drawable.e);break;case 6:getWindow().setBackgroundDrawableResource(R.drawable.f);break;case 7:getWindow().setBackgroundDrawableResource(R.drawable.g);break;case 8:getWindow().setBackgroundDrawableResource(R.drawable.h);break;case 9:getWindow().setBackgroundDrawableResource(R.drawable.i);break;case 10:getWindow().setBackgroundDrawableResource(R.drawable.j);break;case 11:getWindow().setBackgroundDrawableResource(R.drawable.k);break;case 12:getWindow().setBackgroundDrawableResource(R.drawable.l);break;}return super.onOptionsItemSelected(item);}}。

Android编程基础大作业-推荐下载

Android编程基础大作业-推荐下载
2. 相关技术..................................................................3 3. 系统分析..................................................................3 4. 系统设计..................................................................4
4.1 功能模块的流程说明...................................................4 4.2 数据库设计...........................................................4 5. 系统实现..................................................................5 6. 系统测试..................................................................6 7. 总结......................................................................7 7.1 难点分析 .............................................................7 7.2 解决方案.............................................................7
团队成员
宁波大红鹰学院信息工程学院 期末大作业 Android 编程基础大作业-推荐下载.pdf

android大作业模板

android大作业模板

学生信息管理系统课程名称:Android程序设计设计题目:学院:计算机科学与信息工程学院学生姓名:学号:专业班级:指导教师:2015年月日目录一、总体设计1.1学生信息系统结构图 (2)1.2本系统的主要功能 (3)1.3 Java源文件及其功能 (3)二、详细设计2.1主类StudentManager (4)2.2类StudentSituation (6)2.3类ModifySituation (9)2.4类inquest (11)2.5类Delete (13)2.6类Student (14)三、功能测试及运行效果3.1 系统主界面 (16)3.2 录入信息界面 (16)3.3 修改信息界面 (17)3.3 查询信息界面 (17)3.3 删除信息界面 (18)程序总结 (18)参考文献 (18)一、总体设计1.1学生信息系统结构图学生信息系统分析结构图1.2本系统的主要功能运行该系统成功后,会出现一个欢迎使用的主界面,上面的菜单选项,会弹出4个子菜单分别是录入基本信息、修改基本信息、查询基本信息、删除基本信息。

点击它们会出现不同的界面,分别有不同的功能:1. StudentManager.java该类负责创建学生信息管理系统的主窗口,该类还有main方法,程序从该类开始执行。

2. StudentSituation.java该类创建的对象是StudentManager类的重要成员之一,负责提供录入、重置学生基本信息的界面。

3. ModifySituation.java该类创建的对象是StudentManager类的重要成员之一,负责提供修改学生基本信息的界面。

4.Delete.java该类创建的对象是StudentManager类的重要成员之一,负责提供删除学生基本信息的界面。

5.inquest.java创建的对象是StudentManager类的重要成员之一,该类负责提供查询学生基本信息的界面。

哈工程-Android实验课大作业

哈工程-Android实验课大作业

计算机科学与技术学院Android应用程序开发课程设计
学号:
专业:
学生姓名:夙愿宿缘
任课教师:
MazyCity Ball
图1 AI2开发环境
四、实验步骤
阅读AI2开发环境相关教程,熟悉各部分组件及相关功能
确立安卓小游戏的屏幕划分,增加Screen,明确游戏所需模块和各部分Screen
图2 初始界面
3.进行Screen1的逻辑编辑
下图是初始界面的块设计界面及其逻辑设计
图3 逻辑设计界面
可以看到,游戏进入初始界面后,有4个选项:开始游戏,选择模式,荣誉榜,退
图4 球通过管道逻辑设计
设计思想:游戏采用是非逻辑,球“小白”通过点击屏幕上下移动,当小白每通过一个管道时,计数器就加一分;当球“小白”撞到边界和管道时,便属于死鸟,设定死鸟不能飞的逻辑,就算游戏失败,当死亡后,结算当前分数,并跳转到死亡界面。

本游戏还采用了音效设计,当点击屏幕控制小白向上移动和小白死亡时,都有提示音效。

图5 “MODE”逻辑设计
游戏有传统模式和加速模式,点击不同模式跳转至Bird Game不同位置,分别进行不同界面开始游戏。

当点击返回时,返回到主屏幕。

6.存储记录逻辑设计
图“存储记录”逻辑设计
当玩家创造了记录时,可以存储记录,输入玩家名称,选择确认即可存储返回主界面,取消则返回刚才的游戏界面。

7.荣誉榜逻辑设计
图6 “荣誉榜”逻辑设计
进入荣誉榜,独处普通模式某用户是排行榜第一名,当前的分数是XX,调用存储的最高分记录,点击返回,则回到主屏幕。

8.进行游戏调试和润色,连接安卓手机进行测试,作进一步调整。

Android移动终端开发大作业

Android移动终端开发大作业

一、概述 (2)二、关键技术 (3)三、具体分析 (5)四、心得体会 (7)评分表 (8)一、概述音乐播放器,是现代移动设备基础软件之一,简单的音乐播放器能实现读取音乐、显示歌曲、播放音乐、音乐切换等功能,而较为复杂的音乐播放器则能实现联网交互功能,例如点评音乐、分享音乐、好友互动。

本文旨在扩展音乐播放器的互动功能,在原先的音乐播放器基础上,扩展了“个人中心”界面,实现了界面间的跳转和简单的个人信息设置。

用户可在个人中心界面中实现设置个人信息、接收系统消息、与好友互动等功能,但由于时间原因,只能实现部分界面设计,希望能在以后的研究中完善其他想法部分。

本文主要应用了activity跳转方法与layout布局设计等技术,实现了登入界面LoginActivity、歌曲界面ListActivity、个人界面AccountActivty之间的相互跳转。

本文在AccoutActivty中还加入了个人头像ImageView与个性签名EditText,用来显示用户的个人信息,丰富音乐播放器的功能。

二、关键技术本文的扩展中主要用到的控件有:Button、ImageView、EditText,首先,为了实现界面的跳转,本文选择了应用了点击Button跳转的方法,在第一个activity中加入Button控件,为控件添加事件监听器,实现界面跳转。

查阅SDK 文档可得到Button的布局信息:<Buttonandroid:layout_height="wrap_content"android:layout_width="wrap_content"android:text="@string/self_destruct"android:onClick="selfDestruct" />Button的典型用法如下:public class MyActivity extends Activity {protected void onCreate(Bundle icicle) {super.onCreate(icicle);setContentView(yout.content_layout_id);final Button button = (Button) findViewById(R.id.button_id);button.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// Perform action on click}});}}本文在扩展的个人用户界面中设置了用户头像与个性签名功能,分别利用了ImageView与EditText控件实现,其基本属性如下:<ImageView>android:adjustViewBounds //调整其边界以保持其可绘制的高宽比android:baseline //视图中基线的偏移量android:baselineAlignBottom //视图将基于其底边对齐基线android:cropToPadding //被裁剪以适应其填充android:maxHeight //提供最大高度android:maxWidth //提供最大宽度android:scaleType //调整图像大小或移动以匹配此ImageView的大小android:src //设置ImageView的内容<EditText>android:hint //设置显示在空间上的提示信息android:numeric //设置只能输入整数,如果是小数则是:decimalandroid:singleLine //设置单行输入android:password //设置只能输入密码android:textColor //字体颜色android:textStyle //字体,bold, italic, bolditalicandroid:textSize //大小android:capitalize //以大写字母写在界面布局上,本文LinearLayout(线性布局)为主,在部分控件设计中应用了RelativeLayout(相对布局),其重要属性如下:<LinearLayout>android:baselineAligned //当设置为false时,阻止布局对齐其子基线。

安卓课程设计大作业

安卓课程设计大作业

安卓课程设计大作业一、教学目标本课程旨在让学生掌握Android应用程序开发的基本知识和技能,能够独立完成简单的Android应用开发。

通过本课程的学习,学生将了解Android开发环境搭建、界面设计、布局管理、事件处理、数据存储、网络编程等基本知识,提高编程能力和实际应用开发能力。

同时,通过课程学习,培养学生的创新意识、团队合作能力和解决问题的能力。

具体来说,知识目标包括:1.掌握Android开发环境搭建及基本使用方法。

2.了解Android应用的结构和组件。

3.掌握Android界面设计和布局管理。

4.掌握Android事件处理和触摸控制。

5.了解Android数据存储和网络编程方法。

技能目标包括:1.能够独立搭建Android开发环境。

2.能够使用Android Studio进行应用开发。

3.能够设计并实现Android界面和布局。

4.能够编写Android应用的事件处理和触摸控制代码。

5.能够进行Android应用的数据存储和网络编程。

情感态度价值观目标包括:1.培养学生的创新意识和解决问题的能力。

2.培养学生的团队合作精神和沟通协调能力。

3.使学生认识到Android应用开发在实际生活中的应用价值。

二、教学内容本课程的教学内容主要包括以下几个部分:1.Android开发环境搭建:介绍Android Studio的安装和配置,以及ADB命令的使用。

2.Android应用结构与组件:学习Activity、Service、BroadcastReceiver和ContentProvider等基本组件。

3.Android界面设计与布局:学习XML布局文件的使用,掌握各种布局管理器如LinearLayout、RelativeLayout等。

4.Android事件处理:学习触摸事件、点击事件等的处理方法。

5.Android数据存储:学习SharedPreferences、SQLite数据库、文件存储等数据存储方法。

Android移动终端开发大作业

Android移动终端开发大作业

Android移动终端开发大作业一、作业要求●1人一组,独立完成。

●按照个人兴趣方向,自选题目,完成系统。

●在规定的时间里完成系统主体功能,程序比较稳定的运行。

●手机界面要求简洁、美观,功能不能过于简单,应具备一定的实用性。

●至少要3个Activity以上。

●必须使用自定义Listview,要使用Sqlite数据库或API调用与数据解析(API可使用聚合数据(https:///)、API Store(apistore.baidu./)或apix (/)提供的API,如有能力也可自行开发服务器端)。

●欢迎好的创意作品、实用作品,评分时会适当加分。

●需提交设计报告,设计报告格式见附件,按附件顺序装订(包括评分表)●大作业成绩从工作量、功能点、创新性、实用性、报告的字数、质量及规度等方面的成绩构成二、注意事项●压缩包作业容包括两部分:①作业项目文件夹,项目必须能够调试通过,android平台选择选择2.2或是2.3.3。

②作业设计说明,word文件。

●可以借鉴网络上的代码,但不可全部照搬。

不许相互抄袭,一旦发现成绩为零。

Android平台移动应用开发大作业基于Android的新闻浏览软件的设计与题目实现学院信息工程学院专业信息工程班级信息1303姓名杏允升指导教师珀石2015 年12 月10 日一、 (3)二、概述 (4)三、关键技术 (5)四、概要设计 (11)五、系统实现 (12)六、心得体会.................................................................................................. 错误!未定义书签。

一、概述Android应用平台新闻客户端软件是基于Android手机平台,采用Java语言,从网络上的开放的新闻接口获取数据,设计出针对使用Android平台的手机新闻客户端资讯实时掌控的手机应用程序。

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

《Android应用程序开发》大作业题目:五子棋游戏的设计与实现专业:网络工程学号:*********学生姓名:***指导教师:***完成日期:2015-11-25目录1开发背景 (1)2.需求分析 (1)2.1功能需求 (1)2.2性能需求软件环境: (1)3.概要设计 (1)4.棋盘、棋子的绘制 (1)5.游戏核心设计 (2)5.1手机选择落子位置 (2)5.2判断游戏的输赢 (2)6.运行截图 (2)7.核心代码 (5)7.1首界面 (5)7.2棋盘、棋子的初始化等 (6)7.3 判断输赢 (8)7.4手机落子算法 (10)1开发背景每个人手机上都有手机游戏,上下班以及无聊闲暇时,游戏是人们娱乐的一种方式。

Android 平台下的手机游戏更是受到顾客的青睐,手机游戏不仅玩起来比较方便,还有助于开发我们的思维,使大家在娱乐的同时也增长了见识,拓展了思维。

五子棋对思维及协调能力有益,能使我们注意力集中,耐心也有明显的提升,培养我们的逻辑思维能力,对智力及记忆力都很有帮助。

2.需求分析2.1功能需求1.适合不同阶段的玩家(新手和熟手)2.玩家和手机对弈2.2性能需求软件环境:1.硬件环境:PC机2Windows XP、Android 2.1 以上3.概要设计五子棋分三个模块:开始游戏、设置、退出。

1.开始游戏:点击进入游戏2.游戏设置:音效设置:开启/关闭背景音乐、开启/关闭音效难度设置:简单,中等,较难3.退出游戏关闭游戏4.棋盘、棋子的绘制本设计中棋盘的设置采用drawLine(float startX,float startY,float stopX,float stopY,Paint paint)画线,参数一起始点的X轴位置,参数二起始点的Y轴位置,参数三终点的水平位置,参数四垂直位置,最后的一个参数为Paint画刷对象。

本设计中棋子是用drawCircle在坐标上绘制一个经典几何图形。

先判断是否有棋,是黑子还是白子,然后判断是那个坐标,然后调用drawCircle绘制棋子canvas.drawCircle(float,float,float,Paint)方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔。

5.游戏核心设计5.1手机选择落子位置评估当前棋局中,某个位置的得分。

五子棋要赢,必然要有五个棋子在一起成线,那么我们就可以计算棋盘中每一个五格相连的线,一下称之为五元组。

一般情况(包括专业五子棋)下棋盘是15*15的。

那么应该是572个五元组。

同时,针对五元组中黑子和白子的数量(可以不考虑相对位置)的不同,给该五元组评不同的分。

然后每一个位置的得分就是包含这个位置的所有五元组的得分之和。

说明:当五元组为空,分数为7,不为零的原因是,还有跟糟的情况:五元组中既有黑子又有白子,五元组也就是无效了,这时才给0分。

根据得到的评分,手机选出最佳位置,进行落子。

5.2判断游戏的输赢在判断输赢时,用到的一个巧妙的方法。

从所周知,无论谁下棋赢了以后总会成五子连线,而成五子连线时,第五颗棋总是会着落在棋盘上,所以我们在判断是否有五子连线时,并不是全盘扫描,而是在每着落一子后就扫描该棋子左右、上下、以及斜着的四个方向。

如果扫描出来了那个方向上的棋子首先到达五子,就返回给上级调用,由上级调用者作出相应判断。

如果是其它子,如果某个方向上成了六子或六子以上时,不能算作它赢得了棋,而必是五子才能赢得了棋。

如果是五子以下的棋子时,将要根局相应棋子成子情况,作出相应反应,如加权、减权等操作。

6.运行截图首界面:开始游戏:设置:判断输赢:7.核心代码7.1首界面public class StartActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);this.setContentView(yout.activity_start);Button button1 = (Button) findViewById(R.id.button1);button1.setOnClickListener(new View.OnClickListener(){ @Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent1 = new Intent();intent1.setClass(StartActivity.this,MainActivity.class);startActivity(intent1);StartActivity.this.finish();}});Button button2 = (Button) findViewById(R.id.button2);button2.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent2 = new Intent();intent2.setClass(StartActivity.this, settingActivity.class);startActivity(intent2);StartActivity.this.finish();}});Button button3 = (Button) findViewById(R.id.button3);button3.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubStartActivity.this.finish();}});}}7.2棋盘、棋子的初始化等private ChessType[][] chessMap = new ChessType[ROWS][COLS];private static float PADDING = ((float) (screenWidth) / (COLS - 1)) / 2;private static float PADDING_LEFT = ((float) (screenWidth) / (COLS - 1)) / 2;private static float PADDING_TOP = ((float) (screenHeight) / (ROWS - 1)) / 2;private static float ROW_MARGIN= (screenHeight- PADDING* 2) / (ROWS - 1);private static float COL_MARGIN = (screenWidth - PADDING * 2)/ (COLS - 1);private static float MARGIN;public GameView(Context context) {super(context);this.context = context;this.setBackgroundResource(R.drawable.bg);PADDING_LEFT = ((screenWidth) / (COLS - 1)) / 2;PADDING_TOP = ((screenHeight) / (ROWS - 1)) / 2;PADDING = PADDING_LEFT < PADDING_TOP ? PADDING_LEFT : PADDING_TOP;ROW_MARGIN = ((screenHeight - PADDING * 2)) / (ROWS - 1);COL_MARGIN = ((screenWidth - PADDING * 2)) / (COLS - 1);MARGIN= ROW_MARGIN< COL_MARGIN? ROW_MARGIN: COL_MARGIN;PADDING_LEFT = (screenWidth - (COLS - 1) * MARGIN) / 2;PADDING_TOP = (screenHeight - (ROWS - 1) * MARGIN) / 2;// 对棋子进行初始化initChess();// System.out.println(PADDING_LEFT + " " + PADDING_TOP);}//对棋子进行初始化public void initChess() {for (int i = 0; i < ROWS; i++) {for (int j = 0; j < COLS; j++) {chessMap[i][j] = ChessType.NONE;}}invalidate();}//画棋盘@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint = new Paint();paint.setColor(Color.WHITE);// 打印行for (int i = 0; i < ROWS; i++) {canvas.drawLine(PADDING_LEFT, i * MARGIN+ PADDING_TOP, (COLS - 1)* MARGIN+ PADDING_LEFT, i * MARGIN+ PADDING_TOP, paint);}// 打印列for (int i = 0; i < COLS; i++) {canvas.drawLine(PADDING_LEFT+ i * MARGIN, PADDING_TOP,PADDING_LEFT + i * MARGIN, MARGIN * (ROWS - 1)+ PADDING_TOP, paint);}for (int r = 0; r < ROWS; r++) {for (int c = 0; c < COLS; c++) {// System.out.print(chessMap[r][c] + " ");if (chessMap[r][c] == ChessType.NONE)continue;if (chessMap[r][c] == ChessType.BLACK) {paint.setColor(Color.BLACK);canvas.drawCircle(r * MARGIN + PADDING_LEFT, c * MARGIN+ PADDING_TOP, MARGIN / 2, paint);} else if (chessMap[r][c] == ChessType.WHITE) {paint.setColor(Color.WHITE);canvas.drawCircle(r * MARGIN + PADDING_LEFT, c * MARGIN+ PADDING_TOP, MARGIN / 2, paint);}}// System.out.println();}}7.3 判断输赢public boolean hasWin(int r, int c) {ChessType chessType = chessMap[r][c];System.out.println(chessType);int count = 1;// 纵向搜索for (int i = r + 1; i < r + 5; i++) {if (i >= GameView.ROWS)break;if (chessMap[i][c] == chessType) {count++;} elsebreak;}for (int i = r - 1; i > r - 5; i--) {if (i < 0)break;if (chessMap[i][c] == chessType)count++;elsebreak;}// System.out.println(count +" "+"1");if (count >= 5)return true;// 横向搜索count = 1;for (int i = c + 1; i < c + 5; i++) {if (i >= GameView.COLS)break;if (chessMap[r][i] == chessType)count++;elsebreak;}for (int i = c - 1; i > c - 5; i--) {if (i < 0)break;if (chessMap[r][i] == chessType)count++;elsebreak;}// System.out.println(count +" " +"2");if (count >= 5)return true;// 斜向"\"count = 1;for (int i = r + 1, j = c + 1; i < r + 5; i++, j++) { if (i >= GameView.ROWS || j >= GameView.COLS) { break;}if (chessMap[i][j] == chessType)count++;elsebreak;}for (int i = r - 1, j = c - 1; i > r - 5; i--, j--) { if (i < 0 || j < 0)break;if (chessMap[i][j] == chessType)count++;elsebreak;}// System.out.println(count +" " +"3");if (count >= 5)return true;// 斜向"/"count = 1;for (int i = r + 1, j = c - 1; i < r + 5; i++, j--) { if (i >= GameView.ROWS || j < 0)break;if (chessMap[i][j] == chessType)count++;elsebreak;}for (int i = r - 1, j = c + 1; i > r - 5; i--, j++) { if (i < 0 || j >= GameView.COLS)break;if (chessMap[i][j] == chessType)count++;elsebreak;}// System.out.println(count +" " +"4");if (count >= 5)return true;return false;}7.4手机落子算法/* 得到最优点** @return得到最优的点*/private Point getBestPoint() {initValue();for (int r = 0; r < GameView.ROWS; r++) {for (int c = 0; c < GameView.COLS; c++) {if (chessMap[r][c] == ChessType.NONE) {puterMap[r][c] = getValue(r, c, puterType);this.playerMap[r][c] = getValue(r, c,this.playerType);}}}int pcMax = 0, playerMax = 0;Random rd = new Random();Point pcPoint = new Point(-1, -1);Point playerPoint = new Point();// 分别选出pc估分和玩家估分的最大值for (int r = 0; r < GameView.ROWS; r++) {for (int c = 0; c < GameView.COLS; c++) {// 选出电脑估分的最大值if (pcMax == computerMap[r][c]) {if (rd.nextInt(10) % 2 == 0) {pcMax = computerMap[r][c];pcPoint.x = r;pcPoint.y = c;}} else if (pcMax < computerMap[r][c]) {pcMax = computerMap[r][c];pcPoint.x = r;pcPoint.y = c;}// 选出玩家估分的最大值if (playerMax == playerMap[r][c]) {if (rd.nextInt(10) % 2 == 0) {playerMax = playerMap[r][c];playerPoint.x = r;playerPoint.y = c;}} else if (playerMax < playerMap[r][c]) {playerMax = playerMap[r][c];playerPoint.x = r;playerPoint.y = c;}}}// 两者都在90~100分之间,优先选择PCif(pcMax >= 90 && pcMax < 100 && playerMax >= 90 && playerMax < 100) {return pcPoint;} else {return playerMax > pcMax ? playerPoint : pcPoint;}}/* 得到该位置的分数** @param r* 该棋子所在的行数* @param c* 该棋子所在的列数* @param chessType* 棋子的类型* @return得到的分数*/private int getValue(int r, int c, ChessType chessType) { int[] dir = new int[4];dir[0] = this.getHorCount(r, c, chessType);dir[1] = this.getVerCount(r, c, chessType);dir[2] = this.getSloRCount(r, c, chessType);dir[3] = this.getSloLCount(r, c, chessType);// 成五for (int i = 0; i < dir.length; i++) {if (dir[i] >= 5)return ScoreTable.FIVE;}int temp = 0;// 双活四for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] != ChessStatus.DIED) temp++;if (temp == 2)return ScoreTable.DOUBLE_ALIVE_FOUR;}int t1 = 0, t2 = 0;// 活四死四for (int i = 0; i < dir.length; i++) {if(dir[i] == 4 && chessStatus[i] == ChessStatus.ALIVE) t1 = 1;if (dir[i] == 4 && chessStatus[i] != ChessStatus.DIED) t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.ALIVE_FOUR_AND_DEAD_FOUR;}// 活四活三t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] != ChessStatus.DIED) t1 = 1;if(dir[i] == 3 && chessStatus[i] == ChessStatus.ALIVE) t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.ALIVE_FOUR_AND_ALIVE_THREE;}// 活四死三t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] != ChessStatus.DIED) t1 = 1;if (dir[i] == 3 && chessStatus[i] != ChessStatus.DIED) t2 = 1;if (t1 == 1 && t2 == 1) {return ScoreTable.ALIVE_FOUR_AND_DEAD_THREE;}}// 活四活二t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] != ChessStatus.DIED) t1 = 1;if(dir[i] == 2 && chessStatus[i] != ChessStatus.ALIVE) t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.ALIVE_FOUR_AND_ALIVE_TWO;}// 活四for (int i = 0; i < dir.length; i++) {if(dir[i] == 4 && chessStatus[i] == ChessStatus.ALIVE) {return ScoreTable.ALIVE_FOUR;}}// 双死四temp = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] == ChessStatus.DIED)temp++;if (temp == 2)return ScoreTable.DOUBLE_DEAD_FOUR;}// 死四活3t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] == ChessStatus.DIED) t1 = 1;if (dir[i] == 3 && chessStatus[i] != ChessStatus.DIED) t2 = 1;if (t1 == 1 && t2 == 1) {return ScoreTable.DEAD_FOUR_AND_ALIVE_THREE;}}// 死四活2t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] == ChessStatus.DIED) t1 = 1;if (dir[i] == 2 && chessStatus[i] != ChessStatus.DIED) t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.DEAD_FOUR_AND_ALIVE_TWO;}// 双活三temp = 0;for (int i = 0; i < dir.length; i++) {if (dir[i] == 3 && chessStatus[i] != ChessStatus.DIED) temp++;if (temp == 2)return ScoreTable.DOUBLE_ALIVE_THREE;}// 活死三t1 = 0;t2 = 0;for (int i = 0; i < dir.length; i++) {if(dir[i] == 3 && chessStatus[i] == ChessStatus.ALIVE) t1 = 1;if (dir[i] == 3 && chessStatus[i] == ChessStatus.DIED) t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.ALIVE_THREE_AND_DEAD_THREE;}// 活三for (int i = 0; i < dir.length; i++) {if(dir[i] == 3 && chessStatus[i] == ChessStatus.ALIVE) return ScoreTable.ALIVE_THREE;}// 死四for (int i = 0; i < dir.length; i++) {if (dir[i] == 4 && chessStatus[i] == ChessStatus.DIED) return ScoreTable.DEAD_FOUR;}// 半活死3t1 = 0;t2 = 0;for (int i = 0; i < 4; i++) {if (dir[i] == 3 && chessStatus[i] == ChessStatus.DIED) t1 = 1;if (dir[i] == 3 && chessStatus[i] ==ChessStatus.HALFALIVE)t2 = 1;if (t1 == 1 && t2 == 1)return ScoreTable.ALIVE_THREE_AND_DEAD_THREE;}// 双活2temp = 0;for (int i = 0; i < 4; i++) {if(dir[i] == 2 && chessStatus[i] == ChessStatus.ALIVE) temp++;if (temp == 2)return ScoreTable.DOUBLE_ALIVE_TWO;}// 死3for (int i = 0; i < 4; i++)if (dir[i] == 3 && chessStatus[i] == ChessStatus.DIED) return ScoreTable.DEAD_THREE;// 活2for (int i = 0; i < 4; i++)if(dir[i] == 2 && chessStatus[i] == ChessStatus.ALIVE) return ScoreTable.ALIVE_TWO;// 死2for (int i = 0; i < 4; i++)if (dir[i] == 2 && chessStatus[i] == ChessStatus.DIED) return ScoreTable.DEAD_TWO;return 0;}/* 横向搜索** @param r* 该棋子所在的行数* @param c* 该棋子所在的列数* @param chessType* 棋子的类型* @return得到的个数*/private int getHorCount(int r, int c, ChessType chessType) { int count = 1;int t1 = c + 1;int t2 = c - 1;for (int j = c + 1; j < c + 5; j++) {if (j >= GameView.COLS) {chessStatus[0] = ChessStatus.DIED;break;}if (chessMap[r][j] == chessType) {count++;if (count >= 5)return count;} else {chessStatus[0] = (chessMap[r][j] == ChessType.NONE) ? ChessStatus.ALIVE: ChessStatus.DIED;t1 = j;break;}}for (int j = c - 1; j > c - 5; j--) {if (j < 0) {if(chessStatus[0] == ChessStatus.DIED&& count < 5) {return 0;}chessStatus[0] = ChessStatus.DIED;break;}if (chessMap[r][j] == chessType) {count++;if (count >= 5)return count;} else {if (chessStatus[0] == ChessStatus.DIED) {if(count < 5 && chessMap[r][j] != ChessType.NONE) {return 0;}} else {chessStatus[0] = (chessMap[r][j]) == ChessType.NONE ? ChessStatus.ALIVE: ChessStatus.DIED;t2 = j;// 记录遇到的空格// 当两端都活的时候,看是否可以延伸if (chessStatus[0] == ChessStatus.ALIVE) {int tempCount1 = count, tempCount2 = count;boolean isAlive1 = false, isAlive2 = false;for (int i = t1 + 1; i < t1 + 5; i++) {if (i >= GameView.ROWS)break;if (chessMap[r][i] == chessType) {tempCount1++;} else {isAlive1 = (chessMap[r][i] == ChessType.NONE) ? true: false;break;}}for (int i = t2 - 1; i > t2 - 5; i--) {if (i < 0)break;if (chessMap[r][i] == chessType) {tempCount2++;} else {isAlive2 = (chessMap[r][i] == ChessType.NONE) ? true: false;break;}}// 如果两头都是空,直接跳出if(tempCount1 == count && tempCount2 == count)break;if (tempCount1 == tempCount2) {count = tempCount1;chessStatus[0] = (isAlive1 && isAlive2) ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {count = (tempCount1 > tempCount2) ? tempCount1: tempCount2;if (count >= 5)return 0;if (tempCount1 > tempCount2)chessStatus[0] = (isAlive1) ? ChessStatus.HALFALIVE: ChessStatus.DIED;elsechessStatus[0] = (isAlive2) ? ChessStatus.HALFALIVE: ChessStatus.DIED;}}}break;}}return count;}/* 纵向搜索** @param chessType* 要搜索的棋子类型* @param r* 棋子所在的行* @param c* 棋子所在的列* @return*/private int getVerCount(int r, int c, ChessType chessType) { int t1 = r + 1;int t2 = r - 1;int count = 1;for (int i = r + 1; i < r + 5; i++) {if (i >= GameView.ROWS) {chessStatus[1] = ChessStatus.DIED;break;}if (chessMap[i][c] == chessType) {count++;if (count >= 5) {return count;}} else {chessStatus[1] = (chessMap[i][c] == ChessType.NONE) ? ChessStatus.ALIVE: ChessStatus.DIED;t1 = i;break;}}for (int i = r - 1; i > r - 5; i--) {if (i < 0) {if(chessStatus[1] == ChessStatus.DIED&& count < 5) {return 0;}chessStatus[1] = ChessStatus.DIED;break;}if (chessMap[i][c] == chessType) {count++;if (count >= 5) {return count;}} else {if (chessStatus[1] == ChessStatus.DIED) {if(chessMap[i][c] != ChessType.NONE&& count < 5) {return 0;}} else {chessStatus[1] = chessMap[i][c] == ChessType.NONE ? ChessStatus.ALIVE: ChessStatus.DIED;t2 = i;// 如果两头都活,看是否还可以延伸if (chessStatus[1] == ChessStatus.ALIVE) {int tempCount1 = count, tempCount2 = count;boolean isAlive1 = false, isAlive2 = false;for (int j = t1 + 1; j < t1 + 5; j++) {if (j >= GameView.ROWS) {// chessStatus[1] = ChessStatus.DIED;break;}if (chessMap[j][c] == chessType) {tempCount1++;} else {isAlive1 = (chessMap[j][c] == ChessType.NONE) ? true: false;break;}}for (int j = t2 - 1; j > t2 - 5; j--) {if (j < 0) {break;}if (chessMap[j][c] == chessType) {tempCount2++;} else {isAlive2 = (chessMap[j][c] == ChessType.NONE) ? true: false;break;}}if(tempCount1 == count && tempCount2 == count) {break;}if (tempCount1 == tempCount2) {count = tempCount1;chessStatus[1] = (isAlive1 && isAlive2) ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {count = (tempCount1 > tempCount2) ? tempCount1: tempCount2;if (count >= 5)return 0;if (tempCount1 > tempCount2) {chessStatus[1] = isAlive1 ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {chessStatus[1] = isAlive2 ? ChessStatus.HALFALIVE: ChessStatus.DIED;}}}break;}}}return count;}/* 斜向"\"*/private int getSloRCount(int r, int c, ChessType chessType) { int count = 1;int tr1 = r + 1;int tc1 = c + 1;int tr2 = r - 1;int tc2 = c - 1;for (int i = r + 1, j = c + 1; i < r + 5; i++, j++) { if (i >= GameView.ROWS || j >= GameView.COLS) {chessStatus[2] = ChessStatus.DIED;break;}if (chessMap[i][j] == chessType) {count++;if (count >= 5)return count;} else {chessStatus[2] = (chessMap[i][j] == ChessType.NONE) ? ChessStatus.ALIVE: ChessStatus.DIED;tr1 = i;tc1 = j;break;}}for (int i = r - 1, j = c - 1; i > r - 5; i--, j--) { if (i < 0 || j < 0) {if(chessStatus[2] == ChessStatus.DIED&& count < 5) {return 0;}chessStatus[2] = ChessStatus.DIED;break;}if (chessMap[i][j] == chessType) {count++;if (count >= 5) {return count;}} else {if (chessStatus[2] == ChessStatus.DIED) {if(count < 5 && chessMap[i][j] != ChessType.NONE)return 0;} else {chessStatus[2] = chessMap[i][j] == ChessType.NONE ? ChessStatus.ALIVE: ChessStatus.DIED;tr2 = i;tc2 = j;// 两头都活看是否可以延伸if (chessStatus[2] == ChessStatus.ALIVE) {int tempCount1 = count, tempCount2 = count;boolean isAlive1 = false, isAlive2 = false;for (int p = tr1 + 1, q = tc1 + 1; p < tr1 + 5; p++, q++) {if(p >= GameView.ROWS|| q >= GameView.COLS) {break;}if (chessMap[p][q] == chessType) {tempCount1++;} else {isAlive1 = (chessMap[p][q] == ChessType.NONE) ? true: false;break;}}for (int p = tr2 - 1, q = tc2 - 1; p > tr2 - 5; p--, q--) {if (p < 0 || q < 0)break;if (chessMap[p][q] == chessType) {tempCount2++;} else {isAlive2 = (chessMap[p][q] == ChessType.NONE) ? true: false;break;}}if(tempCount1 == count && tempCount2 == count) {break;}if (tempCount1 == tempCount2) {count = tempCount1;chessStatus[2] = (isAlive1 && isAlive2) ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {count = (tempCount1 > tempCount2) ? tempCount1: tempCount2;if (count >= 5)return 0;if (tempCount1 > tempCount2) {chessStatus[2] = isAlive1 ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {chessStatus[2] = isAlive2 ? ChessStatus.HALFALIVE: ChessStatus.DIED;}}}}break;}}return count;}/* 斜向"/"*/private int getSloLCount(int r, int c, ChessType chessType) { int count = 1;int tr1 = r + 1;int tc1 = c + 1;int tr2 = r - 1;int tc2 = c - 1;for (int i = r + 1, j = c - 1; i < r + 5; i++, j--) { if (i >= GameView.ROWS || j < 0) {chessStatus[3] = ChessStatus.DIED;break;}if (chessMap[i][j] == chessType) {count++;if (count >= 5)return count;} else {chessStatus[3] = (chessMap[i][j] == ChessType.NONE) ? ChessStatus.ALIVE: ChessStatus.DIED;tr1 = i;tc1 = j;break;}}for (int i = r - 1, j = c + 1; i > r - 5; i--, j++) { if (i < 0 || j >= GameView.COLS) {if(chessStatus[3] == ChessStatus.DIED&& count < 5) return 0;chessStatus[3] = ChessStatus.DIED;break;}if (chessMap[i][j] == chessType) {count++;if (count >= 5)return count;} else {if (chessStatus[3] == ChessStatus.DIED) {if(count < 5 && chessMap[i][j] != ChessType.NONE) {return 0;}} else {chessStatus[3] = (chessMap[i][j] == ChessType.NONE) ? ChessStatus.ALIVE: ChessStatus.DIED;tr2 = i;tc2 = j;if (chessStatus[3] == ChessStatus.ALIVE) {int tempCount1 = count, tempCount2 = count;boolean isAlive1 = false, isAlive2 = false;for (int p = tr1 + 1, q = tc1 - 1; p < tr1 + 5; p++, q++) {if (p >= GameView.ROWS || q < 0) {break;}if (chessMap[p][q] == chessType) {tempCount1++;} else {isAlive1 = chessMap[p][q] == ChessType.NONE ? true: false;break;}}for (int p = tr2 - 1, q = tc1 + 1; p > tr2 - 5; p--, q++) {if (p < 0 || q >= GameView.COLS) {break;}if (chessMap[p][q] == chessType) {tempCount2++;} else {isAlive2 = chessMap[p][q] ==ChessType.NONE ? true: false;break;}}if(tempCount1 == count && tempCount2 == count) {break;}if (tempCount1 == tempCount2) {count = tempCount1;chessStatus[3] = (isAlive1 && isAlive2) ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {count = (tempCount1 > tempCount2) ? tempCount1: tempCount2;if (count >= 5)return 0;if (tempCount1 > tempCount2) {chessStatus[3] = isAlive1 ? ChessStatus.HALFALIVE: ChessStatus.DIED;} else {chessStatus[3] = isAlive2 ? ChessStatus.HALFALIVE: ChessStatus.DIED;}}}}break;}}return count;}。

相关文档
最新文档