基于java的葫芦娃游戏

LastRain

发布日期: 2019-04-11 23:10:09 浏览量: 1091
评分:
star star star star star star star star star_border star_border
*转载请注明来自write-bug.com

1. 效果展示

2. 功能说明

2.1 功能键

  • 键位只有三个,分别是SPACEAL,三个键位的功能分别是:

  • SPACE:可以开始对战,任何时候都可以摁SPACE键,在正常对战中,摁SPACE为无效反应,在复盘中,摁SPACE则是开始新的对战,取消当前复盘

  • A:A是保存文件,必须是在已经进行过正常对战的情况下,才能够进行保存文件(复盘之后,若复盘前进行过正常对战,也可以进行保存)

  • L:L是读取文档,然后自动开始复盘,若为选择文件,那么会跳出提示,并且保留原先的正常对战的最后结果

2.2 对战双方

因为如果双方碰到随机死亡太过激情,所以我加入了血条,让双方可以多次一对一战斗,每个生物的属性都各不相同,导致了每种生物的死亡时间不同。因为有攻击力和防御力,所以设置了若一方的攻击力小于另一方的防御力,则制造成1点的伤害;若大于,则就是攻击力-防御力。

2.3 对战

因为对各种的跑位算法都设置为随机,但是将一个生物的小范围内设置了战斗算法,若是发现敌对势力,会选择黏斗还是选择离开。所以就会出现双方黏着战斗或者被另一方追着打,因为是设置了单方向攻击,所以若双方都是最后一击,那么会出现先死亡一方无效攻击。这样就会让结局出现较多的不一样。

2.4 开始前的键位

在棋盘的两边有两个摁键,是可以改变妖怪和葫芦娃双方的阵型的。(因为大娃和蝎子精是这个游戏里的爸爸,所以若是让这俩个生物对弱小的生物进行最大化杀伤,就能获得胜利(最大化杀伤:攻击对面造成有效伤害,而对面被一击补掉或者攻击力小于己方防御力,只能造成1点伤害))

3. UML类图

4. 面向对象的具体体现

4.1 封装

封装对外隐藏内部的实现,于是保证了内部实现的变化不会影响外部使用,基本属性全部用了private或者protected,仅提供查询和操作的方法窗口

例如Creature虚类里的getPath(),getBlood_current_volumn等函数,是返回只对内的List<Path>和blood_current_volumne.

  1. public List<Integer> getBloodrecord()
  2. {
  3. return this.bloodrecord;
  4. }
  5. public List<Point> getPath()
  6. {
  7. return this.path;
  8. }
  9. public ImageView getImage()
  10. {
  11. return this.image;
  12. }
  13. public ImageView getBlood()
  14. {
  15. return this.blood;
  16. }
  17. public ImageView getBloodbackground()
  18. {
  19. return this.bloodbackground;
  20. }
  21. public String getName()
  22. {
  23. return this.name;
  24. }
  25. public int getX()
  26. {
  27. return this.x;
  28. }
  29. public int getY()
  30. {
  31. return this.y;
  32. }
  33. public int getBlood_current_volumn()
  34. {
  35. return this.blood_current_volumn;
  36. }

4.2 继承

该方面的设计已经非常明显,见于UML图,在Creature虚类和众生物出可见

4.3 多态

Battlearray接口,8个阵型对此类进行各自的实现,Field里使用makefield函数的时候,会根据取值,对Battlearray进行调用,从而调用具体对象。

  1. public interface Battlearray {
  2. void createbattlearray(Field f, boolean left);
  3. }

在Soldiers和Monsters两个类中,存放各种Creature,从而达到多态的效果,可以调用该类型的集合从而得到不同的Creature对象

  1. public Soldiers(Creature one)
  2. {
  3. this.one=one;
  4. }
  1. public Monstors(Creature one)
  2. {
  3. this.one=one;
  4. }

4.4 主要的设计原则

4.4.1 ISP 接口隔离原则

接口应精简单一,体现在Formation接口和Runnable接口,只需要重写一个方法。

4.4.2 DIP 依赖倒置原则

要求面向抽象编程,具体而言所有的继承都应终止于接口或虚类,所有的继承终止于接口Battlearray、Runnable和虚类Creature。

4.4.3 CARP 合成/聚合复用原则

Replay里和Field里聚合了一些类的对象。

4.5 java机制

4.5.1 异常处理

在读写文件和线程的运行方面使用了java的异常处理机制

  1. public void run() {
  2. while(...)
  3. {
  4. try {
  5. ...
  6. f.go(this);
  7. Thread.sleep(100);
  8. } catch (InterruptedException e) {
  9. e.printStackTrace();
  10. }
  11. }
  12. }
  13. }

4.5.2 集合类型

  1. private List<Thread> ALLTHREAD=new ArrayList<Thread>();
  2. private List<List<Point>> ALLPATH=new ArrayList<List<Point>>();

4.5.3 读写文件

savefile&&readfile

  1. public void saveFile()
  2. {
  3. JFileChooser chooser = new JFileChooser();
  4. chooser.showSaveDialog(null);
  5. File file = chooser.getSelectedFile();
  6. if (file == null)
  7. JOptionPane.showMessageDialog(null, "没有选择文件");
  8. else {
  9. try {
  10. PrintWriter out = new PrintWriter(new FileOutputStream(file, true));
  11. ...
  12. out.close();
  13. } catch (FileNotFoundException e) {
  14. e.printStackTrace();
  15. }
  16. }
  17. }
  1. public boolean readFile()
  2. {
  3. JFileChooser chooser = new JFileChooser();
  4. chooser.showOpenDialog(null);
  5. File file = chooser.getSelectedFile();
  6. if (file == null)
  7. {
  8. JOptionPane.showMessageDialog(null, "没有选择文件");
  9. return false;
  10. }
  11. else {
  12. try {
  13. BufferedReader br=new BufferedReader(new FileReader(file));
  14. ...
  15. }
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. }
  20. return true;
  21. }

4.5.4 线程

每一个Creature一个线程,集中在Thread的集合里面,统一开启,对所使用的资源进行锁定,不会产生冲突。

  1. private synchronized void move(Creature one, int x, int y)
  2. {
  3. synchronized(this)
  4. {
  5. Creature two;
  6. field.get(one.x).set(one.y,two=new Nullcreature(one.x,one.y));
  7. one.movecreature(x,y);
  8. field.get(x).set(y,one);
  9. }
  10. }

4.5.5 单元测试

对战场初始化,文件读写,Creature之间对战进行了单元测试

4.6 使用说明

  • SPACE开始(正常对战中摁键无效)

  • A保存文件

  • L打开文件,自动复盘

  • 两侧摁键可以在正常对战之前改变阵型

上传的附件 cloud_download 基于java的葫芦娃游戏.zip ( 13.86mb, 3次下载 )
error_outline 下载需要10点积分

发送私信

人生就像坐飞机,飞多高不重要,重要的是安全到达目的地

10
文章数
19
评论数
最近文章
eject