摘要:閱讀本文約分鐘處理戰(zhàn)艦游戲前言你聽(tīng)說(shuō)過(guò)有些程序員上班總是遲到,而下班又很準(zhǔn)時(shí)嗎因?yàn)樗麄兪褂昧?。?fù)現(xiàn)上一章我們的程序運(yùn)行起來(lái)了,但是還存在一些低級(jí)或者嚴(yán)重的,即當(dāng)用戶(hù)擊中一個(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ù)是由一堆等著被你當(dāng)做組件使用的類(lèi)集合而成的。你可以大量運(yùn)用這些預(yù)先創(chuàng)建好的組件來(lái)寫(xiě)出你的程序。
Bug復(fù)現(xiàn)上一章我們的程序運(yùn)行起來(lái)了,但是還存在一些低級(jí)或者嚴(yán)重的bug,即當(dāng)用戶(hù)擊中一個(gè)坐標(biāo)后可以重復(fù)擊殺來(lái)快速接受游戲。(如下圖)【Java貓說(shuō)】構(gòu)建戰(zhàn)艦類(lèi)控制臺(tái)游戲
為什么呢? 對(duì),這和我們的檢查方法有關(guān)系,我們看看這個(gè)遍歷方法
//循環(huán)遍歷 for (int cell:locationCells){ if (guess == cell){ result = "hit"; numOfHits++; break; } }
它只是進(jìn)行判斷是否擊中,但是并沒(méi)有判定之前是否已經(jīng)被猜中了。
我們需要怎么解決呢?
如果能夠找到一種數(shù)組會(huì)在刪除掉某些元素時(shí)自動(dòng)縮小就好了,這樣就不必檢查所有的元素,只要查詢(xún)它是否帶有尋找中的值就好。若它還能夠讓你取出數(shù)據(jù)而不必管理集合的細(xì)節(jié)就更好!
這里我們就要介紹這個(gè)對(duì)象,ArrayList,他不是數(shù)組,是Java函數(shù)庫(kù)中的另一個(gè)類(lèi)。
add(Object) 向list中加入對(duì)象參數(shù) remove(int index) 在索引參數(shù)中移除對(duì)象 remove(Object elem) 移除該對(duì)象 contains(Object elem) 如果和對(duì)象參數(shù)匹配返回“true” isEmpty() 如果list中沒(méi)有元素返回“true” indexOf(Object elem) 返回對(duì)象參數(shù)的索引或-1 size() 返回list中元素的個(gè)數(shù) get(int index) 返回當(dāng)前索引參數(shù)的對(duì)象
這里你還要注意一點(diǎn),在使用ArrayList時(shí),你只是在運(yùn)用ArrayList類(lèi)型的對(duì)象,因此就跟運(yùn)用其他的對(duì)象一樣,你會(huì)使用“.”運(yùn)算符來(lái)調(diào)用它的方法。
比較ArrayList與一般數(shù)組1、一般數(shù)組再創(chuàng)建時(shí)就必須確定大小
2、存放對(duì)象給一般數(shù)組時(shí)必須指定位置
3、一般數(shù)組使用特殊的語(yǔ)法
4、在Java5.0中ArrayList是參數(shù)化的(parameterized)
知道了方式,接下來(lái)我們來(lái)修復(fù)bug吧!
修改代碼我們將做如下修改
public class DotCom { private ArrayListlocationCells; int numOfHits = 0; //賦值數(shù)組 public void setLocationCells(ArrayList locs){ locationCells = locs; } //檢查用戶(hù)輸入與隨機(jī)數(shù)組是否存在相同 public String checkYourSelf(String userInput){ String result = "miss"; //檢索對(duì)象參數(shù) int index = locationCells.indexOf(userInput); if (index >= 0){ //擊中移除對(duì)象 locationCells.remove(index); //判斷是否結(jié)束或存在其余戰(zhàn)艦 if (locationCells.isEmpty()){ result = "kill"; }else{ result = "hit"; } } return result; } }
下一章讓我們來(lái)完成更完美的游戲吧!
本文已轉(zhuǎn)載個(gè)人技術(shù)公眾號(hào):UncleCatMySelf
歡迎留言討論與點(diǎn)贊
上一篇推薦:【Java貓說(shuō)】構(gòu)建戰(zhàn)艦類(lèi)控制臺(tái)游戲
下一篇推薦:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/76448.html
摘要:閱讀本文約分鐘我們將用基礎(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)分析一下具體的...
摘要:我們來(lái)看看實(shí)例變量與局部變量之間的差別實(shí)例變量是聲明在類(lèi)內(nèi)而不是方法中。局部變量在使用前必須初始化。局部變量沒(méi)有默認(rèn)值,如果在變量被初始化前就要使用的話(huà),編譯器會(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)品可能得到用戶(hù)的認(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)不是...
閱讀 3476·2023-04-26 01:45
閱讀 2266·2021-11-23 09:51
閱讀 3672·2021-10-18 13:29
閱讀 3494·2021-09-07 10:12
閱讀 722·2021-08-27 16:24
閱讀 1805·2019-08-30 15:44
閱讀 2215·2019-08-30 15:43
閱讀 3016·2019-08-30 13:11