一、开发环境:eclipse
二、存储环境:mysql,可视化工具:navicat
三、开发项目成果索引:
(10条消息) java技能训练----黑魂四(简单的打怪game)-Java文档类资源-CSDN文库
四、具体需求实现
登录界面为分管理员登陆和玩家登录,玩家登录需要选择开始游戏还是查询以前记录;管理员登录需要密码和账号,进入后有新增玩家、修改玩家、删除玩家、查询玩家、查询游戏、分数查询、参数查询、退出,每次数据存储需要连接mysql数据库。
五、功能结构
六、关键代码
public int play() throws SysException{
System.out.println("模拟游戏界面");
//遍历集合,让进行攻击
System.out.println("玩家当前血量为"+adminManger.poka+"敌军当前血量"+adminManger.boold);
//所得分数
int score=0;
//通过循环遍历
for(int i=0;i<jians.size();i++){
System.out.println("******************");
JIAN b=jians.get(i);
if(b!=null&&adminManger.boold>0){
System.out.println(b.getName()+"发起了第"+(i+1)+"次攻击");
//调用攻击的方法
int c=attackOne(b);
score+=c;
adminManger.boold-=c;//敌人的血量
if(adminManger.boold<0){
System.out.println("敌军已经被击杀");
break;
}
adminManger.poka -= b.getHurt();
System.out.println("因为使用了"+b.getName()+"你失去了"+b.getHurt()+"点血量");
//
adminManger.poka -= pigHelper.getpig().getAttackValue();
System.out.println("你受到了敌军的"+pigHelper.getpig().getName()+"攻击"+"你的血量失去了"+pigHelper.getpig().getAttackValue());
if(adminManger.poka<0){
System.out.println("你已经死亡,未获得分数");
adminManger.boold=500;
adminManger.poka=100;
return 0;
}
System.out.println("你当前的血量为"+adminManger.poka);
System.out.println("敌军剩余血量为"+adminManger.boold);
}
}
//输入玩家的总分
if(adminManger.boold<0){
System.out.println("敌军已经被击杀");
System.out.println("攻击结束,"+player.getLoginname()+"的分数"+score);
adminManger.boold=500;
adminManger.poka=100;
}else{
System.out.println("你未能够击杀敌军");
adminManger.boold=500;
adminManger.poka=100;
}
//保存游戏记录
game game=new game();
game.setPid(player.getId());
game.setScore(score);
//调用gamedao中的方法
gd.insertgame(game);
return 1;
}
讲解:通过for()进行依次遍历,在遍历过程中我们一方面要考虑是否能是否安全的转移数据信息和攻击是否命中,另一方面要考虑是否已经结束以及是否可以进行新一轮攻击。最后最后我们将新数据进行存储
其次,我们针对是否命中的方法进行讲述:
public int hit(JIAN jian){
//生成随机数1
long d=Math.round(Math.random()*10);//0-10
int h=jian.getHitValue()/10;//76
System.out.println("随机数==="+d+"命中率==="+h);
if(d<=h){
return jian.getAttackValue();
}else{
return 0;
}
简单用round和random方法最后得到d这个长整型变量d,用它与h(调用jian的伤害值)进行判断是命中还是未命中
六、关键注意点
- throws用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用就抛给谁。用在方法声明后面,跟的是异常类名”
- Math.random()返回的只是从0到1之间的小数,如果要50到100,就先放大50倍,即0到50之间,这里还是小数,如果要整数,就强制转换int,然后再加上50 即为50~100..
- Math.round()方法即为我们常说的“四舍五入”方法,但用起来不注意的话就会犯错。
- Private List<bird>birds=new ArrayList<>();//创建存储着用户选择 的五把剑的集合
- Player为什么给设null,因为用户玩家要通过账号密码等路了后才能获取到这个玩家信息//这个写在报告中
- birds.size()访问到jians的集合的最大
- bird b=birds.get(i);开始遍历,第零只、第一只依次放在b上
- 即 foreach语法,表示不必创建int变量去对由访问项构成的序列进行计数,foreach将自动产生每一项。使用 foreach 循环遍历数组和集合元素时,无须获得数组和集合长度,无须根据索引来访问数组元素和集合元素,foreach 循环自动遍历数组和集合的每个元素。
- String loginname=Input.getString(Valid.CHKLOGINNAME,"必须有字母");//其验证作用,在inputhelper类里面重写了getstring方法
- for(JIAN b:Datainit.jianTypes){//遍历datainit类的jiantypes集合取名为b//用foreach循环
- JIAN b=jians.get(i);//集合的get方法获得索引位置为i的元素对象
- int c=attackOne(b);//c是选中的剑的攻击值,现在已经确定了是命中的
- gd.insertgame(game);//在数据库中存储的表某一行的信息进行更新