标签:缓冲 mon dir port phi github ref rap apr
作者背景:公元2001年,意大利那不勒斯少年,为了达成梦想,在国庆的三天发现自己替身能力Java。从而加入了黑手党组织,并成为......
作者目的:入门Java 为了Fighting Gold
游戏说明:参考了不少的代码,但是自带点点点点思想创新,一个简陋无比但是有点点创意的Java小游戏,代码随便用,可以继续开源开发。其实想做坦克大战为了面向对象的作用发现太复杂又没(菜)创(机)意。 : )
游戏代码Git地址:https://github.com/O-VIGIA/JavaPrograme_Level1.git
游戏名:生存的代价
游戏目的:生存时间更长
游戏背景:在这个乱飞的年代,谁能活得更久呢
游戏玩法:
各色小球漫天乱飞,碰壁反弹,而你
灰色小球-------->你
蓝色小球:被撞到或者吃掉可以加速
橙色小球:被撞到或吃掉被毒死
粉色小球:被撞到或者吃掉变成随即大小
上下左右键自由移动直到死亡结束
小球碰壁会反弹
彩蛋:你碰壁的时候会方向反转
游戏总结:后面还想加各种彩色小球功能,大地图,地图障碍物,迷宫地图什么什么的,发现自己还是太菜了,以后有时间慢慢丰富吧。总的来说,eclipse好,感觉像在百度代码,但是也领悟到了Java类中逻辑思维和抽象思维的美妙与强大。例如起初并没有什么规划,在就只想什么添什么,后来我发现这些小球的有些地方很相似,随机设置位置和速度,构造函数等等,于是就设置了所有小球的父类,果然很好用!还了解了内部类,静态语句块等等一些东西。
初始
遇到粉球变身
遇到橙球结束
转了一下午QWQ还是成不了 人没了
所谓的觉悟,就是能在黑暗的荒野中,开辟出一条应当前进的道路。
垃圾主类代码如下:
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);
}
}
图片侵删
标签:缓冲 mon dir port phi github ref rap apr
原文地址:https://www.cnblogs.com/Martrix-revolution/p/11625421.html