⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hstype.java

📁 java加多线程做的打字游戏,希望大家喜欢
💻 JAVA
字号:
/*这是一个练习打JAVA关键字的程序
 *
 */

import java.awt.* ;
import javax.swing.* ;
import java.awt.event.* ;

public class HsType extends JFrame {
	//设置窗体
	HsType(String title) {
		this.setTitle(title) ;
		this.setSize(480 , 700) ;
		this.setLocation(300 , 10) ;
		this.setBackground(Color.white) ;
		this.setDefaultLookAndFeelDecorated(true) ;
		
		MyPanel mp = new MyPanel() ;
		this.add(mp) ;
		
		this.addKeyListener(mp) ;
		new Thread(mp).start() ;
	}
	
	public static void main(String[] args) {
		HsType h = new HsType("打字程序") ;
		
		h.setVisible(true) ;
	}
}

class MyPanel extends JPanel implements KeyListener , Runnable {
	int num = 15 ;	//字的数量
	int sleep = 20 ; //休眠时间
	String keystring = ""; //保存缓存数据
	int score = 0 ;//得分
	int dengji = 1 ;//等级
	
	//所有字
	String[] ss = {
		"public" , "class" , "static" , "main" , "String" , "extends" , "import" ,
		"boolean" , "true" , "falese" , "Graphics" , "JFrame" , "JPanel" , "int" ,
		"double" , "Color" , "Layout" , "JButton" , "implements" , "KeyListener" ,
		"Thread" , "Runnable" , "ActionListener" , "while" , "if" , "else" , "break", 
		"JTextField" , "JMenuBar" , "JMenu" , "JMenuItem"
	} ;
	
	String[] str = new String[num] ;
	int[] x = new int[num] ;
	int[] y = new int[num] ;
	boolean[] bl = new boolean[num] ; 
	
	//初始化状态
	MyPanel() {
		for (int i = 0; i<num; i++) {
			x[i] = (int)(Math.random() * 400) ;
			y[i] = (int)(Math.random() * 700) - 700;
			str[i] = ss[(int)(Math.random() * (ss.length - 1))] ;
			bl[i] = false ;
 		}
	}
		
	public void paint(Graphics g) {
		super.paint(g) ;
		this.setBackground(Color.white) ;
		g.setFont(new Font("宋体" , Font.BOLD , 20)) ;
		
		for (int i = 0; i<num; i++) {
			if(bl[i]) {
				g.setColor(Color.red) ;
			}
			g.drawString(str[i] , x[i] , y[i]) ;
			g.setColor(Color.black) ;
		}
		g.setColor(Color.blue) ;
		g.drawString("当前输入:  " + keystring , 20 , 60) ;
		g.setFont(new Font("宋体" , Font.BOLD , 14)) ;
		g.drawString("您的得分:  " + score + "     等级: ", 20 , 30) ;
		for (int i = 0; i<dengji; i++) {
			g.drawString("★" , 250 + i*20 , 30) ;
		}
	}
	
	//线程
    public void run() {
    	while (true) {
    		for (int i = 0; i<num; i++) {
    			y[i] ++ ;
    			if(y[i] >= 670) {
    				x[i] = (int)(Math.random() * 400) ;
					y[i] = (int)(Math.random() * 700) - 700;
					str[i] = ss[(int)(Math.random() * (ss.length - 1))] ;
					score = score - 50 ;//落下减分
    			}
    		}
    		
    		if(score < -500) {
    			System.out.println (score) ;
    			JOptionPane.showMessageDialog(null, 
									"你结束了!!!",
									"Game Over !", JOptionPane.ERROR_MESSAGE);
				//结束游戏					
				System.exit(0) ;
    		}
    		
    		this.repaint() ;
    		try {
    			Thread.sleep(sleep) ;
    		}catch(Exception e){
    			e.printStackTrace() ;
    		}
    	}
    }
    
	public void keyTyped(KeyEvent e) {

	}
	
	//按下键盘
	public void keyPressed(KeyEvent e) {
		
		if(e.getKeyChar() >= 'A' && e.getKeyChar() <= 'Z') {
			keystring = keystring + e.getKeyChar() ;
			System.out.println (e.getKeyChar()) ;	
		}
		if(e.getKeyChar() >= 'a' && e.getKeyChar() <= 'z') {
			keystring = keystring + e.getKeyChar() ;
			System.out.println (e.getKeyChar()) ;				
		}
			
		int yy= -1 ;
		int j = -1 ;
		int f = -1 ;
		
		//判断是否全部相等
		for (int i = 0; i<num; i++){
			if(y[i] >= 0) {
				if(str[i].equals(keystring)) {
					if(yy < y[i]) {
//						System.out.println ("击中") ;
						yy = y[i] ;
						j = i ;
					}					
				}
			}
		}
		
		if(j != -1) {
			//如果相等,处理
			x[j] = (int)(Math.random() * 400) ;
			y[j] = (int)(Math.random() * 700) - 700;
			str[j] = ss[(int)(Math.random() * (ss.length - 1))] ;
			keystring = "" ;
			bl[j] = false ;
			score = score + 100 ;//打中加分
			
			System.out.println (sleep) ;
			//判断等级
			if(score >= 2000 && score < 4000) {
				sleep = 40;
				dengji = 2 ;
			}
			if(score >= 4000 && score < 6000) {
				sleep = 30;
				dengji = 3 ;
			}
			if(score >= 6000 && score < 8000) {
				sleep = 20;
				dengji = 4 ;
			}
			if(score >= 8000) {
				sleep = 10;
				dengji = 5 ;
			}
		}	
		
		//判断部分相等
		for (int i = 0; i<num; i++) {
			bl[i] = false ;
			if(y[i] >= 0) {
				if(str[i].length() > keystring.length() && keystring.length() != 0 ) {
					if(str[i].substring(0 , keystring.length()).equals(keystring)) {
						f = i ;
						bl[i] = true ;
					}				
				}		 
			}
		}
		
		if(f == -1) {
			keystring = "" ;
			for (int i = 0; i<num; i++) {
				bl[i] = false ;
			}
 		}else{
 //			System.out.println ("bl["+f+"] = true") ;
 			f = -1 ; 
 		}
	}

	public void keyReleased(KeyEvent e) {

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -