用java做一個簡單的打字遊戲
Java也是可以做桌面程式的。只不過需要執行在裝有JDK的電腦環境上,所以應用不是很廣泛,但是用來提高自身的程式碼邏輯還是可以的!偶有一天看到金山的打字通,就想起何不做個簡單的打字遊戲用來練練手。於是就有了下文
首先建一個類MyTyping,只有main方法
執行main方法就可以看到出現螢幕中心出現一個窗體(大小是300*400)
程式碼邏輯也就思路里那麼多。覺得醜的可以自己優化下,個人覺得沒必要
OK,出現後就進行下一步
在同一包下新建MyPanel類。繼承Panel類
此時執行main方法,窗體上出現了 黑色的字母C。
那接下來,就是要讓drawString第一個引數為26個隨機字母,第二個引數為不超過300的隨機數,第三個引數為不超過400的隨機數
改造下:
g.drawString(new Character((char)(Math.random()*26+97)).toString().toUpperCase(), (int)(Math.random()*300), (int)(Math.random()*400));
隨機數不會的可以自己百度去。。
多次點選執行,可以看到已經實現,隨機位置,隨機字母的效果
OK,再下一步。出現10個隨機字母。加個迴圈即可
for (int
//1.出現的元素,2.元素的x軸,3.元素的y軸
g.drawString(new Character((char)(Math.random()*26+97)).toString().toUpperCase(), (int)(Math.random()*300), (int)(Math.random()*400));
}
效果:(但是有的字母在邊緣看不到,沒關係,等全部完成了再來優化)
已經看到 效果已經有了。但是我們設想的的是 字母需要往下移動,怎麼完成呢?
也很簡單。用一個容器來儲存隨機字母,以及它的
改造如下:通過構造方法來實現隨機的實現
再次執行,效果一樣
接下來,實現執行緒,讓它下墜
程式碼改造如下:實現執行緒需要實現Runnable介面
執行之後,字母已經實現下墜效果了
核心已經完成了。接下來,加入:
字母超出窗體。重新生成。run方法改造如下
執行,效果也出來了
再接下來 加入計數器
程式碼改造如下:定義全域性變數來儲存積分
Paint方法:如果積分小於0,不能進來繪製方法,並且出現 game over 字樣
Run方法:如果積分小於0,執行緒停止
再次執行。字母超出窗體的時候會在最上面重新生成隨機字母。並且積分會-100,當到0時會出現 game over字樣,執行緒也停止了
但我們現在也發現了。一開始字母隨機的位置不對,它可能隨機的y軸為350,那豈不是剛出現就要消失了?怎麼給人時間去按呢?簡單。把生成隨機y軸後面的數值改成50,那麼他就只會在0-50之間的高度上出現了
改造構造方法:
執行後,結果也很OK
接下來 實現鍵盤錄入效果
MyPanel實現 KeyListener介面,並實現相應方法(一共三個)
我們只用其中的keyPressed(鍵盤按下事件)
在main方法中將鍵盤事件註冊進去
再次執行,控制檯會輸出你輸入的字母
那接下來要做的估計都猜到了。匹配鍵盤錄入的字母,
相同:消除這個字母,並且在最上面重新生成,積分+100
不相同:積分-100
程式碼改造如下:
但是執行是不是有問題?只要輸錯一次。直接遊戲結束,這是因為輸的字母不在範圍內,它會迴圈-100,10次,所以立馬就結束了,所以我們現在再給它加個計數器,以避免迴圈-100
程式碼改造如下:
現在效果OK了,但是又有新問題了,如果有一樣的兩個字母,它並不一定會消除最下面的,但是我們需要它消除最下面的,剛剛我們加了計數器去實現它的減,那麼就再加個計數器實現它的加,當鍵盤錄入匹配時,記錄下來y軸,跟原始值或者上一個值比較,如果大於,就覆蓋這個計數器為當前Y軸,那麼最後迴圈下來,相同的字母也只會保留Y軸最大的那個
程式碼改造如下
重新執行,效果基本就算實現了。
可以加一些小的優化。字型加大,顏色隨機。
顏色隨機,直接放在MyPanel類裡就行
改造程式碼
如果這樣改造。只要動一下就會變顏色。我們想要的是 一生成就固定,直到消失
那還是用容器吧,跟儲存隨機字母一樣的方法,還是全域性變數
OK,再次執行,完美實現
字型加大:
在drawString方法上面加
看一下效果圖
還是可以的哈。好了就寫到這裡吧,核心邏輯程式碼實現就OK了,再寫下去要精通swing了
當然這個問題還是有的
字母重疊。沒有關閉按鈕。沒有再來一盤按鈕。沒有音效
有興趣的童鞋 可以自己著手優化下。不過個人覺得沒必要。因為做的再好,也得使用者裝了JDK才能執行,後期可以嘗試用易語言 或者C#做下這種小工具。
程式碼我放在github上,有不明白的需要參考可以去下載
地址:點我