日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

潜艇大作战

發布時間:2024/3/13 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 潜艇大作战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

游戲測試類

package Submarine03;import javax.crypto.SealedObject; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.util.Arrays; import java.util.Random; import java.util.Timer; import java.util.TimerTask;public class StartGame extends JPanel {public static final int READAY = 0;public static final int GAMEOVER = 1;private int state = READAY;public static final int WIDTH = 641;public static final int HEIGHT = 479;BattleShip bts = new BattleShip();SaeSubmarine[] ssb = {};Mine[] mines = {};Bomb[] bombs = {};//=======================================================================================================================//水雷碰戰艦 --結束private void mmBbts() {for (int i = 0; i < mines.length; i++) {if (mines[i].isLive() && bts.isLive() && bts.collideAction(mines[i])) {mines[i].colliDend();bts.minusLife();if (bts.getLife() == 0) {//-------------------判斷生命值,改變狀態,結束state = GAMEOVER;}}}}//碰撞--@1消失+@2死亡+@3得分int score = 0;private void bobBssb() {for (int j = 0; j < bombs.length; j++) {for (int i = 0; i < ssb.length; i++) {if (bombs[j].isLive() && ssb[i].isLive() && ssb[i].collideAction(bombs[j])) {bombs[j].colliDend();ssb[i].colliDend();if (ssb[i] instanceof InputLive) {//----------------------------獲得生命值InputLive msb = (InputLive) ssb[i];bts.addLife(msb.inputLive());} else if (ssb[i] instanceof InputScore) {//-----------------獲得分數InputScore msb2 = (InputScore) ssb[i];score += msb2.inputScore();}}}}}//數據清除private void outBound() {for (int i = 0; i < ssb.length; i++) {if (ssb[i].outOfBounds() || ssb[i].isLDend()) {ssb[i] = ssb[ssb.length - 1];ssb = Arrays.copyOf(ssb, ssb.length - 1);}}for (int i = 0; i < mines.length; i++) {if (mines[i].outOfBounds() || mines[i].isLDend()) {mines[i] = mines[mines.length - 1];mines = Arrays.copyOf(mines, mines.length - 1);}}for (int i = 0; i < bombs.length; i++) {if (bombs[i].outOfBounds() || bombs[i].isLDend()) {bombs[i] = bombs[bombs.length - 1];bombs = Arrays.copyOf(bombs, bombs.length - 1);}}}//移動private void omtMove() {for (int i = 0; i < ssb.length; i++) {ssb[i].move();}for (int i = 0; i < mines.length; i++) {mines[i].move();}for (int i = 0; i < bombs.length; i++) {bombs[i].move();}}//生成數據-定時生成 1-潛艇+水雷//潛艇--->@1控制種類生成概率 +@2生成頻率-------------------------------------int temp = 0;private void nextSSb() {temp++;if (temp % 40 == 0) {SaeSubmarine ssb1 = otm();ssb = Arrays.copyOf(ssb, ssb.length + 1);ssb[ssb.length - 1] = ssb1;}}//@1控制種類生成概率public SaeSubmarine otm() {Random random = new Random();int rd = random.nextInt(20);if (rd < 10) {return new ObserverSubmarine();} else if (rd < 15) {return new TorpedoSubmarine();} else {return new MineSubmarine();}}//生成水雷,@1生成水雷方法+@2控制生成頻率----------------------------------------------int temp2 = 0;private void nextMines() {temp2++;if (temp2 % 100 == 0) {for (int i = 0; i < ssb.length; i++) {//水雷是根據水雷潛艇出生if (ssb[i] instanceof MineSubmarine) {Mine msm = ((MineSubmarine) ssb[i]).NextMine();//調用生成方法mines = Arrays.copyOf(mines, mines.length + 1);mines[mines.length - 1] = msm;}}}}//啟動游戲,@1定時器+@2事件監聽器private void subAction() {//@2事件監聽器KeyAdapter k = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_SPACE) {//按下鍵盤生成炸彈,生成數據-事件生成 2-炸彈Bomb bb = bts.nextBome();bombs = Arrays.copyOf(bombs, bombs.length + 1);//數組擴容bombs[bombs.length - 1] = bb;} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {bts.liftMove();} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {bts.rightMove();}}};this.addKeyListener(k);//@1定時器Timer timer = new Timer();int timi = 10;//定個10毫秒一次timer.schedule(new TimerTask() {@Overridepublic void run() {nextSSb();//生成潛艇----->潛艇是多種,控制每種潛艇的出生率,+生成潛艇nextMines();//生成水雷//移動+事件戰艦炸彈移動omtMove();outBound();//溢出數據清除bobBssb();//碰撞消失得分得命mmBbts();//戰艦碰水雷}}, timi, timi);}//重寫畫畫,顯示游戲public void paint(Graphics g) {switch (state) {case READAY:images.sea.paintIcon(null, g, 0, 0);bts.PantImage(g);//畫潛艇for (int i = 0; i < ssb.length; i++) {ssb[i].PantImage(g);}//畫水雷for (int i = 0; i < mines.length; i++) {mines[i].PantImage(g);}//畫炸彈for (int i = 0; i < bombs.length; i++) {bombs[i].PantImage(g);}g.drawString("SCORE" + score, 200, 50);g.drawString("LIVE" + bts.getLife(), 400, 50);repaint();break;case GAMEOVER:images.Gameover.paintIcon(null, g, 0, 0);break;}}public static void main(String[] args) {JFrame jFrame = new JFrame();StartGame start = new StartGame();start.setFocusable(true);jFrame.add(start);jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jFrame.setSize(WIDTH + 16, HEIGHT + 39);jFrame.setLocationRelativeTo(null);jFrame.setVisible(true);//,顯示視圖,2調用paint畫畫start.subAction();//-------------啟動} }

超類

package Submarine03;import Submarine04.SubmarineObject;import javax.swing.*; import java.awt.*; import java.util.Random;public abstract class SaeSubmarine {public static final int LIVE = 0;public static final int DEND = 1;public int state = LIVE;int width;int height;int x;int y;int speed;SaeSubmarine(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;}SaeSubmarine(int width, int height) {Random random = new Random();this.width = width;this.height = height;x = -width;y = random.nextInt(479 - height - 150 + 1) + 150;speed = random.nextInt(3) + 1;}public abstract void move();//判斷狀態方法public boolean isLive() {return state == LIVE;}public boolean isLDend() {return state == DEND;}//取圖的方法 第一步public abstract ImageIcon getImage();//第二步、將取到的圖片畫到窗口 這個對象 的 getImage(取圖片)圖片 的 畫到 painImagepublic void PantImage(Graphics g) {if (isLive()) {this.getImage().paintIcon(null, g, this.x, this.y);}}//數據越界的public boolean outOfBounds() {return this.x >= SubmarineObject.Test.WIDTH;}//碰撞+ this 潛艇,ssb炸彈public boolean collideAction(SaeSubmarine ssb){int x1=this.x-ssb.width;int x2=this.x+this.width;int y1=this.y-ssb.height;int y2=this.y+this.height;int x=ssb.x;int y=ssb.y;return x>=x1 &&x<=x2 && y>=y1 &&y<=y2;}//+消失的public int colliDend(){return state=DEND;} }

倆接口+圖片類

public interface InputLive {public int inputLive(); } ---------------------------------------接口1 public interface InputScore {public int inputScore(); } --------------------------------------接口2 public class images {public static ImageIcon battleship;public static ImageIcon minesubm;public static ImageIcon obsersubm;public static ImageIcon torpesubm;public static ImageIcon Gameover;public static ImageIcon sea;public static ImageIcon mine;public static ImageIcon bomb;static {battleship = new ImageIcon("src/img/battleship.png");minesubm = new ImageIcon("src/img/minesubm.png");obsersubm = new ImageIcon("src/img/obsersubm.png");torpesubm = new ImageIcon("src/img/torpesubm.png");Gameover = new ImageIcon("src/img/Gameover.png");sea = new ImageIcon("src/img/sea.png");mine = new ImageIcon("src/img/mine.png");bomb = new ImageIcon("src/img/bomb.png");} }

6個子類

//戰艇類 public class BattleShip extends SaeSubmarine {int life;//構造方法初始化數據public BattleShip() {super(66, 26, 270, 124, 20);this.life=5;}@Overridepublic void move() {System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}@Overridepublic ImageIcon getImage() {return images.battleship;}public Bomb nextBome(){return new Bomb(this.x,this.y);}public void liftMove(){x-=speed;}public void rightMove(){x+=speed;}//獲取life,顯示用public int getLife(){return life;}//添加生命public int addLife(int num){return life+=num;}public int minusLife(){return life--;} } --------------------------------------------------------------- public class Bomb extends SaeSubmarine {Bomb(int x, int y) {super(9, 12, x, y, 3);}@Overridepublic void move() {y+=speed;System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}@Overridepublic ImageIcon getImage() {return images.bomb;}//數據越界的public boolean outOfBounds() {return this.y >= SubmarineObject.Test.HEIGNT;} } ----------------------------------------------------------------- public class Mine extends SaeSubmarine {Mine(int x, int y) {super(9, 12, x, y, 3);}@Overridepublic void move() {y-=speed;System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}@Overridepublic ImageIcon getImage() {return images.mine;}//數據越界的public boolean outOfBounds() {return this.y <= 150-this.height;} } ----------------------------------------------------------------- public class ObserverSubmarine extends SaeSubmarine implements InputScore {public ObserverSubmarine() {super(63, 19);}@Overridepublic void move() {x+=speed;System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}/*偵察潛艇: 寬63高19,x設置初始 為-x, y位置是隨機的,速度*/@Overridepublic ImageIcon getImage() {return images.obsersubm;}@Overridepublic int inputScore() {return 10;} } ----------------------------------------------------------------- public class TorpedoSubmarine extends SaeSubmarine implements InputScore {public TorpedoSubmarine() {super(64, 20);}@Overridepublic void move() {x+=speed;System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}/*魚雷潛艇: 寬63高19,x設置初始 為-x, y位置是隨機的,速度*/@Overridepublic ImageIcon getImage() {return images.torpesubm;}@Overridepublic int inputScore() {return 40;} } ---------------------------------------------------------------- public class MineSubmarine extends SaeSubmarine implements InputLive {/*水雷潛艇: 寬63高19,x設置初始 為-x, y位置是隨機的,速度*/public MineSubmarine() {super(63, 19);}@Overridepublic void move() {x+=speed;System.out.println(width+"\t"+height+"\t"+x+"\t"+y+"\t"+speed+"\t"+"發射炸彈!");}@Overridepublic ImageIcon getImage() {return images.minesubm;}public Mine NextMine(){int x = this.x+this.width; //x:水雷潛艇的x+水雷潛艇的寬int y = this.y-5; //y:水雷潛艇的y-固定的5return new Mine(x,y); //返回水雷對象}@Overridepublic int inputLive() {return 1;} }

學自王克晶老師:
https://blog.csdn.net/jason13579?type=blog

總結

以上是生活随笔為你收集整理的潜艇大作战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 天天插天天爽 | 在线观看黄色动漫 | 午夜成年人视频 | 精品在线免费播放 | 激情久久久久久久 | 成人av网站在线播放 | 欧美在线观看www | 岛国a视频| 老公吃小头头视频免费观看 | 免费一级特黄3大片视频 | 毛片在哪看 | 国产精品sm| 久久综合久久鬼色 | 一区二区三区资源 | 女人叫床很黄很污句子 | 欧美一区二区在线视频 | 午夜激情视频在线 | 成年视频在线观看 | 九色91porny| 激情第一页 | 一级淫片免费 | 国产精品美女毛片真酒店 | 日韩精品高清视频 | 色视频在线播放 | 国产黄a三级三级三级看三级男男 | 91色站| 日韩精品免费一区二区三区 | 国产性猛交普通话对白 | 毛片一级免费 | 黄色福利在线观看 | 在线中文字幕播放 | 黄色在线免费观看网站 | 天天色天天爱 | 久久九九久精品国产免费直播 | 久久久久久久999 | 亚洲好看站 | 一边摸一边抽搐一进一出视频 | 国产91在线播放精品91 | av导航大全 | 日本老妇高潮乱hd | 日韩激情在线视频 | 日本公妇乱淫免费视频一区三区 | 久久影院午夜理论片无码 | 国产av成人一区二区三区高清 | 日本在线观看中文字幕 | 国产乱淫av片| 亚洲av无码乱码在线观看性色 | caoporn成人 | 国产精品宾馆在线 | 91成人免费在线 | 国产日韩欧美一区 | 久草福利在线 | 99国产精品久久久久99打野战 | av资源站最新av | 国产一级一级片 | 男女插插插视频 | 欧美黄色视屏 | 国产愉拍 | 99在线看| 国产视频一二三四区 | 日日嗨av一区二区三区四区 | 伊人逼逼| 国产精品久久久久久久久久久免费看 | 天堂av2019 | 成人香蕉网 | 91成人一区 | 欧洲综合视频 | 四虎永久免费在线观看 | 大吊一区二区三区 | 综合久久综合 | 中文字幕色图 | 国产精品ⅴa有声小说 | 波多野结衣视频观看 | 已满十八岁免费观看 | 国产精品2020 | 黑森林av凹凸导航 | 国模小丫大尺度啪啪人体 | 亚洲码视频 | 国产剧情在线视频 | 奇米888一区二区三区 | 国产日产欧洲无码视频 | 色妇av| 国产69久久精品成人看 | 亚洲精品日产精品乱码不卡 | 黄色三级三级 | 亚洲视频在线视频 | 葵司ssni-879在线播放 | 黄色国产毛片 | 艹男人的日日夜夜 | 一区二区三区视频免费观看 | 18视频在线观看男男 | 在线观看日本视频 | 国产资源网 | 性感美女被草 | 把高贵美妇调教成玩物 | 岛国激情| 黑丝袜av | 欧美日韩国产精品一区二区三区 | 欧洲黄色录像 |