关于作者

作者背景:公元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初级黄金体验 其一的更多相关文章

  1. Java初级黄金体验 其二

    Java初级黄金体验 其二 引言:让我们看一下你的C盘有多少个文件和文件夹 初级 Java IO : 第一个纪念碑 小程序大致功能 让我们看一下E盘有多少个文件 上代码 最近太多的作业 代码可以无限改 ...

  2. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  3. Java 初级软件工程师 认证考试试卷1

    Java 初级软件工程师 认证考试试卷   笔试(A卷)   考试时间150分钟 总分 100分     姓    名_______________________ 身份证号_____________ ...

  4. 引用面试官文章 :如何准备Java初级和高级的技术面试

    本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不好的候选人,我总会再三从不同方面提问,只 ...

  5. Java初级进阶中高级工程师必备技能

    很多人学了javase以为自己学的已经很OK了,但是其实javase里边有很多的知识点是你不知道的,不管你找的是哪里的javase的视频,大多数是不会讲这些东西,而这些东西你平时业务又不会主动去接触, ...

  6. 在Service Fabric上部署Java应用,体验一把微服务的自动切换

    虽然Service Fabric的Java支持版本还没有正式发布,但是Service Fabric本身的服务管理.部署.升级等功能是非常好用的,那么Java的开发者可以如何利用上Service Fab ...

  7. 【阿里云产品公测】开放搜索服务 opensearch java jdk 应用体验之 机器人聊天

    作者:阿里云用户啊里新人 需求:基本实现智能聊天! 最近在开发一款机器人,希望实现基本的聊天功能,词库是有的,但是如果是做完全匹配这个出来的效果很悲催,   比如词库:你好,回答是:哈哈,很好啊. 如 ...

  8. Java Builder模式 体验(二)

       在上篇文章中,对Java Builder模式的使用体验主要是从Builder对构造器改造方面的优秀特性来说的,感觉并没有从Java Builder模式本身的功能和作用去写,因此决定再从Build ...

  9. 阿里巴巴Java开发规约插件-体验

    插件有哪些功能? 阿里技术公众号于今年的2月9日首次公布<阿里巴巴Java开发规约>,瞬间引起全民代码规范的热潮,上月底又发布了PDF的终极版,大家踊跃留言,期待配套的静态扫描工具开放出来 ...

随机推荐

  1. 更改jupyter-notebook启动时的默认目录

    1.找到jupyter_notebook_config.py: 默认Windows: C:\Users\USERNAME\.jupyter\jupyter_notebook_config.py 2.找 ...

  2. Python爬虫的三种数据解析方式

    数据解析方式 - 正则 - xpath - bs4 数据解析的原理: 标签的定位 提取标签中存储的文本数据或者标签属性中存储的数据 正则 # 正则表达式 单字符: . : 除换行以外所有字符 [] : ...

  3. js基础知识4

    原文链接:https://book.apeland.cn/details/361/#3.getElementsByClassName()方法 DOM介绍 1.文档:DOM中的”D” ​ DOM是”Do ...

  4. 基于k8s集群部署prometheus监控etcd

    目录 基于k8s集群部署prometheus监控etcd 1.背景和环境概述 2.修改prometheus配置 3.检查是否生效 4.配置grafana图形 基于k8s集群部署prometheus监控 ...

  5. String/StringBuffer

    1. 将String中的空格替换成 %20 public class ReplaceBlank { public static void main(String[] args) { String st ...

  6. spark HMM

    Scala实现的: https://github.com/skrusche63/spark-intent/tree/master/src/main/scala/de/kp/scala/hmm http ...

  7. RSA 加密 解密 (长字符串) JAVA JS版本加解密

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  8. 使用safe-rm替换rm命令,防止误删除

    1.下载safe源码包: wget https://launchpad.net/safe-rm/trunk/0.12/+download/safe-rm-0.12.tar.gz 2.解压safe-rm ...

  9. RestTemplate将字符串以文件的方式上传

    背景 在java后台将内容拼接为字符串,然后使用RestTemplate将字符串以文件的方式上传到指定接口 思路 使用 RestTemplate 时,将字符串封装为字节流,然后上传 代码 /** * ...

  10. React navtive

    http://www.linuxidc.com/Linux/2015-09/123239.htm