本來是閒得慌無聊纔去嘗試作這個項目的,由於小時候玩小霸王的遊戲機,那個時候常常玩這個遊戲吧,特別是喜歡那種自定義地圖的模式,以爲自由度很是不錯。總之關於這個遊戲,想說的一大堆。鑑於能有個空閒的時間,打算好好整理下這段時間的思路,也算是一個分享吧,想到什麼就說什麼。算法
最開始的時候,來想既然你要作一個簡易的坦克小遊戲,那麼確定不容易的啊,你要作這個項目的分析,整個遊戲流程的分析,就好比說,坦克遊戲,你要能操控坦克啊,能擊毀敵人坦克啊,而後再加個分數顯示什麼的等等,那麼最基本的內容大概也就是這麼多了,其實到項目中期的時候,你可能會發現本身當初想的功能實現不了,因此你要設定,就像是計劃同樣,還有可能你作作作,中期的時候,你會很失敗的發現本身寫的代碼冗餘過高了,不少細節處理,其實都有技巧的,但你是不會啊,你不知道,而後你就啪啪啪,一大堆的重複代碼就這樣敲上去了,後面你就灰常痛苦,而後愈來愈沒興趣,沒有感受了,惡性循環就開始了,固然我也不是說這樣很差,其實這也是一個慢慢提升的過程,你錯誤處理的多了,你會積累大量的經驗,隨之技巧也就慢慢上去了。因此啊,你本身要去思考,去選擇一種適合你的方式來作。網絡
來說下整個項目流程個人一些想法吧,本身總結的,中文水平不行,求輕噴!!!多線程
你看啊,若是你要實現這個遊戲,你要用到哪些知識點,就這個坦克遊戲,我當初的想法比較單純,首先,你本身做爲一個遊戲參與者,你要操控本身的坦克遊戲吧,那麼確定要用到各類監控,想到這裏,我多說一句,你要開發一個項目,首先你要分解這個項目,就是用面向對象的方法來分解,你要保證項目分析裏面對項目的理解能夠確保後期對代碼的重整理較容易,大概也就是這個意思吧。反正我以爲這個很是重要,好,那麼剛剛咱們說到操縱這個功能,你用的是監控,你要監控好比上下左右,發射子彈這些操做,這個是最基礎的功能,不詳細講,而後你要懂得繪圖,多線程這兩個核心的部分,這兩個核心知識點貫穿整個遊戲,繪圖是什麼,繪圖就是你去不斷更新這個界面,那麼這個時候你要去想怎麼更新呢,要更新的數據從何而來,並且在你項目中期,不少因素會對你繪圖產生影響,反正當初我寫的時候,特別頭痛這個。多線程是什麼,若是你要實現人機交互,你必然要電腦按照你給定的思路去作,這個時候,你要把這個任務交給線程去解決,就好比ai設置,其中你能夠設定不少算法,來改變ai的智商(不知道這樣叫妥不妥,其實ai很聰明的)。當你大致上懂得了這些後,你還須要懂界面佈局這個環節,這裏面也是有不少技巧的,很少說了。函數
下面來說下整個遊戲代碼思路吧,一個坦克的遊戲,你要分紅幾個類來處理,首先,tank應該是一個最基礎的類,你能夠在這個tank類上派生出本身的坦克和敵人的坦克,那麼這個tank類須要哪些屬性呢?坦克的座標值,坦克的類型,坦克的生命值,坦克的速度,坦克的方向,固然你也能夠加上坦克的顏色,圖片等屬性,這個是後期的工做,不說。好了,既然有tank類,你確定要有一個子彈類zidan(原諒我英語渣),zidan類應該有方向,座標值,生命,速度等屬性,當時我另外加了一個半徑屬性,後面發現畫蛇添足。如今你已經有兩個這樣的類了,你能夠先進行簡單的測試,你要在一個JFrame上畫出整個背景圖,固然你要另建一個類了,你能夠給定一個座標值,在當前位置畫出一輛坦克,坦克能夠用圖片代替,除非你手繪技術和我同樣渣,在畫出後,你能夠添加監控來控制坦克移動,其實這個實現很簡單,你能夠派生出JPanel類,而後用重繪這個功能實現,當你完成這個功能後,你能夠嘗試去修改坦克的各類屬性,來確保後面不會由於小錯誤而糾結的不要不要的。好了,既然你能夠實現自由控制坦克,那接下來你要去實現射擊這個功能,射擊功能就是要讓坦克發射子彈,因此你要在本身的坦克類裏面設定一個子彈的容器,我以前想過用arraylist來存放,後來考慮到操做上可能有些麻煩,因此用vector向量來進行存放,既然你要用到vector向量的話,你要在一個操做類裏面,也就是在繪圖的那個類裏面,利用vector自帶的get,remove,size等方法,來實時對界面上的子彈內容進行重繪,同理,若是你想實現坦克被打爆的爆炸畫面,一樣也要用到vector向量(中期實現這塊功能的時候,特別煩躁,並且特別容易出現不定時的錯誤),固然你也必需要對碰撞事件進行處理,坦克之間不能相互碰撞,並且子彈你要考慮對不一樣事物的碰撞反應,其實你能夠把坦克爆炸這種狀態封裝爲一個類,爆炸這屬於一種狀態,這樣能夠更方便你處理。最後在多線程這一塊,多線程怎麼進行體現,敵人能夠做爲一個線程,同時子彈你也能夠做爲一個線程,在響應你點擊事件後,你要作出射擊這個動做,這個時候子彈是做爲一個對象進行處理的,他的座標你要隨時更新,而後不斷進行重繪,值得注意的是當你的這個子彈處於死亡狀態的時候,你要及時結束這個線程,固然這也是細節之處,那麼敵人坦克呢?敵人坦克也是做爲一個線程,當你處理到這個地方的時候,敵人坦克是一個ai,你要想怎麼控制電腦去操控,那麼按正常思路,首選是設置隨機數,隨機數你要在哪裏設置呢?天然是坦克屬性裏面的方向,這個地方你必須得考慮thread睡眠這個數值怎樣設置(反正這個地方我調試了很久),並且,最最重要的是在你繪圖的那個類裏面,你確定也要設置一個線程,這個線程是很是重要的,並且你要考慮,你射擊敵人這個動做和敵人射擊你這個動做要放在哪裏進行處理,最後當你作完這些基本內容的時候,你要對你的代碼進行修邊處理,並且你能夠設置一個分數面板,這個很是容易,相信你能很快作出來。其實,後期除了一些bug修復,數值參數的修改,界面的美化,一些簡易實用的功能添加,你能夠考慮添加網絡功能,保存功能,這兩大塊很煩,保存這一塊主要涉及到文件導入導出,你能夠把遊戲中的實時數據,好比說坦克的座標值,你很容易獲得,子彈的座標值天然不成問題,還有其餘的一些數值,這個時候你要把這些數據存放起來,當你下次啓動時,你要在代碼裏作相應處理,這個時候構造函數方面天然須要改變。網絡功能還未涉及,要考慮的地方有不少。佈局
其實作一個項目,你能夠學到不少,你要分析一個項目,他的總體流程,抽象到他的每個功能你要用什麼樣的方式去實現,具體到代碼的實現過程,不論是一個大項目仍是一個小項目,你要作的是分解它,對一個個很是小功能的實現意味着離成功愈來愈近,每當你實現一個小功能的時候,你對代碼的糾錯能力和語法的鞏固會愈來愈紮實,到最後,上千甚至上萬行的代碼你也能夠輕易完成。測試