程序运行截图

直接上代码:

  • 字母类

package com.git.game;import java.awt.Color;public class Letter {private String num;private Color color;private int x;private int y;private int speed = 1;public Letter() {}public Letter(String num, Color color, int x, int y) {super();this.num = num;this.color = color;this.x = x;this.y = y;}/*** 判断字母是否出界* * @time 2016年6月29日 下午12:27:38* @author Lichao* @return 出界为true,未出界为false*/public boolean outOfBound() {return this.y > LetterGame.HEIGTH;}public void step() {this.y += speed;}/* getter setter方法 */public String getNum() {return num;}public void setNum(String num) {this.num = num;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}}

主运行类


package com.git.game;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;public class LetterGame extends JPanel {private static final long serialVersionUID = 1L;public static final int WIDTH = 654;// 界面宽度public static final int HEIGTH = 600;// 界面高度private Timer timer; // 定时器private int interVal = 1000 / 100;// 时间间隔,10毫秒private Letter[] letters = {}; // 存放的字母private int outOfBoundNumber;// 记录丢掉的字母个数private int hitNumbers = 0; // 按中的字母个数public static BufferedImage background; // 背景图public static BufferedImage gameover; // 背景图// 游戏状态private int state;public static final int RUNNING = 0;// 运行状态public static final int GAME_OVER = 1; // 结束状态static { // 加载静态资源try {background = ImageIO.read(LetterGame.class.getResource("background.bmp"));gameover = ImageIO.read(LetterGame.class.getResource("gameover.bmp"));} catch (Exception e) {System.err.println("图片加载失败!");e.printStackTrace();}}public LetterGame() {}// 进数索引int enterIndex = 0;/*** 字母进入面板的方法* * @time 2016年6月29日 上午10:38:51* @author Lichao*/public void enterAction() {enterIndex++;if (enterIndex % 30 == 0) {Letter letter = nextOne();// 每300毫秒执行一次letters = Arrays.copyOf(letters, letters.length + 1);letters[letters.length - 1] = letter;}}/*** 步进方法* * @time 2016年6月29日 上午10:40:58* @author Lichao*/public void stepAction() {for (int i = 0; i < letters.length; i++) {letters[i].step();}}/*** 定时运行方法* * @time 2016年6月29日 上午11:12:35* @author Lichao*/public void action() {state = RUNNING;this.repaint();/*** 键盘监听事件*/KeyAdapter keyAdapter = new KeyAdapter() {public void keyPressed(KeyEvent e) {int index = -1;String keyPressed = e.getKeyChar() + "";for (int i = 0; i < letters.length; i++) {Letter letter = letters[i];if (keyPressed.equalsIgnoreCase(letter.getNum())) {hitNumbers++;index = i;break;}}if (index != -1) {Letter temp = letters[index];letters[index] = letters[letters.length - 1];letters[letters.length - 1] = temp;letters = Arrays.copyOf(letters, letters.length - 1);}}};/** 添加鼠标事件 */this.addKeyListener(keyAdapter);// 这两句用来监听键盘this.setFocusable(true);this.requestFocus();mouseAction();timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {if (state == RUNNING) {enterAction();stepAction();outOfBoundAction();}checkGameOverAction();repaint();}}, interVal, interVal);}/*** 出界操作* * @time 2016年6月29日 下午12:30:17* @author Lichao*/public void outOfBoundAction() {int index = 0;Letter[] lettersInPanel = new Letter[letters.length];for (int i = 0; i < letters.length; i++) {Letter letter = letters[i];if (!letter.outOfBound()) {lettersInPanel[index++] = letter;} else {outOfBoundNumber++;}}letters = Arrays.copyOf(lettersInPanel, index);}/*** 判断游戏是否结束* * @time 2016年6月29日 下午1:38:24* @author Lichao*/private void checkGameOverAction() {if (isGameOver()) {state = GAME_OVER;}}/*** 随机生成字母* * @time 2016年6月29日 上午10:35:46* @author Lichao* @return*/protected Letter nextOne() {Random random = new Random();Letter letter = new Letter();letter.setNum(String.valueOf((char) (random.nextInt(26) + 'A')));letter.setX(random.nextInt(WIDTH - 25));letter.setY(10);letter.setColor(getRandColor());return letter;}/*** 生成随机颜色* * @time 2016年6月29日 上午10:13:06* @author Lichao* @return*/public static Color getRandColor() {Random random = new Random();Color color = new Color(random.nextInt(255), random.nextInt(255),random.nextInt(255));return color;}/*** 重写父类方法*/@Overridepublic void paint(Graphics g) {g.drawImage(background, 0, 0, null);paintNumber(g);paintState(g);paintScore(g);}/*** 画图形* * @time 2016年6月29日 上午9:10:08* @author Lichao* @param g*/private void paintNumber(Graphics g) {g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 25));for (int i = 0; i < letters.length; i++) {Letter letter = letters[i];g.setColor(letter.getColor());g.drawString(letter.getNum(), letter.getX(), letter.getY());}}/*** 画状态* * @time 2016年6月29日 下午1:17:46* @author Lichao* @param g*/private void paintState(Graphics g) {switch (state) {case GAME_OVER:g.drawImage(gameover, 0, 0, null);break;}}/*** 添加鼠标事件* * @time 2016年6月29日 下午2:05:00* @author Lichao*/private void mouseAction() {/** 鼠标监听事件 */MouseAdapter mouse = new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent event) {// 单击右键退出if (event.getButton() == MouseEvent.BUTTON3&& state == GAME_OVER) {System.exit(0);}// 单击左键重新开始if (event.getButton() == MouseEvent.BUTTON1&& state == GAME_OVER) {init();}}};this.addMouseListener(mouse);}/*** 初始化游戏* * @time 2016年6月29日 下午2:09:10* @author Lichao*/protected void init() {this.state = RUNNING;this.outOfBoundNumber = 0;this.letters = new Letter[] {};this.repaint();}/*** 判断游戏是否结束* * @time 2016年6月29日 下午1:19:07* @author Lichao* @return*/private boolean isGameOver() {return this.outOfBoundNumber > 5;}private void paintScore(Graphics g) {g.setColor(new Color(0xFF0000)); // 设置颜色(0xFF0000为纯红)g.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 20)); // 设置字体(Font.SANS_SERIF为字体,Font.BOLD为字体样式,20为字号)g.drawString("SCORE: " + hitNumbers, 10, 25); // 画分g.drawString("MISS: " + outOfBoundNumber, 10, 45); // 画丢失数}/** 主方法 */public static void main(String[] args) {JFrame frame = new JFrame("傻逼打字游戏");LetterGame game = new LetterGame();frame.add(game);frame.setBackground(new Color(111, 168, 220));frame.setSize(WIDTH, HEIGTH); // 设置窗口的大小frame.setAlwaysOnTop(true); // 设置窗口总在最上面frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置默认关闭操作(窗口关闭时退出程序)frame.setLocationRelativeTo(null); // 设置窗口起始位置(居中)frame.setVisible(true); // 1.设置窗口可见 2.尽快调用paint()方法frame.setResizable(false);game.action();}}
  • 用到的背景图(自己用画图工具弄的)
  • 文件后缀名需要根据程序里面的进行更改,bmp文件太大,无法上传到博客,请大家谅解

转载于:https://my.oschina.net/rilweic/blog/703021

Java 打字游戏,可运行相关推荐

  1. java打字游戏_Java打字游戏

    贴吧上看到有人做Java打字游戏,但是问题多多,我把他的程序拿来大改一番,算是半个原创吧.键盘按出对应字母,则该字母消失并随机产生新字母. 如果加些贴图润色一下可以更美观,学习计划紧,暂时不美化了. ...

  2. 简单的Java打字游戏

    原文:简单的Java打字游戏 源代码下载地址:http://www.zuidaima.com/share/1586973185674240.htm 仅供参考,很简单. swing实现

  3. java打字游戏课程设计_Java课程设计打字游戏.docx

    中南大学 Java 课程设计报告 题 目 打字游戏 学生姓名 窦立阳 指导教师 陈丽萍 学 院 信息科学与工程学院 专业班级 计科 1204 完成时间 2015 年1月15日 目录 第二章 总体设计 ...

  4. java打字游戏课程设计_java课程设计打字游戏

    <java课程设计打字游戏>由会员分享,可在线阅读,更多相关<java课程设计打字游戏(32页珍藏版)>请在金锄头文库上搜索. 1.Java 课程设计 1各专业全套优秀毕业设计 ...

  5. java打字游戏和解析_java类与对象案例之打字游戏

    类与对象案例-童年回忆之打字游戏 一.玩家类 二.等级类 三.游戏类 四.等级地图 五.测试类 这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类 ...

  6. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器

    现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...

  7. java打字游戏_Java仿金山打字通打字母游戏《Java就该这样学》

    前面我写过关于键盘控制小球,以及模仿下雪的代码.此次算是对前一段时间知识的汇总.依旧很肤浅的没有面向对象的概念.还是俩个class. MyChar 为主测试类,MyPanel为功能类.MyPanel已 ...

  8. c语言 倒计时不清屏_打字游戏超细讲解(C语言基础小游戏)

    首先我们会发现我们网上看到的打字游戏都是上来就敲代码,小白看的一脸懵,所以鑫哥在这给大家送上一份超级详细的打字游戏编写流程及对应的结果展示,希望可以帮到小白进行入门学习. 话不多说,我们先看一下什么叫 ...

  9. JAVA小游戏之打字母(简单版和升级版)

    简单版: 规则:没有时间限制,点对加十分,出界抠十分 import javax.swing.*; import java.awt.*;/*** 原理:* 1.生成字母 (绘制字母)* 2. 生成坐标系 ...

最新文章

  1. 图书管理系统(源码)
  2. java.security.cet.CertPathValidatorException: Path does not chain with any of the trust anchors 解决办法
  3. 高精度加减法 1000阶乘求法
  4. OpenCV几何变换的实例(附完整代码)
  5. c语言 程序循环,C语言程序设计-循环例子
  6. 你好,请查收这封元旦祝福,CSDN云计算改版啦!
  7. linux 两块硬盘 分区,linux 两块硬盘分区,这个是什么/dev/mapper/VolGroup00-LogVol00
  8. 硬盘分区表和文件分配表格式
  9. Java基础教程【第五章:Java数组】
  10. assets删除文件_Windows10下node_modules复制和删除的各种方式的测试
  11. 拓端tecdat|Python在线零售数据关联规则挖掘Apriori算法数据可视化
  12. paip.输入法编程---词库多意义条目分割 python实现.
  13. Unity 3D ScrollView控件(滚动视图)
  14. IP报文格式和实例分析
  15. 计算机毕业设计PHP图书馆图书借阅管理系统
  16. android root权限命令行,如何通过命令行取得安卓root权限
  17. Squid代理服务器基础_wuli大世界_新浪博客
  18. 老男孩22期python视频_老男孩教育python全栈视频22期
  19. 系统安全之利用操作系统自带命令杀毒
  20. 互联网面试——WPF面试问题

热门文章

  1. Linux学习----文件创建、修改和编辑
  2. vue 纯前端登录验证码
  3. PS制作创意木板雕刻字图案人物效果
  4. 重磅!2021QS亚洲大学排名出炉,177所中国高校上榜!
  5. oracle中rowid的用法
  6. 超越游戏模拟器的电脑玩手游助手TC Games使用教程
  7. 5.《程序猿扯淡系列》吃货的理想--健康从吃开始
  8. Spring配置数据源(XML)
  9. Performance:前端页面性能监控
  10. GSS initate failied