您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關使用ava實現打字游戲小程序,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
一、設計思路
1.創建一個窗體
2.在窗體上放置一個面板,用paint方法畫出英文字母,隨機放置字母位置,并隨時間自動下落
3.設置得分扣分機制
4.在面板上添加鍵盤監聽器,輸入正確得分,輸入錯誤則扣分
ps:面板和監聽器用一個類實現(這樣簡單方便)
二、具體實現
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中的面板類。基本上要操作窗體都會繼承此類 * */ public class MyPanel extends Panel implements KeyListener{ int x[] = new int[10];//儲存隨機字母x軸 int y[] = new int[10];//儲存隨機字母y軸 char c[] = new char[10];//儲存隨機字母 int integral =1000;//初始1000積分 Color p[] =new Color[10];//用來存儲顏色 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);//隨機字母 p[i]=getRandColorCode();//獲取十六進制的顏色代碼.例如 "#6E36B4" } } /** * 復寫Panel類的paint方法 */ public void paint(Graphics g) { if (integral>0) {//如果成績>0,才能進來 for (int i = 0; i < 10; i++) {//十個英文字母 g.setColor(p[i]);//設置元素顏色 g.setFont(new Font("TimesRoman", Font.PLAIN, 20)); //設置字體,大小 //1.出現的元素,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("你的成績是:"+integral, 10, 30); donghua(); }else {//成績<0,游戲結束 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++) {//對十個字母一直檢測,如果沒有超過面板就縱坐標+1,若超過了從頂部就重新生成字母 y[i]++;//字母的y軸 加1,既往下移動1個位置 if (y[i]>370) {//窗體邊框占有一部分像素,所以設置370即可 y[i]=0;//設置該字母的縱坐標為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();//重新繪制畫面 } } //鍵盤監聽器 public void keyPressed(KeyEvent e) { char keyC = e.getKeyChar(); int stat=-1;//存儲最下面字母的值 int nowIndex=-1;//存儲最下面字母的下標 for (int i = 0; i < 10; i++) {//找出所有匹配字母處于最下面的字母 if (keyC==c[i]) { if (y[i]>stat) {//第一次進來時,必定大于, stat=y[i];//記錄坐標值 nowIndex=i;//記錄字母的下標 } } } if (nowIndex!=-1) {//如果!=-1,證明輸入正確,nowIndex為最下面的字母的下標,重新生成。積分+100 y[nowIndex]=0; x[nowIndex]=(int)(Math.random()*300); c[nowIndex]=(char)(Math.random()*26+97); integral+=100;//積分+100 }else {//如果==-1,證明輸錯了。積分-100 integral-=100;//積分-100 } } /** * 獲取十六進制的顏色代碼.例如 "#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.一個窗體 2.在窗體繪制元素(隨機出現的字母) 3.加入鍵盤事件 4.加入計數器(分數) 5.匹配鍵盤錄入字母和屏幕上的字母 一致:消除,并且從最上面重新生成.積分+ 不一致:不消除,積分- 沒錄入:不消除,積分- 6.積分<0,游戲結束 */ public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//設置點擊x關閉退出程序 f.setLocationRelativeTo(null);//窗體置中 f.setSize(300, 400);//設置窗體大小 MyPanel p = new MyPanel(); f.add(p);//將面板放入窗體中 f.addKeyListener(p);//注冊鍵盤事件 p.addKeyListener(p);//注冊鍵盤事件 f.setVisible(true);//顯示窗體 }
三、運行截圖
看完上述內容,你們對使用ava實現打字游戲小程序有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。