繼承、介面自我練習時所建立的小遊戲,一開始輸入名稱來建立對戰腳色,之後以輸入招式號碼的方式互相打鬥,最後沒血的一方就輸了。

人物種族

  1. abstract public class Human {
  2. int hp = 100;
  3. int atk = 10;
  4. int def = 4;
  5. int 自我恢復 = 10;
  6. int count = 0;
  7.  
  8. public int 自我恢復() {
  9. if (自我恢復 < 0) {
  10. 自我恢復 = 0;
  11. System.err.println("過度使用,自我恢復已失效");
  12. return 自我恢復;
  13. } else {
  14. 自我恢復 -= count;
  15. count++;
  16. return 自我恢復;
  17. }
  18. }
  19. }

職業

  1. public interface 戰士 {
  2. int ihp = 10;
  3. int iatk = 4;
  4. int idef = 3;
  5. int 捨身攻擊damage = 20;
  6.  
  7. public int 捨身攻擊();
  8.  
  9. public void 能力加成();
  10.  
  11. }

角色

  1. public class 人類戰士 extends Human implements 戰士 {
  2.  
  3. private String 玩家名稱;
  4. private String 玩家職業 = "人類戰士";
  5. private int 玩家hp = super.hp;
  6. private int 玩家atk = super.atk;
  7. private int 玩家def = super.def;
  8. int 一般攻擊damage = 10;
  9. String[] 技能 = { "一般攻擊", Integer.toString(一般攻擊damage), "捨身攻擊", Integer.toString(捨身攻擊damage), "自我恢復",
  10. Integer.toString(自我恢復) };
  11.  
  12. 人類戰士(String name) {
  13. 玩家名稱 = name;
  14. }
  15.  
  16. public int 一般攻擊() {
  17. System.out.println(玩家名稱 + "使用了一般攻擊");
  18. return 一般攻擊damage;
  19. }
  20.  
  21. @Override
  22. public int 捨身攻擊() {
  23. System.out.println(玩家名稱 + "使用了捨身攻擊");
  24. return 捨身攻擊damage;
  25.  
  26. }
  27.  
  28. @Override
  29. public int 自我恢復() {
  30. System.out.println(玩家名稱 + "使用了自我恢復,將可恢復" + super.自我恢復 + "血量");
  31. super.自我恢復();
  32. return super.自我恢復;
  33. }
  34.  
  35. @Override
  36. public void 能力加成() {
  37.  
  38. System.out.println();
  39. System.out.println("玩家名稱\t" + this.玩家名稱);
  40. System.out.println("玩家職業\t" + this.玩家職業);
  41. this.玩家hp += ihp;
  42. System.out.println("血量\t" + this.玩家hp);
  43. this.玩家atk += iatk;
  44. System.out.println("攻擊力\t" + this.玩家atk);
  45. this.玩家def += idef;
  46. System.out.println("防禦力\t" + this.玩家def);
  47. }
  48.  
  49. public String get玩家名稱() {
  50. return 玩家名稱;
  51. }
  52.  
  53. public int get玩家hp() {
  54. return 玩家hp;
  55. }
  56.  
  57. public void set玩家hp(int 玩家hp) {
  58. this.玩家hp = 玩家hp;
  59. }
  60.  
  61. public int get玩家atk() {
  62. return 玩家atk;
  63. }
  64.  
  65. public void set玩家atk(int 玩家atk) {
  66. this.玩家atk = 玩家atk;
  67. }
  68.  
  69. public int get玩家def() {
  70. return 玩家def;
  71. }
  72.  
  73. public void set玩家def(int 玩家def) {
  74. this.玩家def = 玩家def;
  75. }
  76. }

主程式

  1. import java.util.Iterator;
  2. import java.util.LinkedHashMap;
  3. import java.util.Map;
  4. import java.util.Map.Entry;
  5. import java.util.Scanner;
  6.  
  7. public class TestGame {
  8.  
  9. public static void main(String[] args) {
  10.  
  11. Scanner sc = new Scanner(System.in);
  12. System.out.println("請輸入玩家A的名稱");
  13. System.out.print("=>");
  14. String 玩家A名稱 = sc.nextLine();
  15. System.out.println("請輸入玩家B的名稱");
  16. System.out.print("=>");
  17. String 玩家B名稱 = sc.nextLine();
  18.  
  19. 人類戰士 玩家A = new 人類戰士(玩家A名稱);
  20.  
  21. 玩家A.能力加成();
  22. LinkedHashMap<String, String> 玩家A技能 = new LinkedHashMap<>();
  23. for (int i = 0; i < 玩家A.技能.length; i += 2) {
  24. 玩家A技能.put(玩家A.技能[i], 玩家A.技能[i + 1]);
  25. }
  26.  
  27. 人類戰士 玩家B = new 人類戰士(玩家B名稱);
  28. 玩家B.能力加成();
  29. LinkedHashMap<String, String> 玩家B技能 = new LinkedHashMap<>();
  30. for (int i = 0; i < 玩家B.技能.length; i += 2) {
  31. 玩家B技能.put(玩家B.技能[i], 玩家B.技能[i + 1]);
  32. }
  33.  
  34. int 玩家A動作 = 0;
  35. int 玩家B動作 = 0;
  36. do {
  37. do {
  38. try {
  39. System.out.println();
  40. System.out.println(玩家A.get玩家名稱() + "請輸入使用招式的順序號碼 ");
  41. int 招式號碼 = 0;
  42. Iterator<Entry<String, String>> iiIterator = 玩家A技能.entrySet().iterator();
  43. while (iiIterator.hasNext()) {
  44. 招式號碼++;
  45. Map.Entry<String, String> entry = iiIterator.next();
  46. System.out.println(招式號碼 + ")" + entry.getKey() + "\t預計產生效果(初步)\t" + entry.getValue());
  47. }
  48.  
  49. System.out.print("=>");
  50. int 動作 = Integer.parseInt(sc.nextLine());
  51. if (動作 > 玩家A技能.size()) {
  52. throw new ArithmeticException();
  53. } else {
  54. 玩家A動作 = 動作;
  55. break;
  56. }
  57. } catch (Exception e) {
  58. System.err.println("輸入錯誤");
  59. }
  60. } while (true);
  61.  
  62. switch (玩家A動作) {
  63. case 1:
  64. 玩家B.set玩家hp(玩家B.get玩家hp() - (玩家A.一般攻擊() - 玩家B.get玩家def()));
  65. System.out.println(玩家B.get玩家名稱() + "受了" + 玩家A.一般攻擊damage + "傷害,血量還剩" + 玩家B.get玩家hp());
  66. break;
  67. case 2:
  68. 玩家B.set玩家hp(玩家B.get玩家hp() - (玩家A.捨身攻擊() - 玩家B.get玩家def()));
  69. System.out.println(玩家B.get玩家名稱() + "受了" + 玩家A.捨身攻擊damage + "傷害,血量還剩" + 玩家B.get玩家hp());
  70. 玩家A.set玩家hp(玩家A.get玩家hp() - 玩家B.get玩家atk());
  71. System.out.println(玩家A.get玩家名稱() + "受到反擊,損失" + 玩家B.get玩家atk() + "滴血,血量還剩" + 玩家A.get玩家hp());
  72. break;
  73. case 3:
  74. 玩家A.set玩家hp(玩家A.get玩家hp() + 玩家A.自我恢復());
  75. System.out.println(玩家A.get玩家名稱() + "血量還剩" + 玩家A.get玩家hp());
  76. break;
  77. default:
  78. break;
  79. }
  80. System.out.println();
  81. if (玩家B.get玩家hp() <= 0 && 玩家A.get玩家hp() <= 0) {
  82. System.out.println("無人生還");
  83. break;
  84. } else if (玩家B.get玩家hp() <= 0) {
  85. System.out.println(玩家A.get玩家名稱() + "獲勝");
  86. break;
  87. } else if (玩家A.get玩家hp() <= 0) {
  88. System.out.println(玩家B.get玩家名稱() + "獲勝");
  89. break;
  90. }
  91.  
  92. do {
  93. try {
  94. System.out.println(玩家B.get玩家名稱() + "請輸入使用招式的順序號碼 ");
  95. int 招式號碼 = 0;
  96. Iterator<Entry<String, String>> iiIterator = 玩家A技能.entrySet().iterator();
  97. while (iiIterator.hasNext()) {
  98. 招式號碼++;
  99. Map.Entry<String, String> entry = iiIterator.next();
  100. System.out.println(招式號碼 + ")" + entry.getKey() + "\t預計產生效果(初步)\t" + entry.getValue());
  101. }
  102. System.out.print("=>");
  103. int 動作 = Integer.parseInt(sc.nextLine());
  104. if (動作 > 玩家B技能.size()) {
  105. throw new ArithmeticException();
  106. } else {
  107. 玩家B動作 = 動作;
  108. break;
  109. }
  110. } catch (Exception e) {
  111. System.err.println("輸入錯誤");
  112. }
  113. } while (true);
  114.  
  115. switch (玩家B動作) {
  116. case 1:
  117. 玩家A.set玩家hp(玩家A.get玩家hp() - (玩家B.一般攻擊() - 玩家A.get玩家def()));
  118. System.out.println(玩家A.get玩家名稱() + "受了" + 玩家B.一般攻擊damage + "傷害,血量還剩" + 玩家A.get玩家hp());
  119. break;
  120. case 2:
  121. 玩家A.set玩家hp(玩家A.get玩家hp() - (玩家B.捨身攻擊() - 玩家A.get玩家def()));
  122. System.out.println(玩家A.get玩家名稱() + "受了" + 玩家B.捨身攻擊damage + "傷害,血量還剩" + 玩家A.get玩家hp());
  123. 玩家B.set玩家hp(玩家B.get玩家hp() - 玩家A.get玩家atk());
  124. System.out.println(玩家B.get玩家名稱() + "受到反擊,損失" + 玩家A.get玩家atk() + "滴血,血量還剩" + 玩家B.get玩家hp());
  125. break;
  126. case 3:
  127. 玩家B.set玩家hp(玩家B.get玩家hp() + 玩家B.自我恢復());
  128. System.out.println(玩家B.get玩家名稱() + "血量還剩" + 玩家B.get玩家hp());
  129. break;
  130. default:
  131. break;
  132. }
  133. System.out.println();
  134. if (玩家B.get玩家hp() <= 0 && 玩家A.get玩家hp() <= 0) {
  135. System.out.println("無人生還");
  136. break;
  137. } else if (玩家B.get玩家hp() <= 0) {
  138. System.out.println(玩家A.get玩家名稱() + "獲勝");
  139. break;
  140. } else if (玩家A.get玩家hp() <= 0) {
  141. System.out.println(玩家B.get玩家名稱() + "獲勝");
  142. break;
  143. }
  144.  
  145. } while (true);
  146. }
  147. }

[Java] 練習用對戰小遊戲的更多相关文章

  1. 中國區的代理協議的韓國遊戲廠商PatiGames

    “與阿裏巴巴簽署旗下游戲「突突三國」在中國區的代理協議的韓國遊戲廠商PatiGames決定與阿裏巴巴終止合作.”相信這條前不久報導的新聞,很多人並不陌生,但這背後其實並不像表面那樣簡單.早在今年4月P ...

  2. Big Data應用:以"玩家意見"之數據分析來探討何謂"健康型線上遊戲"(上)

    首先,所有資料都可以從網路上找到,只是我做了一些分析與整理而已.純粹分享心得~~ 最近再做研究的時候我跟我的同事K先生在某次偶然的討論中發現了一件有趣的事情. [疑~~~~~~~新楓之谷的玩家人氣指數 ...

  3. Java學習筆記(基本語法)

    本文件是以學習筆記的概念為基礎,用於自我的複習紀錄,不過也開放各位的概念指證.畢竟學習過程中難免會出現觀念錯誤的問題.也感謝各位的觀念指證. 安裝JDK 在Oracle網站中找自己系統的JDK下載位置 ...

  4. [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習

    透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...

  5. [转]2010 Ruby on Rails 書單 與 練習作業

    原帖:http://wp.xdite.net/?p=1754 ========= 學習 Ruby on Rails 最快的途徑無非是直接使用 Rails 撰寫產品.而這個過程中若有 mentor 指導 ...

  6. Java学习过程中的总结的小知识点(长期更新)

    Java学习过程中的总结的小知识点 (主要是自己不会的知识和容易搞错的东西) 计算某个程序运行的时间 long stime=System.currentTimeMillis(); copy3(file ...

  7. Java内存管理的9个小技巧

    Java内存管理的9个小技巧很多人都说“Java完了,只等着衰亡吧!”,为什么呢?最简单的的例子就是Java做的系统时非常占内存!一听到这样的话,一定会有不少人站出来为Java辩护,并举出一堆的性能测 ...

  8. Java 课程设计 "Give it up"小游戏(团队)

    JAVA课程设计 "永不言弃"小游戏(From :Niverse) 通过Swing技术创建游戏的登陆注册界面,使用mySQL数据库技术完成用户的各项信息保存和游戏完成后的成绩保存. ...

  9. 《java入门第一季》之类小案例(模拟用户登录)

    首先是做一个用户登录的小案例.在此基础上加入其它逻辑. import java.util.Scanner; /* * 模拟登录,给三次机会,并提示还有几次.如果登录成功,就可以玩猜数字小游戏了. * ...

随机推荐

  1. java实现链栈

    package linkstack; /** * Created by Administrator on 2019/4/18. */ public class LinkStack { private ...

  2. jsapi 调起微信支付的的踩坑

    问题: 公众微信号调起微信支付的时候,有的时候调起支付成功,有的时候调起支付失败.利用抓包工具抓取数据显示授权和调用后台的微信预支付订单接口都成功并且都返回正确的数据.但是调起支付的时候传入的data ...

  3. SVN分支与合并【超详细的图文教程】(转载)

    SVN分支与合并 一. 分支与合并的概念 二. SVN分支的意义 三. 如何创建分支与合并分支 一.分支与合并的概念: 分支:版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上.这 ...

  4. LeetCode 547 朋友圈

    题目: 班上有 N 名学生.其中有些人是朋友,有些则不是.他们的友谊具有是传递性.如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友.所谓的朋友圈,是指所有朋友的 ...

  5. BluePrism初尝2

    在接近三周的自学中,初步体验到了RPA的甜头. 在对BP这个工具慢慢的深入接触中,从0 到1的探索式学习,从最开始的一个个的小功能模块的用途,每一个的属性的功能,到现在自己能初步尝试组织一些简单的流程 ...

  6. java proxy 转包

    package org.rx.socks.proxy; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; ...

  7. 远程桌面服务当前正忙,因此无法完成您尝试执行的任务-win2008R2

    远程桌面服务当前正忙,因此无法完成您尝试执行的任务,近来我服务器出现这情况, 到达主机房看主机...不可以登陆,也没有登陆框.只能关机. 在微软找到的原因是:Csrss.exe 进程和某些应用程序 ( ...

  8. centos6 升级安装openssh7

    1.准备工作: 查看下当前SSH版本: [root@bogon ~]# ssh -V OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013 或者 [root@b ...

  9. PHP 基于pdo的数据库操作类

    http://www.php.cn/php-weizijiaocheng-404645.html <?php class Pdodb{   protected $pdo;   protected ...

  10. CSS常用属性-xy

    一.文本Text CSS text-align 属性 文本对齐方式 CSS text-decoration 属性 text-decoration 属性规定添加到文本的修饰 CSS line-heigh ...