您好,登錄后才能下訂單哦!
這篇“Java怎么實現QuickHit游戲”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Java怎么實現QuickHit游戲”文章吧。
(1)QuickHit游戲考驗學員鍵盤輸入內容的速度和準確性。
(2)根據輸入速率和正確性將玩家分為不同級別,級別越高,一次顯示的字符數越多,玩家正確輸入一次的得分也越高。
(3)如果玩家在規定的時間內完成規定次數的輸入,正確率達到規定要求,則玩家升級(為了簡單起見,規定用戶只要輸入錯誤一次,則游戲結束)
(4)玩家最高級別為6級,初始級別一律為一級。
完成“QuickHit”,對于開發環境的要求如下:
(1)開發工具:MyEclipse 10
(2)JDK1.7
(1)面向對象程序設計的思想
(2)使用類圖理解類的關系
(3)類的封裝
(4)構造方法的使用
(5)this和static關鍵字的使用
1、先編寫級別類Level:
(1)定義屬性:
private int levelNo; // 級別號
private int strLength; // 各級別一次輸出字符串的長度
private int strTimes; // 各級別輸出字符串的次數
private int timeLimit; // 各級別闖關的時間限制
private int perScore; // 各級別成功輸入一次字符串后增加的分值
(2)添加包含所有參數的有參構造方法(無參構造方法后面不需要使用,可以不添加)
(3)針對封裝好的屬性,添加getXxx()方法,不需要添加setXxx()方法(針對級別的屬性是系統規定好的,不需要用戶設置)
2、編寫級別參數類LevelParam:
(1)此項目會涉及到6個級別(每個級別是一個對象),所以先創建一個長度為6,類型為Level的數組,這個數組可以聲明為靜態常量值
(2)使用有參構造方法創建6個Level類對象,并將這6個對象存儲到第一步創建的數組中,可以將這個操作生命在靜態代碼塊中
3、創建Play玩家類:
(1)定義屬性:
private int levelNo; // 級別號
private int curScore; // 當前積分
private long startTime = 0; // 各級別開始時間
private int elapsedTime; // 各級別已用時間
(2)添加無參構造方法、有參構造方法、getXxx()/setXxx()方法
(3)定義玩家玩游戲的方法play():
功能:用戶由默認0級升級到1級,開始玩游戲(調用Game類里的printStr()方法和printResult())4、創建游戲類Game:
(1)定義屬性:
private Player player;// 玩家
(2)添加無參構造方法、有參構造方法
(3)定義方法printStr()
功能:根據用戶級別輸出指定長度的字符串(字符串的內容是隨機產生的)
(4)定義方法printResult()
功能:判斷用戶輸入的字符串與系統隨機產生的字符串內容是否相同
1)如果用戶輸入的字符串與系統產生的字符串相同:
--》用戶輸入字符串的時間>對應級別需要的時間:超時,退出游戲系統
--》用戶輸入字符串的時間<對應級別需要的時間:
計算用戶完游戲的時間
用戶玩游戲積累的積分
輸出當前用戶所處的級別,玩游戲時間、積累的積分
計算該游戲最后一個級別的總分并判斷用戶是否到達第六級別以及積累的積分是否等于最高級別的積分,如果滿足,輸出闖關成功
2)如果用戶輸入的字符串與系統產生的字符串相同:
直接退出游戲系統
5、定義測試類:
在main()方法中創建Play類對象,調用play()方法,開始游戲
1、初始屬性:Level類(全部代碼)
package cn.bdqn.demo09; public class Level { //定義屬性 private int levelNo; // 級別號 private int strLength; // 各級別一次輸出字符串的長度 private int strTimes; // 各級別輸出字符串的次數 private int timeLimit; // 各級別闖關的時間限制 private int perScore; // 各級別成功輸入一次字符串后增加的分值 //添加有參構造 public Level(int levelNo, int strLength, int strTimes, int timeLimit, int perScore) { super(); this.levelNo = levelNo; this.strLength = strLength; this.strTimes = strTimes; this.timeLimit = timeLimit; this.perScore = perScore; } //添加get方法 public int getLevelNo() { return levelNo; } public int getStrLength() { return strLength; } public int getStrTimes() { return strTimes; } public int getTimeLimit() { return timeLimit; } public int getPerScore() { return perScore; } }
2、初始類Level對象:LevelParam類(全部代碼)
package cn.bdqn.demo09; public class LevelParam { // 定義靜態常量:Level數組 public static final Level[] levels = new Level[6]; // 用靜態代碼塊初始化Level對象 static { levels[0] = new Level(1, 2, 10, 30, 1); levels[1] = new Level(2, 3, 9, 27, 2); levels[2] = new Level(3, 4, 8, 24, 3); levels[3] = new Level(4, 5, 7, 21, 4); levels[4] = new Level(5, 6, 6, 16, 5); levels[5] = new Level(6, 7, 5, 12, 6); } }
3、系統類:Game(全部代碼)
package cn.bdqn.demo09; import java.util.Random; import java.util.Scanner; public class Game { Scanner sc=new Scanner(System.in); // 定義屬性 private Player player; String str=""; public Game(Player player) { super(); this.player = player; } // 定義系統輸入printStr方法 public String printStr() { StringBuffer buffer = new StringBuffer(); int strLength = LevelParam.levels[player.getLevelNo()-1].getStrLength(); Random random = new Random(); // System.out.println(strLength); // 通過循環生成要輸出的字符串 for (int i = 0; i < strLength; i++) { int rand = random.nextInt(strLength); // 產生隨機數 // 根據隨機數拼接字符串 switch (rand) { case 0: buffer.append(">"); break; case 1: buffer.append("<"); break; case 2: buffer.append("*"); break; case 3: buffer.append("#"); break; case 4: buffer.append("@"); break; case 5: buffer.append("$"); break; default: break; } } str=buffer.toString(); System.out.println(str); return str; } // 定義printResult()方法 public void printResult(String out,String in) { if(out.equals(in)){ int currentTime=(int)System.currentTimeMillis()/1000; player.setElapsedTime(currentTime); //用戶輸入字符串的時間<對應級別需要的時間: if(player.getElapsedTime()-player.getStartTime() < LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){ //計算當前積分 player.setCurScore(player.getCurScore()+ LevelParam.levels[player.getLevelNo()-1].getPerScore()); //計算已用時間 player.setElapsedTime(currentTime-(int)player.getStartTime()); //輸出當前積分、當前級別、已用時間 System.out.println("輸入正確,您的級別為"+player.getLevelNo()+"級,您的積分為"+player.getCurScore() +"分,總用時為:"+player.getElapsedTime()+"秒。"); //判斷用戶是否已經闖過最后一關 if(player.getLevelNo()==6){ int score=LevelParam.levels[player.getLevelNo()-1].getPerScore()* LevelParam.levels[player.getLevelNo()-1].getStrTimes(); if(player.getCurScore()==score){ System.out.println("您已闖關成功,成為絕世高手,恭喜你!!!"); System.exit(0); } } }else{ System.out.println("你輸入太慢了,已經超時,退出!"); System.exit(1); } }else{ System.out.println("輸入錯誤,退出!"); System.exit(1); } } }
4、玩家類:Player類(全部代碼)
package cn.bdqn.demo09; import java.util.Scanner; public class Player { //定義屬性 private int levelNo; // 級別號 private int curScore; // 當前積分 private long startTime = 0; // 各級別開始時間 private int elapsedTime; // 各級別已用時間 //添加get/set方法 public int getLevelNo() { return levelNo; } public void setLevelNo(int levelNo) { this.levelNo = levelNo; } public int getCurScore() { return curScore; } public void setCurScore(int curScore) { this.curScore = curScore; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public int getElapsedTime() { return elapsedTime; } public void setElapsedTime(int elapsedTime) { this.elapsedTime = elapsedTime; } //定義玩家玩游戲的方法 public void play(){ Game game=new Game(this); Scanner sc=new Scanner(System.in); for (int i = 0; i < LevelParam.levels.length; i++) { //1、晉級 levelNo+=1; //2、晉級后計時清零,積分清零 startTime=(int)System.currentTimeMillis()/1000; curScore=0; //3、內層循環一次,完成一次字符串輸出、輸入、比較 for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTimes(); j++) { //系統輸出 String outStr=game.printStr(); //用戶輸入 String inStr=sc.next(); //判斷用戶輸入是否正確,并顯示相應信息 game.printResult(outStr, inStr); } } sc.close(); } }
5、測試類:GameTest類(全部代碼)
package cn.bdqn.demo09; public class GameTest { public static void main(String[] args) { Player player=new Player(); player.play(); } }
以上就是關于“Java怎么實現QuickHit游戲”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。