课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现
一、个人贡献
参与课设题目讨论及部分过程
资料收集
负责代码调试
捕鱼游戏相应功能的实现
实验环境
- Eclipse软件开发环境;
- ARM实验箱(HonyaS5PC100);
- windows操作系统。
实践内容
- Windows环境下ARM集成开发环境的搭建与使用;
- 安装软件到模拟器;
- 连接ARM实验箱与PC机;
- 将工程代码在ARM实验箱上实现;
- 给程序增加新的功能。
实践步骤
Windows环境下ARM集成开发环境的搭建与使用
安装JDK和配置Java开发环境
1、安装JDK开发环境



开始安装JDK:

修改安装目录如下:

确定之后,单击“下一步”。
注:当提示安装JRE时,可以选择不要安装。
2、配置环境变量:
对于Java程序开发而言,主要会使用JDK的两个命令:javac.exe、java.exe。路径:C:\Java\jdk 1.7.0 _09\bin。但是这些命令由于不属于windows自己的命令,所以要想使用,就需要进行路径配置。
单击“计算机-属性-高级系统设置”,单击“环境变量”。在“系统变量”栏下单击“新建”,创建新的系统环境变量。

(1)新建->变量名"JAVA_HOME",变量值"C:\Java\jdk1.8.0_05"(即JDK的安装路径)
(2)编辑->变量名"Path",在原变量值的最后面加上“;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin”
(3)新建->变量名“CLASSPATH”,变量值“.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar”
3、确认环境配置是否真确:
在控制台分别输入java,javac,java -version 命令,出现如下所示的JDK的编译器信息,包括修改命令的语法和参数选项等信息。
java命令:


javac命令:

java -version命令:

4、在控制台下验证第一个java程序:
public class Test {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
用记事本编写好,点击“保存”,并存入C盘根目录后,输入javac Test.java和java Test命令,即可运行程序(打印出结果“Hello Java”)。注:这两个命令是在D:\java\jdk1.8.0_20\bin目录下。
首先编写java源代码程序,扩展名.java;
在命令行模式中,输入命令:javac 源文件名.java,对源代码进行编译,生成class字节码文件;
编译完成后,如果没有报错信息,输入命令:java HelloWorld,对class字节码文件进行解释运行,执行时不需要添加.class扩展名。见下图:

下载安装android SDK
http://www.androiddevtools.cn/
找到SDK Tools,选择下载windows的zip格式的。
下载后在需要安装的位置解压,得到:
然后install
二、配置环境变量
右键我的电脑,打开属性,点击高级系统设置,打开环境变量:
1、新建一个环境变量名称为ANDROID_HOME,变量值为当前安装SDK的目录
例如SDK装在D:\androidSDK中,则环境变量为:

2、把%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools添加到Path环境变量中。
三、检测是否安装成功
win+R,输入cmd,打开命令提示符面板。
1、输入android
2、输入abd

二、设计中遇到的问题及解决方法
1.javac不是内部或外部命令,也不是可运行的程序或批处理文件。

原因是因为没有提前安装好JDK开发环境或环境变量配置有误。
2.在增加捕鱼功能时,遇到的问题
实时调整
对概率进行调整,收入过高时降低概率,收入过低时提高概率,则对概率进行调整,增加实时调整参数AP(-10%<AP<10%):
则击杀概率调整为:
当收入过高,降低AP,降低鱼击杀率,造成玩家纯收入锐减。
当收入过低,提高AP,提高玩家收入,避免玩家流失。
游戏初期,提高AP,提高金币产出,增加玩家收入,强化爽快感,吸引玩家持续游戏。
游戏中期,适度调高和调低AP,造成收入波峰波谷(类似股票),吸引玩家充值,同时提高游戏黏度。
游戏后期,降低AP,提高玩家冲击高分的难度,强化玩家之前的比拼,吸引玩家充值,提高收入。
倍数
倍数:玩家可选择倍数,提高子弹的消耗N倍,击杀鱼后获得的金币量N倍。
例如,1倍下,豌豆消耗1金币,杀死鱼获得10金币。10倍下,子弹消耗10金币,杀死鱼获得100金币。
倍数设置值为1倍、2倍、5倍、10倍、20倍、50倍、100倍。
玩家开启某个倍数,受其等级限制、房间上限倍数限制。
房间概率调整
我们将房间分为初级、中级、高级三种房间。根据其房间的定位,调整在该房间内,玩家击杀僵尸的概率:
初级房:只能使用低倍数,提高击杀概率,随便打打就可以赢钱。
中级房:可以调整高低倍数,平衡击杀概率,掌握技巧可基本收支平衡。
高级房:可以开启最高倍数,略微降低击杀概率,赚得多赔得多。
加入房间参数RP后,击杀概率公式被调整为
捕鱼类游戏计算方式的设计思路
建议初级房的RP为+10%,中间房为0,高级房为-8%(数值可配置,具体数据以实际调整后为准)。
三、调试过程中遇到的主要问题及解决方法
1.领头鱼
首先要设计一个对鱼类来说一个必须的类--领头鱼类HeadFish,这个类并不是实质的鱼,而是一个点,这个点带领着所有鱼群游动。该类决定了鱼群的X,Y坐标,游动方向,旋转角度和旋转方向。
public class HeadFish {
private int[] fishOutlinePoint = new int[4]; //鱼的外接矩形,x的最小值,最大值,Y的最小值,最大值
//控制鱼移动的线程
private FishRunThread fishRunThread;
private boolean isNew = true; //是否刚生成的鱼 这个参数决定着进入屏幕时候的路线
private float fish_x; //鱼当前的X坐标
private float fish_y; //鱼当前的Y坐标
private int currentRotate; //鱼当前已旋转的角度
private float lastX; //最后一次旋转后的X增量 这组XY的作用是旋转后若走直线,就以这两个值
private float lastY; //最后一次旋转后的Y增量 递增就可以了
private int rotateDirection; //左转还是右转 这个值的用途在于,鱼在旋转后走直线时,要计算最后一次旋转后的增量,而这个记录了上次是左转还是右转用于计算角度得知直线时的增量
//当前鱼群的鱼,鱼群的鱼都已它为参照,同样这个鱼也在鱼群集合里
private Fish fish;
//鱼群
private ArrayList<Fish> shoal = new ArrayList<Fish>();
//当前创建的领头鱼的起始位置
private int currentFromPoint;
且生成get、set方法,为后面的方法调用赋值做准备。
在类ShoalManager中有一个生成领头鱼的方法:birthHeadFish。该方法可以创建一头领头鱼,领头鱼的出现也就使得鱼群得以出现,创建完成之后,将方向设置到类属性currentFromPoint上,供鱼群使用。
2.丰富多彩的鱼类

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<key>fishActConfig</key>
<string>fish/fish;fish/fish2;fish/fish3;fish/seamaid</string>
<key>fishInfoConfig</key>
<string>fish/FishInfo</string>
</plist>
initFishInfo方法初始化了鱼的配置信息,如鱼的图层ID,鱼的动作速度,鱼的价值,鱼的捕捉概率等,关键代码如下:
private void initFishInfo(String config){
try{
//如果配置信息没有找到,抛出异常
if(config==null){
throw new Exception("FishManager:读取配置文件出错,没有找到fishInfoConfig信息");
}
//加载鱼的基本信息配置文件
XmlPullParser xml = XmlManager.getXmlParser(config, "UTF-8");
//解析所有的鱼的基本信息
while(GamingInfo.getGamingInfo().isGaming()&&XmlManager.gotoTagByTagName(xml, "key")){
XmlManager.gotoTagByTagName(xml, "string");
String fishName = XmlManager.getValueByCurrentTag(xml);
FishInfo fishInfo = new FishInfo();
//设置最大旋转角度
XmlManager.gotoTagByTagName(xml, "integer"); fishInfo.setMaxRotate(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置移动速度
XmlManager.gotoTagByTagName(xml, "integer"); fishInfo.setFishRunSpeed(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置动作速度
XmlManager.gotoTagByTagName(xml, "integer");
fishInfo.setActSpeed(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置鱼群最大数量
XmlManager.gotoTagByTagName(xml, "integer"); fishInfo.setFishShoalMax(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置鱼的图层ID
XmlManager.gotoTagByTagName(xml, "integer");
fishInfo.setFishInLayer(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置鱼的价值
XmlManager.gotoTagByTagName(xml, "integer");
fishInfo.setWorth(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)));
//设置鱼的捕捉概率
XmlManager.gotoTagByTagName(xml, "integer"); fishInfo.setCatchProbability(Integer.parseInt(XmlManager.getValueByCurrentTag(xml)))
allFishConfig.put(fishName, fishInfo);
}
}catch(Exception e){
e.printStackTrace();
}
}
3.Eclipse中的source not found change at.
需要把源码src.zip添加进去,源码src.zip一般放在java的jdk目录下面
4.Adb启动失败
当我们通过eclipse开发Android应用时,安卓模拟器启动失败,提示这样的错误:ADB server didn’t ACK。
5.解决Android SDK Manager的Download interrupted: URL not found问题
选中“Force https : sources to be fetched using http:”复选框。设置完成后单击 Close 按钮关闭 Android SDK Manager - Settings 窗口返回到主界面,再依次选择 Packages、Reload。
四、设计体会及收获
本次设计在同组小伙伴的共同努力和老师的悉心指导下顺利完成。我们小组的课题是基于ARM实验箱实现捕鱼游戏,最主要的部分就是环境配置以及对实验代码的理解。课题的重点和难点在于ARM实验箱的操作,首先需要将PC机与ARM实验箱连接,才能将工程成功的在ARM实验箱上运行显示以及执行相应的操作。我主要是负责的代码部分,其中包括捕鱼游戏相应功能的实现,其中在倍数、实时调整、房间概率调整部分有了新的理解。虽然本次设计有一定的困难,但是不能因为困难就放弃,通过不同的方法去解决问题才是最终的目的,也是我觉得最重要的东西。
五、参考资料(图书、网址…)
https://www.cnblogs.com/smyhvae/p/3788534.html
https://blog.csdn.net/zeternityyt/article/details/79655150
https://blog.csdn.net/mergerly/article/details/71505123
http://bbs.gameres.com/thread_463918_1_1.html
https://blog.csdn.net/gongyuan073/article/details/12580011
课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现的更多相关文章
- 课程设计小组报告——基于ARM实验箱的捕鱼游戏的设计与实现
课程设计小组报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.任务简介 1.1 任务内容 捕鱼游戏这个项目是一个娱乐性的游戏开发,该游戏可以给人们带来娱乐的同时还可以给人感官上的享受,所以很受人们的 ...
- 20155338课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现
课程设计个人报告--基于ARM实验箱的Android交友软件的设计与实现 个人贡献 实验环境的搭建 代码调试 在电脑上成功运行 研究程序代码撰写小组报告 一.实验环境 1.Eclipse软件开发环境: ...
- 课程设计个人报告——基于ARM实验箱的Android交友软件的设计与实现
个人贡献 熟悉试验箱各元件功能以及连接组装试验箱 一.实验内容 研究实验箱串口.USB线的调通连接 二.实践步骤 1.打开实验箱,首先了解各元件功能 这个是LTE模块,也叫4G模块,具体的作用是硬件将 ...
- 《基于Arm实验箱的国密算法应用》课程设计 结题报告
<基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...
- 20155234 昝昕明《基于ARM实验箱的国密算法应用》课程设计个人报告
20155234 昝昕明<基于ARM实验箱的国密算法应用>课程设计个人报告 个人贡献 参与课设题目讨论及完成全过程: 资料收集: SM1算法及和ARM之间通信 负责串口代码调试: 协调完成 ...
- 20155235 王玥 《基于Arm实验箱的接口测试和应用》 课程设计报告
20155235 王玥 <基于Arm实验箱的接口测试和应用> 课程设计报告 一.设计方案及可行性分析 熟悉 Linux 开发环境 多线程应用程序设计 串行端口程序设计 中断实验 二.详细设 ...
- 20155224 聂小益 《基于Arm实验箱的接口测试和应用》 课程设计报告
一.设计方案及可行性分析 熟悉 Linux 开发环境 多线程应用程序设计 串行端口程序设计 中断实验 二.详细设计思路 1. 熟悉 Linux 开发环境 建立工作目录: 在终端输入代码建立工作目录 [ ...
- 20155219 付颖卓《基于ARM试验箱的接口应用于测试》课程设计个人报告
一.个人贡献 参与课设题目讨论及完成全过程: 资料收集: 负责代码调试: 修改小组结题报告: 负责试验箱的管理: 二.设计中遇到的问题及解决方法 1.makefile无法完成编译.如下图: 答:重新下 ...
- 基于ARM处理器的反汇编器软件简单设计及实现
写在前面 2012年写的毕业设计,仅供参考 反汇编的目的 缺乏某些必要的说明资料的情况下, 想获得某些软件系统的源代码.设计思想及理念, 以便复制, 改造.移植和发展: 从源码上对软件的可靠性和安全性 ...
随机推荐
- SQL LAST() 函数
LAST() 函数 LAST() 函数返回指定的字段中最后一个记录的值. 提示:可使用 ORDER BY 语句对记录进行排序. SQL LAST() 语法 SELECT LAST(column_nam ...
- 浅谈 Angular 项目实战
为什么使用 Angular 我不是 Angular 的布道者,但如今痴迷 Angular,使用 Angular 做项目让我有一种兴奋感.目前的三大主流前端框架都研究过,博客中也有三者的相关教程,最早接 ...
- zoj 3602
链接 [https://vjudge.net/contest/293343#problem/C] 题意 给你两棵树.为有多少对子树是同构的 分析 就是简单的哈希吧.对于不同结构的树对应不同的哈希值 先 ...
- 浅析RPC远程过程调用基本原理
在校期间大家都写过不少程序,比如写个hello world服务类,然后本地调用下,如下所示.这些程序的特点是服务消费方和服务提供方是本地调用关系. 而一旦踏入公司尤其是大型互联网公司就会发现,公司的系 ...
- 【c的文件操作】文本文件和二进制文件(内存映像)的不同 文件结尾判断feof , EOF
查看 stdio.h 可以看到如下定义: #define EOF (-1) #define _IOEOF 0x0010 #define feof(_stream) ((_stream)- ...
- springboot+shiro 一个项目部署多个,session名冲突问题
问题 前几天遇到一个比较奇怪的问题, 一个项目部署多个,端口不同.启动之后在同一浏览器中进行登录,后一个登录的会把前一个登录的挤掉,导致只能登录一个. 原因 是因为sessionid相同,然后修改了s ...
- WebSocket原理
一 . WebSocket原理 1.1.背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议,基于短连接,需要频繁的发起请求,第二 Http 只能客户端发起请求,服务端无法主动 ...
- golang面向对象和interface接口
一. golang面向对象介绍 1.golang也支持面向对象编程,但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言.2.golang没有类(class),golang语言的结合体(struc ...
- 一、Log4Net配置
Core的配置 一.创建core包含控制和视图的项目以及Log4Net引用 二.创建Log4Net配置文件 右击项目->添加文件 Log4Net.config 2 复制以下代码 以下配置可做 ...
- Event-Loop In JS
原文:最后一次搞懂 Event Loop 自打 ES 6 推出 Promise 改善了 js 的异步编程之后,eventloop 也越来越多地出现在视野当中.借用大佬们的话:“Event Loop 是 ...