java吃豆游戏_利用java编写的精灵吃豆的游戏
学完线程的时候做了一个精灵吃豆的小游戏。
窗体类:
package www.csdn.net.zuoye;
//用窗体实现精灵吃豆子的小游戏
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class GameJFrame extends JFrame implements KeyListener {
// 定义起始位置
private int x = 30, y = 30;
// 定义中间变量
private boolean flag = true;
private static final int DIR_UP = 1;
private static final int DIR_DOWN = 2;
private static final int DIR_LEFT = 3;
private static final int DIR_RIGHT = 4;
// 定义初始化弧度
private int arc1 = 20;
private int arc2 = 320;
// 定义计数器(通过计数器让上下两张嘴都动起来)
private int count = 0;
// 定义豆的对象
private Bean bean;
// 定义方向
private int dir = -1;
// 生成随机数
private Random random;
//定义分数
private int score=0;
//定义速度
private int k=100;
public GameJFrame() {
this.setBounds(300, 200, 200, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
/*
* 1.this.setBackground(Color.gray);
* this.getContentPane().setVisible(false);
*/
this.getContentPane().setBackground(Color.pink);
new Thread() {
public void run() {
while (flag) {
try {
boolean temp = checkHit();
if (temp) {
initBean();
score++;
if(score%10==0){
k-=5;
}
}
Thread.sleep(k);
count++;
if (count % 2 == 0) {// 嘴张开以及闭住的情况
arc1 = 40;
arc2 = 280;
} else {
arc1 = 20;
arc2 = 320;
}
switch (dir) {
case DIR_UP:
y -= 5;
break;
case DIR_DOWN:
y += 5;
break;
case DIR_LEFT:
x -= 5;
break;
case DIR_RIGHT:
x += 5;
break;
default:
break;
}
repaint();
if (y > 275 || y < 30) {
flag = false;
JOptionPane.showMessageDialog(null, "游戏结束,你的分数为:"+score);
dispose();
}else if(x>176||x==0){
flag=false;
JOptionPane.showMessageDialog(null, "游戏结束,你的分数为:"+score);
dispose();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
// 添加监听
this.addKeyListener(this);
// 创建随机的对象
random = new Random();
initBean();
}
public void initBean() {
// 随机产生坐标
int rx = random.nextInt(5)+10;
int ry = random.nextInt(15)+7;
// 产生豆
bean = new Bean(rx * Bean.r * 2, ry * Bean.r * 2);// 坐标必须是随机产生的
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.red);// 设置绘制的颜色
switch (dir) {
case DIR_UP:
g.fillArc(x, y, 20, 20, arc1 + 90, arc2);
break;
case DIR_DOWN:
g.fillArc(x, y, 20, 20, arc1 + 270, arc2);
break;
case DIR_LEFT:
g.fillArc(x, y, 20, 20, arc1 + 180, arc2);
break;
case DIR_RIGHT:
g.fillArc(x, y, 20, 20, arc1, arc2);
break;
default:// 为了能够显示,需要有个显示的状态
g.fillArc(x, y, 20, 20, arc1, arc2);
}
// 绘制豆
g.setColor(Color.yellow);
g.fillArc(bean.getX(), bean.getY(), Bean.r * 2, Bean.r * 2, 0, 360);
// g.fillArc(x, y, 20, 20, arc1, arc2);//圆形
// g.fillRect(50, 30, 20, 20);//矩形
}
public static void main(String[] args) {
GameJFrame g = new GameJFrame();
g.setVisible(true);
}
/**
* 输入某个键的时候执行
*/
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
System.out.println("键入");
}
/**
* 按下的时候执行
*/
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
// System.out.println("按键");
// 获取按键的值
int key = e.getKeyCode();// 查询键值(用这个方法给上下左右键加事件)
// 根据上下左右箭头改变方法
switch (key) {
case 38:
dir = DIR_UP;
break;
case 40:
dir = DIR_DOWN;
break;
case 37:
dir = DIR_LEFT;
break;
case 39:
dir = DIR_RIGHT;
break;
default:
break;
}
}
/**
* 抬起的时候执行
*/
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
// System.out.println("抬起");
}
// 定义碰撞检测
public boolean checkHit() {
if (bean != null) {
if (bean.getX() == x) {
if (Math.abs(bean.getY() - y) < 13) {
return true;// 被碰到了
}
}
if (bean.getY() == y) {
if (Math.abs(bean.getX() - x) < 13) {
return true;
}
}
}
return false;
}
}
豆子类:
package www.csdn.net.zuoye;
//绘制豆
public class Bean {
// 坐标
private int x, y;
// 豆的半径
public static int r=5;
public int getX() {//获取横坐标
return x;
}
public int getY() {//获取纵坐标
return y;
}
public Bean(int x, int y) {
this.x = x;
this.y = y;
}
}
效果:
java吃豆游戏_利用java编写的精灵吃豆的游戏相关推荐
- java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- java界面设计股票_利用JAVA实现股票交易系统设计参考.doc
利用JAVA实现股票交易系统设计参考 目 录 摘要1 关键词1 Abstract2 Key words2 1 概述3 1.1 Java体系结构3 1.2 Java的优点3 1.3 Java的应用3 2 ...
- java 获取文件名长度_利用Java文件类File的方法,获取磁盘文件的文件名、长度、大小等特性...
利用Java文件类File的方法,获取磁盘文件的文件名.长度.大小等特性. 如题,大神们谁可以编写一个这样的java程序? happy530755 | 浏览 1482 次 |举报 我 ...
- java 对象复制 反射_利用Java反射机制实现对象相同字段的复制操作
一.如何实现不同类型对象之间的复制问题? 1.为什么会有这个问题? 近来在进行一个项目开发的时候,为了隐藏后端数据库表结构.同时也为了配合给前端一个更友好的API接口文档(swagger API文档) ...
- java calendar日期计算_利用Java中Calendar计算两个日期之间的天数和周数
前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每 ...
- java 方法数统计_利用Java简单实现一个代码行数统计器方法实例
前言 哈喽,我是小黑, 最近学了java的输入输出流后一直心痒痒,总想找一点事情来做,所以用java代码来实现了一下统计代码的所有行数,看一下我上大学以来到底打了多少行. 先附上实现代码吧! pack ...
- java日期相差周_利用Java中Calendar计算两个日期之间的天数和周数
前言 究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历.阴(农)历之分.它们的区别在哪呢? 比如有: 月份的定义 - 阳`(公)历 一年12 个月,每 ...
- java 生成pdf 乱码_利用java处理fop导出pdf的中文乱码问题解决方案
本文的作用是,生成带中文的加密pdf格式的文件,防止被人修改. 在项目下建立docbook-xsl, fo-res, out, sample四个文件夹 docbook-xsl目录: 放从sourcef ...
- python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密
原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...
最新文章
- 不知道发这些有啥用!多分享些技术噻...
- 百度网络推广介绍网站在更换老域名时都需注意哪些?
- Matlab保存为unv,matlab之图像处理(2)
- 决策类AI成最具商业价值应用产品 第四范式入选Gartner中国5大代表厂商
- 前端学习(1944)vue之电商管理系统电商系统之绘制分类组件的基本结构
- mysql视图中调用函数写法_从视图中调用函数
- ARMA模型性质之平稳AR模型得统计性质
- ubuntu16.04源码安装opencv3.4.0
- Malta中any函数
- 【项目.源码】深度学习实现任意风格任意内容的极速风格迁移
- 【成功解决】Error:(3, 46) java: 程序包org.springframework.context.annotation不存在
- 自媒体文章采集工具,采集多个平台的文章
- python 主函数传参_Python函数传参详解
- scapy(二):基于流量分析的SQL注入检测
- 如何进入DOS系统及常用DOS命令总结
- 职称论文通过查重之后就能发表吗?
- oracle制造分销模块,oracle ebs表结构及功能总结(财务,制造,分销模块)
- 激光雷达是什么?为什么移动机器人必不可少?
- 前端之JS篇(二)——数据类型基础概念
- 小程序根据国外经纬度显示地图