JAVA自制小游戏从入门到入土
游戏画面:
画面采用了矛盾性,复杂性和多元化的后现代主义,为局限于单一的闯关游戏,可自由创作改变
1.UI类
继承JFrame创建窗口;继承Runnable创建线程;继承KeyListener实现键盘监听
List存储当前背景图片和BufferedImage存储当前场景
image用于双缓存
重写paint方法绘制所有场景;
2.常量(static)类
创建图片:
public static BufferedImage 存储图片
public static Llist<>列表类存储障碍物
ImageIO流read方法获取图片并加载图片
3.背景类:
4.障碍物类继承Runnable:
5.Role类继承Runnable:
当前的各种状态参数:
show获取当前role图片;
函数类
6.Enemy类继承Runnable:
7.音乐类播放音乐:
- 1.游戏中图片常量的导入
- 2.游戏中页面的切换
- 3。多个线程的并发处理
- 4.游戏中画面闪烁的问题
- 5.游戏中不同的页面对应阻碍物的绘制
可以有两个思路:
由于画面有十多张,相对有点多,因此更优先于采用第二个方法,一方面是创建不同BufferedImage对象方便访问,另一方面是更利于绘制缓冲区
imageIO主要有以下几个包:
具体实现为:
public static BufferedImage bg=null; //BufferedImagd类创建图片
public static BufferedImage bg2=null;
//利用ImageIO中的read将文件写入
bg = ImageIO.read(new File(StaticValue.class.getClassLoader().getResource(path + "bg.png").getPath()));
bg2 = ImageIO.read(new File(StaticValue.class.getClassLoader().getResource(path + "bg2.png").getPath()));
在这里也可以有两个思路:
思路如下:
两种方法均有利弊,由于在本游戏中的画面具有连续性,因此选择第二种方法比较容易实现,第一中方法适用于频繁切换界面的情况
private List<BackGround> allbg = new ArrayList<>();
//用于存储当前的背景
private BackGround nowbg = new BackGround();
nowbg = allbg.get(0); //初始背景
if( ){
nowBg = allBg.get(nowBg.getSort()); //自动取出
}
剩余的相关问题会在剩余教程中解决;
public class UI extends JFrame implements KeyListener,Runnable {
private List<BackGround> allBg = new ArrayList<>(); //用于存储所有的背景
private BackGround nowBg = new BackGround(); //用于存储当前的背景
private Image offScreenImage = null; //画布用于双缓存
private Role role= new Role();
private Thread thread = new Thread(this);
public UI(){
//设置窗口的大小为800 * 600
this.setSize(800,600);
//设置窗口居中显示
this.setLocationRelativeTo(null);
//设置窗口的可见性
this.setVisible(true);
//设置点击窗口上的关闭键,结束程序
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//向窗口对象添加键盘监听器
this.addKeyListener(this);
//设置窗口名称
this.setTitle("闯关");
...//添加图片,开启线程等
}
public void paint(Graphics g) {
//设置缓冲区
...//绘制图片
}
public void run{
//重写run方法
...//启动线程
}
//键盘监听器
public void keyTyped(KeyEvent e){
}
public void keyPressed(KeyEvent e){
}
public void keyReleased(KeyEvent e){
}
剩余几个界面会在介绍
今天就先介绍这么多,源码还在打包,如需要私信即可,感谢观看;
本文将介绍四种启动外部可执行程序的方法,排版不分优先级,实际应用中需根据需求选择最合适的方法。1.ShellExecute#include <windows.h>ShellExecute(NULL,L"open",L"F:\\Code\\C++\\startexetest\\Win32\\Debug\\startexetest.exe",NULL,NULL,SW_SHOW);2.WinExec#include <windows.h>WinExe..
先分享几个画图工具:开源的可视化库–Echartplotlyseaborn上面有很多炫酷的案例可供参考使用其实很多属性与绘制折线图有很多重复的地方,参考上篇折线图.散点图"""散点图"""from matplotlib import pyplot as pltfrom matplotlib import font_managermy_font = font_manager.FontProperties(fname='C:\Windows\Fonts\msyh.ttc',size=14
Skip Headers Oracle Database SQL Reference10g Release 1 (10.1)Part Number B10759-01
DBCP数据源DBCP类包位于 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一个依赖 Jakartacommons-pool对象池机制的数据库连接池,所以在类路径下还必须包括/lib/jakarta- commons/commons-pool.jar。下面是使用DBCP配置MySql数据源的配置片断:xml 代码 destr
来自 网络,供参考。对原作者表示感谢! 前言 程序员的编程技能随着经验的积累,会逐步提高。我认为编程能力可以分为一些层次。下面通过两个维度展开编程能力层次模型的讨论。一个维度是编程技能层次,另一个维度是领域知识层次。编程技能层次 编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。0段—非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题。也就是
1、同步fifo 的实现主要需要考虑以下几点empty 空信号 full 满信号 什么时候读 什么时候写2、 基于以上几点考虑开始书写verilogmodule sy_fifo( input wire clk, input wire rst_n, input wire wr_en, input wire [7:0] data_in, input wire rd_en, output wire full, output reg
本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。...
(本文代码已升级至Swift3) 我原来写过一篇文章介绍如何使用证书通过SSL/TLS方式进行网络请求(Swift - 使用URLSession通过HTTPS进行网络请求,及证书的使用),当时用的是URLSession。本文介绍如何使用 Alamofire 来实现HTTPS网络请求,由于Alamofire就是对URLSession的封装,所以实现起来区别不大。(如果Alamof
代码:https://github.com/zhanghang1989/ResNeSt论文:https://hangzhang.org/files/resnest.pdf尽管图像分类模型最近不断发展,但是由于其简单而模块化的结构,大多数下游应用程序(例如目标检测和语义分割)仍将ResNet变体用作backbone。ResNeSt展示了一个简单的模块:Split-Attention,该块可实现跨...
在本章中,我们将讨论在使用SLF4J时获得的各种错误消息或警告以及这些消息的原因/含义。无法加载类“org.slf4j.impl.StaticLoggerBinder”。这是在类路径中没有提供SLF4J绑定时引起的警告。以下是完整的警告 -SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaultin...
问题现象晚上版本上线后,发现工号进入首页后页面空白,显示INTERNAL_SERVER_ERROR过程回顾通过fiddler抓包,发现某个请求出现500错误检查应用,was,ihs日志,没有发现有效日志发现只有部分工号有问题,开始怀疑存在数据问题,准备导数据回测试环境验证同时,新建一套ihs和was环境进行验证新环境验证,发现原来失败的工号可以正常,怀疑环境配置有问题。同...
数字系统实验—第11-12周任务—硬件语言描述训练3任务书(18级在家实验,可能不同)0.简介1. 认识数据存储芯片HM62256、IP核、LPM开发流程和平台实操:C级任务(80%)实操:B级任务(90%)实操:A级任务(100%)2. IIC串行总线时序分析实操:S级任务(110%)3. 提交数字系统实验——硬件语言描述训练3一、C级任务1、 设计HM62256测试电路并对其仿真验证2、 依据上述HM62256的功能,定制开发一个1-port RAM的IP核二、B级任务1、 html文件波形分析(htm