import javax.swing.*;
import java.awt.*;
public class ChatGameDemo {
public static void main(String[] args) {
//创建窗口
JFrame frame = new JFrame();
//创建绘制容器
CharPanel panel = new CharPanel();
frame.setBounds(100,100,375,675);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.add(panel);
frame.setBackground(Color.BLACK);
panel.setBackground(Color.BLACK);
//键盘事件
frame.addKeyListener(panel);
panel.addKeyListener(panel);
Thread thread = new Thread(panel);
thread.start();
frame.setVisible(true);
}
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.ImageObserver;
import java.text.AttributedCharacterIterator;
public class CharPanel extends Panel implements Runnable, KeyListener {
// 字母坐标系
int [] x = new int[10];
int [] y = new int[10];
//字母
char[] chars = new char[10];
//字母颜色 rgb格式 0-255
int[] r = new int[255];
int[] g = new int[255];
int[] b = new int[255];
// 分数
int score = 100;
public CharPanel() {
//随机生成字母
for (int i = 0; i < 10; i++) {
x[i] = (int) (Math.random() * 300);
y[i] = (int) (Math.random() * 600);
chars[i] = (char) (Math.random() * 26 + 97);
r[i] = (int) (Math.random() * 255);
g[i] = (int) (Math.random() * 255);
b[i] = (int) (Math.random() * 255);
}
}
@Override
public void paint(Graphics graphics) {
super.paint(graphics);
Font font1 = new Font("",Font.BOLD,20);
graphics.setFont(font1);
graphics.setColor(Color.red);
if (score < 0){
graphics.drawString("游戏结束",100,100);
return ;
}
//绘制分数
graphics.drawString("得分 :" + score,10,20);
//绘制字母
Font font2 = new Font("",Font.BOLD,25);
graphics.setFont(font2);
for (int i = 0; i < 10; i++) {
graphics.setColor(new Color(r[i],g[i],b[i]));
graphics.drawString(""+chars[i],x[i],y[i]);
}
}
//监听键盘
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
//对所有的按键都有唯一的键盘码
//新的坐标
int ny = -1;
int index = -1;
for (int i = 0; i < 10; i++) {
if(e.getKeyChar() == chars[i]){
if(ny < y[i]){
ny = y[i];
index = i;
}
}
}
if(index > -1){
y[index] = 0;
x[index] = (int) (Math.random() * 300);
chars[index] = (char) (Math.random() * 26 + 97);
score += 10;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
@Override
public void run() {
while(true){
for (int i = 0; i < 10; i++) {
y[i] += 5;
if(y[i] > 500){
y[i] = 0;
score -= 10;
}
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
repaint();
}
}
}