zoukankan      html  css  js  c++  java
  • 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);
    	}
    	
    }
    

    图片侵删

  • 相关阅读:
    J2EE技术(一)——JNDI
    软考注定是一次伤痛
    Ultraedit使用技巧收集
    ArcGIS Server Java 自定义Functionality(转)
    用C#动态刷新KML
    ArcGIS Server Java 自定义task
    Python动态刷新kml
    投影坐标知识小结
    tomcat配置数据源通过JNDI访问mysql数据库
    ArcGIS Server Java自定义tool
  • 原文地址:https://www.cnblogs.com/Martrix-revolution/p/11625421.html
Copyright © 2011-2022 走看看