溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

使用ava實(shí)現(xiàn)打字游戲小程序

發(fā)布時(shí)間:2020-10-27 13:54:54 來(lái)源:億速云 閱讀:141 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用ava實(shí)現(xiàn)打字游戲小程序,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

一、設(shè)計(jì)思路

1.創(chuàng)建一個(gè)窗體
2.在窗體上放置一個(gè)面板,用paint方法畫(huà)出英文字母,隨機(jī)放置字母位置,并隨時(shí)間自動(dòng)下落
3.設(shè)置得分扣分機(jī)制
4.在面板上添加鍵盤(pán)監(jiān)聽(tīng)器,輸入正確得分,輸入錯(cuò)誤則扣分
ps:面板和監(jiān)聽(tīng)器用一個(gè)類(lèi)實(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類(lèi),Panel是Java中的面板類(lèi)?;旧弦僮鞔绑w都會(huì)繼承此類(lèi) * */
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];//用來(lái)存儲(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ù)寫(xiě)Panel類(lèi)的paint方法 */ 

 public void paint(Graphics g) { 
 if (integral>0) {//如果成績(jī)>0,才能進(jìn)來(lái) 
 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]);//畫(huà)出面板上的字母圖像 
 }  
 //顯示積分在屏幕上 
 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è),如果沒(méi)有超過(guò)面板就縱坐標(biāo)+1,若超過(guò)了從頂部就重新生成字母 
 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();//重新繪制畫(huà)面 
 } 
 } //鍵盤(pán)監(jiān)聽(tīng)器 

 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)來(lái)時(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.加入鍵盤(pán)事件 
4.加入計(jì)數(shù)器(分?jǐn)?shù))  
5.匹配鍵盤(pán)錄入字母和屏幕上的字母 
一致:消除,并且從最上面重新生成.積分+ 
不一致:不消除,積分- 
沒(méi)錄入:不消除,積分- 
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án)事件 
p.addKeyListener(p);//注冊(cè)鍵盤(pán)事件 
f.setVisible(true);//顯示窗體  
}

三、運(yùn)行截圖

使用ava實(shí)現(xiàn)打字游戲小程序

看完上述內(nèi)容,你們對(duì)使用ava實(shí)現(xiàn)打字游戲小程序有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI