java類與對象案例之打字游戲
類與對象案例-童年回憶之打字游戲
一、玩家類
二、等級類
三、游戲類
四、等級地圖
五、測試類
這次要做的案例是一個打字游戲的案例,相信大家小時候都玩過金山打字通的警察抓小偷和飛機大戰(zhàn),這次的案例是類似的簡易版。
首先對于這個案例,我們要解決的是如何生成隨機的字符串,如何判斷生成的字符串和輸入的字符串是否相等。
一、玩家類
package com.yc.oop6.hc0705; public class Player { private int score; //積分 private long startTime; //各級別的開始時間 private long dis; //每次闖關剩余時間 private int levelNo; //級別號碼 public int getScore() { return score; } public void setScore(int score) { this.score = score; } public long getStartTime() { return startTime; } public void setStartTime(long startTime) { this.startTime = startTime; } public int getLevelNo() { return levelNo; } public void setLevelNo(int levelNo) { this.levelNo = levelNo; } public Player(int score, long startTime, int levelNo) { super(); this.score = score; this.startTime = startTime; this.levelNo = levelNo; } public Player() { super(); } public long getDis() { return dis; } public void setDis(long dis) { this.dis = dis; } }
二、等級類
package com.yc.oop6.hc0705; public class Level { private int levelNo; //第幾關 private int strLength; //字符串長度 private int strTime; //需要輸入的次數(shù) private int timeLimit; //時間限制 private int score; //答對一次獲得的積分 public int getLevelNo() { return levelNo; } public int getStrLength() { return strLength; } public int getStrTime() { return strTime; } public int getTimeLimit() { return timeLimit; } public int getScore() { return score; } public Level(int levelNo, int strLength, int strTime, int timeLimit, int score) { super(); this.levelNo = levelNo; this.strLength = strLength; this.strTime = strTime; this.timeLimit = timeLimit; this.score = score; } public Level() { super(); } }
三、游戲類
package com.yc.oop6.hc0705; import java.util.Random; import java.util.Scanner; public class Game { private Player player; private Random r = new Random(); private Scanner sc = new Scanner(System.in) ; public Game(Player player) { this.player = player; } //開始游戲 public void startGame() { System.out.println("游戲開始"); //開始闖關 for(int i = 0; i < Levels.ls.length; i++) { System.out.println("開始進入第" + (i+1) + "關"); //每一關的開始在這里 player.setLevelNo(player.getLevelNo() + 1); player.setStartTime(System.currentTimeMillis()); //循環(huán),這一關要輸入多少次 for(int j = 0 ; j < Levels.ls[player.getLevelNo() - 1].getStrTime() ; j++ ) { String out = printStr(); System.out.println(out); String in = sc.nextLine(); boolean flag = result(in, out); if(flag == false) { System.exit(1);; } } //每剩下1s 增加20分 player.setScore(player.getScore() + (int)player.getDis() * 20); System.out.println("完成第" + (i+1) + "關,您現(xiàn)在的積分為:" + player.getScore()); System.out.println("進入下一關"); } } //隨機字符串 public String printStr( ) { String str = ""; double rNum = 0; for(int i = 0; i < Levels.ls[player.getLevelNo()-1].getStrLength(); i++ ) { rNum = r.nextDouble(); if(rNum < 0.3333) { str += (r.nextInt(9)+1); }else if(rNum < 0.6667){ str += (char)(r.nextInt(26)+65); }else { str += (char)(r.nextInt(26)+97); } } return str; } //字符串對比 public boolean result(String in, String out) { //字符串判斷 if(out.equals(in)) { //先獲取一下當前的系統(tǒng)時間 long endTimes = System.currentTimeMillis(); long startTimes = player.getStartTime(); //獲得下一關的時間 long dis = Levels.ls[player.getLevelNo() -1 ].getTimeLimit(); if((endTimes - startTimes)/1000 > dis) { System.out.println("游戲超時,游戲結束,您的最終得分為:" + player.getScore()); return false; }else { //輸入正確,且沒有超時 //加積分 int score = Levels.ls[player.getLevelNo()].getScore(); player.setDis(dis - (endTimes - startTimes)/1000); player.setScore(player.getScore() + score ); System.out.println("輸入正確,您現(xiàn)在的積分為:"+ player.getScore() +" ,這一關您還有: " + player.getDis() + " 秒鐘"); return true; } }else { System.out.println("輸入錯誤,游戲結束,您的最終得分為:" + player.getScore()); return false;//輸入錯誤 } } }
四、等級地圖
package com.yc.oop6.hc0705; public class Levels { //定義一個靜態(tài)的對象數(shù)組 public static Level ls[] = new Level[7]; static { ls[0] = new Level(1,2,5,20,10); ls[1] = new Level(2,3,5,18,20); ls[2] = new Level(3,4,4,16,30); ls[3] = new Level(4,5,4,15,40); ls[4] = new Level(5,6,4,15,50); ls[5] = new Level(6,7,3,15,60); ls[6] = new Level(7,8,3,15,70); } }
五、測試類
package com.yc.oop6.hc0705; public class Test { public static void main(String[] args) { Player p = new Player(); Game g = new Game(p); g.startGame(); } }
詳細的解釋都在代碼的注釋里了,大家細品。
更多有趣的經(jīng)典小游戲實現(xiàn)專題,分享給大家:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring Cloud Alibaba和Dubbo融合實現(xiàn)
這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04SpringBoot在一定時間內限制接口請求次數(shù)的實現(xiàn)示例
在項目中,接口的暴露在外面,很多人就會惡意多次快速請求,本文主要介紹了SpringBoot在一定時間內限制接口請求次數(shù)的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2022-03-03easycode配置成mybatis-plus模板的實現(xiàn)方法
本文主要介紹了easycode配置成mybatis-plus模板的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-09-09SpringBoot實現(xiàn)多端口監(jiān)聽的代碼示例
當你需要在同一個Spring Boot應用中,通過不同的端口來提供不同的服務或功能時,就需要實現(xiàn)多端口監(jiān)聽,所以本文給大家介紹了SpringBoot實現(xiàn)多端口監(jiān)聽的方法示例,并有相關的代碼示例供大家參考,需要的朋友可以參考下2024-09-09Springboot 中使用 Aop代碼實戰(zhàn)教程
AOP的編程思想是把對類對象的橫切問題點,從業(yè)務邏輯中分離出來,從而達到解耦的目的,增加代碼的復用性,提高開發(fā)效率,這篇文章主要介紹了Springboot中使用Aop代碼實戰(zhàn)教程,需要的朋友可以參考下2023-07-07