主頁 >  其他 > Java飛機大戰

Java飛機大戰

2021-02-05 10:15:10 其他

Java飛機大戰

本次的飛機大戰是我進入大學以來第一次大部分靠自己的思路寫出來的專案,雖然代碼質量可能不是很高,但是這次專案完成給我帶來的成就感真的很大很大,

飛機大戰專案總結
1、游戲開始界面
在這里插入圖片描述

2、游戲運行界面
在這里插入圖片描述

3、游戲結束界面
在這里插入圖片描述

1)解決問題
敵機:大型敵機、中型敵機、小型、boss機

我方:英雄機

背景:天空

2)各個物件所具備的功能和特征

大敵機:有五條生命,從天空上方出現往下走,被擊毀后英雄機加五十分

小敵機:有一條生命,從天空上方出現往下走,被擊毀后英雄機加十分
中型機:有二條生命,從天空上方出現往下走,被擊毀后英雄機加二十分

boss機:英雄機1000毫秒以后出現,有五種火力值會隨著生命值的減少和逐漸增加火力

值,有100條生命被擊毀后加1000分,

英雄機:初始生命有三條,初始火力為零,英雄機隨著滑鼠的位置移動,火力大于零后能發

射三發子彈、大于1000后能發射五發,

天空:一個向下移動的背景板什么功能也沒有

2)補給:當英雄機撿到補給時生命值加一火力值加一(有三個火力等級,當火力等級為三

生命值為三時再拾取補給將不在增加),當英雄級撞到敵機或被敵方子彈打中時火力值減一

生命值減一
3)計分器:每擊殺一個小型飛機、中型飛機、大型飛機分數加十、二十、五十,當擊殺boss

時分數增加500.

4)引入了不同的爆炸效果

5)游戲敵機移動的速度會隨著時間的增加而增加(即難度會隨著時間的遞增而遞增)敵機

速度最大值為5.
6)游戲有開始界面和結束界面引入了暫停按鈕

7)引入音效:有背景音樂、小、大型飛機、boss爆炸音效和子彈發射的音效

8)連接資料庫:通過連接資料庫記錄每次獲取的分數進行了一個排序,相當于引入了一個

排行榜(記錄前十的分數)

9)游戲難度會隨著時間的增加而遞增(敵機移動速度會增加,當速度達到5時將不會再

增加)

專案經歷(我):我做飛機大戰的程序個人覺得比較曲折,起初我是選擇在網上找視瞥澩跟著老師一起敲完這個專案,但是當我做到飛機能夠發射子彈這一步時該視頻就得付費觀看了,所以我只能因此放棄這個方法另找資源繼續敲下去,但是因為類名和物件名等都已經確定下來,所以如果不是對先前的代碼的每一句話都有著一定的了解那么即便我找到了別的源代碼我也很難能繼續寫下去,所以我們組的進度在這里停頓了許久,因為代碼的生澀難懂我甚至產生過放棄的想法跟著別的源代碼再從頭開始敲一遍,因此我也非常感謝我的搭檔在那段時間給予我潛移默化的鼓勵(前期功能的實作我們兩個都自己敲了一份代碼,但是因為進度的停頓所以當時他的進度遠遠在我前面),再那段時間他教了我很多東西,例如在英雄機碰撞減少火力值和生命值可以參考之前英雄級發射子彈與敵機碰撞的代碼,聽起來這是不一樣的功能,但是實際上他們的思路可以說是一模一樣的,于是我便以這種方法一直擴展功能才能完善到如今這個模樣,

專案經歷(隊友):本次java課程設計我們選擇的是飛機大戰,對于第一次做這樣課程設計的我來說,有點慌張,但同時又有點激動,因為這也是一個讓我們能力提高很多的機遇,
剛開始我們是毫無頭緒的,聽到別人一個下午就把課設的很多界面寫完了,我心里就很著急,但是又無能為力,畢竟我能力有些欠缺,只能不停的找博客看代碼,慢慢的,我們的飛機大戰雛形基本完成,功能也基本實作,但也只是實作了一部分的基本要求,
“亮點是什么?”這個問題一直圍繞我們很久,我們經過無數次思考,最終決定加入其他型別飛機,,,,,,,最后為了實作這些功能,我們不得不將前面一部分代碼推翻,找其他方法去實作,
最終經過我們不斷地修正,飛機大戰基本實作,但仍存在一點點bug,而后面大部分時間,我們都是在不停的找bug,最侄訓本實作我們的想法后,我們兩個都很開心,
這次課設,我們不僅掌握了java界面設計方面的方法、多執行緒的運用,更是鍛煉了團隊協作能力,也鍛煉了我們java的界面設計能力,今后對于這樣的課設,我們也會認真對待,爭取做出亮點十分突出的東西!

識訓(我):這次的飛機大戰是我第一次用Java寫專案,從中的識訓個人感覺是很大的,我從中學會image對圖片的引入,見識了多執行緒連續繪畫圖片讓地圖子彈飛機移動起來,然后各種坐標的計算來給子彈的發射位置,敵機的出現和移動規律構圖等等,更大的識訓是這是我第一次有著自己的想法寫下來的代碼,并沒有看網上的代碼寫下來了幾個類,例如引入多種敵機還有火力值增加等,靠著自己所學知識完完全全實作的功能真的給我的成就感特別特別多,很滿足這次的Java專案設計,但如果時間充足的話我還是希望能夠實作一個關卡功能和多種英雄級角色,讓游戲功能變得更加完善

識訓(隊友):第一次用java完成一個專案,程序中曲折也挺多的,但同時我們也識訓了很多,多執行緒的運用,繪圖方法的運用,以及各種物品之間的互動功能的判斷等等,這無疑讓我在Java界面設計上的能力得到了一次鍛煉,不僅僅是編程方面的能力,我的自學能力也得到了一定的鍛煉,對于不太理解的方法,我都是查找博客,通過消化別人的方法,然后按照自己的理解來解決問題,
對于我們的飛機大戰,我覺得是還不錯,但我覺得我們可以做得更好,我們的設想遠不止于此,相信我們也會在假期通過對java的深入理解,不斷完善我們的飛機大戰,

下面是攜帶上我這次飛機大戰的代碼:
Airdrop類
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;

public class Airdrop {
//設定飛機大小
public int width = 50;
public int length = 50;
public int x;
public int y;

//匯入補給圖片
public Image images = Toolkit.getDefaultToolkit().getImage("src/圖片/airdrop.png");

public Mypanel mypanel;

public Airdrop(Mypanel mypanel) {
    this.mypanel=mypanel;
    Random r=new Random();

    x=r.nextInt(BaseFrame.framewidth-width);
    y=0;
}
public void drawSelf(Graphics g){
    g.drawImage(images,x,y,width,length,null);
    Player p=mypanel.player;
    for(int i=0;i<mypanel.airdrops.size();i++){
        Airdrop a=mypanel.airdrops.get(i);
        if(((a.x-p.x<=a.width/2+p.width/2&&a.x>=p.x)||(p.x-a.x<=a.width/2+p.width/2&&a.x<=p.x))&&((a.y-p.y<=a.length/2+p.length/2&&a.y>=p.y)||(p.y-a.y<=a.length/2+p.length/2&&a.y<=p.y))){
            {
            	mypanel.airdrops.remove(a);
            	if(mypanel.player.fire<3)
            		{
            		    mypanel.player.fire++;//飛機撿到補給火力加一
            		    
            		    mypanel.player.life++;//飛機檢到補給生命值加一
            		}
            }
        }
    }


    if(mypanel.time%6==0){
        y+=2;
        if(y>=BaseFrame.framelength){
            mypanel.airdrops.remove(this);
        }
    }
}

}

BaseFrame類
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class BaseFrame extends JFrame implements ActionListener {
public static int framewidth = 345;
public static int framelength = 575;
public Mypanel mypanel;
public JButton jb=new JButton(“排行”);
public JButton jb2=new JButton(“暫停”);
JLayeredPane lay=new JLayeredPane();

public FrameMouseListener frameMouseListener;// 滑鼠監聽器

public void setTouchListener() {
    frameMouseListener = new FrameMouseListener();
    frameMouseListener.baseFrame = this;
    this.addMouseMotionListener(frameMouseListener);// 注冊監聽器
}

public BaseFrame() {
    
    this.setTitle("飛機大戰");
    Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();

    this.setSize(framewidth, framelength);
    this.setLocationRelativeTo(null);

    this.setLayout(null);

    mypanel = new Mypanel(this);

    mypanel.setSize(345, 575);

    
    //this.add(mypanel);
    lay.add(mypanel,JLayeredPane.DEFAULT_LAYER);
    this.setLayeredPane(lay);
    jb.setBounds(345/2-35, 400-20, 70, 40);
    jb.addActionListener(this);
    lay.add(jb,JLayeredPane.MODAL_LAYER);
    
    jb2.setBounds(305-30, 0, 60, 20);
    jb2.addActionListener(this);
    lay.add(jb2,JLayeredPane.MODAL_LAYER);
    mypanel.bg.loop();

    // 設定監聽器
    // setTouchListener();

    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void actionPerformed(ActionEvent e) {
    // TODO Auto-generated method stub
	if(e.getSource()==jb) {
		 //new Score();
	}
	else if(e.getSource()==jb2) {
		try {
			mypanel.drawaleThread.sleep(10000);
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
}

}
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class Bomb {
public int x;
public int y;
public int count=0;
Image boom= Toolkit.getDefaultToolkit().getImage(“src/圖片/bom3.png”);
public int width=boom.getWidth(null);
public int length=boom.getHeight(null);

public Bomb(int bx,int by){
    this.x=bx;
    this.y=by;
}

public void drawSelf(Graphics g){
    g.drawImage(boom,x,y,width,length,null);
    this.count++;
}

}
Bullet類
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class Bullet {
public Mypanel mypanel;

public int width=6;

public int length=14;

public int x;

public int y;

//存放所有的子彈圖片物件
public Image[] image=new Image[] {
	Toolkit.getDefaultToolkit().getImage("src/圖片/ammo.png")
};

public int imageindex=0;

public Bullet(Mypanel mypanel){
    this.mypanel=mypanel;
}
//畫子彈
public void drawSelf(Graphics g){
    g.drawImage(image[imageindex],x,y,width,length,null);
         mypanel.hero_bullet.play();
    for(int i=0;i<mypanel.bullets.size();i++){
        Bullet b=mypanel.bullets.get(i);
        for(int j=0;j<mypanel.enemies.size();j++){
            enemy e=mypanel.enemies.get(j);
            if(((e.x-b.x<=e.width/2+b.width/2&&e.x>=b.x)||(b.x-e.x<=e.width/2+b.width/2&&e.x<=b.x))&&((e.y-b.y<=e.length/2+b.length/2&&e.y>=b.y)||(b.y-e.y<=e.length/2+b.length/2&&e.y<=b.y))){
                mypanel.bullets.remove(b);
 
            }
        }
    }
    if(mypanel.time%1==0){
    	imageindex++;
    	if(imageindex>=this.image.length)
    		imageindex=0;
        y--;
        if(y<0){
            //子彈到界面外,移除該子彈
            mypanel.bullets.remove(this);
        }
    }
}

}
**DrawaleThread類
package project;
public class DrawaleThread extends Thread{//動態背景執行緒
public Mypanel mypanel;

public DrawaleThread(Mypanel mypanel){
    this.mypanel=mypanel;
}

public void run(){
    while(true){
        this.mypanel.repaint();
        try{
            this.currentThread().sleep(1);
        } catch(InterruptedException e){
            e.printStackTrace();
        }
    }
}

}

enemy類
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;

public class enemy {
public int width = 40;

public int length = 25;

public int x;

public int y;

//public int speed=1;

//public int addspeed=5000;


public int eindex = 0;
public Image images = Toolkit.getDefaultToolkit().getImage("src/圖片/enemy.png");//匯入小飛機圖片

//public Image images01 = Toolkit.getDefaultToolkit().getImage("src/圖片/bom1.png");//匯入小飛機爆炸圖片

public Mypanel mypanel;

public enemy(Mypanel mypanel) {
    this.mypanel=mypanel;
    Random r=new Random();

    x=r.nextInt(BaseFrame.framewidth-width);
    y=0;
}
//如果子彈碰撞到敵機敵機消失
public void drawSelf(Graphics g){
    g.drawImage(images,x,y,width,length,null);
    for(int i=0;i<mypanel.bullets.size();i++){
        Bullet b=mypanel.bullets.get(i);
        for(int j=0;j<mypanel.enemies.size();j++){
            enemy e=mypanel.enemies.get(j);
            if(((e.x-b.x<=e.width+b.width&&e.x>=b.x)||(b.x-e.x<=e.width+b.width&&e.x<=b.x))&&((e.y-b.y<=e.length+b.length&&e.y>=b.y)||(b.y-e.y<=e.length+b.length&&e.y<=b.y))){
              {
            	//g.drawImage(images01,e.x,e.y,e.width,e.length,null);
            	mypanel.enemies.remove(e);
            	mypanel.bullets.remove(b);
            	mypanel.bombs.add(new Bomb(e.x,e.y));
            	mypanel.enemy_bomb.play();//引入敵機爆炸音效
            	mypanel.score+=10;

              }
            }
        }
        
    }
  if(mypanel.time%6==0){
      y+=mypanel.speed;
    if(mypanel.time%mypanel.addspeed==0)
    {
    	if(mypanel.speed<4)
    	mypanel.speed+=1;
    	mypanel.addspeed=50000*mypanel.speed;
        if(y>BaseFrame.framelength){
            mypanel.enemies.remove(this);
        }
      }
    }
    /*for(int j=0;j<mypanel.enemies.size();j++) {
        enemy e=mypanel.enemies.get(j);
        if(((e.x-mypanel.player.x<=e.width+mypanel.player.width&&e.x>=mypanel.player.x)||(mypanel.player.x-e.x<=e.width+mypanel.player.width&&e.x<=mypanel.player.x))&&((e.y-mypanel.player.y<=e.length+mypanel.player.length&&e.y>=mypanel.player.y)||(mypanel.player.y-e.y<=e.length+mypanel.player.length&&e.y<=mypanel.player.y))){
          {
        	mypanel.player.life--;
        	if(mypanel.player.fire>1)
        		mypanel.player.fire=1;
        	if(mypanel.player.life==0)
        		mypanel.player.start_over=-1;
          }
        }
    
}*/
}

}

enemy01類
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;

public class enemy01 {
public int width = 40;
public int length = 25;
public int x;
public int y;

public int life=0;//記錄敵機血量

public int imageindex=0;

//public int speed=1;

//public int addspeed=5000;


public int eindex = 0;
//public Image images = Toolkit.getDefaultToolkit().getImage("src/圖片/airplane0.png");
public Image[] images=new Image[]{
        Toolkit.getDefaultToolkit().getImage("src/圖片/airplane0.png"),
        Toolkit.getDefaultToolkit().getImage("src/圖片/airplane1.png")
    };


public Mypanel mypanel;

public enemy01(Mypanel mypanel) {
    this.mypanel=mypanel;
    Random r=new Random();

    x=r.nextInt(BaseFrame.framewidth-width);
    y=0;
}

//如果子彈碰撞到敵機敵機消失
public void drawSelf(Graphics g){
g.drawImage(images[imageindex],x,y,width,length,null);
if(mypanel.time%500){
imageindex++;
if(imageindex
images.length){
imageindex=0;
}
}
for(int i=0;i<mypanel.bullets.size();i++){
Bullet b=mypanel.bullets.get(i);
for(int j=0;j<mypanel.enemies01.size();j++){
enemy01 e=mypanel.enemies01.get(j);
if(((e.x-b.x<=e.width+b.width&&e.x>=b.x)||(b.x-e.x<=e.width+b.width&&e.x<=b.x))&&((e.y-b.y<=e.length+b.length&&e.y>=b.y)||(b.y-e.y<=e.length+b.length&&e.y<=b.y))){
{
life++;
//mypanel.enemies01.remove(e);
mypanel.bullets.remove(b);
//mypanel.score+=20;
if(life==2)//中型型飛機血量為2,當有兩發子彈打中時移除該物件
{
mypanel.enemies01.remove(e);
mypanel.bom1.play();
mypanel.bombs.add(new Bomb(e.x,e.y));
mypanel.score+=20;
life=0;
}
}
}

    }
    }
    if(mypanel.time%10==0){
        y+=mypanel.speed;
        if(mypanel.time%mypanel.addspeed==0)
        {
        	if(mypanel.speed<4)
          	mypanel.speed++;
          	mypanel.addspeed=50000*mypanel.speed;
            if(y>BaseFrame.framelength){
                mypanel.enemies01.remove(this);
            }
        }
    }
   }
}

enemy02類
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;

public class enemy02 {
public int width = 150;
public int length = 102;
public int x;
public int y;

public int life=100;//記錄敵機血量


public int eindex = 0;
public Image images = Toolkit.getDefaultToolkit().getImage("src/圖片/boss.png");

// public Image images01 = Toolkit.getDefaultToolkit().getImage(“src/圖片/plane02.jpg”);
//public Image images02 = Toolkit.getDefaultToolkit().getImage(“src/圖片/plane03.jpg”);

public Mypanel mypanel;

public enemy02(Mypanel mypanel) {
    this.mypanel=mypanel;

    x=mypanel.bgimage.getWidth(mypanel)/2;
    y=0;
}

//如果子彈碰撞到敵機敵機消失
public void drawSelf(Graphics g) throws Exception{
g.drawImage(images,x,y,width,length,null);
for(int i=0;i<mypanel.bullets.size();i++){
Bullet b=mypanel.bullets.get(i);
enemy02 e=mypanel.boss;
if(enull) break;
int ex=e.x+e.width/2,ey=e.y+e.length/2;
int bx=b.x+b.width/2,by=b.y+b.length/2;
if(Math.abs(ex-bx)<e.width/2+b.width/2&&Math.abs(ey-by)<e.length/2+b.length/2){
e.life–;
//System.out.println(e.life);
if(e.life
0){
mypanel.bombs.add(new Bomb(e.x, e.y));
mypanel.boss=null;
mypanel.score+=1000;
mypanel.all_bomb.play();
}
mypanel.bullets.remove(b);
}

    }
   if(mypanel.time%100==0){
        y++;
        if(y>BaseFrame.framelength){
            y=0;
        }
    }
}

}
enemy03類
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.Random;

public class enemy03 {
public int width = 40;
public int length = 25;
public int x;
public int y;

public int life=0;//記錄敵機血量

public int imageindex=0;

//public int speed=1;

//public int addspeed=5000;


public int eindex = 0;
//public Image images = Toolkit.getDefaultToolkit().getImage("src/圖片/airplane0.png");
public Image[] images=new Image[]{
        Toolkit.getDefaultToolkit().getImage("src/圖片/bigairplane0.png"),
        Toolkit.getDefaultToolkit().getImage("src/圖片/bigairplane1.png")
    };


public Mypanel mypanel;

public enemy03(Mypanel mypanel) {
    this.mypanel=mypanel;
    Random r=new Random();

    x=r.nextInt(BaseFrame.framewidth-width);
    y=0;
}

//如果子彈碰撞到敵機敵機消失
public void drawSelf(Graphics g){
g.drawImage(images[imageindex],x,y,width,length,null);
if(mypanel.time%500){
imageindex++;
if(imageindex
images.length){
imageindex=0;
}
}
for(int i=0;i<mypanel.bullets.size();i++){
Bullet b=mypanel.bullets.get(i);
for(int j=0;j<mypanel.enemies03.size();j++){
enemy03 e=mypanel.enemies03.get(j);
if(((e.x-b.x<=e.width+b.width&&e.x>=b.x)||(b.x-e.x<=e.width+b.width&&e.x<=b.x))&&((e.y-b.y<=e.length+b.length&&e.y>=b.y)||(b.y-e.y<=e.length+b.length&&e.y<=b.y))){
{
life++;
//mypanel.enemies01.remove(e);
mypanel.bullets.remove(b);
//mypanel.score+=20;
if(life==5)//大型飛機血量為5,當有五發子彈打中時移除該物件
{
mypanel.enemies03.remove(e);
mypanel.bom2.play();//引入敵機爆炸音效
mypanel.bombs.add(new Bomb(e.x,e.y));
mypanel.score+=50;
life=0;
}
}
}

    }
    }
    if(mypanel.time%10==0){
        y+=mypanel.speed;
        if(mypanel.time%mypanel.addspeed==0)
        {
        	if(mypanel.speed<4)
          	mypanel.speed++;
          	mypanel.addspeed=50000*mypanel.speed;
            if(y>BaseFrame.framelength){
                mypanel.enemies03.remove(this);
            }
        }
    }
    /*if(mypanel.time%10==0){
    	if(time)
    		x--;
    	if(x==0)
    		x++;
    }*/
   }
}

EnemyBullet類
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class EnemyBullet {// boss子彈
public Mypanel mypanel;
public int width = 6;
public int length = 14;
public int x;
public int y;
public int diretion;//0-往左下,1-直接下落,2-往右下
public Image image = Toolkit.getDefaultToolkit().getImage(“src/圖片/bullet1.png”);

public EnemyBullet(Mypanel mypanel) {
    this.mypanel = mypanel;
}

public void drawSelf(Graphics g) {
    g.drawImage(image, x, y, width, length, null);
    for (int i = 0; i < mypanel.eBullets.size(); i++) {
        EnemyBullet b = mypanel.eBullets.get(i);
        Player e=mypanel.player;
        if(((e.x-b.x<=e.width/2+b.width/2&&e.x>=b.x)||(b.x-e.x<=e.width/2+b.width/2&&e.x<=b.x))&&((e.y-b.y<=e.length/2+b.length/2&&e.y>=b.y)||(b.y-e.y<=e.length/2+b.length/2&&e.y<=b.y))){
            mypanel.eBullets.remove(b);
            e.nlife--;
            e.fire--;
        }
        if(e.nlife==0){
            mypanel.state=0;
        }
    }
    if(mypanel.time%2==0){
        y++;
        if(diretion==0){
            x--;
        }
        else if(diretion==2){
            x++;
        } 
        if(y>BaseFrame.framelength||x<0||x>BaseFrame.framewidth){
            mypanel.enemies.remove(this);
        }
    }
}

}
FrameMouseListener類
package project;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class FrameMouseListener implements MouseMotionListener,MouseListener {

public BaseFrame baseFrame;
@Override
public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
}

@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub
    baseFrame.mypanel.player.x=e.getX()-baseFrame.mypanel.player.width/2;

    baseFrame.mypanel.player.y=e.getY()-baseFrame.mypanel.player.length/2;
}

@Override
public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub

}

}

Main類
package project;
public class Main {
public static void main(String[] args){
BaseFrame a=new BaseFrame();
}
}

Mypanel類
package project;
import javax.swing.JApplet;
import javax.swing.JPanel;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.Random;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
public class Mypanel extends JPanel implements MouseMotionListener,MouseListener{
public Image bgimage;
public Image endimage;
public Image startimage;
public int time=0;//時間
public int top=0;//圖片位置移動
public int state=2;
public int score=0;
public int speed=1;
public BaseFrame baseframe;

public int addspeed=5000;

//創建執行緒
public DrawaleThread drawaleThread;

public Player player;

public enemy03 enemy;

public enemy02 boss;

public ArrayList<Bullet> bullets=new ArrayList<Bullet>();

public ArrayList<EnemyBullet> eBullets=new ArrayList<EnemyBullet>();

public ArrayList<enemy> enemies=new ArrayList<enemy>();

public ArrayList<Airdrop> airdrops=new ArrayList<Airdrop>();//小飛機

public ArrayList<enemy01> enemies01=new ArrayList<enemy01>();//中型飛機


public ArrayList<enemy03> enemies03=new ArrayList<enemy03>();//大型飛機

public ArrayList<Bomb> bombs=new ArrayList<Bomb>();//引入爆炸效果

java.applet.AudioClip all_bomb,enemy_bomb,bg,hero_bomb,hero_bullet,bom1,bom2;//宣告java.applet.AudioClip型別的參考用來儲存音頻

public Mypanel(BaseFrame baseframe){
	this.baseframe=baseframe;
	
    bgimage=Toolkit.getDefaultToolkit().getImage("src/圖片/background.png");
    
    endimage=Toolkit.getDefaultToolkit().getImage("src/圖片/gameover.png");
    
    startimage=Toolkit.getDefaultToolkit().getImage("src/圖片/start.png");
    
    drawaleThread=new DrawaleThread(this);
    
    drawaleThread.start();
    
    player=new Player(this);
    
    this.addMouseListener(this);
    
    this.addMouseMotionListener(this);
	try{
		all_bomb = JApplet.newAudioClip(new File("src/music/all_bomb.wav").toURI().toURL());
		
		enemy_bomb = JApplet.newAudioClip(new File("src/music/enemy_bomb.wav").toURI().toURL());
		
		bg = JApplet.newAudioClip(new File("src/music/bg01.mp3").toURI().toURL());
		
		hero_bomb = JApplet.newAudioClip(new File("src/music/hero_bomb.wav").toURI().toURL());
		
		hero_bullet = JApplet.newAudioClip(new File("src/music/hero_bomb.wav").toURI().toURL());
		
		bom1= JApplet.newAudioClip(new File("src/music/10804.wav").toURI().toURL());
		
		bom2 = JApplet.newAudioClip(new File("src/music/10804.wma").toURI().toURL());
		
		hero_bullet = JApplet.newAudioClip(new File("src/music/hero_bomb.wav").toURI().toURL());
	}catch(MalformedURLException e){
		e.printStackTrace();
	}
}
@Override
public void paintComponent(Graphics g){
    if(state==2){
        super.paintComponent(g);
        g.drawImage(startimage,0,0,startimage.getWidth(this),startimage.getHeight(this),null);
    }else if(state==1){
    	//bg.loop();;

        //繪制背景圖
        super.paintComponent(g);
        
        g.drawImage(bgimage,0,top-bgimage.getHeight(this),bgimage.getWidth(this),bgimage.getHeight(this),null);
        
        g.drawImage(bgimage,0,top,bgimage.getWidth(this),bgimage.getHeight(this),null);

        //根據時間來移動圖片
        time++;
        if(time==1000*1000*10){
            time=0;
        }
        if(time%10==0){
            top++;
            if(top>=this.bgimage.getHeight(this)){
                top=0;
            }
        }
        //分數
        String sc="分數:"+String.valueOf(score);
        g.setFont(new Font("TimesRoman", Font.BOLD, 24));
        g.setColor(Color.RED);
        g.drawString(sc,2,20);

        //生命值
        String lf="生命:"+String.valueOf(player.nlife);
        g.setFont(new Font("TimesRoman", Font.BOLD, 24));
        g.setColor(Color.RED);
        g.drawString(lf,2,45);

        //繪制戰機圖
        player.drawSelf(g);

        //創建子彈
        if(time%200==0){
            if(player.fire==1){
                Bullet bullet=new Bullet(this);
                bullet.x=player.x+player.width/2-bullet.width/2;
                bullet.y=player.y;

                bullets.add(bullet);
            }
            else if(player.fire==2)
        {
        	Bullet bullet1=new Bullet(this);
        	bullet1.x=this.player.x+this.player.width/2-bullet1.width/2;
        	bullet1.y=this.player.y-15;
        	this.bullets.add(bullet1);
        	
        	Bullet bullet2=new Bullet(this);
        	bullet2.x=this.player.x+this.player.width/2-bullet2.width-5;
        	bullet2.y=this.player.y;
        	this.bullets.add(bullet2);
        	
        	Bullet bullet3=new Bullet(this);
        	bullet3.x=this.player.x+this.player.width/2+bullet3.width;
        	bullet3.y=this.player.y;
        	this.bullets.add(bullet3);
        }
            else if(player.fire==3)
            {
            	Bullet bullet1=new Bullet(this);
            	bullet1.x=this.player.x+this.player.width/2-bullet1.width/2;
            	bullet1.y=this.player.y-30;
            	this.bullets.add(bullet1);
            	
            	Bullet bullet2=new Bullet(this);
            	bullet2.x=this.player.x+this.player.width/2-bullet2.width-8;
            	bullet2.y=this.player.y-15;
            	this.bullets.add(bullet2);
            	
            	Bullet bullet3=new Bullet(this);
            	bullet3.x=this.player.x+this.player.width/2+bullet3.width+5;
            	bullet3.y=this.player.y-15;
            	this.bullets.add(bullet3);
            	
            	Bullet bullet4=new Bullet(this);
            	bullet4.x=this.player.x+this.player.width/2+bullet4.width*2-33;
            	bullet4.y=this.player.y;
            	this.bullets.add(bullet4);
            	
            	Bullet bullet5=new Bullet(this);
            	bullet5.x=this.player.x+this.player.width/2+bullet5.width+10;
            	bullet5.y=this.player.y;
            	this.bullets.add(bullet5);
            }
            }
        for(int i=0;i<bombs.size();i++){
            Bomb b=bombs.get(i);
            b.drawSelf(g);
            if(b.count>=50){
                bombs.remove(b);
            }
        }
        for(int i=0;i<bullets.size();i++){
            bullets.get(i).drawSelf(g);
        }
        if(boss!=null){
            /*try {
                boss.drawSelf(g);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/
            if(boss.life>=80)
            {
            	if(time%500==0)
            	{
            		 EnemyBullet bullet2 = new EnemyBullet(this);
                     bullet2.diretion=1;
                     bullet2.x = this.boss.x + this.boss.width / 2 - bullet2.width ;
                     bullet2.y = this.boss.y+boss.length;
                     this.eBullets.add(bullet2);
            	}
            		
            }
            else if(boss.life>=70&&boss.life<80)
            {
            	if(time%200==0)
            	{
            		 EnemyBullet bullet2 = new EnemyBullet(this);
                     bullet2.diretion=1;
                     bullet2.x = this.boss.x + this.boss.width / 2 - bullet2.width ;
                     bullet2.y = this.boss.y+boss.length;
                     this.eBullets.add(bullet2);
            	}
            }
            else if(boss.life>50&&boss.life<70)
            {
            	if(time%500==0)
            	{
            		EnemyBullet bullet1 = new EnemyBullet(this);
                    bullet1.diretion=0;
                    bullet1.x = this.boss.x + this.boss.width / 2 - bullet1.width / 2;
                    bullet1.y = this.boss.y+boss.length;
                    this.eBullets.add(bullet1);
                	
                	
                	 EnemyBullet bullet3 = new EnemyBullet(this);
                     bullet3.diretion=2;
                     bullet3.x = this.boss.x + this.boss.width / 2 + bullet3.width;
                     bullet3.y = this.boss.y+boss.length;
                     this.eBullets.add(bullet3);
            	}
            }
            else if(boss.life>30&&boss.life<=50)
            {
            	if(time%200==0)
            	{
            	EnemyBullet bullet1 = new EnemyBullet(this);
                bullet1.diretion=0;
                bullet1.x = this.boss.x + this.boss.width / 2 - bullet1.width / 2;
                bullet1.y = this.boss.y+boss.length;
                this.eBullets.add(bullet1);
            	
            	
            	 EnemyBullet bullet3 = new EnemyBullet(this);
                 bullet3.diretion=2;
                 bullet3.x = this.boss.x + this.boss.width / 2 + bullet3.width;
                 bullet3.y = this.boss.y+boss.length;
                 this.eBullets.add(bullet3);
            	}
            }
            else if(boss.life<=30&&boss.life>10)
            {
            	
            if(time%500==0){
                EnemyBullet bullet1 = new EnemyBullet(this);
                bullet1.diretion=0;
                bullet1.x = this.boss.x + this.boss.width / 2 - bullet1.width / 2;
                bullet1.y = this.boss.y+boss.length;
                this.eBullets.add(bullet1);

                EnemyBullet bullet2 = new EnemyBullet(this);
                bullet2.diretion=1;
                bullet2.x = this.boss.x + this.boss.width / 2 - bullet2.width ;
                bullet2.y = this.boss.y+boss.length;
                this.eBullets.add(bullet2);

                EnemyBullet bullet3 = new EnemyBullet(this);
                bullet3.diretion=2;
                bullet3.x = this.boss.x + this.boss.width / 2 + bullet3.width;
                bullet3.y = this.boss.y+boss.length;
                this.eBullets.add(bullet3);
            }
            }
            else if(boss.life<=100)
            {
            	if(time%200==0){
                    EnemyBullet bullet1 = new EnemyBullet(this);
                    bullet1.diretion=0;
                    bullet1.x = this.boss.x + this.boss.width / 2 - bullet1.width / 2;
                    bullet1.y = this.boss.y+boss.length;
                    this.eBullets.add(bullet1);

                    EnemyBullet bullet2 = new EnemyBullet(this);
                    bullet2.diretion=1;
                    bullet2.x = this.boss.x + this.boss.width / 2 - bullet2.width ;
                    bullet2.y = this.boss.y+boss.length;
                    this.eBullets.add(bullet2);

                    EnemyBullet bullet3 = new EnemyBullet(this);
                    bullet3.diretion=2;
                    bullet3.x = this.boss.x + this.boss.width / 2 + bullet3.width;
                    bullet3.y = this.boss.y+boss.length;
                    this.eBullets.add(bullet3);
            }
          }
            try {
                boss.drawSelf(g);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        for (int i = 0; i < eBullets.size(); i++) {
            eBullets.get(i).drawSelf(g);
        }
        if(time%1000==0){
            enemy enemy_1=new enemy(this);
            enemy enemy_2=new enemy(this);
            enemy enemy_3=new enemy(this);
            enemy01 enemy01_1=new enemy01(this);
            enemies.add(enemy_1);
            enemies.add(enemy_2);
            enemies.add(enemy_3);
            enemies01.add(enemy01_1);
        }
       if(time%1000*10==0&&time>1000*10)
        {
            enemy03 enemy03_1=new enemy03(this);
            enemies03.add(enemy03_1);
            //enemy02 enemy02_2=new enemy02(this);
            //enemies02.add(enemy02_2);
        }
       if (time % 10000 == 0&&boss==null) {
           /*
            * enemy02 enemy02_1 = new enemy02(this); enemies02.add(enemy02_1); enemy02
            * enemy02_2 = new enemy02(this); enemies02.add(enemy02_2);
            */
           boss = new enemy02(this);
       }
        for(int i=0;i<enemies.size();i++){
            enemies.get(i).drawSelf(g);
        }
        for(int i=0;i<enemies01.size();i++){
            enemies01.get(i).drawSelf(g);
        }
        for(int i=0;i<enemies03.size();i++){
            enemies03.get(i).drawSelf(g);
        }
      //繪制補給
        Random ran=new Random();
        //if(time%(ran.nextInt(10000)+5000)==0){
        if(time%(ran.nextInt(10000)+500)==0) {
            Airdrop a1=new Airdrop(this);
            airdrops.add(a1);
        }
        for(int i=0;i<airdrops.size();i++){
            airdrops.get(i).drawSelf(g);
        }
    }
    else{
        super.paintComponent(g);
        g.drawImage(endimage,0,0,endimage.getWidth(this),endimage.getHeight(this),null);
    }

}

@Override
public void mouseClicked(MouseEvent e) {
    // TODO Auto-generated method stub
    if((e.getButton()==e.BUTTON1||e.getButton()==e.BUTTON2||e.getButton()==e.BUTTON3)){
        if(state==0){
            player.nlife=1;
            player.fire=1;
            player.x=(BaseFrame.framewidth-player.width)/2;
            player.y=BaseFrame.framelength-player.length*2;
            time=0;
            top=0;
            score=0;
            this.airdrops.clear();
            this.bullets.clear();
            this.enemies.clear();
            this.enemies01.clear();
            this.enemies03.clear();
            this.boss=null;
        }
        
        baseframe.jb.setVisible(false);
        state=1;
    }
    else if(state==2&&(e.getButton()==e.BUTTON1||e.getButton()==e.BUTTON2||e.getButton()==e.BUTTON3)){
        bullets.clear();
        airdrops.clear();
        state=1;
    }

}
@Override
public void mousePressed(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub
    if(e.getX()<0) this.player.x=0;
    else if(e.getX()>BaseFrame.framewidth){
        this.player.x=BaseFrame.framewidth-this.player.width;
    }
    else{
        this.player.x=e.getX()-this.player.width/2;
    }
    if(e.getY()<0) this.player.y=0;
    else if(e.getY()>BaseFrame.framelength){
        this.player.y=BaseFrame.framelength-this.player.length;
    }
    else{
        this.player.y=e.getY()-this.player.length/2;
    }


}

@Override
public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub
    

}

}
Player類**
package project;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class Player {
public int width=60;
public int length=61;
public int x;
public int y;

public int fire=1;
public static int life=1;//初始生命
public int nlife=life;


public int imageindex=0;
public Image[] images=new Image[]{
    Toolkit.getDefaultToolkit().getImage("src/圖片/player1.png"),
    Toolkit.getDefaultToolkit().getImage("src/圖片/player2.png")
};

public Mypanel mypanel;
public Player(Mypanel mypanel){
    this.mypanel=mypanel;

    x=(BaseFrame.framewidth-width)/2;
    y=BaseFrame.framelength-length*2;
}
public void drawSelf(Graphics g){
    g.drawImage(images[imageindex],x,y,width,length,null);

    Player p=mypanel.player;
    for(int i=0;i<mypanel.airdrops.size();i++){
        Airdrop a=mypanel.airdrops.get(i);
        if(((a.x-p.x<=a.width/2+p.width/2&&a.x>=p.x)||(p.x-a.x<=a.width/2+p.width/2&&a.x<=p.x))&&((a.y-p.y<=a.length/2+p.length/2&&a.y>=p.y)||(p.y-a.y<=a.length/2+p.length/2&&a.y<=p.y))){
            if(nlife<3){
                nlife++;
                fire++;
            }
            mypanel.airdrops.remove(a);
        }
    }
    for(int i=0;i<mypanel.enemies.size();i++){
        enemy a=mypanel.enemies.get(i);
        if(((a.x-p.x<=a.width/2+p.width/2&&a.x>=p.x)||(p.x-a.x<=a.width/2+p.width/2&&a.x<=p.x))&&((a.y-p.y<=a.length/2+p.length/2&&a.y>=p.y)||(p.y-a.y<=a.length/2+p.length/2&&a.y<=p.y))){
            nlife--;
            fire--;
            mypanel.enemies.remove(a);
        }
        if(nlife==0){
            mypanel.state=0;
            mypanel.hero_bomb.play();
        }
    }



    if(mypanel.time%50==0){
        imageindex++;
        if(imageindex==images.length){
            imageindex=0;
        }
    }
}

最后我將我這次用到的圖片、音頻、完整代碼都發到百度云網盤里 ,鏈接https://pan.baidu.com/s/1s7YaxsemQ2ncK4p7bmteug
提取碼:0i92

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/256701.html

標籤:其他

上一篇:合成大西瓜開發原始碼,手把手教你運行和部署大西瓜游戲專案

下一篇:Adobe Audition(Au) 2020 下載安裝教程(有效已解決)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more