做者背景:公元2001年,意大利那不勒斯少年,为了达成梦想,在国庆的三天发现本身替身能力Java。从而加入了黑手党组织,并成为......java
做者目的:入门Java 为了Fighting Goldgit
游戏说明:参考了很多的代码,可是自带点点点点思想创新,一个简陋无比可是有点点创意的Java小游戏,代码随便用,能够继续开源开发。其实想作坦克大战为了面向对象的做用发现太复杂又没(菜)创(机)意。 : )github
游戏代码Git地址:https://github.com/O-VIGIA/JavaPrograme_Level1.gitshell
游戏名:生存的代价dom
游戏目的:生存时间更长eclipse
游戏背景:在这个乱飞的年代,谁能活得更久呢ide
游戏玩法:
各色小球漫天乱飞,碰壁反弹,而你
灰色小球-------->你
蓝色小球:被撞到或者吃掉能够加速
橙色小球:被撞到或吃掉被毒死
粉色小球:被撞到或者吃掉变成随即大小函数
上下左右键自由移动直到死亡结束this
小球碰壁会反弹线程
彩蛋:你碰壁的时候会方向反转
游戏总结:后面还想加各类彩色小球功能,大地图,地图障碍物,迷宫地图什么什么的,发现本身仍是太菜了,之后有时间慢慢丰富吧。总的来讲,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); } }
图片侵删