要求如下:

基本要求:

1、角色可以怪物实施攻击,一次攻击后,怪物损失部分HealthPoint,当HealthPoint损失完后,怪物死亡。

2、角色可装备不同武器:木剑、铁剑和魔剑三种。

3、角色用木剑每次攻击可让怪物损失50HealthPoint;角色用铁剑每次攻击可让怪物损失100HealthPoint;角色用魔剑每次攻击可让怪物损失200HealthPoint。

4、创建Demo类,在其中演示怪物的创建、角色用不同的装备攻击怪兽。

5、系统具有良好的可扩展性,以便后期可以增加更多的武器。

满足基本要求,本人在该项目中附加额外功能设计

1、角色用武器造成的攻击有30%概率暴击,暴击伤害为武器造成伤害的150%。

2、怪物也可以对角色实施攻击,一次攻击后,角色损失部分HealthPoint,当HealthPoint损失完后,角色死亡。

3、怪物可用撕、咬两种攻击方式。

4、怪物的撕每次攻击可让角色损失5HealthPoint;咬每次攻击可让角色损失10HealthPoint;

5、怪物每受到三次攻击后回复100HealthPoint。

6、角色有20%的概率闪避怪物的攻击。

7、该游戏为回合制游戏

功能一:类的设计

根据上述要求,我们可以编写角色类,怪物类,武器父类,武器子类

1角色类:

class Role { //角色类private int healthPoint; //角色的血量private Weapon weapon; //角色所带的武器public Role(int healthPoint, Weapon weapon) {this.healthPoint = healthPoint;this.weapon = weapon;}public int getHealthPoint() {return healthPoint;}public void setHealthPoint(int healthPoint) {this.healthPoint = healthPoint;}public Weapon getWeapon() {return weapon;}public void setWeapon(Weapon weapon) {this.weapon = weapon;}

2.怪物类

class Monster { //怪物类private int healthPoint; //怪物血量private int attackCount; //回合数计算private boolean isRecover; //回复血量public Monster(int healthPoint) {this.healthPoint = healthPoint;}public int getHealthPoint() {return healthPoint;}public void setHealthPoint(int healthPoint) {this.healthPoint = healthPoint;}public int getAttackCount() {return attackCount;}public void setAttackCount(int attackCount) {this.attackCount = attackCount;}public boolean isRecover() {return isRecover;}public void setRecover(boolean recover) {isRecover = recover;}

3.武器类

(1)武器父类:

abstract class Weapon { //武器类protected String name; //武器类型protected int damage; //武器造成的伤害public Weapon(String name, int damage) {this.name = name;this.damage = damage;}public abstract int getDamage();public abstract String getname();}

(2)武器子类

class WoodSword extends Weapon { //木剑public WoodSword() {super("木剑", 50);}public int getDamage() {return damage;}public String getname() {return name;}}class IronSword extends Weapon { //铁剑public IronSword() {super("铁剑", 100);}public int getDamage() {return damage;}public String getname() {return name;}}class MagicSword extends Weapon { //魔剑public MagicSword() {super("魔剑", 200);}public int getDamage() {return damage;}public String getname() {return name;}}

功能二:角色受击函数,闪避函数

设计时的思想:

通过取1到100直接的随机数,判断随机数是否小于20来确保角色受到攻击时20%的闪避几率,根据是否闪避来判断角色血量是否减少。

public void beAttacked(int damage) { //受攻函数,闪避函数
int random1 = (int) (Math.random() * 100); //利用随机数,确定20%的闪避概率
if (random1<20) {
System.out.println("角色躲避了怪物的攻击");
} else {
healthPoint -= damage;
System.out.println("怪物攻击了角色,造成了" + damage + "点伤害,角色剩余生命值:" + healthPoint);
}
}

功能三:角色伤害计算函数

设计时的思想:

通过取1到100直接的随机数,判断随机数是否小于30来确保角色攻击时20%的暴击几率,若暴击角色所带武器的伤害变为原来的1.5倍,若不暴击,则角色所带武器造成的伤害不变。

public int attack() { //伤害计算函数
int damage = 0;
int random = (int) (Math.random() * 100); //利用随机数,确定30%的暴击概率
if (random < 30) { //判断本次伤害是否为暴击伤害
damage = (int) (weapon.getDamage() * 1.5); //暴击伤害为武器伤害的1.5倍
} else {
damage = weapon.getDamage();
}
return damage;
}

功能四: 怪物伤害计算函数

设计时的思想:

通过取1到100直接的随机数,选择怪物的攻击方式。

public int attack() { //伤害计算函数
int damage = 0;
int random = (int) (Math.random() * 100);//利用随机数,判断怪物的攻击类型
if (random < 50) {
damage = 5;
} else {
damage = 10;
}
return damage;
}

功能五:怪物受击函数,回复函数,回复判断函数

设计时的思想:

根据角色对怪物造成的伤害减少怪物的生命值。

根据怪兽类中定义的会和类变量是否为三来判断怪物是否回复血量,若为三怪物回复血量,且回合数清零。

public void beAttacked(int damage) {//受攻函数,回复判断函数
healthPoint -= damage;
attackCount++;
if (attackCount == 3) { //判断是否满足怪物的回复条件
recover();
}
System.out.println("角色攻击了怪物,造成了" + damage + "点伤害,怪物剩余生命值:" + healthPoint);
}
public void recover() { //回复函数
healthPoint += 100;
attackCount = 0;
isRecover = true;
System.out.println("怪物回复了100点生命值");
}

源代码如下:

package less01;
class Role {     //角色类private int healthPoint;    //角色的血量private Weapon weapon;      //角色所带的武器public Role(int healthPoint, Weapon weapon) {this.healthPoint = healthPoint;this.weapon = weapon;}public int getHealthPoint() {return healthPoint;}public void setHealthPoint(int healthPoint) {this.healthPoint = healthPoint;}public Weapon getWeapon() {return weapon;}public void setWeapon(Weapon weapon) {this.weapon = weapon;}public int attack() {    //伤害计算函数int damage = 0;int random = (int) (Math.random() * 100);  //利用随机数,确定30%的暴击概率if (random < 30) {                        //判断本次伤害是否为暴击伤害damage = (int) (weapon.getDamage() * 1.5);   //暴击伤害为武器伤害的1.5倍} else {damage = weapon.getDamage();}return damage;}public void beAttacked(int damage) { //攻击函数,闪避函数int random1 = (int) (Math.random() * 100);  //利用随机数,确定20%的闪避概率if (random1<20) {System.out.println("角色躲避了怪物的攻击");} else {healthPoint -= damage;System.out.println("怪物攻击了角色,造成了" + damage + "点伤害,角色剩余生命值:" + healthPoint);}}
}class Monster {    //怪物类private int healthPoint;  //怪物血量private int attackCount;  //回合数计算private boolean isRecover; //回复血量public Monster(int healthPoint) {this.healthPoint = healthPoint;}public int getHealthPoint() {return healthPoint;}public void setHealthPoint(int healthPoint) {this.healthPoint = healthPoint;}public int getAttackCount() {return attackCount;}public void setAttackCount(int attackCount) {this.attackCount = attackCount;}public boolean isRecover() {return isRecover;}public void setRecover(boolean recover) {isRecover = recover;}public int attack() {       //伤害计算函数int damage = 0;int random = (int) (Math.random() * 100);//利用随机数,判断怪物的攻击类型if (random < 50) {damage = 5;} else {damage = 10;}return damage;}public void beAttacked(int damage) {//攻击函数,回复判断函数healthPoint -= damage;attackCount++;if (attackCount == 3) {  //判断是否满足怪物的回复条件recover();}System.out.println("角色攻击了怪物,造成了" + damage + "点伤害,怪物剩余生命值:" + healthPoint);}public void recover() {   //回复函数healthPoint += 100;attackCount = 0;isRecover = true;System.out.println("怪物回复了100点生命值");}
}abstract class Weapon {     //武器类protected String name;   //武器类型protected int damage;    //武器造成的伤害public Weapon(String name, int damage) {this.name = name;this.damage = damage;}public abstract int getDamage();public abstract String getname();
}class WoodSword extends Weapon {  //木剑public WoodSword() {super("木剑", 50);}public int getDamage() {return damage;}public String getname() {return name;}
}class IronSword extends Weapon {    //铁剑public IronSword() {super("铁剑", 100);}public int getDamage() {return damage;}public String getname() {return name;}
}class MagicSword extends Weapon {   //魔剑public MagicSword() {super("魔剑", 200);}public int getDamage() {return damage;}public String getname() {return name;}
}public class Demo1 {public static void main(String[] args) {Role role = new Role(500, new WoodSword());Monster monster = new Monster(1000);while (role.getHealthPoint() > 0 && monster.getHealthPoint() > 0) {int damage = role.attack();monster.beAttacked(damage);if (monster.getHealthPoint() <= 0) {System.out.println("怪物已死亡,游戏结束");break;}damage = monster.attack();role.beAttacked(damage);if (role.getHealthPoint() <= 0) {System.out.println("角色已死亡,游戏结束");break;}}}
}

Java打怪兽小游戏相关推荐

  1. Unity引擎Fps打怪兽小游戏

    自制了一款Unity的枪战打怪兽小游戏 游戏演示视频已上传至B站:https://www.bilibili.com/video/BV1wt4y187ic 一些截图展示: 可以找博主索要源码~

  2. 经典打怪兽小游戏分析

    这是我第一次写代码类的博客,也是我上学的第一个项目,希望各位朋友们能给小的点个赞什么的,有什么问题的欢迎指正 ...代码随意使用,只求能在用的时候给个赞... 打怪兽小游戏 GS类 public cl ...

  3. java文字类小游戏2.0版本

    java文字类小游戏 用javaFx面板显示文字类小游戏,目前正已完成基本打斗和打怪爆出武器的开发,后续会不断更新示例图如下: 运行这个类开始代码我已上传至码云,有需要的小伙伴自行拉取代码,git项目 ...

  4. 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)

    本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...

  5. Java练手小游戏---黄金矿工

    你玩过4399曾经最火的黄金矿工小游戏吗,黄金矿工小游戏是一款休闲娱乐的一个挖宝游戏,在游戏中地下会有许多的宝藏,你得想办法把它们都挖出来,作为矿工的你,对你来说是轻车熟路的,能不能挖到宝,看你抓取的 ...

  6. JAVA实现2048小游戏

    2048小游戏也算是一款好玩的益智休闲小游戏,下面本博主用 java 语言将该游戏复现,感兴趣的小伙伴点击 关注 哦! 同时博主还用 python 语言复现了该游戏,可点击以下链接浏览博主的另一篇文章 ...

  7. Java 贪吃虫小游戏

    我参考了[Java]Java实现贪吃蛇小游戏(带详细注释)和 java贪吃蛇小游戏(详解) 先设置需要用到的常数 package Snake;public class ConstantNumber { ...

  8. Java Swing 经典小游戏《飞机大战》———— (四)碰撞检测 游戏状态与得分 玩家升级

    前期回顾 Java Swing 经典小游戏<飞机大战>---- (一)获取素材,创建窗口,添加滚动背景,双缓冲 Java Swing 经典小游戏<飞机大战>---- (二)玩家 ...

  9. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

最新文章

  1. 配置EXCHANGE服务器
  2. Adobe与Facebook联手推出Flash开发工具
  3. ad09只在一定范围内查找相似对象_kafka日志段中的二分查找
  4. dynamic change date type to sap.ca.ui.model.type.Date in Debugger
  5. Linq之ToDictionaryTSource, TKey, TElement的写法
  6. Mysql语句与应用
  7. MySQL优化(2)--------常用优化
  8. hdu1242 Rescue DFS(路径探索题)
  9. 智能手机收邮件之Mobile
  10. linux python2.7 post_在Python 2.7下面使用webpy框架
  11. 超详细用实验教你如何配置OSPF
  12. angular uibpagination 分页相关
  13. 你知道PDF拆分合并怎么弄吗?两个方法帮你轻松搞定!
  14. 多核处理器_胶水多核等于Low?处理器封装没有那么简单!
  15. UG二次开发GRIP刻字
  16. 极视角联合英伟达亮相CNCC大会,分享极星平台的进阶之路
  17. 【PhotoShop】去除脸部油光
  18. 浅析 vue-router 源码和动态路由权限分配
  19. JavaMai——邮箱验证用户注册
  20. 最大数leetcode_Leetcode:最大化有效体验

热门文章

  1. Linux 内核console设备实现详解
  2. 梦幻诛仙linux纯端架设教程,【梦幻诛仙】【双端手游】【最完美,最全的,视频架设教程】...
  3. 小程序开发总结-SPUSKU
  4. EOS Platform7.2初始化表简介
  5. ESLint和Airbnb代码规范
  6. unity 实现游戏——牧师与魔鬼
  7. 脑电生物反馈市场现状及未来发展趋势
  8. 希尔密码(hill)的解密与加密
  9. BZOJ4143 [AMPPZ2014]The Lawyer
  10. STM32之时钟配置