java rx3x_Java初级黄金体验 其一

关于作者

作者背景:公元2001年,意大利那不勒斯少年,为了达成梦想,在国庆的三天发现自己替身能力Java。从而加入了黑手党组织,并成为......

作者目的:入门Java 为了Fighting Gold

关于游戏

游戏说明:参考了不少的代码,但是自带点点点点思想创新,一个简陋无比但是有点点创意的Java小游戏,代码随便用,可以继续开源开发。其实想做坦克大战为了面向对象的作用发现太复杂又没(菜)创(机)意。 : )

游戏名:生存的代价

游戏目的:生存时间更长

游戏背景:在这个乱飞的年代,谁能活得更久呢

游戏玩法:

各色小球漫天乱飞,碰壁反弹,而你

灰色小球-------->你

蓝色小球:被撞到或者吃掉可以加速

橙色小球:被撞到或吃掉被毒死

粉色小球:被撞到或者吃掉变成随即大小

上下左右键自由移动直到死亡结束

小球碰壁会反弹

彩蛋:你碰壁的时候会方向反转

游戏总结:后面还想加各种彩色小球功能,大地图,地图障碍物,迷宫地图什么什么的,发现自己还是太菜了,以后有时间慢慢丰富吧。总的来说,eclipse好,感觉像在百度代码,但是也领悟到了Java类中逻辑思维和抽象思维的美妙与强大。例如起初并没有什么规划,在就只想什么添什么,后来我发现这些小球的有些地方很相似,随机设置位置和速度,构造函数等等,于是就设置了所有小球的父类,果然很好用!还了解了内部类,静态语句块等等一些东西。

关于截图:

初始

3715b29844ff3d5555eb52d28c0d989e.png

遇到粉球变身

1affdda0ff338d00a059d5f1ec3149ef.png

遇到橙球结束

559cdc324abb154406ddae983034b02d.png

关于打包及太菜了不能jar成功转可完全执行的exe

转了一下午QWQ还是成不了 人没了

46a0577e5a89c2223ed4188b170a17a5.png

Little黄金体验

094f7a5a1bae8df28fd1b059c7f67ecb.png

所谓的觉悟,就是能在黑暗的荒野中,开辟出一条应当前进的道路。

6207bb910e7e55b4fe55b7dd3eb379ab.png

关于代码

垃圾主类代码如下:

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

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

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

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[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[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[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);

}

}

图片侵删

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值