1. 程式人生 > >用java做一個簡單的打字遊戲

用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

 i = 0; i < 10; i++) {

//1.出現的元素,2.元素的x軸,3.元素的y軸

g.drawString(new Character((char)(Math.random()*26+97)).toString().toUpperCase(), (int)(Math.random()*300), (int)(Math.random()*400));

}

效果:(但是有的字母在邊緣看不到,沒關係,等全部完成了再來優化)

 

已經看到 效果已經有了。但是我們設想的的是 字母需要往下移動,怎麼完成呢?

也很簡單。用一個容器來儲存隨機字母,以及它的

x軸,y軸

改造如下:通過構造方法來實現隨機的實現


再次執行,效果一樣

接下來,實現執行緒,讓它下墜

程式碼改造如下:實現執行緒需要實現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上,有不明白的需要參考可以去下載

地址:點我