Java初级黄金体验 其一

关于作者

作者背景:公元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);
	}
	
}

图片侵删

原文地址:https://www.cnblogs.com/Martrix-revolution/p/11625421.html