java 板


LINE

※ 引述《[email protected] (習慣與應付)》之銘言: : 請問要作一個類似打地鼠的程式 : 他的邏輯程序到底該怎樣呢~~>"< : 完全沒頭緒 : 關於如何地鼠何時出現 : 又要如何控制它出現的時間 : 又要如何控制當我點到正確的位置時他會消失 : 那地鼠所在的位子固定的話 : 那是不是就控制它出現的時機就好呢 : 可是如果位置固定 : 我要如何判斷滑鼠點的位子是正確的呢 : 整各邏輯好亂喔~~>"< 還是沒案子可以寫,所以拿這個來練打字一下 (否則對不起手上的 TaClick 阿) 抬頭看一下發信站台? [驚] 這就不好意思遞名片,問要不要作業外包了 [逃] 你的問題,有一些是 Java 技術的問題 有一些則是單純的邏輯問題... 我假設你的目標是這個遊戲,但是作某種程度的簡化 http://www.eyezmaze.com/tontie/v1/index.html (有個實品總是比較好說明...) 從地鼠開始想起... 在 eyezmaze 當中的地鼠有很多屬性 不過,我們意思意思就好,簡化成兩個屬性 血量、打到的得分 既然都搞了屬性了,當然就要多生幾種地鼠,增加豐富性 所以地鼠的類別大概就是 public class Shrew { private int hp; private int hitScore; private int missScore; private Shrew(int hpAmount, int hitS, int missS){ this.hp=hpAmount; this.hitScore=hitS; this.msiiScore=missS; } public static Shrew aShrew(){ return new Shrew(1, 100, 25); } public static Shrew aBigShrew(){ return new Shrew(2, 200, 25); } //高興的話,可以多生幾種地鼠 //下面省略 getter //當地鼠被打到的時候,要扣 hp public void hit(int amount){ this.hp -= amount; } } 地鼠準備好了,接下來就是想 "洞" 要怎麼搞 洞要負責 "生" 出地鼠,時間到了要把地鼠藏起來,然後扣分 另外還要承受攻擊,如果玩家亂打沒地鼠的洞要給他懲罰性的扣分 萬一 (?) 地鼠被打到 hp 小於 1,還要幫他收屍 當然還免不了要提供一些狀態資訊 例如現在的地鼠是哪一隻... etc 所以,洞的類別大概是長成這樣子: public class Hole { private Shrew shrew; private int showTime; public Hole(){} public void createShrew(int race, int showT){ shrew = Shrew.newShrew(race); showTime = showT; } public int receiveShot(int amount){ if(shrew!=null){ shrew.hit(amount); if(shrew.getHp()<1){ int score = shrew.getHitScore(); shrew = null; return score; }else{ return 0; } }else{ return Parameter.Disorder_Penalty; } } public int cycleProcess(){ if(shrew!=null){ showTime--; if(showTime==0){ int score = -1 * shrew.getMissScore(); shrew=null; return score; } } return 0; } public Shrew getShrew(){ return shrew; } } 有了洞,接下來要想的是遊戲機台的設計 機台要有一個屬性,就是紀錄玩家的狀態 就算只打算紀錄分數,不過還是包成一個物件 這樣子哪天要擴充的話,寫起來會比較... 快樂? 當然,還要有一個屬性,就是洞 因為洞有很多個,所以我就開一個陣列來存 我想,讓機台每 x 秒算一個回合 每回合自動決定某個空的洞是不是要有地鼠冒出來 以及檢查有地鼠的洞,是不是該讓地鼠回家安養天年 既然這樣子,就偷偷用 java.util.Timer 來作這件事情 省時又省力 \囧/ 最後,就是要有一個 method,讓使用者打機台 整個程式碼,大概長成這樣 import java.util.Timer; import java.util.TimerTask; public class PlatForm { private Hole hole[]; private Player player; private Timer timer; private int cycleLength; public PlatForm(Player p, int holeAmount){ this.player = p; this.hole = new Hole[holeAmount]; initHole(); } public void start(){ TimerTask cycleTask = new TimerTask(){ public void run() { cycleRoutine(); } }; cycleLength=500; timer = new Timer(); timer.scheduleAtFixedRate(cycleTask, 0, cycleLength); } private void cycleRoutine() { for(int i=0; i<hole.length; i++){ if(hole[i].getShrew()==null){ callShrewToWorkAtHole(i); }else{ player.setScore( player.getScore()+hole[i].cycleProcess() ); } } } public void fireInTheHole(int i, int amount){ player.setScore( player.getScore()+hole[i].receiveShot(amount) ); } private void callShrewToWorkAtHole(int i) { //這是會讓玩家噴血的寫法 //實際上要依現況調整地鼠出現的機率 double ratio = Math.random(); if(ratio>0.9){ hole[i].createShrew(Shrew.BIG, 6); return; } if(ratio>0.5){ hole[i].createShrew(Shrew.NORMAL, 6); return; } } private void initHole() { for(int i=0; i<hole.length; i++){ this.hole[i]=new Hole(); } } public Hole[] getHole() { return hole; } public void stop() { timer.cancel(); } } 這些寫好之後,剩下來的就是畫面的製作 你用 JButton 來實作也好 用 Graphic 刻畫面也好 只要將玩家的操作,作一個 mapping 到 index 然後呼叫 PlatFrom.fireInTheHole() 就輕鬆自在啦... 後頭就不寫了... 整個寫下來,堪玩的版本大概三個小時就能生出來啦... ===== 學弟想聽現場版的話,可以在禮拜二來上最後一次計概輔導 哈哈哈... [逃] -- 侃侃長論鮮窒礙 http://www.psmonkey.idv.tw 眾目睽睽無心顫 telnet://legend.twbbs.org 煢居少聊常人事 殺頭容易告白難 拜託不要,我對女案主過敏 \囧/ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.204.16.17







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP