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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全)

發(fā)布時間:2023/12/8 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.EatFish游戲開發(fā)過程

1.游戲窗口創(chuàng)建 2.添加背景圖片 3.啟動封面 4.啟動頁面的點擊事件 5.游戲開始的背景添加 6.雙緩存解決閃屏問題 7.敵方魚類的生成 8.我方魚的生成 9.我方魚和敵方魚的碰撞檢測 10.游戲積分以及關(guān)卡的設(shè)置

?2.游戲窗口的窗口創(chuàng)建

? ? ? 首先這個大魚吃小魚游戲在設(shè)計時就準備做成一個窗口游戲,并且準備采用Java進行開發(fā),所以理所當然的想到了去使用Swing技術(shù)來支持開發(fā)。當然,現(xiàn)如今Swing也早就成為了時代的產(chǎn)物,逐漸被JavaJX替代了。由于時間以及難易程度的考慮,這里我們還是采用了Swing技術(shù)來開發(fā)這個游戲。

3.?EatFish游戲中的5種狀態(tài)

? ? ? ?這里我們首先定義了一個static的對象state用來表示游戲狀態(tài),然后采用switch語句來判定每種游戲狀態(tài)對應(yīng)的窗口應(yīng)該做什么事情。首先,state=0表示“游戲未開始”,state=1表示“游戲進行中”,state=2表示“游戲結(jié)束”,state=3表示“通關(guān)成功”,state=4表示“游戲暫停”。

?4.我方魚類和敵方魚類的創(chuàng)建

敵方魚類:

?

?我方魚類:

? ? ? ?敵我方的魚類本質(zhì)其實就是一個個打的對象,我們要做的就是去創(chuàng)建它們對應(yīng)的類然后生成相應(yīng)的對象,然后通過createImage方法將這些魚類的圖片于對象進行綁定,然后我們看到的就是如上生動的魚類了。此外,由于我方魚類在向左向右移動時,以及敵方魚類出現(xiàn)時都是有左右兩個方向的,所以我們要提前準備好連個方向的動態(tài)圖以及在代碼中分別設(shè)計左右兩個方向的魚類對象。

?

?5.我方魚類的移動以及大小的變化

? ? ? ?在工具類GameUtil中已經(jīng)定義了UPDOWMLEFTRIGHT,分別對應(yīng)著鍵盤監(jiān)聽事件。我方魚位置的變化由每次先前定義的speed以及當前位置決定。比如向右移動,點擊一次“→”,我方魚X坐標位置就加一個speed的大小。?在我方魚吃到比自己等級小的魚的時候,魚的體積是應(yīng)該變大的。這里是由給不同等級敵方魚類的分數(shù)count決定的,當吃掉比自己等級低的魚類后,會調(diào)用繪制自身的一個方法paintSelf(),由于參數(shù)中加了count的值,所以我方魚的體積就會變大。

?

?6.敵方魚類的批量生成

? ? ? ?首先敵方魚類我們設(shè)計成了三種:海馬、熱帶魚、劍魚。另外還有一種Boss鯊魚(無視任何其他魚類,實現(xiàn)通吃)。這里敵方魚類的生成是和游戲難度等級掛鉤的。當level=1時,我們讓窗口內(nèi)隨機不斷生成1級敵方魚:海馬。Level=2時,生成熱帶魚。level=3時,生成劍魚。Level=4時,生成鯊魚。這里敵方魚的生成借助了一個指針time,將他作為計數(shù)器,用來控制每過多久添加一條敵方魚到敵方魚的集合中。

?

?7.魚類的碰撞檢測

? ? ? ?魚類碰撞檢測是大魚吃小魚游戲中很關(guān)鍵的步驟,這里我們采用的是矩形碰撞檢測的方法,即:通過獲取魚類自身矩形的方法,用于檢測不同矩形之間是否相交了來判斷魚類碰撞。Java中有原生的Rectangle類,我們?yōu)槊總€魚類生成一個可以返回Rectangle類的對象的方法即可。之后再通過Java中的intersects()方法去比較兩個返回的Rectangle對象是否相交就可以判斷出魚類間是否碰撞了。在碰撞后,將等級小的魚類位置坐標更新到窗口之外就達到了被吃掉的效果

?

8.項目代碼?

Bg類:

package com.shu;import java.awt.*;public class Bg {void paintSelf(Graphics g , int fishLevel){g.drawImage(GameUtils.bgimg,0,0,null);switch (GameWin.state){case 0:GameUtils.drawWord(g,"開始",Color.red,80,700,500);break;case 1:GameUtils.drawWord(g,"積分"+GameUtils.count,Color.ORANGE,50,200,120);GameUtils.drawWord(g,"難度"+GameUtils.level,Color.ORANGE,50,600,120);GameUtils.drawWord(g,"等級"+fishLevel,Color.ORANGE,50,1000,120);break;case 2:GameUtils.drawWord(g,"游戲結(jié)束!!!",Color.red,50,600,400);break;case 3:GameUtils.drawWord(g,"積分"+GameUtils.count,Color.ORANGE,50,200,120);GameUtils.drawWord(g,"難度"+GameUtils.level,Color.ORANGE,50,600,120);GameUtils.drawWord(g,"等級"+fishLevel,Color.ORANGE,50,1000,120);GameUtils.drawWord(g ,"勝利",Color.red,80,700,500);break;case 4:break;default:}} }

?Enamy類:

package com.shu;import java.awt.*;public class Enamy {//定義圖片Image image;//定義物體坐標int x;int y;int width;int height;//移動速度int speed;//方向int dir = 1;//1為向右 -1為向左//類型int type;//分值int count;//繪制自身方法public void paintSelf(Graphics g){g.drawImage(image,x,y,width,height,null);}//獲取自身矩形用于碰撞檢測public Rectangle getRec(){return new Rectangle(x,y,width,height);} }//敵方魚左類 class Enamy_1_L extends Enamy {Enamy_1_L(){this.x = -45;this.y = (int)(Math.random()*700 + 100);this.width = 45;this.height = 69;this.speed = 10;this.count = 1;this.type = 1;this.image = GameUtils.enamyl_img;} }//敵方魚右類 class Enamy_1_R extends Enamy_1_L {Enamy_1_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_img;} }class Enamy_2_L extends Enamy {Enamy_2_L(){this.x = -100;this.y = (int)(Math.random()*700+100);this.width = 100;this.height = 100;this.speed = 5;this.count = 2;this.type = 2;this.image = GameUtils.enamyl_2img;} }class Enamy_2_R extends Enamy_2_L {Enamy_2_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_2img;} }class Enamy_3_L extends Enamy {Enamy_3_L(){this.x = -300;this.y = (int)(Math.random()*700+100);this.width = 300;this.height = 150;this.speed = 15;this.count = 3;this.type = 3;this.image = GameUtils.enamyl_3img;}@Overridepublic Rectangle getRec(){return new Rectangle(x + 40, y + 30,width - 80,height +- 60);} }class Enamy_3_R extends Enamy_3_L {Enamy_3_R(){this.x = 1400;dir = -1;this.image = GameUtils.enamyr_3img;} }class Enamy_Boss extends Enamy {Enamy_Boss(){this.x = -1000;this.y = (int)(Math.random()*700+100);this.width = 170;this.height = 170;this.speed = 40;this.count = 0;this.type = 10;this.image = GameUtils.bossimg;} }

GameUtils類:

package com.shu;import java.awt.*; import java.util.ArrayList; import java.util.List;public class GameUtils {//方向static boolean UP =false;static boolean DOWN =false;static boolean LEFT =false;static boolean RIGHT =false;//分數(shù)static int count = 0;//關(guān)卡等級static int level = 0;//敵方魚類集合public static List<Enamy> EnamyList = new ArrayList<>();//背景圖public static Image bgimg = Toolkit.getDefaultToolkit().createImage("images/sea.jpg");//敵方魚類public static Image enamyl_img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish1_r.gif");public static Image enamyr_img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish1_l.gif");public static Image enamyl_2img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish2_r.png");public static Image enamyr_2img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish2_l.png");public static Image enamyl_3img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish3_r.png");public static Image enamyr_3img = Toolkit.getDefaultToolkit().createImage("images/enemyFish/fish3_l.png");public static Image bossimg = Toolkit.getDefaultToolkit().createImage("images/enemyFish/boss.gif");//我方魚類public static Image MyFishimg_L = Toolkit.getDefaultToolkit().createImage("images/myFish/myfish_left.gif");public static Image MyFishimg_R = Toolkit.getDefaultToolkit().createImage("images/myFish/myfish_right.gif");//繪制文字的工具類public static void drawWord(Graphics g,String str ,Color color,int size,int x, int y){g.setColor(color);g.setFont(new Font("仿宋",Font.BOLD,size));g.drawString(str, x, y);}}

GameWin類:

package com.shu;import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent;public class GameWin extends JFrame {/** 游戲狀態(tài) 0未開始,1游戲中,2通關(guān)失敗,3通關(guān)成功,4暫停,5重新開始*///定義游戲默認狀態(tài)static int state = 0;Image offScreenImage;//寬高int width = 1440;int height = 900;double random;//計數(shù)器int time = 0;//背景Bg bg = new Bg();//敵方魚類Enamy enamy;//boss類Enamy boss;//是否生成bossboolean isboss = false;//我方魚類MyFish myFish = new MyFish();public void launch(){this.setVisible(true);this.setSize(width,height);this.setLocationRelativeTo(null);//this.setResizable(false);this.setTitle("大魚吃小魚");this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.addMouseListener(new MouseAdapter(){@Overridepublic void mouseClicked(MouseEvent e){super.mouseClicked(e);if(e.getButton() == 1 && state == 0){state = 1;repaint();}if(e.getButton() == 1 && state == 2 || state == 3){reGame();state = 1;}}});//鍵盤移動this.addKeyListener(new KeyAdapter() {@Override//按壓public void keyPressed(KeyEvent e) {super.keyPressed(e);//WASDif (e.getKeyCode()==87){GameUtils.UP = true;}if (e.getKeyCode()==83){GameUtils.DOWN = true;}if (e.getKeyCode()==65){GameUtils.LEFT = true;}if (e.getKeyCode()==68){GameUtils.RIGHT = true;}if(e.getKeyCode() == 32){if(state == 1){state = 4;GameUtils.drawWord(getGraphics(),"游戲暫停!!!",Color.red,50,600,400);}else if(state == 4) state = 1;}if(e.getKeyCode() == 75)//后路,按k 增加50積分{GameUtils.count += 50;}}@Override//抬起public void keyReleased(KeyEvent e){super.keyPressed(e);//WASDif(e.getKeyCode() == 87){GameUtils.UP = false;}if(e.getKeyCode() == 83){GameUtils.DOWN = false;}if(e.getKeyCode() == 65){GameUtils.LEFT = false;}if(e.getKeyCode() == 68){GameUtils.RIGHT = false;}}});while(true){repaint();time ++;try{Thread.sleep(40);}catch (InterruptedException e){e.printStackTrace();}}}public void paint(Graphics g){//懶加載模式初始化對象 雙緩存解決閃屏問題offScreenImage = createImage(width,height);Graphics gImage = offScreenImage.getGraphics();bg.paintSelf(gImage,myFish.level);//游戲狀態(tài)switch (state){case 0:break;case 1:myFish.paintSelf(gImage);logic();for(Enamy enamy:GameUtils.EnamyList){enamy.paintSelf(gImage);}if(isboss){boss.x = boss.x + boss.dir * boss.speed;boss.paintSelf(gImage);if(boss.x < 0){gImage.setColor(Color.red);gImage.fillRect(boss.x,boss.y,2400,boss.height/30);}}break;case 2:for(Enamy enamy:GameUtils.EnamyList){enamy.paintSelf(gImage);}if(isboss){boss.paintSelf(gImage);}break;case 3:myFish.paintSelf(gImage);break;case 4:return;default:}g.drawImage(offScreenImage,0,0,null);}void logic(){//關(guān)卡難度if(GameUtils.count<5){GameUtils.level = 0;GameUtils.level = 0;myFish.level = 1;}else if(GameUtils.count<=15){GameUtils.level = 1;}else if(GameUtils.count<=50){GameUtils.level = 2;myFish.level = 2;}else if(GameUtils.count <= 150){GameUtils.level = 3;myFish.level = 2;}else if(GameUtils.count <= 300){GameUtils.level = 4;myFish.level = 3;}else if(GameUtils.count > 300){state = 3;//游戲勝利}random = Math.random();//敵方魚生成switch (GameUtils.level){case 4:if(time % 60 == 0){boss = new Enamy_Boss();isboss = true;}case 3:case 2:if(time % 30 == 0){if(random > 0.5){enamy = new Enamy_3_L();}else{enamy = new Enamy_3_R();}GameUtils.EnamyList.add(enamy);}case 1:if(time % 20 == 0){if(random > 0.5){enamy = new Enamy_2_L();}else{enamy = new Enamy_2_R();}GameUtils.EnamyList.add(enamy);}case 0:if(time % 10 == 0){if(random > 0.5){enamy = new Enamy_1_L();}else{enamy = new Enamy_1_R();}GameUtils.EnamyList.add(enamy);}break;default:}//移動方向for(Enamy enamy:GameUtils.EnamyList){enamy.x += enamy.dir * enamy.speed;//和boss魚類碰撞檢測if(isboss){if(boss.getRec().intersects(enamy.getRec())){enamy.x = -200;enamy.y = -200;}if (boss.getRec().intersects(myFish.getRec()))state = 2;}//我方魚與敵方魚碰撞檢測if(myFish.getRec().intersects(enamy.getRec())){if(myFish.level >= enamy.type){enamy.x = -200;enamy.y = -200;GameUtils.count = GameUtils.count + enamy.count;}else //我方魚被高級魚吃掉{state = 2;}}}}//重新開始void reGame(){GameUtils.EnamyList.clear();time = 0;myFish.level = 1;GameUtils.count = 0;myFish.x = 700;myFish.y = 500;myFish.width = 50;myFish.height = 50;boss = null;isboss = false;}public static void main(String[] args) {GameWin gameWin = new GameWin();gameWin.launch();} }

MyFish類:

package com.shu;import java.awt.*;public class MyFish {//圖片Image img = GameUtils.MyFishimg_L;//坐標int x = 700;int y = 500;int width = 50;int height = 50;//移動速度int speed = 20;//等級int level = 1;void logic(){if(GameUtils.UP){y = y - speed;}if(GameUtils.DOWN){y = y + speed;}if(GameUtils.LEFT){x = x - speed;img = GameUtils.MyFishimg_L;}if(GameUtils.RIGHT){x = x + speed;img = GameUtils.MyFishimg_R;}}//繪制自身的方法public void paintSelf(Graphics g){logic();g.drawImage(img,x,y,width + GameUtils.count,height + GameUtils.count,null);}//獲取自身矩形的方法,用于碰撞檢測public Rectangle getRec(){return new Rectangle(x,y,width + GameUtils.count,height + GameUtils.count);}}

9.項目素材

??

?10.項目運行結(jié)果演示

?

?

?

?

ps:該游戲并非博主開發(fā),來源是下面的鏈接?

如果大家想看視頻學(xué)習(xí)的話可以到不到一小時教你用Java做出大魚吃小魚小游戲_Java游戲_Java入門_Java項目_Java面試_Java基礎(chǔ)_Java入門基礎(chǔ)教程_JAVA_Java_嗶哩嗶哩_bilibili進行學(xué)習(xí)!這個up主也會給大家資料哦!很nice的。

總結(jié)

以上是生活随笔為你收集整理的【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日狠狠久久 | 最近中文字幕 | 日韩精品tv | 久久r视频 | 调教女m荡骚贱淫故事 | 在线日韩一区二区 | 久久精品视频3 | 国产日韩欧美高清 | 成人在线免费视频播放 | 欧美成年人在线观看 | 日本美女视频 | 亚洲一区二区三区不卡视频 | 亚洲AV成人无码网站天堂久久 | 成人网av | 正在播放国产精品 | 国产欧美成人 | 色五丁香 | 欧美在线视频免费 | 免费av网址大全 | 色日本在线 | 狠狠干青青草 | 中文字幕+乱码+中文乱 | 性猛交xxxx乱大交3 | www网站在线观看 | 国产精品成人一区二区三区 | 亚洲 在线 | 国产欧美日韩高清 | www狠狠干 | 欧美做受高潮1 | 国产视频精品自拍 | 欧美激情免费视频 | 一起操在线 | 日本一区二区三区中文字幕 | 国产一级做a爱免费视频 | 夜夜久久 | 久久丫精品国产亚洲av不卡 | 爽爽视频在线观看 | 亚洲一区二区三区欧美 | 久久综合五月天 | 麻豆爱爱 | 国产一区视频在线观看免费 | 黄网站在线观看 | 中文字幕乱码中文字幕 | 激情网站在线观看 | 日韩高清精品免费观看 | 一本一道av无码中文字幕 | 成人精品一区二区三区电影黑人 | 人人超碰人人 | 中文字幕一区二区三区在线不卡 | 欧美日日夜夜 | 美女视频黄色 | 欧美片网站yy| 干爹你真棒插曲mv在线观看 | 女儿的朋友在线播放 | 中出一区二区 | 五月天中文字幕 | 黑人极品videos精品欧美裸 | 精品人妻在线视频 | 精品国产影院 | 亚洲福利社区 | 日韩精品一区二区三区丰满 | 高清一区二区视频 | 免费黄色国产视频 | 琪琪秋霞午夜被窝电影网 | 亚洲熟妇无码一区二区三区 | 中文字幕一区二区视频 | 亚洲日本国产 | а√天堂8资源中文在线 | 强行无套内谢大学生初次 | 中文字幕在线观看91 | 久久com | 男女视频一区二区 | 超碰97观看 | 亚洲第五页| 黄色你懂的 | 日日夜夜影院 | 操一操日一日 | 国产一二三在线 | 国产夫妻自拍av | 亚洲av熟女国产一区二区性色 | 免费男女视频 | 日韩特黄| 在线免费视频你懂的 | 大奶在线观看 | 久久精品女人毛片国产 | 怎么可能高潮了就结束漫画 | 欧美一区二区三区免费看 | 精品国产av鲁一鲁一区 | 91国内在线 | 中文字幕在线永久 | 日韩不卡在线播放 | 毛片精品 | 厨房性猛交hd | www夜片内射视频日韩精品成人 | 精品久久久亚洲 | 青青青在线视频免费观看 | 色在线视频| 五月婷婷中文字幕 | 在线日本中文字幕 |