摘要:閱讀本文約分鐘我們將用基礎(chǔ)來(lái)模擬實(shí)現(xiàn)大家熟悉的戰(zhàn)艦游戲,目標(biāo)是要猜想對(duì)方戰(zhàn)艦坐標(biāo),然后開(kāi)炮攻擊,命中所有戰(zhàn)艦后,游戲結(jié)束。本文已轉(zhuǎn)載個(gè)人技術(shù)公眾號(hào)歡迎留言討論與點(diǎn)贊上一篇推薦貓說(shuō)實(shí)例變量與局部變量下一篇推薦貓說(shuō)處理戰(zhàn)艦游戲
閱讀本文約 “7分鐘”
我們將用基礎(chǔ)Java來(lái)模擬實(shí)現(xiàn)大家熟悉的戰(zhàn)艦游戲,目標(biāo)是要猜想對(duì)方戰(zhàn)艦坐標(biāo),然后開(kāi)炮攻擊,命中所有戰(zhàn)艦后,游戲結(jié)束。接下來(lái)我們來(lái)分析一下具體的實(shí)現(xiàn)。
游戲目標(biāo):玩家輸入坐標(biāo),打擊隨機(jī)生成的戰(zhàn)艦,全部打掉時(shí)游戲通關(guān)
初始設(shè)置:創(chuàng)建隨機(jī)戰(zhàn)艦數(shù)組坐標(biāo),這里我們用Int類型的數(shù)組來(lái)表示,開(kāi)始等待用戶攻擊
進(jìn)行游戲:用戶輸入一個(gè)坐標(biāo)后,游戲程序判斷是否擊中,返回提示“miss”、“hit”,當(dāng)全部擊中時(shí),返回“kill”,顯示用戶總共擊殺次數(shù)并結(jié)束游戲。
由此我們大概需要三個(gè)類,一個(gè)主執(zhí)行類,一個(gè)游戲設(shè)置與邏輯判斷類,一個(gè)用戶輸入交互類
我們先看看用戶交互類,其作用就是獲取用戶輸入坐標(biāo)
public class GameHelper { //獲取用戶輸入值 public String getUserInput(String prompt){ String inputLine = null; System.out.println(prompt + " "); try { BufferedReader is = new BufferedReader(new InputStreamReader(System.in)); inputLine = is.readLine(); if (inputLine.length()==0) return null; }catch (IOException e){ System.out.println("IOException: "+e); } return inputLine; } }
接下來(lái)看看游戲設(shè)置類與邏輯處理,需要一個(gè)數(shù)組set,需要一個(gè)對(duì)數(shù)組的循環(huán)判斷
public class SimpleDotCom { int[] locationCells; int numOfHits = 0; //賦值數(shù)組 public void setLocationCells(int[] locs){ locationCells = locs; } //檢查用戶輸入與隨機(jī)數(shù)組是否存在相同 public String checkYourSelf(String stringGuess){ int guess = Integer.parseInt(stringGuess); String result = "miss"; //循環(huán)遍歷 for (int cell:locationCells){ if (guess == cell){ result = "hit"; numOfHits++; break; } } //擊中次數(shù)等于數(shù)組長(zhǎng)度時(shí),全部擊殺完成 if (numOfHits == locationCells.length){ result = "kill"; } System.out.println(result); return result; } }
看到這里你應(yīng)該也能寫出主執(zhí)行方法了吧
public class Main { public static void main(String[] args) { //記錄玩家猜測(cè)次數(shù)的變量 int numOfGuesses = 0; //獲取玩家輸入的對(duì)象 GameHelper helper = new GameHelper(); //創(chuàng)建dotCom對(duì)象 SimpleDotCom dotCom = new SimpleDotCom(); //用隨機(jī)數(shù)產(chǎn)生第一格的位置,然后以此制作數(shù)組 int randomNum = (int)(Math.random()*5); int[] locations = {randomNum,randomNum+1,randomNum+2}; //賦值位置 dotCom.setLocationCells(locations); //記錄游戲是否繼續(xù) boolean isAlive = true; while (isAlive == true){ //獲取玩家輸入 String guess = helper.getUserInput("請(qǐng)輸入一個(gè)數(shù)字"); //檢查玩家的猜測(cè)并將結(jié)果存儲(chǔ)在String中 String result = dotCom.checkYourSelf(guess); numOfGuesses++; //擊殺完成,退出,打印擊殺次數(shù) if (result.equals("kill")){ isAlive = false; System.out.println("你執(zhí)行了"+numOfGuesses+"擊殺"); } } } }游戲效果
下次我們?cè)賹?shí)現(xiàn)一個(gè)更好的游戲吧。
本文已轉(zhuǎn)載個(gè)人技術(shù)公眾號(hào):UncleCatMySelf
歡迎留言討論與點(diǎn)贊
上一篇推薦:【Java貓說(shuō)】實(shí)例變量與局部變量
下一篇推薦:【Java貓說(shuō)】ArrayList處理戰(zhàn)艦游戲BUG
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76450.html
摘要:閱讀本文約分鐘處理戰(zhàn)艦游戲前言你聽(tīng)說(shuō)過(guò)有些程序員上班總是遲到,而下班又很準(zhǔn)時(shí)嗎因?yàn)樗麄兪褂昧?。?fù)現(xiàn)上一章我們的程序運(yùn)行起來(lái)了,但是還存在一些低級(jí)或者嚴(yán)重的,即當(dāng)用戶擊中一個(gè)坐標(biāo)后可以重復(fù)擊殺來(lái)快速接受游戲。 閱讀本文約 6分鐘 ArrayList處理戰(zhàn)艦游戲BUG 前言 你聽(tīng)說(shuō)過(guò)有些程序員上班總是遲到,而下班又很準(zhǔn)時(shí)嗎?因?yàn)樗麄兪褂昧薐ava API。核心Java函數(shù)庫(kù)是由一堆等著被...
摘要:我們來(lái)看看實(shí)例變量與局部變量之間的差別實(shí)例變量是聲明在類內(nèi)而不是方法中。局部變量在使用前必須初始化。局部變量沒(méi)有默認(rèn)值,如果在變量被初始化前就要使用的話,編譯器會(huì)顯示錯(cuò)誤。 閱讀本文約1.8分鐘 實(shí)例變量永遠(yuǎn)都會(huì)有默認(rèn)值,如果你沒(méi)有明確的賦值給實(shí)例變量,或者沒(méi)有調(diào)用setter,實(shí)例變量還是會(huì)有值! integers 0 floating points 0.0 boolean...
摘要:當(dāng)我想聊聊的是對(duì)于編程系統(tǒng)編程系統(tǒng)產(chǎn)品編程其實(shí)其中也有很多好玩的地方與神奇的景象。最重要的一點(diǎn)是,有助于他人,我很開(kāi)心編程系統(tǒng)產(chǎn)品可能得到用戶的認(rèn)可,且對(duì)其有所幫助。這就是編程,一個(gè)讓許多人痛苦掙扎卻又是一種樂(lè)趣和苦惱共存的創(chuàng)造性活動(dòng)。 程序員是一個(gè)在你即將30、40隨時(shí)可能面臨高壓禿頂?shù)墓ぷ鳎@是一個(gè)朋友在聽(tīng)到我的新職業(yè)的第一反應(yīng)。我也習(xí)以為常的笑笑敷衍過(guò)去。 現(xiàn)在高壓已經(jīng)不是...
閱讀 1094·2021-10-08 10:04
閱讀 3530·2021-08-05 10:01
閱讀 2287·2019-08-30 11:04
閱讀 1808·2019-08-29 15:29
閱讀 856·2019-08-29 15:12
閱讀 1680·2019-08-26 12:11
閱讀 3127·2019-08-26 11:33
閱讀 1172·2019-08-26 10:23