import java.util.List;
import java.util.ArrayList;
import java.util.Timer;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Game extends JFrame{
//主方法
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
public void run(){
new Game().setVisible(true);
}
});
}
//默认构造
public Game(){
initComponent();
}
//初始化组件
public void initComponent(){
//设置框架大小
Toolkit kit = Toolkit.getDefaultToolkit();
int x = (kit.getScreenSize().width - WIDTH)/2;
int y = (kit.getScreenSize().height - HEIGHT)/2;
setBounds(x,y,WIDTH,HEIGHT);
//设置主框架关闭后退出系统
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置用户不可更改框架大小
setResizable(false);
//设置标题
setTitle("打字游戏-作者:luoxun");
//设置图标
setIconImage(kit.getImage("icon.png"));
//设置外观
UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
try{
UIManager.setLookAndFeel(infos[1].getClassName());
}catch(Exception e){
e.printStackTrace();
}
SwingUtilities.updateComponentTreeUI(this);
//设置背景图片
ImageIcon backImage = new ImageIcon("background.gif");
JLabel label = new JLabel(backImage);
label.setBounds(0,0,backImage.getIconWidth(),backImage.getIconHeight());
JPanel imagePanel = (JPanel)getContentPane();
imagePanel.setOpaque(false);
getLayeredPane().setLayout(null);
getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
//添加组件
drawPanel = new MyPanel();
add(drawPanel);
}
private class MyPanel extends JPanel{
private List<MyFont> list = null;
private Timer timer;
private int state = 0;//0:开始1:暂停2:结束
private int success = 0;
private int fail = 0;
private Gamer gamer = null;
public MyPanel(){
initComponent();
}
public void initComponent(){
setOpaque(false);
list = new ArrayList<MyFont>();
//添加组件
btnStart = new JButton("开始");
btnStop = new JButton("暂停");
btnEnd = new JButton("结束");
StartHandler start = new StartHandler();
StopHandler stop = new StopHandler();
EndHandler end = new EndHandler();
add(btnStart);
add(btnStop);
add(btnEnd);
//回车:开始、空格:暂停、esc:退出
btnStart.addActionListener(start);
btnStop.addActionListener(stop);
btnEnd.addActionListener(end);
InputMap inmap = getInputMap(JPanel.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
inmap.put(KeyStroke.getKeyStroke("alt Z"),"Enter");
inmap.put(KeyStroke.getKeyStroke("alt X"),"Space");
inmap.put(KeyStroke.getKeyStroke("alt C"),"Esc");
for(int i='A';i<='Z';i++){
inmap.put(KeyStroke.getKeyStroke(String.valueOf((char)i)),"input");
inmap.put(KeyStroke.getKeyStroke("shift "+String.valueOf((char)i)),"input");
}
ActionMap amap = getActionMap();
amap.put("Enter",start);
amap.put("Space",stop);
amap.put("Esc",end);
amap.put("input",new InputHandler());
}
private class InputHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
if(state!=0) return;
char c = evt.getActionCommand().charAt(0);
for(MyFont mf : list){
if(c == mf.getChar()){
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("men.png"));
gamer.getPoint().x = mf.getPoint().x;
remove(mf);
success ++;
return;
}
}
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("icon.png"));
fail ++;
}
}
private class StartHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
state = 0;
if(timer == null){
timer = new Timer();
timer.schedule(new TimerTask(){
public void run(){
if(state == 0){
add();
}
}
},new Date(),800);
timer.schedule(new TimerTask(){
public void run(){
if(state == 0){
move();
}
}
},new Date(),10);
}
}
}
private class StopHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
state = 1;
}
}
private class EndHandler extends AbstractAction{
public void actionPerformed(ActionEvent evt){
list.clear();
state = 2;
JOptionPane.showMessageDialog(null,String.format("正确:%d 个 错误:%d 个",success,fail));
success = 0;
fail = 0;
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
if(gamer == null){
gamer = new Gamer();
}
g2.drawImage(gamer.getIcon(),gamer.getPoint().x,gamer.getPoint().y,gamer.getWidth(),gamer.getHeight(),this);
synchronized(list){
for(MyFont mf : list){
g2.setColor(mf.getColor());
g2.setFont(mf.getFont());
Point p = mf.getPoint();
g2.drawString(String.valueOf(mf.getChar()),(int)p.getX(),(int)p.getY());
}
}
}
public void add(){
synchronized(list){
list.add(new MyFont());
repaint();
}
}
public void remove(MyFont mf){
synchronized(list){
list.remove(mf);
}
}
public void move(){
List<MyFont> temp = new ArrayList<MyFont>();
for(MyFont mf : list){
Point p = mf.getPoint();
p.y = (int)p.getY()+1;
if(p.y+80>Game.HEIGHT){
temp.add(mf);
}
}
if(temp.size() > 0){
fail += temp.size();
list.removeAll(temp);
gamer.setIcon(Toolkit.getDefaultToolkit().getImage("icon.png"));
}
repaint();
}
}
private class Gamer{
private Image icon;
private Point point;
private int width;
private int height;
public Gamer(){
icon = Toolkit.getDefaultToolkit().getImage("men.png");
point = new Point(350,520);
width = 50;
height = 50;
}
public void setIcon(Image icon){
this.icon = icon;
}
public void setPoint(Point point){
this.point = point;
}
public Image getIcon(){
return this.icon;
}
public Point getPoint(){
return this.point;
}
public int getWidth(){
return this.width;
}
public int getHeight(){
return this.height;
}
}
private class MyFont{
private String text = "abcdefghijklmnopqrstuvwsyzABCDEFGHIJKLMNOPQRSTUVWSYZ";
private Point p;
private Font font;
private Color color;
private char c;
public MyFont(){
initData();
}
private void initData(){
String[] fontNames = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
Random rand = new Random(new Date().getTime());
int i = rand.nextInt(52);
this.p = new Point(rand.nextInt(700)+50,80);
this.font = new Font(fontNames[fontNames.length-21+rand.nextInt(21)],Font.BOLD,80);
this.color = new Color(rand.nextInt(255),rand.nextInt(255),rand.nextInt(255));
this.c = text.charAt(i);
}
private Point getPoint(){
return this.p;
}
private Color getColor(){
return this.color;
}
private Font getFont(){
return this.font;
}
private char getChar(){
return this.c;
}
}
//定义变量
private MyPanel drawPanel;
private JButton btnStart;
private JButton btnStop;
private JButton btnEnd;
private static final int WIDTH = 800;
private static final int HEIGHT = 600;
}
分享到:
相关推荐
【Java实现的打字游戏】是一款简单而有趣的编程练习,旨在帮助用户提高打字速度和准确性。游戏的核心机制是通过模拟文字显示并检测用户的输入,与预设的文字进行比较,以此来评估用户打字的效率。这个项目采用了两种...
【Java简单英文打字游戏】是一款专为Java初学者设计的源码实例,它通过一个简单的打字游戏帮助用户提高英文打字速度和准确性。这个项目仅包含一个JAVA文件,因此非常适合初学者阅读和理解,可以快速入门Java编程。 ...
在打字游戏中,可以有`Keyboard`类来表示虚拟键盘,`Timer`类来跟踪游戏时间,以及`TypingSession`类来管理单次打字练习。 接下来,我们将关注本地GUI的实现。通常,这将涉及使用如Java的Swing或JavaFX,Python的...
本项目是一款基于Java语言开发的简单打字练习程序,利用了AWT(Abstract Window Toolkit)来构建用户界面。该程序适合Java初学者,尤其是大学二年级的学生用来实践和提升编程技能。该项目的主要功能包括打字速度统计...
【Java GUI】 Java GUI(图形用户界面)...总的来说,这个Java GUI打字练习小游戏展示了多种Java编程技术的综合运用,从基础的GUI组件创建到复杂的多线程游戏逻辑,为学习和提升Java编程技能提供了一个实用的实践平台。
【标题】:“BGUI字母打字练习小游戏” 这个项目是一个基于Java编程语言开发的图形用户界面(GUI)应用,主要用于帮助用户进行字母打字练习。它设计得简单易用,旨在提升初学者的键盘输入速度和准确性。对于初学者...
在本项目中,我们关注的是一个使用Java编程语言编写的练习打字的字母游戏。这个游戏旨在帮助用户提高他们的打字速度和准确性,通过互动和趣味性的方式让学习过程更加愉快。下面将详细介绍这个项目的相关知识点。 1....
Java练手_ABC打字游戏是一款基于Java编程技术的练习项目,旨在帮助初学者熟悉和巩固Java Swing、类的继承、接口实现、线程管理和键盘事件处理等核心概念。在这个项目中,开发者创建了一个互动的游戏,玩家需要通过...
【小蜜蜂打字游戏】是一款基于Java编程语言开发的打字练习软件,旨在通过游戏化的方式提高用户打字的速度和准确性。在这个游戏中,用户需要在限定时间内正确输入屏幕上显示的文字,以此来提升打字技巧。下面我们将...
总的来说,这个Java打字游戏是一个很好的学习示例,它涵盖了GUI编程、事件处理、数据结构、多线程、文件操作等多个Java核心概念。通过阅读和分析源码,开发者不仅可以提升Java编程技能,还能了解游戏开发的基本流程...
【北大青鸟打字游戏】是一款基于Java编程语言开发的教育软件,主要目的是为了帮助学习者提高打字速度和准确性,特别适用于北大青鸟ACCP课程的学员进行实践操作。这款打字游戏在原有的教材基础上进行了优化和完善,...
【Java打字小游戏】是一款基于Java编程语言开发的简单打字练习应用,旨在帮助用户提高打字速度和准确性。此项目对于初学者来说是一个很好的实践案例,它展示了如何利用Java进行基本的游戏开发,同时也可以作为熟悉...
【打字游戏java】是一个基于Java编程语言开发的简单打字练习应用。在这个游戏中,用户可以通过键盘输入来模拟真实的打字体验,提升打字速度和准确性。以下将详细阐述Java编程语言在创建打字游戏中的关键知识点。 1....
【Java单文件英文打字游戏】是一个基于Java编程语言实现的简单打字练习程序,它旨在帮助用户提高英文打字速度和准确性。由于整个游戏仅用一个Java代码文件完成,因此它展示了Java语言的简洁性和高效性。在这个游戏中...
【Java打字游戏源代码】是一款使用Java编程语言编写的打字练习软件,它通过游戏化的方式帮助用户提高打字速度和准确性。源代码详细、结构清晰,适合初学者学习和理解,同时也可供有一定Java基础的开发者参考和改进。...
- **Swing或JavaFX**:打字练习软件需要用户界面,Java提供了Swing和JavaFX两个库来创建桌面应用的GUI。这两个库包含了许多组件,如JLabel(显示文本)、JTextArea(用户输入)和JButton(操作按钮)等。 ### 3. ...
Java打字软件游戏是一款利用Java编程语言开发的教育软件,主要目标是帮助用户提升打字速度和准确性。在这款软件中,用户不仅可以进行基础的打字训练,还可以通过各种打字游戏来增加学习的趣味性,使打字变得更加轻松...
通过模拟真实的打字环境,用户可以在游戏中学习和练习打字技巧,使其成为一种寓教于乐的方式。本资源包含游戏的可执行程序和源代码,对于Java初学者或者想要了解游戏开发的人来说,这是一个很好的学习材料。 首先,...
在Java编程领域,打字练习程序是一个常见的项目,旨在帮助用户提高打字速度和准确性。这个项目由三个`.java`源文件组成,很可能是作者独立完成的。通过分析和理解这些源代码,我们可以深入探讨一些Java编程的关键...
打字测试系统的发展可以追溯到计算机早期,当时的打字训练主要依赖于物理键盘和简单的文本输入。随着互联网和多媒体技术的进步,现代的打字测试系统已经演变为包含各种功能的互动软件,例如实时速度显示、错误统计...