关于作者

作者背景:公元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. Objective-C学习笔记 利用协议实现回调函数

    来源:http://mobile.51cto.com/iphone-278354.htm Objective-C学习笔记 利用协议实现回调函数是本文要介绍的内容,主要是实现一个显示文字为测试的视图,然 ...

  2. python 提取目录中特定类型的文件

    python使用‘os’和‘re’模块提取目录中特定类型的文件,这两个模都是安装python自带的,所以不需要安装. 思路: 使用os库lilstdir获取文件夹中的所有文件名,然后带上文件夹路径组合 ...

  3. springboot学习入门简易版五---springboot2.0整合jsp(11)

    springboot对jsp支持不友好,内部tomcat对jsp不支持,需要使用外部tomcat,且必须打包为war包. 1 创建maven项目 注意:必须为war类型,否则找不到页面. 且不要把js ...

  4. 【转】常见的tcp/ip协议的知识

    1.tcp/ip协议的层数 左图是osi 7层模型,右图是tcp/ip 4层模型.二者对应关系如上. 2.socket中TCP的三次握手建立连接详解 我们知道tcp建立连接要进行“三次握手”,即交换三 ...

  5. python 编码设置

    py 文件设置编码: # -*- coding: utf-8 -*- #coding=utf-8 两种方式任选一种即可 输出到浏览器设置编码: import io import sys sys.std ...

  6. [bluez] linux下蓝牙鼠标的延迟问题

    引言 现在的便携设备,接口越来越少了.所以我们没有理由不用蓝牙鼠标.高大上也不贵. 蓝牙4.0之前,蓝牙设备的问题是特别费电.蓝牙4.0之后省电的要命,我的上一个鼠标Microsoft Designe ...

  7. Centos7修改默认启动内核

    #使用cat /boot/grub2/grub.cfg |grep menuentry  查看系统可用内核 root@Cs7-:/root> cat /boot/grub2/grub.cfg | ...

  8. (Linux基础学习)第二章:CentOS7.4安装教程

    001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 ...

  9. 【OI备忘录】trick汇总帖

    OI中的那些实用的小trick 在OI中,我们时常会用到一些小技巧,无论是代码方面还是数学方面抑或是卡常,都有很多不错的小技巧. 鄙人不才,往往没办法想出来,于是就有了这篇汇总帖~ 如有疏漏,还请da ...

  10. 在springboot项目中使用swaggerui

    在pom.xml文件中配置(用的2.6.1版本,2.9.2有点丑) <properties> <!--<spring.swagger2.version>2.9.2< ...