关于作者

作者背景:公元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. git/github安装与使用教程

    新学习了Git和GitHub的使用,记一下笔记,也希望可以帮助他人,这里只是初级阶段,以后还会不断的修改和完善. 1.什么是git 开源的分布式版本控制系统,与svn比独特的地方: 1.解决了svn后 ...

  2. systemd_journal_no_entries问题解决

    问题: #journalctl Journal file /var/log/journal/410/system@0.journal~ uses an unsupported feature, ign ...

  3. java基础(6)---面向对象,类,包

    一.类 类对象内存:  成员变量和局部变量: 成员变量:类中定义的一些私有变量,表示对象的属性. 局部变量:局部变量是在方法体里创建的,在方法体外是访问不到这个变量的. public class te ...

  4. djangCrm

    ---恢复内容开始--- 一> 在数据库进行循环取多对多 def get_classlist(self): l=[] for cls in self.class_list.all(): l.ap ...

  5. Failed to bind properties under 'logging.level' to java.util.Map<java.lang.String, java.lang.String>

    org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'log ...

  6. ASP.NET MVC 入门11、使用AJAX

    asp.net mvc 支持微软自身Ajax 和 JQuery框架 asp.net mvc View视图可以理解为 一个包含"<%%>"变量引和的模板. Script与 ...

  7. Windows窗体控件实现内容拖放(DragDrop)功能

    一.将控件内容拖到其他控件 在开发过程中,经常会有这样的要求,拖动一个控件的数据到另外一个控件中.例如将其中一个ListBox中的数据拖到另一个ListBox中.或者将DataGridView中的数据 ...

  8. CheckList 如何梳理可减少上线的验证时间(总结篇)

    对CheckList的执行发起的思考? (1)功能越来越多,CheckList越补充越多,执行CheckList时间越来越长,如何减少上线的验证时间?(2)减少上线验证的时间外,如何保证质量?上线后少 ...

  9. 使用Redis分布式锁处理并发,解决超卖问题

    一.使用Apache ab模拟并发压测 1.压测工具介绍 $ ab -n 100 -c 100 http://www.baidu.com/ -n表示发出100个请求,-c模拟100个并发,相当是100 ...

  10. 什么是IAP?如何实现IAP?

    发布时间:2008-09-01 来源:computer00   分享到:   IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User F ...