主頁 > 後端開發 > 用 Java 開發一個打飛機小游戲(附完整原始碼)

用 Java 開發一個打飛機小游戲(附完整原始碼)

2021-09-26 18:49:14 後端開發

上圖

寫在前面

技術源于分享,所以今天抽空把自己之前用java做過的小游戲整理貼出來給大家參考學習,java確實不適合寫桌面應用,這里只是通過這個游戲讓大家理解oop面向物件編程的程序,純屬娛樂,代碼寫的很簡單,也很容易理解,并且注釋寫的很清楚了,還有問題,自己私下去補課學習,

完整代碼

敵飛機

import java.util.Random;


 敵飛機: 是飛行物,也是敵人

public class Airplane extends FlyingObject implements Enemy {
    private int speed = 3;  //移動步驟

    /** 初始化資料 */
    public Airplane(){
        this.image = ShootGame.airplane;
        width = image.getWidth();
        height = image.getHeight();
        y = -height;          
        Random rand = new Random();
        x = rand.nextInt(ShootGame.WIDTH - width);
    }

    /** 獲取分數 */
    @Override
    public int getScore() {  
        return 5;
    }

    /** //越界處理 */
    @Override
    public     boolean outOfBounds() {   
        return y>ShootGame.HEIGHT;
    }

    /** 移動 */
    @Override
    public void step() {   
        y += speed;
    }
}

分數獎勵

/** 
 * 獎勵 
 */  
public interface Award {  
    int DOUBLE_FIRE = 0;  //雙倍火力  
    int LIFE = 1;   //1條命  
    /** 獲得獎勵型別(上面的0或1) */  
    int getType();  
}

蜜蜂

import java.util.Random;  

/** 蜜蜂 */  
public class Bee extends FlyingObject implements Award{  
    private int xSpeed = 1;   //x坐標移動速度  
    private int ySpeed = 2;   //y坐標移動速度  
    private int awardType;    //獎勵型別  

    /** 初始化資料 */  
    public Bee(){  
        this.image = ShootGame.bee;  
        width = image.getWidth();  
        height = image.getHeight();  
        y = -height;  
        Random rand = new Random();  
        x = rand.nextInt(ShootGame.WIDTH - width);  
        awardType = rand.nextInt(2);   //初始化時給獎勵  
    }  

    /** 獲得獎勵型別 */  
    public int getType(){  
        return awardType;  
    }  

    /** 越界處理 */  
    @Override  
    public boolean outOfBounds() {  
        return y>ShootGame.HEIGHT;  
    }  

    /** 移動,可斜著飛 */  
    @Override  
    public void step() {        
        x += xSpeed;  
        y += ySpeed;  
        if(x > ShootGame.WIDTH-width){    
            xSpeed = -1;  
        }  
        if(x < 0){  
            xSpeed = 1;  
        }  
    }  
}

子彈類:是飛行物體

/** 
 * 子彈類:是飛行物 
 */  
public class Bullet extends FlyingObject {  
    private int speed = 3;  //移動的速度  

    /** 初始化資料 */  
    public Bullet(int x,int y){  
        this.x = x;  
        this.y = y;  
        this.image = ShootGame.bullet;  
    }  

    /** 移動 */  
    @Override  
    public void step(){     
        y-=speed;  
    }  

    /** 越界處理 */  
    @Override  
    public boolean outOfBounds() {  
        return y<-height;  
    }  

}

敵人的分數

/** 
 * 敵人,可以有分數 
 */  
public interface Enemy {  
    /** 敵人的分數  */  
    int getScore();  
}

飛行物(敵機,蜜蜂,子彈,英雄機)

import java.awt.image.BufferedImage;  

/** 
 * 飛行物(敵機,蜜蜂,子彈,英雄機) 
 */  
public abstract class FlyingObject {  
    protected int x;    //x坐標  
    protected int y;    //y坐標  
    protected int width;    //寬  
    protected int height;   //高  
    protected BufferedImage image;   //圖片  

    public int getX() {  
        return x;  
    }  

    public void setX(int x) {  
        this.x = x;  
    }  

    public int getY() {  
        return y;  
    }  

    public void setY(int y) {  
        this.y = y;  
    }  

    public int getWidth() {  
        return width;  
    }  

    public void setWidth(int width) {  
        this.width = width;  
    }  

    public int getHeight() {  
        return height;  
    }  

    public void setHeight(int height) {  
        this.height = height;  
    }  

    public BufferedImage getImage() {  
        return image;  
    }  

    public void setImage(BufferedImage image) {  
        this.image = image;  
    }  

    /** 
     * 檢查是否出界 
     * @return true 出界與否 
     */  
    public abstract boolean outOfBounds();  

    /** 
     * 飛行物移動一步 
     */  
    public abstract void step();  

    /** 
     * 檢查當前飛行物體是否被子彈(x,y)擊(shoot)中 
     * @param Bullet 子彈物件 
     * @return true表示被擊中了 
     */  
    public boolean shootBy(Bullet bullet){  
        int x = bullet.x;  //子彈橫坐標  
        int y = bullet.y;  //子彈縱坐標  
        return this.x<x && x<this.x+width && this.y<y && y<this.y+height;  
    }  

}

英雄機

import java.awt.image.BufferedImage;  

/** 
 * 英雄機:是飛行物  
 */  
public class Hero extends FlyingObject{  

    private BufferedImage[] images = {};  //英雄機圖片  
    private int index = 0;                //英雄機圖片切換索引  

    private int doubleFire;   //雙倍火力  
    private int life;   //命  

    /** 初始化資料 */  
    public Hero(){  
        life = 3;   //初始3條命  
        doubleFire = 0;   //初始火力為0  
        images = new BufferedImage[]{ShootGame.hero0, ShootGame.hero1}; //英雄機圖片陣列  
        image = ShootGame.hero0;   //初始為hero0圖片  
        width = image.getWidth();  
        height = image.getHeight();  
        x = 150;  
        y = 400;  
    }  

    /** 獲取雙倍火力 */  
    public int isDoubleFire() {  
        return doubleFire;  
    }  

    /** 設定雙倍火力 */  
    public void setDoubleFire(int doubleFire) {  
        this.doubleFire = doubleFire;  
    }  

    /** 增加火力 */  
    public void addDoubleFire(){  
        doubleFire = 40;  
    }  

    /** 增命 */  
    public void addLife(){  //增命  
        life++;  
    }  

    /** 減命 */  
    public void subtractLife(){   //減命  
        life--;  
    }  

    /** 獲取命 */  
    public int getLife(){  
        return life;  
    }  

    /** 當前物體移動了一下,相對距離,x,y滑鼠位置  */  
    public void moveTo(int x,int y){     
        this.x = x - width/2;  
        this.y = y - height/2;  
    }  

    /** 越界處理 */  
    @Override  
    public boolean outOfBounds() {  
        return false;    
    }  

    /** 發射子彈 */  
    public Bullet[] shoot(){     
        int xStep = width/4;      //4半  
        int yStep = 20;  //步  
        if(doubleFire>0){  //雙倍火力  
            Bullet[] bullets = new Bullet[2];  
            bullets[0] = new Bullet(x+xStep,y-yStep);  //y-yStep(子彈距飛機的位置)  
            bullets[1] = new Bullet(x+3*xStep,y-yStep);  
            return bullets;  
        }else{      //單倍火力  
            Bullet[] bullets = new Bullet[1];  
            bullets[0] = new Bullet(x+2*xStep,y-yStep);    
            return bullets;  
        }  
    }  

    /** 移動 */  
    @Override  
    public void step() {  
        if(images.length>0){  
            image = images[index++/10%images.length];  //切換圖片hero0,hero1  
        }  
    }  

    /** 碰撞演算法 */  
    public boolean hit(FlyingObject other){  

        int x1 = other.x - this.width/2;                 //x坐標最小距離  
        int x2 = other.x + this.width/2 + other.width;   //x坐標最大距離  
        int y1 = other.y - this.height/2;                //y坐標最小距離  
        int y2 = other.y + this.height/2 + other.height; //y坐標最大距離  

        int herox = this.x + this.width/2;               //英雄機x坐標中心點距離  
        int heroy = this.y + this.height/2;              //英雄機y坐標中心點距離  

        return herox>x1 && herox<x2 && heroy>y1 && heroy<y2;   //區間范圍內為撞上了  
    }  

}

游戲啟動主類

import java.awt.Font;  
import java.awt.Color;  
import java.awt.Graphics;  
import java.awt.event.MouseAdapter;  
import java.awt.event.MouseEvent;  
import java.util.Arrays;  
import java.util.Random;  
import java.util.Timer;  
import java.util.TimerTask;  
import java.awt.image.BufferedImage;  

import javax.imageio.ImageIO;  
import javax.swing.ImageIcon;  
import javax.swing.JFrame;  
import javax.swing.JPanel;  
/**
 * 
 */
public class ShootGame extends JPanel {  
    public static final int WIDTH = 400; // 面板寬  
    public static final int HEIGHT = 654; // 面板高  
    /** 游戲的當前狀態: START RUNNING PAUSE GAME_OVER */  
    private int state;  
    private static final int START = 0;  
    private static final int RUNNING = 1;  
    private static final int PAUSE = 2;  
    private static final int GAME_OVER = 3;  

    private int score = 0; // 得分  
    private Timer timer; // 定時器  
    private int intervel = 1000 / 100; // 時間間隔(毫秒)  

    public static BufferedImage background;  
    public static BufferedImage start;  
    public static BufferedImage airplane;  
    public static BufferedImage bee;  
    public static BufferedImage bullet;  
    public static BufferedImage hero0;  
    public static BufferedImage hero1;  
    public static BufferedImage pause;  
    public static BufferedImage gameover;  

    private FlyingObject[] flyings = {}; // 敵機陣列  
    private Bullet[] bullets = {}; // 子彈陣列  
    private Hero hero = new Hero(); // 英雄機  

    static { // 靜態代碼塊,初始化圖片資源  
        try {  
            background = ImageIO.read(ShootGame.class  
                    .getResource("background.png"));  
            start = ImageIO.read(ShootGame.class.getResource("start.png"));  
            airplane = ImageIO  
                    .read(ShootGame.class.getResource("airplane.png"));  
            bee = ImageIO.read(ShootGame.class.getResource("bee.png"));  
            bullet = ImageIO.read(ShootGame.class.getResource("bullet.png"));  
            hero0 = ImageIO.read(ShootGame.class.getResource("hero0.png"));  
            hero1 = ImageIO.read(ShootGame.class.getResource("hero1.png"));  
            pause = ImageIO.read(ShootGame.class.getResource("pause.png"));  
            gameover = ImageIO  
                    .read(ShootGame.class.getResource("gameover.png"));  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  

    /** 畫 */  
    @Override  
    public void paint(Graphics g) {  
        g.drawImage(background, 0, 0, null); // 畫背景圖  
        paintHero(g); // 畫英雄機  
        paintBullets(g); // 畫子彈  
        paintFlyingObjects(g); // 畫飛行物  
        paintScore(g); // 畫分數  
        paintState(g); // 畫游戲狀態  
    }  

    /** 畫英雄機 */  
    public void paintHero(Graphics g) {  
        g.drawImage(hero.getImage(), hero.getX(), hero.getY(), null);  
    }  

    /** 畫子彈 */  
    public void paintBullets(Graphics g) {  
        for (int i = 0; i < bullets.length; i++) {  
            Bullet b = bullets[i];  
            g.drawImage(b.getImage(), b.getX() - b.getWidth() / 2, b.getY(),  
                    null);  
        }  
    }  

    /** 畫飛行物 */  
    public void paintFlyingObjects(Graphics g) {  
        for (int i = 0; i < flyings.length; i++) {  
            FlyingObject f = flyings[i];  
            g.drawImage(f.getImage(), f.getX(), f.getY(), null);  
        }  
    }  

    /** 畫分數 */  
    public void paintScore(Graphics g) {  
        int x = 10; // x坐標  
        int y = 25; // y坐標  
        Font font = new Font(Font.SANS_SERIF, Font.BOLD, 22); // 字體  
        g.setColor(new Color(0xFF0000));  
        g.setFont(font); // 設定字體  
        g.drawString("SCORE:" + score, x, y); // 畫分數  
        y=y+20; // y坐標增20  
        g.drawString("LIFE:" + hero.getLife(), x, y); // 畫命  
    }  

    /** 畫游戲狀態 */  
    public void paintState(Graphics g) {  
        switch (state) {  
        case START: // 啟動狀態  
            g.drawImage(start, 0, 0, null);  
            break;  
        case PAUSE: // 暫停狀態  
            g.drawImage(pause, 0, 0, null);  
            break;  
        case GAME_OVER: // 游戲終止狀態  
            g.drawImage(gameover, 0, 0, null);  
            break;  
        }  
    }  

    public static void main(String[] args) {  
        JFrame frame = new JFrame("Fly");  
        ShootGame game = new ShootGame(); // 面板物件  
        frame.add(game); // 將面板添加到JFrame中  
        frame.setSize(WIDTH, HEIGHT); // 設定大小  
        frame.setAlwaysOnTop(true); // 設定其總在最上  
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 默認關閉操作  
        frame.setIconImage(new ImageIcon("images/icon.jpg").getImage()); // 設定表單的圖示  
        frame.setLocationRelativeTo(null); // 設定表單初始位置  
        frame.setVisible(true); // 盡快呼叫paint  

        game.action(); // 啟動執行  
    }  

    /** 啟動執行代碼 */  
    public void action() {  
        // 滑鼠監聽事件  
        MouseAdapter l = new MouseAdapter() {  
            @Override  
            public void mouseMoved(MouseEvent e) { // 滑鼠移動  
                if (state == RUNNING) { // 運行狀態下移動英雄機--隨滑鼠位置  
                    int x = e.getX();  
                    int y = e.getY();  
                    hero.moveTo(x, y);  
                }  
            }  

            @Override  
            public void mouseEntered(MouseEvent e) { // 滑鼠進入  
                if (state == PAUSE) { // 暫停狀態下運行  
                    state = RUNNING;  
                }  
            }  

            @Override  
            public void mouseExited(MouseEvent e) { // 滑鼠退出  
                if (state == RUNNING) { // 游戲未結束,則設定其為暫停  
                    state = PAUSE;  
                }  
            }  

            @Override  
            public void mouseClicked(MouseEvent e) { // 滑鼠點擊  
                switch (state) {  
                case START:  
                    state = RUNNING; // 啟動狀態下運行  
                    break;  
                case GAME_OVER: // 游戲結束,清理現場  
                    flyings = new FlyingObject[0]; // 清空飛行物  
                    bullets = new Bullet[0]; // 清空子彈  
                    hero = new Hero(); // 重新創建英雄機  
                    score = 0; // 清空成績  
                    state = START; // 狀態設定為啟動  
                    break;  
                }  
            }  
        };  
        this.addMouseListener(l); // 處理滑鼠點擊操作  
        this.addMouseMotionListener(l); // 處理滑鼠滑動操作  

        timer = new Timer(); // 主流程控制  
        timer.schedule(new TimerTask() {  
            @Override  
            public void run() {  
                if (state == RUNNING) { // 運行狀態  
                    enterAction(); // 飛行物入場  
                    stepAction(); // 走一步  
                    shootAction(); // 英雄機射擊  
                    bangAction(); // 子彈打飛行物  
                    outOfBoundsAction(); // 洗掉越界飛行物及子彈  
                    checkGameOverAction(); // 檢查游戲結束  
                }  
                repaint(); // 重繪,呼叫paint()方法  
            }  

        }, intervel, intervel);  
    }  

    int flyEnteredIndex = 0; // 飛行物入場計數  

    /** 飛行物入場 */  
    public void enterAction() {  
        flyEnteredIndex++;  
        if (flyEnteredIndex % 40 == 0) { // 400毫秒生成一個飛行物--10*40  
            FlyingObject obj = nextOne(); // 隨機生成一個飛行物  
            flyings = Arrays.copyOf(flyings, flyings.length + 1);  
            flyings[flyings.length - 1] = obj;  
        }  
    }  

    /** 走一步 */  
    public void stepAction() {  
        for (int i = 0; i < flyings.length; i++) { // 飛行物走一步  
            FlyingObject f = flyings[i];  
            f.step();  
        }  

        for (int i = 0; i < bullets.length; i++) { // 子彈走一步  
            Bullet b = bullets[i];  
            b.step();  
        }  
        hero.step(); // 英雄機走一步  
    }  

    /** 飛行物走一步 */  
    public void flyingStepAction() {  
        for (int i = 0; i < flyings.length; i++) {  
            FlyingObject f = flyings[i];  
            f.step();  
        }  
    }  

    int shootIndex = 0; // 射擊計數  

    /** 射擊 */  
    public void shootAction() {  
        shootIndex++;  
        if (shootIndex % 30 == 0) { // 300毫秒發一顆  
            Bullet[] bs = hero.shoot(); // 英雄打出子彈  
            bullets = Arrays.copyOf(bullets, bullets.length + bs.length); // 擴容  
            System.arraycopy(bs, 0, bullets, bullets.length - bs.length,  
                    bs.length); // 追加陣列  
        }  
    }  

    /** 子彈與飛行物碰撞檢測 */  
    public void bangAction() {  
        for (int i = 0; i < bullets.length; i++) { // 遍歷所有子彈  
            Bullet b = bullets[i];  
            bang(b); // 子彈和飛行物之間的碰撞檢查  
        }  
    }  

    /** 洗掉越界飛行物及子彈 */  
    public void outOfBoundsAction() {  
        int index = 0; // 索引  
        FlyingObject[] flyingLives = new FlyingObject[flyings.length]; // 活著的飛行物  
        for (int i = 0; i < flyings.length; i++) {  
            FlyingObject f = flyings[i];  
            if (!f.outOfBounds()) {  
                flyingLives[index++] = f; // 不越界的留著  
            }  
        }  
        flyings = Arrays.copyOf(flyingLives, index); // 將不越界的飛行物都留著  

        index = 0; // 索引重置為0  
        Bullet[] bulletLives = new Bullet[bullets.length];  
        for (int i = 0; i < bullets.length; i++) {  
            Bullet b = bullets[i];  
            if (!b.outOfBounds()) {  
                bulletLives[index++] = b;  
            }  
        }  
        bullets = Arrays.copyOf(bulletLives, index); // 將不越界的子彈留著  
    }  

    /** 檢查游戲結束 */  
    public void checkGameOverAction() {  
        if (isGameOver()==true) {  
            state = GAME_OVER; // 改變狀態  
        }  
    }  

    /** 檢查游戲是否結束 */  
    public boolean isGameOver() {  

        for (int i = 0; i < flyings.length; i++) {  
            int index = -1;  
            FlyingObject obj = flyings[i];  
            if (hero.hit(obj)) { // 檢查英雄機與飛行物是否碰撞  
                hero.subtractLife(); // 減命  
                hero.setDoubleFire(0); // 雙倍火力解除  
                index = i; // 記錄碰上的飛行物索引  
            }  
            if (index != -1) {  
                FlyingObject t = flyings[index];  
                flyings[index] = flyings[flyings.length - 1];  
                flyings[flyings.length - 1] = t; // 碰上的與最后一個飛行物交換  

                flyings = Arrays.copyOf(flyings, flyings.length - 1); // 洗掉碰上的飛行物  
            }  
        }  

        return hero.getLife() <= 0;  
    }  

    /** 子彈和飛行物之間的碰撞檢查 */  
    public void bang(Bullet bullet) {  
        int index = -1; // 擊中的飛行物索引  
        for (int i = 0; i < flyings.length; i++) {  
            FlyingObject obj = flyings[i];  
            if (obj.shootBy(bullet)) { // 判斷是否擊中  
                index = i; // 記錄被擊中的飛行物的索引  
                break;  
            }  
        }  
        if (index != -1) { // 有擊中的飛行物  
            FlyingObject one = flyings[index]; // 記錄被擊中的飛行物  

            FlyingObject temp = flyings[index]; // 被擊中的飛行物與最后一個飛行物交換  
            flyings[index] = flyings[flyings.length - 1];  
            flyings[flyings.length - 1] = temp;  

            flyings = Arrays.copyOf(flyings, flyings.length - 1); // 洗掉最后一個飛行物(即被擊中的)  

            // 檢查one的型別(敵人加分,獎勵獲取)  
            if (one instanceof Enemy) { // 檢查型別,是敵人,則加分  
                Enemy e = (Enemy) one; // 強制型別轉換  
                score += e.getScore(); // 加分  
            } else { // 若為獎勵,設定獎勵  
                Award a = (Award) one;  
                int type = a.getType(); // 獲取獎勵型別  
                switch (type) {  
                case Award.DOUBLE_FIRE:  
                    hero.addDoubleFire(); // 設定雙倍火力  
                    break;  
                case Award.LIFE:  
                    hero.addLife(); // 設定加命  
                    break;  
                }  
            }  
        }  
    }  

    /** 
     * 隨機生成飛行物 
     *  
     * @return 飛行物物件 
     */  
    public static FlyingObject nextOne() {  
        Random random = new Random();  
        int type = random.nextInt(20); // [0,20)  
        if (type < 4) {  
            return new Bee();  
        } else {  
            return new Airplane();  
        }  
    }  
}

原文鏈接:https://blog.csdn.net/wclxyn/article/details/110159708

著作權宣告:本文為CSDN博主「一只獨孤的程式猿」的原創文章,遵循CC 4.0 BY-SA著作權協議,轉載請附上原文出處鏈接及本宣告,

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2021最新版)

2.別在再滿屏的 if/ else 了,試試策略模式,真香!!

3.臥槽!Java 中的 xx ≠ null 是什么新語法?

4.Spring Boot 2.5 重磅發布,黑暗模式太炸了!

5.《Java開發手冊(嵩山版)》最新發布,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!

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

標籤:其他

上一篇:C語言 fopen 函式 - C語言零基礎入門教程

下一篇:一起用python做個炫酷音樂播放器,想聽啥隨便搜

標籤雲
其他(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)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more