这是自己做的第二个小游戏,有趣。
游戏规则:
从屏幕上方以一定速度掉下5个字母,然后你应当敲击键盘敲出最下方的字母,该字母为金色,若敲击正确,则加五分,否则减二十分。如果有字母离开屏幕,每个字母减20分。游戏开始为100分,当得分小于等于0时,游戏结束。注意:字母下降的速度会越来越快。
package mypro01;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
class Main
{
public static void main(String[]args)
{
Frame w = new Frame();
w.setSize(1350, 700);
MyPanel my = new MyPanel();
w.add(my);
w.addKeyListener(my);
my.addKeyListener(my);
Thread t = new Thread(my);
t.start();
w.show();
}
}
class MyPanel extends Panel implements Runnable, KeyListener
{
int[]x = new int[5];
int[]y = new int[5];
char[]c = new char[5];
int score = 100;
int sleep=100;
long time=0;
MyPanel()
{
for (int i = 0; i<5; ++i)
{
x[i] = (int)(Math.random() * 1300+10);
y[i] = (int)(Math.random() * 200);
c[i] = (char)(Math.random() * 26 + 97);
}
}
public void paint(Graphics g)
{
int minn=-10,minpos=0;
for (int i = 0; i<5; ++i)
{
if(y[i]>minn)
{
minn=y[i];
minpos=i;
}
}
g.setFont(new Font("宋体",Font.BOLD,50)); //改变字体大小
for (int l = 0; l<5; ++l)
{
if(l!=minpos)
g.drawString("" + c[l], x[l], y[l]);
else
{
g.setColor(new Color(225,215,0));
g.drawString("" + c[l], x[l], y[l]);
g.setFont(new Font("宋体",Font.BOLD,50));
g.setColor(new Color(0,0,0));
}
}
int cs = score;
String s = "";
while (cs != 0)
{
s = (char)('0' + (cs % 10)) + s;
cs = cs / 10;
}
g.drawString(s, 30, 30);
}
@Override
public void keyPressed(KeyEvent arg0)
{
char n = arg0.getKeyChar();
int minn=-10,minpos=0;
for (int i = 0; i<5; ++i)
{
if(y[i]>minn)
{
minn=y[i];
minpos=i;
}
}
if(c[minpos]==n)
{
score+=8;
x[minpos] = (int)(Math.random() * 1300+10);
y[minpos] = 0;
c[minpos] = (char)(Math.random() * 26 + 97);
}
else
score-=20;
repaint();
}
@Override
public void keyReleased(KeyEvent arg0)
{
}
@Override
public void keyTyped(KeyEvent arg0)
{
}
public void run()
{
if(score<=0)
return ;
while (true)
{
for (int i = 0; i<5; ++i)
{
y[i]+=5;
if (y[i]>700)
{
x[i] = (int)(Math.random() * 1300+10);
y[i] = 0;
c[i] = (char)(Math.random() * 26 + 97);
score = score - 20;
}
}
try{
Thread.sleep(sleep);
}catch (Exception e) {};
repaint();
time++;
if(sleep>15&&time>10)
{
time=0;
sleep--;
}
if(score<=0)
return ;
}
}
}