暑假敲代碼的效率真的不高呀,一個這種小游戲從最開始構思到最后實施代碼,從最開始的Demo版本到最后的第四版本,花了一個星期了。本想再更新一個版本,加入雙人對戰模式,還想寫個AI版,可是我估計按照現在我這種效率又要畫上好多時間了。想想還是等以后有時間再寫吧。。。雖然這游戲寫起來看似不難,可是對現在的我來說,還是有點考驗的。中途也遇到了不少問題,遇到了不少知識盲區。我發現設計游戲有時候比敲代碼還要頭疼,你從最開始基本沒有什么頭緒的狀態到后來逐步開始思考游戲的玩法,怎么去實現,制定游戲規則,敲代碼,調試代碼,測試游戲,發現bug,尋找bug產生原因,調試,尋求方法修復,一步一步,還是需要思考挺多東西的。還有,程序寫多了,代碼到了一定數量級就會發現,程序的結構也是很重要的,各功能模塊怎么抽象出來,怎么實現接口,怎么調用,怎么做到盡可能精簡代碼,可是值得考慮的。后來調整程序結構,把整個程序分到幾個源文件中,又得重新思考怎么實現,數據怎么共享。怎么用一種數據結構來表示一種現實實體也是很重要的。比如我之前寫過的一個2048小游戲,用什么來表示那一個個方塊呢?那時候我還沒用過Java畫圖函數,但是那段時間在學Java GUI ,所以我自然想到用一個Button來表示一個方塊,其實現在我去重新寫那個游戲,我自然不會用button了,因為用button表示方塊時無法在移動中出現動畫效果,移動效果十分不自然,閃現的感覺。但是我當時想到那種方式能實現移動我覺得很不錯了。再比如這次的蛇身體怎么表示呢,由於我最初的Demo版本蛇身體是用畫圖的形式實現的,所以我只需要每次記錄下每個身體節點的坐標就可以實現每次重繪身體節點的時候產生移動的效果,於是我寫了一個類,把橫坐標和縱坐標封裝進去了。后來發現這個類給我帶來了很多好處,有些是我最開始都沒想到的。比如后來產生食物的時候食物也需要一個坐標,等等。后來重新用圖片表示身體時又在想怎么實現移動效果,發現只需要每次重新設置label的坐標即可。只不過要在重新開始前移除所有的這些label然后重新添加,重新設置坐標。再后來加入障礙物時,也就是加入很多堵牆,在想怎么表示這些牆呢,最初的牆我想只沿着網格線畫一根比較粗的線條即可,后來我發現這種方式我無法實現判斷蛇頭撞牆,於是我改用了之前實現蛇身體的方式,該用了圖片,這樣一堵牆就是一個坐標數組,這樣我就抽象出了牆這種實體,然后寫了一個類,多堵牆就是這個類的一個數組。。。再到最后實現那個噴火功能時也思考了很久,遇到了一些bug,慢慢調試,耐心尋找原因,好在最后的效果還算滿意。
我估計自己再敲完最后幾個Java程序就不會再用Java了,倒不是說永遠不用,至少大學剩下兩年估計不會再用了。Java確實很棒,有一點C語言或者C++基礎再稍微學習一下可以很快上手的,最重要的是,Java能很快讓你學會它的GUI,有了GUI就可以寫很多東西了,雖然窗體程序技術含量不一定比得上C++幾百行代碼,但是,敲點GUI的小程序還是成就感十足的。以前敲C++時,總是在黑色的控制台輸入一個東西,然后程序給你返回一個東西,感覺很無聊。有了GUI確實有趣多了,但是也會花你很多時間去關注那些不屬於程序核心的東西,有時候會為了一個界面布局的美觀在那里調來調去很長時間,最后才發現這不是主要的活呀。我現在還是覺得功能的實現與完善是最要的,雖然我也很關注GUI,但讓我去寫這東西,還是感覺很煩的。Java把很多東西給你封裝好了,用起來很簡單也很方便,我用Java一學期,最大的印象就是用什么就new什么,甚至可以直接new ...();連變量名都用不上了,還有用Java的時候函數參數傳遞都沒怎么用了,很多方法的返回值都可以直接寫成void了,也沒了指針,引用也很少用了,這些我以前用C++時每天要接觸的東西一下子感覺陌生了,而且調試都用的少了,有些時候加上一句輸出就可以判斷問題出在哪。可是,我愈發有種感覺,雖然Java代碼一個學期的量就比之前寫過的C和C++加起來還要多的多,但是總感覺沒有以前寫程序的那種感覺了,總有種感覺是在把別人已經實現好的東西組合起來的感覺,確實Java里很多東西我只會用,不了解太深的原理,甚至有些語法我都不是很熟悉,但是只要你有一定基礎,寫程序時邏輯清晰,能夠用程序把你的邏輯表達出來就可以了,這不如我學習C++時候的感覺,C++的一些語法我可能一下子都看不懂,要思考很久,但是感覺看懂了就很有收獲,雖然沒寫過太多程序,但是感覺能力在提升。於是我打算重新回到C++了,我怕我再接着用Java最后C++會忘很多,學好了C++確實其他語言上手很快。
以上只是一個菜雞的一己之見,忘園里大神勿噴。
最后附上我寫的這個貪吃蛇最后一個版本的截圖



----------------------------------------------------------
--2018.6.26
補充:由於最開始寫這個游戲是從demo版本的結構一點點擴充的,所以寫到最后結構就變得很不合理,抽象層次不高,接口調用設計的不好,所以我最近抽時間進行了一次重構,更新到了第5版,基本上算是重新寫了一遍,雖然界面沒啥變化,但是程序內部結構是完全不一樣了。當然也修復了原來存在的一些問題(比如:更換背景時刷新不及時,去掉或顯示網格線時刷新不及時,不能同時發射多個子彈 等)AI版以及局域網下多個玩家以后抽時間寫吧,這學期真沒時間了。
以下是第5版“幫助”界面

