java實(shí)現(xiàn)打字游戲小程序
本文實(shí)例為大家分享了java實(shí)現(xiàn)打字游戲小程序的具體代碼,供大家參考,具體內(nèi)容如下
一、設(shè)計(jì)思路
1.創(chuàng)建一個(gè)窗體
2.在窗體上放置一個(gè)面板,用paint方法畫出英文字母,隨機(jī)放置字母位置,并隨時(shí)間自動(dòng)下落
3.設(shè)置得分扣分機(jī)制
4.在面板上添加鍵盤監(jiān)聽器,輸入正確得分,輸入錯(cuò)誤則扣分
ps:面板和監(jiān)聽器用一個(gè)類實(shí)現(xiàn)(這樣簡(jiǎn)單方便)
二、具體實(shí)現(xiàn)
MyPanel.java
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; /** * 繼承Panel類,Panel是Java中的面板類。基本上要操作窗體都會(huì)繼承此類 * */
public class MyPanel extends Panel implements KeyListener{
int x[] = new int[10];//儲(chǔ)存隨機(jī)字母x軸
int y[] = new int[10];//儲(chǔ)存隨機(jī)字母y軸
char c[] = new char[10];//儲(chǔ)存隨機(jī)字母
int integral =1000;//初始1000積分
Color p[] =new Color[10];//用來存儲(chǔ)顏色
public MyPanel() {
for (int i = 0; i < 10; i++) {
x[i]=(int)(Math.random()*300);//0-300
y[i]=(int)(Math.random()*50);//0-50
c[i]=(char)(Math.random()*26+97);//隨機(jī)字母
p[i]=getRandColorCode();//獲取十六進(jìn)制的顏色代碼.例如 "#6E36B4"
}
} /** * 復(fù)寫Panel類的paint方法 */
public void paint(Graphics g) {
if (integral>0) {//如果成績(jī)>0,才能進(jìn)來
for (int i = 0; i < 10; i++) {//十個(gè)英文字母
g.setColor(p[i]);//設(shè)置元素顏色
g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); //設(shè)置字體,大小 //1.出現(xiàn)的元素,2.元素的x軸,3.元素的y軸
g.drawString(new
Character(c[i]).toString().toUpperCase(),x[i],y[i]);//畫出面板上的字母圖像
}
//顯示積分在屏幕上
g.setColor(Color.red);
g.setFont(new Font("TimesRoman", Font.PLAIN, 20));
g.drawString("你的成績(jī)是:"+integral, 10, 30);
donghua();
}else {//成績(jī)<0,游戲結(jié)束
g.setColor(Color.red);
g.setFont(new Font("TimesRoman", Font.PLAIN, 30));
g.drawString("GAME OVER", 50, 170);
}
}
public void donghua() {
for (int i = 0; i < 10; i++) {//對(duì)十個(gè)字母一直檢測(cè),如果沒有超過面板就縱坐標(biāo)+1,若超過了從頂部就重新生成字母
y[i]++;//字母的y軸 加1,既往下移動(dòng)1個(gè)位置
if (y[i]>370) {//窗體邊框占有一部分像素,所以設(shè)置370即可
y[i]=0;//設(shè)置該字母的縱坐標(biāo)為0
x[i]=(int)(Math.random()*300);
c[i]=(char)(Math.random()*26+97);
integral-=100;//積分-100
}
try {
Thread.sleep(5);//暫停5毫秒,控制字母下落的速度,
}
catch (InterruptedException e) {}
repaint();//重新繪制畫面
}
} //鍵盤監(jiān)聽器
public void keyPressed(KeyEvent e) {
char keyC = e.getKeyChar();
int stat=-1;//存儲(chǔ)最下面字母的值
int nowIndex=-1;//存儲(chǔ)最下面字母的下標(biāo)
for (int i = 0; i < 10; i++) {//找出所有匹配字母處于最下面的字母
if (keyC==c[i]) {
if (y[i]>stat) {//第一次進(jìn)來時(shí),必定大于,
stat=y[i];//記錄坐標(biāo)值
nowIndex=i;//記錄字母的下標(biāo)
}
}
}
if (nowIndex!=-1) {//如果!=-1,證明輸入正確,nowIndex為最下面的字母的下標(biāo),重新生成。積分+100
y[nowIndex]=0;
x[nowIndex]=(int)(Math.random()*300);
c[nowIndex]=(char)(Math.random()*26+97);
integral+=100;//積分+100
}else {//如果==-1,證明輸錯(cuò)了。積分-100
integral-=100;//積分-100
}
}
/** * 獲取十六進(jìn)制的顏色代碼.例如 "#6E36B4" , * @return String */
public static Color getRandColorCode(){
int r,b,g;
r=(int)(Math.random()*250);
b=(int)(Math.random()*250);
g=(int)(Math.random()*250);
Color c =new Color(r, b, g);
return c; }
public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub }
public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub }}
MyTyping.java
import java.awt.Frame;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
public class MyTyping {
/** 思路:
1.一個(gè)窗體
2.在窗體繪制元素(隨機(jī)出現(xiàn)的字母)
3.加入鍵盤事件
4.加入計(jì)數(shù)器(分?jǐn)?shù))
5.匹配鍵盤錄入字母和屏幕上的字母
一致:消除,并且從最上面重新生成.積分+
不一致:不消除,積分-
沒錄入:不消除,積分-
6.積分<0,游戲結(jié)束 */
public static void main(String[] args) {
JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設(shè)置點(diǎn)擊x關(guān)閉退出程序
f.setLocationRelativeTo(null);//窗體置中
f.setSize(300, 400);//設(shè)置窗體大小
MyPanel p = new MyPanel();
f.add(p);//將面板放入窗體中
f.addKeyListener(p);//注冊(cè)鍵盤事件
p.addKeyListener(p);//注冊(cè)鍵盤事件
f.setVisible(true);//顯示窗體
}
三、運(yùn)行截圖

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot中如何使用Convert接口實(shí)現(xiàn)類型轉(zhuǎn)換器
這篇文章主要介紹了Spring Boot中使用Convert接口實(shí)現(xiàn)類型轉(zhuǎn)換器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問題
這篇文章主要介紹了Springboot項(xiàng)目編譯后未能加載靜態(tài)資源文件的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
Java實(shí)現(xiàn)LeetCode(1.兩數(shù)之和)
這篇文章主要介紹了Java實(shí)現(xiàn)LeetCode(兩數(shù)之和),本文使用java采用多種發(fā)放實(shí)現(xiàn)了LeetCode的兩數(shù)之和題目,需要的朋友可以參考下2021-06-06
將應(yīng)用程序進(jìn)行Spring6遷移的最佳使用方式
這篇文章主要介紹了將應(yīng)用程序進(jìn)行Spring6遷移的最佳方式,以及如何充分利用此升級(jí),需要的朋友可以參考下,如有錯(cuò)誤的地方還請(qǐng)指正2023-03-03
淺談Java關(guān)閉線程池shutdown和shutdownNow的區(qū)別
本文主要介紹了Java關(guān)閉線程池shutdown和shutdownNow的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
SpringCloud微服務(wù)架構(gòu)升級(jí)匯總
這篇文章主要介紹了SpringCloud微服務(wù)架構(gòu)升級(jí)匯總,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值,需要的朋友可以參考下2019-06-06

