简单版:

规则:没有时间限制,点对加十分,出界抠十分

import javax.swing.*;
import java.awt.*;/***  原理:*  1.生成字母 (绘制字母)*  2. 生成坐标系 x y char*  3. 随机字母位置 xy color char*  4. 按键事件检测*  5. 多线程*        1.监听键盘*        2、同时生成字母*  6. 显示分数* */
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-255int[] 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);}}@Overridepublic 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]);}}//监听键盘@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic 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;}}@Overridepublic void keyReleased(KeyEvent e) {}@Overridepublic 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();}}
}

升级版:

新增:添加了结束时间,添加了数据库,展示前3名的成绩

规则:在规定时间内,点对一个字符加二十,出界抠10

注意事项:需要自己导入数据库jar包,和创建数据库!!!

注意事项:需要自己导入数据库jar包,和创建数据库!!!

注意事项:需要自己导入数据库jar包,和创建数据库!!!

jar包自己网上找资源

数据库表 typingscore

CREATE TABLE `typing_score` (`id` int(11) NOT NULL AUTO_INCREMENT,`score` int(11) NOT NULL COMMENT '分数',`time` int(11) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='打字游戏得分';

图片资源:

主方法

import javax.swing.*;
import java.awt.*;public class MyTying {public static void main(String[] args) {JFrame frame = new JFrame("java 打字游戏 ");frame.setSize(400,600);frame.setLocationRelativeTo(null);MyPanel panel = new MyPanel();frame.add(panel);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//想用自己的图片记得改路径ImageIcon imageIcon = new ImageIcon("src/打字图标.jpg");frame.setIconImage(imageIcon.getImage());frame.setBackground(Color.BLACK);panel.setBackground(Color.BLACK);frame.setResizable(false);frame.setVisible(true);frame.addKeyListener(panel);panel.addKeyListener(panel);new Thread(panel).start();}
}

MyPanel

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.List;public class MyPanel extends Panel implements Runnable, KeyListener {int [] x = new int[10];int [] y = new int[10];char [] ch = new char[10];int [] r = new int[10];int [] g = new int[10];int [] b = new int[10];public MyPanel() {for (int i = 0; i < 10; i++) {x[i] = (int) (Math.random() * 400);y[i] = (int) (Math.random() * 600);ch[i] = (char) (Math.random() *  26 + 97);r[i] = (int) (Math.random() *  255);g[i] = (int) (Math.random() *  255);b[i] = (int) (Math.random() *  255);}}long startTime = System.currentTimeMillis();long time = 5;   //游戏时间long surplusTime = time;int score = 50;boolean isSend = false;@Overridepublic void paint(Graphics graphics) {super.paint(graphics);if (surplusTime > 0){Font font = new Font("",Font.BOLD,20);graphics.setFont(font);graphics.setColor(Color.RED);graphics.drawString("得分 :" + score,10,20);graphics.drawString("剩余时间 :" + surplusTime,10,40);}else {Font font1 = new Font("楷体",Font.BOLD,30);graphics.setFont(font1);graphics.setColor(Color.RED);graphics.drawString("游戏结束",115,150);graphics.drawString("your score is :" + score,50,200);if (!isSend){TypingScore typingScore = new TypingScore();typingScore.setTime((int) (System.currentTimeMillis() / 100000));typingScore.setScore(score);TypingJDBC.insert(typingScore);isSend = true;}graphics.setFont(new Font("TimesRoman",Font.PLAIN,25));List <TypingScore> scores = TypingJDBC.getTop3();graphics.drawString("成绩TOP3排行榜 :",100,230);for (int i = 0; i < scores.size(); i++) {graphics.drawString("第 " + (i + 1) + "名 :" + scores.get(i).getScore() ,100,230 + (i+1) * 25);}return;}for (int i = 0; i < 10; i++) {graphics.setColor(new Color(r[i],g[i],b[i]));graphics.drawString(""+ch[i],x[i],y[i]);}}@Overridepublic void run() {while(surplusTime > 0){surplusTime = time - (System.currentTimeMillis() - startTime) / 1000;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();}}@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {int ny = -1;int index = -1;for (int i = 0; i < 10; i++) {if(e.getKeyChar() == ch[i]){if(ny < y[i]){  //找到最下面的一个相同字符ny = y[i];index = i;}}}if(index > -1){y[index] = 0;x[index] = (int) (Math.random() * 400);ch[index] = (char) (Math.random() * 26 + 97);score += 20;}}@Overridepublic void keyReleased(KeyEvent e) {}
}

TypingScore

public class TypingScore {private Integer id;private Integer score;private Integer time;public TypingScore() {}public TypingScore(Integer id, Integer score, Integer time) {this.id = id;this.score = score;this.time = time;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public Integer getScore() {return score;}public void setScore(Integer score) {this.score = score;}public Integer getTime() {return time;}public void setTime(Integer time) {this.time = time;}@Overridepublic String toString() {return "TypingScore{" +"id=" + id +", score=" + score +", time=" + time +'}';}
}

TypingJDBC 


import java.sql.*;
import java.util.ArrayList;
import java.util.List;public class TypingJDBC {private static Connection conn = null;private static Statement statement = null;//添加分数到数据库public static void insert(TypingScore score){try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chatgame","root","root");statement = conn.createStatement();String sql = "insert into typingScore (score,time) values (" + score.getScore() + ","+ score.getTime() + ")";statement.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();}finally {if (statement != null){try {statement.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (conn != null){try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}}//获取前三名成绩public static List<TypingScore> getTop3(){ResultSet rs = null;List <TypingScore> scores = new ArrayList<>();try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/chatgame","root","root");statement = conn.createStatement();String sql = "select * from typingScore order by score desc limit 0,3";rs = statement.executeQuery(sql);while (rs.next()){TypingScore typingScore = new TypingScore();int id = rs.getInt("id");int score = rs.getInt("score");int time = rs.getInt("time");typingScore.setId(id);typingScore.setScore(score);typingScore.setTime(time);scores.add(typingScore);}} catch (Exception e) {e.printStackTrace();}finally {if (rs != null){try {rs.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (statement != null) {try {statement.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (conn != null) {try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}return scores;}
}

JAVA小游戏之打字母(简单版和升级版)相关推荐

  1. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  2. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  3. 7句话让Codex给我做了个小游戏,还是极简版塞尔达,一玩简直停不下来

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 梦晨 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 什么,7 ...

  4. 各种经典java小游戏_Java是这个世界上最好的语言!

    为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...

  5. 《Java小游戏实现》:坦克大战

    <Java小游戏实现>:坦克大战 前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用. 这个游戏的完成,我们也是分步完成,逐步累加,一个一个 ...

  6. Java小游戏-俄罗斯方块

    摘 要 随着时代的不断发展,个人电脑也在不断普及,一些有趣的桌面游戏已经成为人们在使用计算机进行工作或工作之余休闲娱乐的首选,从最开始的Windows系统自带的黑白棋.纸牌.扫雷等游戏开始,到现在目不 ...

  7. java小游戏——飞翔的小鸟(java初学作品)

    注:学习了java基础后,做出来的一个小作品,可以用来巩固学习 概述: 飞翔的小鸟能够作为Java基础的收官之作,包涵了Java很多的基础知识,在学习完Java基础后,尝试编写一些东西,能够起到很好的 ...

  8. JAVA小游戏有源代码,非常详细的注释,以及自己做的答辩PPT

    JAVA小游戏--阴阳师版三国战纪 阴阳战纪 具体的实现方法 程序 效果 阴阳战纪 由于疫情原因,我们班的生产实习被告知要在线上举行,然后老师给我们上了三天的网课,教我们用JAVA来制作一个小游戏,因 ...

  9. 猜生日 Java小游戏

    猜生日 Java小游戏 最近看到一个很有趣的小游戏: 询问朋友5个问题,找到他出生在一个月的哪一天.每个问题都是询问他的生日是否是5个数字集合中的一个. 这5个集合分别是: set1:1 3 5 7 ...

最新文章

  1. java substring 性能_《Java程序性能优化》subString()方法的内存泄露
  2. LNMP和LAMP的编译安装
  3. 点击空白处遮罩层关闭_如何手动关闭win10系统自带的windows defender
  4. 大学生学python到底有没有有-为什么我会想建议每个大学生都学一点编程?
  5. win10 + mac双系统安装常用工具
  6. RabbitMQ批量确认发布
  7. 数模笔记_多变量最优化的拉格朗日乘子方法中的灵敏性分析和影子价格
  8. iphone4 短信截获
  9. OC Swift中UITextFiled、UITextView限制输入字数
  10. 【转】使用多个 Azure 订阅(按照订阅收费)
  11. python-函数-变量的作用域-全局变量
  12. curl java 转换_Linux CURL学习(转)
  13. java二次方程式答案_二次方程式Java?
  14. 计算机设计大赛无人车挑战赛
  15. 通过 微软 pai-fs 上传数据到HDFS (Microsoft OpenPAI)
  16. 内控堡垒机:内网安全威胁的“终结者”
  17. 最简单的c语言if程序,C语言简单实用的程序-if else 嵌套式的使用例子
  18. R 相关与相关性的显著性检验
  19. C/C++实现的游戏角色名称名字随机生成代码
  20. ubuntu20.4上不网、进不了root和编译内核出现:cc1: error: code model kernel does not support PIC mode

热门文章

  1. 分享一个react 图片上传组件 支持OSS 七牛云
  2. 分享一个好用的屏幕截取动图的工具
  3. WebGis——Pixi开发vue项目之创建pixi应用并显示一个精灵(一)
  4. 域名授权验证系统v1.0.6开源版本网站源码
  5. python源代码制作星空_用python画星空源代码是什么?
  6. Java日志文档怎么写
  7. 颜色选择器---Kodu少儿编程第九天
  8. MATLAB颜色识别
  9. 僵尸进程(zombie process)
  10. SpringCloud Zuul配置