Java初级黄金体验 其一
关于作者
作者背景:公元2001年,意大利那不勒斯少年,为了达成梦想,在国庆的三天发现自己替身能力Java。从而加入了黑手党组织,并成为......
作者目的:入门Java 为了Fighting Gold
关于游戏
游戏说明:参考了不少的代码,但是自带点点点点思想创新,一个简陋无比但是有点点创意的Java小游戏,代码随便用,可以继续开源开发。其实想做坦克大战为了面向对象的作用发现太复杂又没(菜)创(机)意。 : )
游戏代码Git地址:https://github.com/O-VIGIA/JavaPrograme_Level1.git
游戏名:生存的代价
游戏目的:生存时间更长
游戏背景:在这个乱飞的年代,谁能活得更久呢
游戏玩法:
各色小球漫天乱飞,碰壁反弹,而你
灰色小球-------->你
蓝色小球:被撞到或者吃掉可以加速
橙色小球:被撞到或吃掉被毒死
粉色小球:被撞到或者吃掉变成随即大小
上下左右键自由移动直到死亡结束
小球碰壁会反弹
彩蛋:你碰壁的时候会方向反转
游戏总结:后面还想加各种彩色小球功能,大地图,地图障碍物,迷宫地图什么什么的,发现自己还是太菜了,以后有时间慢慢丰富吧。总的来说,eclipse好,感觉像在百度代码,但是也领悟到了Java类中逻辑思维和抽象思维的美妙与强大。例如起初并没有什么规划,在就只想什么添什么,后来我发现这些小球的有些地方很相似,随机设置位置和速度,构造函数等等,于是就设置了所有小球的父类,果然很好用!还了解了内部类,静态语句块等等一些东西。
关于截图:
初始
遇到粉球变身
遇到橙球结束
关于打包及太菜了不能jar成功转可完全执行的exe
转了一下午QWQ还是成不了 人没了
Little黄金体验
所谓的觉悟,就是能在黑暗的荒野中,开辟出一条应当前进的道路。
关于代码
垃圾主类代码如下:
package com.lxy.game;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Date;
/**
* 游戏主类
* @author LXY
*
*/
public class MyGameFrame extends Frame {
//speed && r
int speed = 3;
double r;
//time
Date startTime = new Date();
Date endTime;
int period;
//加载图片
// Image tankImg = GameUtil.getImage("images/tank.jpg");
Image bgImg = GameUtil.getImage("images/bg.jpg");
//创建类
Tank tank = new Tank(/*tankImg, */400, 450);
GameObject bg = new GameObject(bgImg, 0, 20);
Shell[] shells = new Shell[25];
Resource[] resources = new Resource[10];
Big[] bigs = new Big[20];
//画笔
@Override
public void paint(Graphics g) { //自动调用画笔g
//保存 g.color
Color c = g.getColor();
//背景
bg.drawSelf(g);
//设置坦克
tank.setSpeed(speed);
if(tank.live)
tank.drawSelf(g);
else {
//启动计时功能给出提示
g.setColor(Color.YELLOW);
Font f = new Font("楷体",Font.BOLD,50);
g.setFont(f);
g.drawString("你持续了"+period+"秒!", (int)tank.x, (int)tank.y);
}
//画炮弹
for(int i=0;i<shells.length;++i) {
boolean peng = false;
shells[i].draw(g);
//碰撞检测
peng = shells[i].getRect().intersects(tank.getRect());
if(peng) {
//计时器
endTime = new Date();
period = (int)((endTime.getTime()-startTime.getTime())/1000);
tank.live = false;
}
}
//画加速资源
for(int j=0;j<resources.length;++j) {
boolean peng1 = false;
//有生命就画
if(resources[j].live)
resources[j].draw(g);
//碰撞检测
peng1 = resources[j].getRect().intersects(tank.getRect());
if(peng1) {
speed = speed + 1;
tank.setSpeed(speed);
resources[j].live = false;
}
}
//画变大资源
for(int k=0;k<bigs.length;++k) {
boolean peng2 = false;
//有生命就画
if(bigs[k].live)
bigs[k].draw(g);
//碰撞检测
peng2 = bigs[k].getRect().intersects(tank.getRect());
if(peng2) {
r = Math.random()*50+10;
tank.setSize((int)r);
bigs[k].live=false;
}
}
//恢复g.color
g.setColor(c);
}
//内部类帮助我们反复画窗口
class PaintThread extends Thread{
@Override
public void run() {
while(true) {
//重画
// System.out.println("重画了一次!");
repaint();
//延时
try {
Thread.sleep(35);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//监听键盘的内部类
class KeyMonitor extends KeyAdapter{
//重载按下键发生的事件
@Override
public void keyPressed(KeyEvent e) {
tank.addDirection(e);
}
//重载松开键发生的事件
@Override
public void keyReleased(KeyEvent e) {
tank.minusDirection(e);
}
}
//初始化窗口
public void launchFrame() {
//游戏初始化
this.setTitle("#游戏:生存的代价 #作者:Lxy");
this.setVisible(true);
this.setSize(Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT);
this.setLocation(100,10);
//自动关闭
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//启动重画窗口的线程
new PaintThread().start();
//启动对键盘的监听
addKeyListener(new KeyMonitor());
//初始化炮弹
for(int i=0;i<shells.length;++i) {
shells[i] = new Shell();
double tmp_x = Math.random()*Constant.SCREEN_WIDTH;
double tmp_y = Math.random()*Constant.SCREEN_HEIGHT;
double tmp_speed = Math.random()*10+3;
shells[i].setPosition(tmp_x, tmp_y);
shells[i].setSpeed((int)tmp_speed);
}
//初始化速度资源
for(int j=0;j<resources.length;++j) {
resources[j] = new Resource();
double tmp_x = Math.random()*Constant.SCREEN_WIDTH;
double tmp_y = Math.random()*Constant.SCREEN_HEIGHT;
double tmp_speed = Math.random()*10+5;
resources[j].setPosition(tmp_x, tmp_y);
resources[j].setSpeed((int)tmp_speed);
}
//初始化大小资源
for(int k=0;k<bigs.length;++k) {
bigs[k] = new Big();
double tmp_x = Math.random()*Constant.SCREEN_WIDTH;
double tmp_y = Math.random()*Constant.SCREEN_HEIGHT;
double tmp_speed = Math.random()*10+5;
bigs[k].setPosition(tmp_x, tmp_y);
bigs[k].setSpeed((int)tmp_speed);
}
}
public static void main(String[] args) {
MyGameFrame f = new MyGameFrame();
f.launchFrame();
}
//双缓冲解决闪烁
private Image offScreenImage = null;
public void update(Graphics g) {
if(offScreenImage == null) {
offScreenImage = this.createImage(Constant.SCREEN_WIDTH,Constant.SCREEN_HEIGHT);
}
Graphics gOff = offScreenImage.getGraphics();
paint(gOff);
g.drawImage(offScreenImage, 0, 0, null);
}
}
图片侵删
Java初级黄金体验 其一的更多相关文章
- Java初级黄金体验 其二
Java初级黄金体验 其二 引言:让我们看一下你的C盘有多少个文件和文件夹 初级 Java IO : 第一个纪念碑 小程序大致功能 让我们看一下E盘有多少个文件 上代码 最近太多的作业 代码可以无限改 ...
- JAVA 11初体验
JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...
- Java 初级软件工程师 认证考试试卷1
Java 初级软件工程师 认证考试试卷 笔试(A卷) 考试时间150分钟 总分 100分 姓 名_______________________ 身份证号_____________ ...
- 引用面试官文章 :如何准备Java初级和高级的技术面试
本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...
- Java初级进阶中高级工程师必备技能
很多人学了javase以为自己学的已经很OK了,但是其实javase里边有很多的知识点是你不知道的,不管你找的是哪里的javase的视频,大多数是不会讲这些东西,而这些东西你平时业务又不会主动去接触, ...
- 在Service Fabric上部署Java应用,体验一把微服务的自动切换
虽然Service Fabric的Java支持版本还没有正式发布,但是Service Fabric本身的服务管理.部署.升级等功能是非常好用的,那么Java的开发者可以如何利用上Service Fab ...
- 【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人聊天
作者:阿里云用户啊里新人 需求:基本实现智能聊天! 最近在开发一款机器人,希望实现基本的聊天功能,词库是有的,但是如果是做完全匹配这个出来的效果很悲催, 比如词库:你好,回答是:哈哈,很好啊. 如 ...
- Java Builder模式 体验(二)
在上篇文章中,对Java Builder模式的使用体验主要是从Builder对构造器改造方面的优秀特性来说的,感觉并没有从Java Builder模式本身的功能和作用去写,因此决定再从Build ...
- 阿里巴巴Java开发规约插件-体验
插件有哪些功能? 阿里技术公众号于今年的2月9日首次公布<阿里巴巴Java开发规约>,瞬间引起全民代码规范的热潮,上月底又发布了PDF的终极版,大家踊跃留言,期待配套的静态扫描工具开放出来 ...
随机推荐
- 二十二、mysql索引原理详解
背景 使用mysql最多的就是查询,我们迫切的希望mysql能查询的更快一些,我们经常用到的查询有: 按照id查询唯一一条记录 按照某些个字段查询对应的记录 查找某个范围的所有记录(between a ...
- 浅析MySQL使用 GROUP BY 分组聚合与细分聚合
原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7521278.html: 若有错误,请评论指出,谢谢! 1. 聚合函数(Aggregate Function ...
- ES2015简介和基本语法
ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015.也就是说,ES6就是ES2015. ...
- mysql技术内幕--innodb存储引擎图解
1. Innodb存储引擎 2. Innodb文件 3. Innodb表 4. Innodb事务 5. innodb索引与算法 6 ...
- 16、Real-time Personalization using Embeddings for Search Ranking at Airbnb
一.背景 Airbnb 平台包含数百万种不同的房源,用户可以通过浏览搜索结果页面来寻找想要的房源,我们通过复杂的机器学习模型使用上百种信号对搜索结果中的房源进行排序. 当用户查看一个房源时,他们有两种 ...
- java基础(10)---leetcode的String、数组以及集合的一些使用
整数 一.整数反转_7 /* 12345 变成 54321 */ public class 整数反转_7 { public static void main(String[] args){ int x ...
- Java精通并发-多线程同步关系实例剖析与详解
在上一次https://www.cnblogs.com/webor2006/p/11422587.html中通过实践来解了一个案例,先来回顾一下习题: 编写一个多线程程序,实现这样的一个目标: 1.存 ...
- [牛客网 -leetcode在线编程 -02] minimum-depth-of-binary-tree -树的最短深度
题目描述 题目描述 Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along ...
- SpringBoot序列化时间类型的问题
在使用sringboot的时候因为在配置文件中缺少一个配置项,所以导致查询出来的时间都是long类型的时间格式 因为springboot默认使用的是Jackson 这个时间显然不是我们所需要的,参考官 ...
- 软件测试过程中如何区分什么是功能bug,什么是需求bug,什么是设计bug?
问题描述: 测试过程中如何区分什么是功能bug,什么是需求bug,什么是设计bug? 精彩答案: 会员 土土的豆豆: 本期问题其实主要是针对不同方面或纬度上对于bug的一个归类和定位. 个人认为,从软 ...