实现逻辑:一个画板实现Runnable接口,会不停刷新,此外这个画板也充当了监听器的作用,监听来自键盘的事件。让JFrame加上监听器就能监听。在画板刷新过程中,去判断有没有正确的打出字母,打出来则去掉数组中的字母,重新换一个字母从最顶部逐渐向下走。话不多说,直接上源码。

package game;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;
import java.util.List;public class Test01 {public static void main(String[] args) {new MyFrame();}
}class MyFrame extends JFrame{public MyFrame(){this.setSize(800,600);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocationRelativeTo(null);MyPanel myPanel = new MyPanel();this.addKeyListener(myPanel);this.add(myPanel);Thread t = new Thread(myPanel);t.start();}
}class MyPanel extends JPanel implements Runnable,KeyListener{private List<Letter> letters;private int score;private boolean isLive;public MyPanel(){score = 0;isLive = true;letters = new LinkedList<>();for (int i = 0; i <18 ; i++) {Letter letter = new Letter();letter.setPoint(new Point(0,0));int rand = (int)(Math.random()*26 + 65);letter.setLetter((char)rand);
//            int randSpeed = (int)(1+Math.random()*7);letter.setSpeed(1);letter.setColor(Color.YELLOW);letter.setPoint(new Point(i*40,0));letters.add(letter);}this.setBackground(Color.BLACK);this.setFont(new Font("微软雅黑",Font.PLAIN,36));}@Overridepublic void paint(Graphics g) {super.paint(g);for (int i = 0; i <letters.size() ; i++) {Letter letter = letters.get(i);System.out.println(letter.getLetter());g.setColor(letter.getColor());g.drawString(letter.getLetter()+"",(int)letter.getPoint().getX(),(int)letter.getPoint().getY());if(letter.getPoint().getY()>600){g.drawString("游戏结束",100,100);}g.drawString("得分:"+score,600,500);}}@Overridepublic void run() {while (true){try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}for (int i = 0; i <letters.size() ; i++) {Letter letter = letters.get(i);this.updateState(letters);System.out.println(letter.getPoint());this.repaint();if(letter.getPoint().getY()>600){this.isLive = false;break;}}if(!this.isLive){break;}}}public void updateState(List<Letter> letters){for (int i = 0; i <letters.size() ; i++) {Letter letter = letters.get(i);int y = (int)(letter.getPoint().getY()+letter.getSpeed());int x = (int)(letter.getPoint().getX());Point point = new Point(x,y);letter.setPoint(point);}}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {System.out.println("监听到按下键盘事件!");for (int i = 0; i <letters.size() ; i++) {if(e.getKeyCode()==(int)letters.get(i).getLetter()){letters.get(i).setColor(Color.RED);letters.remove(i);Letter letter = new Letter();letter.setSpeed(2);letter.setColor(Color.YELLOW);int rand = (int)(Math.random()*26 + 65);letter.setLetter((char)rand);letter.setPoint(new Point(i*40,0));letters.add(letter);this.score++;}}}@Overridepublic void keyReleased(KeyEvent e) {}
}class Letter{private char letter;private int speed;private Point point;private Color color;public char getLetter() {return letter;}public void setLetter(char letter){this.letter = letter;}public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public Point getPoint() {return point;}public void setPoint(Point point) {this.point = point;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}public static void main(String[] args) {int rand = (int)(Math.random()*26 + 65);System.out.println(rand);System.out.println((char)rand);}
}

效果演示:

java实现一个简单的打字游戏相关推荐

  1. 用java做一个简单的打字游戏

    Java也是可以做桌面程序的.只不过需要运行在装有JDK的电脑环境上,所以应用不是很广泛,但是用来提高自身的代码逻辑还是可以的!偶有一天看到金山的打字通,就想起何不做个简单的打字游戏用来练练手.于是就 ...

  2. pygame做一个简单的打字游戏

    pygame做一个简单的打字游戏 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=utf-8 -*- import pygame from pygame ...

  3. java实现一个简单的斗地主游戏

    使用Java编写一个斗地主游戏需要一定的编程知识和技能,例如面向对象编程.集合框架.GUI等.下面是一个简单的斗地主游戏的代码示例: import java.util.ArrayList; impor ...

  4. Java写一个简单的扫雷游戏

    〇.目录 一.前言 二.过程中遇到的困难 三.代码 四.成品图 五.代码存在的bug 六.完善建议 七.结语 一.前言 这个学期学习了Java,课程的最后一项作业就是做一个扫雷游戏和一个计算器,经历一 ...

  5. java实现一个简单的射击游戏2

    整体思路: 1.画出英雄,敌人,boss 2.规定英雄的移动速度,敌人和boss的移动速度及方向 实现代码: 处理图片类: package ui;import java.awt.image.Buffe ...

  6. java实现一个简单的射击游戏1

    整体思路 1.GUI画出游戏界面 2.设置监听器,键盘控住游戏人物 3.判断敌人是否被击败,游戏是否结束. 代码实现: GameFrame类画出基本窗体: package ui; import jav ...

  7. Java制作一个简单地小游戏

    package 代码部分; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import jav ...

  8. pygame简单的俄罗斯方块游戏和简单的打字游戏

    1.pygame简单的俄罗斯方块游戏 一.对战的方块管理 定义一个BlockManage管理对战的方块 根据BlockManage根据传入的玩家id返回方块,保证每个玩家拿到的方块序列是一致的,所以在 ...

  9. simple-type-game 简单的打字游戏

    前言 看了微软的一个课程 "Web Development for Beginners - A Curriculum" 中的一篇后,打算用 vue3.2 来重写,并小小的优化一下, ...

  10. 用Java写一个简单的回合制游戏

    用Java写一个简单的回合制游戏 创建基本属性,血量,名字,技能,技能伤害. 如下: public class One3 {//创建三个属性private String name;private St ...

最新文章

  1. merge into使用方法
  2. #第六次会议#(4.21)
  3. 【STM32】 keil软件介绍--工程目标选项配置(上)
  4. Visual C++中error spawning cl.exe解决办法
  5. CVE-2020-1472 域内提权利用(域提权)
  6. spring mvc 基于表单的认证过程及cookie应用和session管理
  7. php静态stitac,php静态static介绍
  8. Hadoop HIVE 创建表
  9. Ubuntu 安装MySQL报共享库找不到
  10. 完成端口与高性能服务器程序开发
  11. this super 解释
  12. matlab常用数学函数实验,实验二-MATLAB的数学运算基础.ppt
  13. Python基础与大数据应用(三)
  14. redis-CacheCloud
  15. CCPC-Wannafly Winter Camp Day1 (Div2, onsite) A 机器人 分类讨论
  16. 飞秋等级授权码_观点 | 谈谈网络安全等级保护与密码法
  17. Catboost参数全集
  18. 1.4 数列极限概念的推广
  19. flask html 得到文本框 input的内容_你需要知道的HTML知识
  20. Couldn‘t find meta-data for provider with authority xxx.fileProvider

热门文章

  1. 陈天桥、张朝阳力挺360:腾讯不可仗势压人
  2. 【Webcam设计】视频的采集和动态显示
  3. Java CLH队列
  4. C++--第11课 - 类的静态成员
  5. Mysql优化(出自官方文档) - 第三篇
  6. NLP领域最优秀的8个预训练模型(附开源地址)
  7. IME Starters Try-outs 2018 题解
  8. GNU glibc 爆 gethostbyname 缓冲区溢出漏洞
  9. 持续集成(4)工具对比
  10. linux-SSH远程服务的管理操作,查看虚拟机信息