iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java如何实现潜艇小游戏
  • 191
分享到

Java如何实现潜艇小游戏

2023-06-29 12:06:21 191人浏览 八月长安
摘要

本篇内容介绍了“Java如何实现潜艇小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先是主方法里定义的窗口(这些都是固定的格式,不会的

本篇内容介绍了“Java如何实现潜艇小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

首先是主方法里定义的窗口(这些都是固定的格式,不会的也没什么事,直接Ctrl+c+v就行,基本上看一下数据都能看的懂)

写一个超类,超类里需要有潜艇,深水炸弹,水雷和战舰的宽,高,以及出场时的x,y坐标,和移动速度。所有对象的图片,所有对象的移动方法,以及碰撞

然后再写派生类,根据击败一个水雷潜艇,战舰会获得一条命,击败其他潜艇,战舰会获得分数,所以,需要定义两个接口,一个是用来加命,另一个用来加分

完整代码如下(图片什么的可以自己去找,只需要改一下Image类和各个对象的宽高就可以)

游戏世界World类

package cn.tedu.sunarine;import javax.swing.JFrame;import javax.swing.JPanel;import java.awt.Graphics;import java.util.Arrays;import java.util.Random;import java.util.Timer;import java.util.TimerTask;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;//整个游戏世界public class World extends JPanel {    public static final int WIDTH = 641;    public static final int HEIGHT = 479;      public static final int RUNNING =0;    public static final int GAME_OVER=1;    private int state = RUNNING;     //窗口所显示的对象    private Battleship ship = new Battleship(); //战舰    private SeaObject[] submarines = {}; //潜艇(侦察潜艇、鱼雷潜艇、水雷潜艇)    private Mine[] mines = {}; //水雷    private Bomb[] bombs = {}; //深水炸弹      //随机生成潜艇    public SeaObject nextSubmarine(){        Random rand = new Random();        int type = rand.nextInt(30);        if(type<10){            return new ObserveSubmarine();        }else if(type<15){            return new TorpedoSubmarine();        }else{            return new MineSubmarine();        }    }     private int subEnterIndex = 0;    //潜艇入场    public void submarineEnterAction(){ //每10毫秒走一次        subEnterIndex++;        if(subEnterIndex%40==0){ //每40毫秒            SeaObject obj = nextSubmarine();            submarines = Arrays.copyOf(submarines,submarines.length+1);            submarines[submarines.length-1] = obj;        }    }     private int mineEnterIndex = 0;    //鱼雷,水雷入场    public void MineEnterAction(){        mineEnterIndex++;        if(mineEnterIndex%100==0){            for (int i=0;i<submarines.length;i++){                if (submarines[i] instanceof  MineSubmarine){                    if (submarines[i].isLIVE()) {                        MineSubmarine ms = (MineSubmarine) submarines[i];                        Mine obj = ms.shootMine();                        mines = Arrays.copyOf(mines, mines.length + 1);                        mines[mines.length - 1] = obj;                    }                }            }        }    }     public void gameOver(){        if (ship.getLife()<=0){            state = GAME_OVER;        }    }     //海洋对象移动    public void moveAction(){        for(int i=0;i<submarines.length;i++){            submarines[i].move();        }        for(int i=0;i<mines.length;i++){            mines[i].move();        }        for(int i=0;i<bombs.length;i++){            bombs[i].move();        }    }     //删除越界对象    public void outOfBoundsAction(){        for(int i=0;i<submarines.length;i++){            if(submarines[i].isOutOfBounds()){                submarines[i] = submarines[submarines.length-1];                submarines = Arrays.copyOf(submarines,submarines.length-1);            }        }         for(int i=0;i<mines.length;i++){            if(mines[i].isOutOfBounds()){                mines[i] = mines[mines.length-1];                mines = Arrays.copyOf(mines,mines.length-1);            }        }         for(int i=0;i<bombs.length;i++){            if(bombs[i].isOutOfBounds()){                bombs[i] = bombs[bombs.length-1];                bombs = Arrays.copyOf(bombs,bombs.length-1);            }        }    }     private  int score = 0;     public void BombsBangAction(){//深水炸弹炸潜艇        for (int i=0;i<bombs.length;i++){            Bomb b =bombs[i];            for (int j=0;j<submarines.length;j++){                SeaObject s = submarines[j];                if (b.isLIVE()&& s.isLIVE()&&s.isHit(b)){                    b.GoDead();                    s.goDead();                    if (s instanceof EnemyScore){                        EnemyScore es = (EnemyScore) s;                        score += es.getScore();                    }                    if (s instanceof EnemyLife){                        EnemyLife ea = (EnemyLife) s;                        int num = ea.getLife();                        ship.addLife(num);                    }                 }            }        }    }     public void mineBangAction(){        for (int i=0;i<mines.length;i++){            Mine m= mines[i];            if (m.isLIVE()&& ship.isLIVE()&&m.isHit(ship)){                m.goDead();                ship.subtratLife();            }        }    }          public void action(){        KeyAdapter k = new KeyAdapter(){             public void keyPressed(KeyEvent e) {                if(e.geTKEyCode() == KeyEvent.VK_SPACE){                    Bomb obj = ship.shoot(); //深水炸弹入场                    bombs = Arrays.copyOf(bombs,bombs.length+1);                    bombs[bombs.length-1] = obj;                }                if(e.getKeyCode() == KeyEvent.VK_LEFT){                    ship.moveLeft();                }                if(e.getKeyCode() == KeyEvent.VK_RIGHT){                    ship.moveRight();                }            }        };        this.addKeyListener(k);         Timer timer = new Timer();        int interval = 10;        timer.schedule(new TimerTask() {            public void run() {                submarineEnterAction(); //潜艇(侦察、水雷、鱼雷)入场                MineEnterAction();      //水雷入场                moveAction();           //海洋对象移动                BombsBangAction();      //深水炸弹和潜艇碰撞                mineBangAction();       //水雷和战舰碰撞                outOfBoundsAction();    //删除越界的对象                gameOver();                repaint();            }        }, interval, interval);    }     public void paint (Graphics g ){        switch (state) {            case GAME_OVER:                Images.gameover.paintIcon(null,g,0,0);                break;            case RUNNING:            Images.sea.paintIcon(null, g, 0, 0);            ship.paintImage(g);            for (int i = 0; i < submarines.length; i++) {                submarines[i].paintImage(g);            }            for (int i = 0; i < mines.length; i++) {                mines[i].paintImage(g);            }            for (int i = 0; i < bombs.length; i++) {                bombs[i].paintImage(g);            }            g.drawString("SCORE" + score, 200, 50);            g.drawString("LIFE" + ship.getLife(), 400, 50);        }    }        public static void main(String[] args) {        JFrame frame = new JFrame();        World world = new World();        world.setFocusable(true);        frame.add(world);        frame.setResizable(false);        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.setSize(WIDTH, HEIGHT+19);        frame.setLocationRelativeTo(null);        frame.setVisible(true);        world.action();    }}

定义一个SeaObject的类当作超类(父类),然后再写其他的派生类(子类)

package cn.tedu.sunarine; import javax.swing.ImageIcon;import java.awt.Graphics;import java.util.Random; public abstract class SeaObject {     public static final int LIVE = 0;    public static final int DEAD = 1;    protected int state=LIVE;     protected int width;    protected int height;    protected int x;    protected int y;    protected int speed;     //三个潜艇    public SeaObject(int width, int height) {        this.width = width;        this.height = height;        x =-width;        Random rand = new Random();        y = rand.nextInt(497 - height - 150 + 1) + 150;        speed = rand.nextInt(3) + 1;    }//水雷,战舰,炸弹    public SeaObject(int width, int height, int x, int y, int speed) {        this.width = width;        this.height = height;        this.x = x;        this.y = y;        this.speed = speed;    }     public abstract void move();     public abstract ImageIcon getImage();     public boolean isLIVE(){        return state ==LIVE;    }    public void paintImage(Graphics g){        if (isLIVE()){            this.getImage().paintIcon(null,g,this.x,this.y);        }    }    public boolean isOutOfBounds(){        return x>=World.WIDTH;    }    public boolean isHit(SeaObject other){        int x1 = this.x-other.width;        int x2 = this.x+this.width;        int y1 = this.y-other.height;        int y2 = this.y+this.height;        int x=other.x;        int y=other.y;        return x>=x1 && x<=x2 && y>=y1 && y<=y2;    }     public void goDead(){        state =DEAD;    }}

在派生类的引用超类

鱼雷潜艇类

package cn.tedu.sunarine;import javax.swing.ImageIcon; //鱼雷潜艇public class TorpedoSubmarine extends SeaObject implements EnemyScore{    TorpedoSubmarine(){        super(64,20);    }     @Override    public void move() {        x+=speed;    }    public ImageIcon getImage(){        return Images.torpedo;    }    public boolean isOutOfBounds() {        return x>=World.WIDTH;    }    public int getScore(){        return 20;    }}

水雷潜艇类

package cn.tedu.sunarine;import javax.swing.ImageIcon; //水雷潜艇public class MineSubmarine extends SeaObject implements EnemyScore{    MineSubmarine(){       super(63,19);    }     @Override    public void move() {        x+=speed;    }    public ImageIcon getImage(){        return Images.minesubm;    }    public Mine shootMine(){        int x = this.x+(this.width/2);        int y =this.y;        return new Mine(x,y);    }    public boolean isOutOfBounds() {        return x>=World.WIDTH;    }    public int getLife(){        return 1;    }}

侦察潜艇类

package cn.tedu.sunarine;import javax.swing.ImageIcon; //侦察潜艇public class ObserveSubmarine extends SeaObject implements EnemyScore{    ObserveSubmarine(){        super(63,19);    }     @Override    public void move() {        x+=speed;    }    public ImageIcon getImage(){        return Images.observesubm;    }    public boolean isOutOfBounds() {        return x>=World.WIDTH;    }    public int getScore(){        return 10;    }}

鱼雷类

package cn.tedu.sunarine;//鱼雷import javax.swing.ImageIcon;public class Mine extends SeaObject{        Mine(int x,int y){            super(11,11,x,y,1);        }     @Override    public void move() {        y-=speed;    }     public ImageIcon getImage(){            return Images.mine;    }    public boolean isOutOfBounds(){            return y<=150-(height/2);    }}

深水炸弹类

package cn.tedu.sunarine;//深水炸弹import javax.swing.ImageIcon;public class Bomb extends SeaObject{    Bomb(int x,int y){        super(9,12,x,y,3);    }     @Override    public void move() {        y+=speed;    }    public ImageIcon getImage(){        return Images.bomb;    }    public boolean isOutOfBounds(){        return y>=World.HEIGHT;    }}

战舰类

package cn.tedu.sunarine; import javax.swing.*; //战舰public class Battleship extends SeaObject{    int life;    Battleship(){       super(66,26,270,124,20);       life=1;    }     @Override    public void move() {        System.out.println("战舰移动");    }    public ImageIcon getImage(){        return Images.battleship;    }    public Bomb shoot(){        return new Bomb(this.x,this.y+height);    }    //限制移动范围    public void moveLeft(){        x-=speed;        x=Math.max(0,x);    }    public void moveRight(){        x+=speed;        x=Math.min(x,World.WIDTH-this.width);    }    public void addLife(int num){        life+=num;    }    public int getLife(){        return life;    }    public void subtratLife(){        life--;    }}

加命接口

package cn.tedu.sunarine; public interface EnemyLife {    public int getLife();}

加分接口

package cn.tedu.sunarine; public interface EnemyScore {    public int getScore();}

最后,Image类(可根据自己的图片改)

package cn.tedu.sunarine;import javax.swing.*;public class Images {    public static ImageIcon battleship;    public static ImageIcon observesubm;    public static ImageIcon mine;    public static ImageIcon bomb;    public static ImageIcon sea;    public static ImageIcon torpedo;    public static ImageIcon minesubm;    public static ImageIcon gameover;    static {        battleship = new ImageIcon("./img/battleship.png");        bomb = new ImageIcon("./img/bomb.png");        gameover = new ImageIcon("./img/gameover.png");        mine = new ImageIcon("./img/mine.png");        minesubm = new ImageIcon("./img/minesubm.png");        observesubm = new ImageIcon("./img/obsersubm.png");        sea = new ImageIcon("./img/sea.png");        torpedo = new ImageIcon("./img/torpesubm.png");    }     public static void main(String[] args) {        System.out.println(battleship.getImageLoadStatus());        System.out.println(observesubm.getImageLoadStatus());        System.out.println(mine.getImageLoadStatus());        System.out.println(battleship.getImageLoadStatus());        System.out.println(bomb.getImageLoadStatus());        System.out.println(gameover.getImageLoadStatus());        System.out.println(minesubm.getImageLoadStatus());        System.out.println(sea.getImageLoadStatus());    }}

“Java如何实现潜艇小游戏”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Java如何实现潜艇小游戏

本文链接: https://www.lsjlt.com/news/324850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java如何实现潜艇小游戏
    本篇内容介绍了“Java如何实现潜艇小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先是主方法里定义的窗口(这些都是固定的格式,不会的...
    99+
    2023-06-29
  • Java练习之潜艇小游戏的实现
    首先是主方法里定义的窗口(这些都是固定的格式,不会的也没什么事,直接Ctrl+c+v就行,基本上看一下数据都能看的懂) 写一个超类,超类里需要有潜艇,深水炸弹,水雷和战舰的宽,高,以...
    99+
    2024-04-02
  • java实现潜艇大战游戏源码
    代码如下 package com.util; import java.awt.BorderLayout; import java.awt.Color; import jav...
    99+
    2024-04-02
  • 使用java怎么实现潜艇大战游戏
    使用java怎么实现潜艇大战游戏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。代码如下package com.util;import java.awt....
    99+
    2023-06-15
  • Java如何实现飞机小游戏
    这篇文章主要讲解了“Java如何实现飞机小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现飞机小游戏”吧!1,Constant;专门放常量package com....
    99+
    2023-07-01
  • Java如何实现接月饼小游戏
    这篇文章给大家分享的是有关Java如何实现接月饼小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。主要设计设计游戏界面,用swing实现设计背景设计得分物体-月饼,碰到加一分设计障碍物-月亮,碰到会死亡监听鼠标...
    99+
    2023-06-29
  • 如何使用Java实现扫雷小游戏
    这篇文章主要介绍“如何使用Java实现扫雷小游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用Java实现扫雷小游戏”文章能帮助大家解决问题。效果展示主类:GameWin类package&n...
    99+
    2023-06-30
  • java如何实现飞机大战小游戏
    本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyPanel类package &nb...
    99+
    2023-07-01
  • java实现弹球小游戏
    GUI实现弹球小游戏,供大家参考,具体内容如下 先看一下游戏效果图。 一个简单的Demo。也比较简单,新手试着做一做完善改进。 源代码 import Com.Style.Fo...
    99+
    2024-04-02
  • Java实现数独小游戏
    本文实例为大家分享了Java实现数独小游戏的具体代码,供大家参考,具体内容如下 题目要求: 制作一个数独游戏。数据游戏拼图由一个3*3的九宫格组成,每个格式又分成一个小九宫格,共九九...
    99+
    2024-04-02
  • Java实现飞机小游戏
    本文实例为大家分享了Java实现飞机小游戏的具体代码,供大家参考,具体内容如下 该小游戏使用java语言实现,使用工具idea。 共写9个类 Constant;Explode;Gam...
    99+
    2024-04-02
  • 如何使用java实现猜数字小游戏
    这篇文章给大家分享的是有关如何使用java实现猜数字小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。题目描述:猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪...
    99+
    2023-06-14
  • java如何实现简单贪吃蛇小游戏
    这篇文章给大家分享的是有关java如何实现简单贪吃蛇小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下有两个类,放在同一文件下下即可,背景图片,标题,蛇尾可自行更改import java....
    99+
    2023-06-15
  • Java如何实现双色球彩票小游戏
    这篇文章主要介绍了Java如何实现双色球彩票小游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的...
    99+
    2023-06-14
  • Java实现猜数字小游戏
    目录1. 开篇简介2. 需求简介3. 思路分析4. 步骤讲解5. 代码实现6. 如何更快猜到数字的方法总结1. 开篇简介 嗨,大家好!!!『』最近『马上』就要『过年』了,先祝大家『新...
    99+
    2024-04-02
  • Java实现三子棋小游戏
    # 前言 之前在学习C语言的时候,做过一个三子棋的小游戏,最近开始学习Java,就想着能不能用Java再把之前的练习重新实现一边,既然有这个想法了,那就开始行动啦~。 再写的过程中...
    99+
    2024-04-02
  • Java实现斗地主小游戏
    本文实例为大家分享了Java实现斗地主小游戏的具体代码,供大家参考,具体内容如下 原理图: 斗地主过程:  *  1、组合牌  * &nbs...
    99+
    2024-04-02
  • Unity如何实现射击小游戏
    这篇文章主要为大家展示了“Unity如何实现射击小游戏”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Unity如何实现射击小游戏”这篇文章吧。游戏画面展示这款小游戏只用了两个UI界面,一个是菜单...
    99+
    2023-06-29
  • jQuery如何实现拼图小游戏
    这篇文章给大家分享的是有关jQuery如何实现拼图小游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。小熊维尼拼图jQuery代码实现拼图小游戏,鼠标选中拼块,用上下左右键移动拼...
    99+
    2024-04-02
  • C++如何实现地牢小游戏
    这篇文章主要讲解了“C++如何实现地牢小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++如何实现地牢小游戏”吧!Dungeon Game 地牢游戏The demons had cap...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作