package abcGame;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
@SuppressWarnings("serial")
public class DrawABC extends Panel implements Runnable, KeyListener {
private int[] x = new int[10]; // 字母位置x坐标
private int[] y = new int[10]; // 字母位置y坐标
private String[] abc = new String[10]; // 暂存字母
private Font font = new Font("黑体", Font.BOLD, 36); // 字母字体
private Image img; // 背景图对象
private Image iBuffer; // 缓冲1
private Graphics gBuffer; // 缓冲2
private int score = 100; // 初始成绩100分
// 初始化图形位置和字母
public DrawABC() {
for (int i = 0; i < abc.length; i++) {
x[i] = (int) (Math.random() * 546); // 初始化x坐标
y[i] = (int) (Math.random() * -100);// 初始化y坐标
abc[i] = (char) (Math.random() * 26 + 97) + ""; // 初始化字母
for (int j = 0; j < i; j++) {
if (abc[i].equals(abc[j])) { // 判断是否产生了重复字母
i--;
break;
}
}
}
URL url = DrawABC.class.getResource("beijing.png"); // 背景图片地址
img = Toolkit.getDefaultToolkit().getImage(url); // 得到背景图对象
}
// 重写update(Graphics g) ,解决图像闪烁问题
public void update(Graphics scr) {
paint(scr);
}
// 重写paint(Graphics g),画出图像
public void paint(Graphics g) {
if (iBuffer == null) {
iBuffer = createImage(this.getSize().width, this.getSize().height); // 创建缓冲图像
gBuffer = iBuffer.getGraphics(); // Graphics 类的对象引用
}
gBuffer.setColor(getBackground());
gBuffer.fillRect(0, 0, this.getSize().width, this.getSize().height); // 清除屏幕
gBuffer.drawImage(img, 0, 0, this); // 画出背景图
for (int i = 0; i < abc.length; i++) {
gBuffer.setColor(Color.green); // 圆的颜色
gBuffer.fillOval(x[i], y[i], 50, 50); // 画出圆
gBuffer.setFont(font); // 设置字母字体
gBuffer.setColor(Color.red); // 字母颜色
gBuffer.drawString(abc[i], x[i] + 16, y[i] + 36); // 画出字母
gBuffer.setColor(Color.blue);
gBuffer.drawString("成绩:" + score, 10, 50);
}
g.drawImage(iBuffer, 0, 0, this); // 画出整个图像
}
// 实现run()接口,线程运行,字母下落
public void run() {
boolean judgeRepeat = true;
while (true) {
for (int i = 0; i < abc.length; i++) {
y[i]++; // y坐标加1,实现字母下落
if (y[i] >= 650) { // 字母下落到底部后,在顶部产生一个新的字母
x[i] = (int) (Math.random() * 546);
y[i] = -60;
while (judgeRepeat) { //产生一个与其它字母不重复的字母
abc[i] = (char) (Math.random() * 26 + 97) + "";
for (int j = 0; j < abc.length; j++) {
if (j != i && abc[i].equals(abc[j])) {
judgeRepeat = true;
break;
} else if (j == i && j == (abc.length - 1)) {
judgeRepeat = false;
} else if (j == i) {
judgeRepeat = true;
} else {
judgeRepeat = false;
}
}
}
score -= 20;
}
}
try {
Thread.sleep(30); // 线程休眠30毫秒
} catch (Exception e) {
}
repaint(); // 重画图像
}
}
// 键盘事件处理,接口的实现
@Override
public void keyPressed(KeyEvent arg0) {
// 键按下
boolean yesNo = false;
boolean judgeRepeat = true;
for (int i = 0; i < abc.length; i++) {
// 消除按中的字母,并在顶部产生一个新的字母
if (abc[i].equals(arg0.getKeyChar() + "")) {
x[i] = (int) (Math.random() * 546);
y[i] = -60;
while (judgeRepeat) { //产生一个与其它字母不重复的字母
abc[i] = (char) (Math.random() * 26 + 97) + "";
for (int j = 0; j < abc.length; j++) {
if (j != i && abc[i].equals(abc[j])) {
judgeRepeat = true;
break;
} else if (j == i && j == (abc.length - 1)) {
judgeRepeat = false;
} else if (j == i) {
judgeRepeat = true;
} else {
judgeRepeat = false;
}
}
}
yesNo = true;
break;
}
}
if (yesNo) {
score += 10;
} else {
score -= 15;
}
repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
// 键弹起
}
@Override
public void keyTyped(KeyEvent arg0) {
// 组合键识别
}
}
Java练手_ABC打字游戏
3星 · 超过75%的资源 需积分: 9 168 浏览量
2014-05-05
01:05:32
上传
评论
收藏 1.2MB ZIP 举报
1989@wxy
- 粉丝: 0
- 资源: 5
最新资源
- mmqrcode1714153659780.png
- Screenshot_2024-04-27-06-08-58-486_com.baidu.xin.aiqicha.jpg
- 基于Javaweb+Tomcat+MySQL的大学生公寓管理系统+sql文件.zip
- 实训作业基于javaweb的订单管理系统源码+数据库+实训报告.zip
- 多机调度问题贪心算法基于最小堆和贪心算法求解多机调度问题.zip
- 基于同态加密技术的匿名电子投票系统源码.zip
- Pyqt5项目框架-PyQt项目开发实践
- 基于C通过MQTT的智能农业大棚管理系统(本科毕业设计)
- python+CNN的网络入侵检测算法源码.zip
- js 实现记住密码功能 js.cookie.min.js
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈