📄 hstype.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 + -