基本流程:
1.随机呈现26个字母;
2.通过键盘获取击中的字母KeyCode;
3.将被击中的字母坐标y设置为-200(达到消失的效果);
4.命令行输出被击中的字母。
完整源码:
import java.awt.*;
import java.awt.event.*;
public class MyGame
{
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.addKeyListener(mp);
mp.addKeyListener(mp);
w.show();
}
}
class MyPanel extends Panel implements Runnable,KeyListener
{
//x y表示呈现的字母的坐标
int x[]=new int[26];
int y[]=new int[26];
//myCharStr数组存放要呈现的字母
String myCharStr[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
public MyPanel()
{
for(int i=0;i<26;i++)
{
//随机要呈现的字母坐标
x[i]=(int)(Math.random()*300);
y[i]=(int)(Math.random()*400);
}
}
public void paint(Graphics g)
{
for(int i=0;i<26;i++){
g.drawString(myCharStr[i],x[i],y[i]);
}
}
public void run()
{
while(true)
{
try{
for(int i=0;i<26;i++)
{
//当字母下落超出面板时,将坐标重置为0,达到重新飘落的视觉效果
if(y[i]>400)
y[i]=0;
y[i]++;//字母下落
}
Thread.sleep(30);
}
catch(Exception e){}
repaint();
}
}
@Override
public void keyPressed(KeyEvent e){
int code = e.getKeyCode()-65;//通过键盘获取字母a的keycode为65,对应数组下标为0,故减去65
y[code]=-200;//将被击中的字母坐标调为-200,达到简单的“消失”的视觉效果
x[code]=(int)(Math.random()*200);//再次随机被击中的字母坐标,使得该字母下次从“看上去”不同的位置落下
System.out.println("YOu hit:" +myCharStr[code]);
}
@Override
public void keyReleased(KeyEvent e){}
@Override
public void keyTyped(KeyEvent e){}
}
运行效果:
小结:
简化了不少细节,用最粗糙的办法实现了一下这个“打字母”的游戏。