问题:
在一个300*400的窗体上,有10个随机产生的字母向下落,在键盘上敲字母,如果对了就消掉,初始成绩为1000分,每敲对一个字母加10分,如果字母落到屏幕下方或者敲错扣100分。
我们先来进行步骤划分吧。第一步,做满天星星;第二步,将星星改成10个随机字母;第三步,让字母下落,如果落出屏幕就产生新的字母,并从屏幕上方重新出现;第四步,接收键盘输入并消除匹配的字母;第五步,积分程序。
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.KeyEvent;
public class MyTest{
public static void main(String args[]){
Frame w=new Frame();
w.setSize(300,400);
MyPanel mp=new MyPanel();
w.add(mp);
Thread t=new Thread(mp);
t.start();
w.setVisible(true);
}
}
class MyPanel extends Panel implements Runnable{
int x[]=new int[10];
int y[]=new int[10];
char c[]=new char[10];
int score=1000;
MyPanel(){
for(int i=0;i<10;i++){
x[i]=(int)(Math.random()*300);
y[i]=(int)(Math.random()*400);
c[i]=(char)(Math.random()*26+97);
}
}
public void paint(Graphics g){
for(int i=0;i<10;i++){
g.drawString(new Character(c[i]).toString(), x[i], y[i]);
//显示成绩
g.setColor(Color.RED);
g.drawString("你的成绩是:"+score, 5,15);
}
}
public void run(){
while(true){
try{
for(int i=0;i<10;i++){
y[i]++;
if(y[i]>400){
y[i]=0;
x[i]=(int)(Math.random()*300);
c[i]=(char)(Math.random()*26+97);
score-=100;
}
}
Thread.sleep(100);
}catch(Exception e){}
repaint();
}
}
public void keyPressed(KeyEvent arg0){
//将用户输入的字符存入keyC中
char keyC=arg0.getKeyChar();
boolean mark=false;
//扫描整个数组,看有没有匹配的字符
for(int i=0;i<10;i++){
if(keyC==c[i]){
//找到了
y[i]=0;
x[i]=(int)(Math.random()*300);
c[i]=(char)(Math.random()*26+97);
mark=true;
break;//防止屏幕上同时有多个相同字符被一次性消掉
}
if(mark){
score+=100;
}else{
score-=100;
}
}
}
}