打字母游戏

来源:互联网 发布:英语网络外教 编辑:程序博客网 时间:2024/04/27 20:10

/*
 * 打字游戏,通过线程改变纵坐标大小,通过键盘监听
 * 来实现对纵坐标最大的字母进行消除,打对得10分,
 * 错误扣100分

以下是效果截图:

打字母游戏 - lishirong - The CTO of LiShirong

 

以下是动态效果视频:

以下是代码部分:
 */



import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class WordGame extends JFrame{
 WordGame(){
  this.setSize(300,400);
  int width=(int)Toolkit.getDefaultToolkit().getScreenSize().getWidth();
  int height=(int)Toolkit.getDefaultToolkit().getScreenSize().getHeight();
  this.setLocation((width-300)/2,(height-400)/2);
  //this.setUndecorated(true);
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
 }
 public static void main(String args[]){
  WordGame wg=new WordGame();
  MyWordGame mwg=new MyWordGame();
  mwg.setBackground(Color.orange);
  wg.add(mwg);
  wg.addKeyListener(mwg);
  mwg.addKeyListener(mwg);
  Thread t=new Thread(mwg);
  t.start();
  wg.show();
 }
}

class MyWordGame extends Panel implements Runnable,KeyListener{
 int x[]=new int[10];
 int y[]=new int[10];
 char c[]=new char[10];
 int sum=1000;
 MyWordGame(){
  for(int i=0;i<10;i++){
   x[i]=(int)(Math.random()*290);
   y[i]=(int)(Math.random()*40);
   c[i]=(char)(Math.random()*26+97);
  }
 }
 public void paint(Graphics g){
  for(int i=0;i<10;i++){
   g.setColor(Color.white);
   g.fillOval(x[i]-5, y[i]-15, 20, 20);
   g.setColor(Color.blue);
   g.drawString(""+c[i], x[i], y[i]);
  }
  g.setColor(Color.red);
  g.drawString("您当前的成绩是:"+sum, 100, 20);
  
 }
 public void run() {
  // TODO Auto-generated method stub
  while(true){
   for(int i=0;i<10;i++){
    y[i]++;
    //字母越界判定
    if(y[i]>400){
     sum-=100;
     x[i]=(int)(Math.random()*290);
     y[i]=0;
     c[i]=(char)(Math.random()*26+97);
    }
   }
   try {
    Thread.sleep(20);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   repaint();
  }
 }
 public void keyPressed(KeyEvent arg0) {
  // TODO Auto-generated method stub
  //不能在类下面定义,因为每按一次就得初始化一次
  int tempY=-1;
  int index=-1;
  for(int i=0;i<10;i++){
   //获取纵坐标最大的那个字母
   if(arg0.getKeyChar()==c[i]){
    if(tempY<y[i]){
     tempY=y[i];
     index=i;
    }
   }
  }
  //表示输入错误,减去100
  if(index==-1){
   sum-=100;
  }else{//输入正确,去掉最下面的那个字母,加十分
   sum+=10;
   x[index]=(int)(Math.random()*290);
   y[index]=0;
   c[index]=(char)(Math.random()*26+97);
  }
 }
 public void keyReleased(KeyEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 public void keyTyped(KeyEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 
}

0 0
原创粉丝点击