飛算JavaAI:簡易貪吃蛇小游戲

目錄

  • 先確定核心功能
  • 技術選型
  • 核心功能實現過程
    • 1. 數據模型設計
    • 2. 游戲界面和繪制邏輯
    • 3. 游戲主框架和事件處理
  • 飛算JavaAI在開發中的應用體驗
  • 可以進一步優化的地方

作為Java課程的小作業,不想做太復雜的管理系統,就選了貪吃蛇這個經典小游戲。全程用Swing做界面,沒用到任何第三方庫,花了三天時間搞定了基本玩法。雖然沒上線也沒推廣,純當練手項目,但開發過程中踩了不少坑,記錄下來說不定能幫到同樣在學Java的同學。

請添加圖片描述
在開發過程中,我嘗試結合飛算JavaAI輔助開發,顯著提升了開發效率,尤其是在代碼優化和問題排查方面提供了不少幫助。

先確定核心功能

貪吃蛇的核心玩法玩法其實很簡單,我梳理了必須實現的功能:

  • 蛇能自己移動,方向可以通過方向鍵控制
  • 隨機生成食物,蛇吃到食物后身體變長
  • 撞到邊界或自己的身體就算游戲結束
  • 顯示當前分數(吃一個食物得10分)
  • 支持暫停/繼續和重新開始游戲

技術選型

純Java原生實現,沒用到任何框架:

  • 界面:Swing(JFrame、JPanel這些基礎組件)
  • 繪圖:Graphics類(繪制蛇、食物和分數)
  • 事件監聽:KeyListener(處理方向鍵輸入)
  • 線程:Timer(控制蛇的移動速度)

核心功能實現過程

1. 數據模型設計

首先借助飛算JavaAI設計蛇和食物的數據結構,AI給出的方案非常合理,尤其是在面向對象設計方面給了我很多啟發:

// 蛇的身體由多個節點組成,每個節點有x和y坐標
class SnakeNode {private int x;  // x坐標private int y;  // y坐標public SnakeNode(int x, int y) {this.x = x;this.y = y;}// getters and setterspublic int getX() { return x; }public int getY() { return y; }public void setX(int x) { this.x = x; }public void setY(int y) { this.y = y; }// 飛算JavaAI建議添加的equals方法,方便后續判斷碰撞@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;SnakeNode snakeNode = (SnakeNode) obj;return x == snakeNode.x && y == snakeNode.y;}// 飛算JavaAI建議添加的hashCode方法@Overridepublic int hashCode() {return Objects.hash(x, y);}
}// 游戲數據模型
class GameModel {// 游戲區域大小(格子數)public static final int GRID_WIDTH = 30;public static final int GRID_HEIGHT = 20;// 每個格子的像素大小public static final int GRID_SIZE = 20;private List<SnakeNode> snake;  // 蛇的身體private SnakeNode food;         // 食物private int direction;          // 蛇的移動方向(上、下、左、右)private int score;              // 分數private boolean isGameOver;     // 游戲是否結束private boolean isPaused;       // 游戲是否暫停private int speed;              // 游戲速度,飛算JavaAI建議添加// 方向常量public static final int UP = 0;public static final int DOWN = 1;public static final int LEFT = 2;public static final int RIGHT = 3;public GameModel() {// 初始化蛇(從中間開始,長度為3)snake = new LinkedList<>();snake.add(new SnakeNode(GRID_WIDTH/2, GRID_HEIGHT/2));snake.add(new SnakeNode(GRID_WIDTH/2 - 1, GRID_HEIGHT/2));snake.add(new SnakeNode(GRID_WIDTH/2 - 2, GRID_HEIGHT/2));// 初始方向向右direction = RIGHT;// 生成第一個食物generateFood();// 初始化分數和游戲狀態score = 0;isGameOver = false;isPaused = false;speed = 150;  // 初始速度,飛算JavaAI建議添加}// 生成食物(確保不會出現在蛇身上)public void generateFood() {Random random = new Random();int x, y;boolean onSnake;do {onSnake = false;x = random.nextInt(GRID_WIDTH);y = random.nextInt(GRID_HEIGHT);// 檢查食物是否生成在蛇身上// 飛算JavaAI建議使用contains方法簡化代碼onSnake = snake.contains(new SnakeNode(x, y));} while (onSnake);food = new SnakeNode(x, y);}// 蛇移動一步public void move() {if (isGameOver || isPaused) return;// 獲取蛇頭SnakeNode head = snake.get(0);int newX = head.getX();int newY = head.getY();// 根據方向計算新頭部位置switch (direction) {case UP:newY--;break;case DOWN:newY++;break;case LEFT:newX--;break;case RIGHT:newX++;break;}// 檢查是否撞墻if (newX < 0 || newX >= GRID_WIDTH || newY < 0 || newY >= GRID_HEIGHT) {isGameOver = true;return;}// 檢查是否撞到自己SnakeNode newHead = new SnakeNode(newX, newY);if (snake.contains(newHead)) {isGameOver = true;return;}// 添加新頭部snake.add(0, newHead);// 檢查是否吃到食物if (newX == food.getX() && newY == food.getY()) {// 吃到食物,加分并生成新食物score += 10;generateFood();// 飛算JavaAI建議:隨著分數增加提高速度increaseSpeed();} else {// 沒吃到食物,移除尾部snake.remove(snake.size() - 1);}}// 飛算JavaAI建議添加的速度增加方法private void increaseSpeed() {// 每得50分,速度提升10%if (score % 50 == 0 && speed > 50) {speed = (int)(speed * 0.9);}}// 改變方向(不能直接反向)public void changeDirection(int newDirection) {// 比如當前向左,不能直接向右if ((direction == LEFT && newDirection == RIGHT) || (direction == RIGHT && newDirection == LEFT) || (direction == UP && newDirection == DOWN) || (direction == DOWN && newDirection == UP)) {return;}direction = newDirection;}// 重置游戲public void reset() {snake.clear();snake.add(new SnakeNode(GRID_WIDTH/2, GRID_HEIGHT/2));snake.add(new SnakeNode(GRID_WIDTH/2 - 1, GRID_HEIGHT/2));snake.add(new SnakeNode(GRID_WIDTH/2 - 2, GRID_HEIGHT/2));direction = RIGHT;generateFood();score = 0;isGameOver = false;isPaused = false;speed = 150;  // 重置速度}// getters and setterspublic List<SnakeNode> getSnake() { return snake; }public SnakeNode getFood() { return food; }public int getScore() { return score; }public boolean isGameOver() { return isGameOver; }public boolean isPaused() { return isPaused; }public void setPaused(boolean paused) { isPaused = paused; }public int getSpeed() { return speed; }  // 飛算JavaAI建議添加
}

2. 游戲界面和繪制邏輯

在實現界面繪制時,飛算JavaAI幫我優化了繪圖邏輯,解決了畫面閃爍問題:

class GamePanel extends JPanel {private GameModel model;// 顏色定義private static final Color SNAKE_COLOR = new Color(76, 175, 80);    // 綠色private static final Color FOOD_COLOR = new Color(244, 67, 54);     // 紅色private static final Color BG_COLOR = new Color(230, 230, 230);     // 淺灰色private static final Color TEXT_COLOR = new Color(33, 33, 33);      // 深灰色private static final Color BORDER_COLOR = new Color(200, 200, 200); // 邊框顏色// 飛算JavaAI建議添加雙緩沖解決閃爍問題private Image bufferImage;private Graphics bufferGraphics;public GamePanel(GameModel model) {this.model = model;// 設置面板大小setPreferredSize(new Dimension(GameModel.GRID_WIDTH * GameModel.GRID_SIZE,GameModel.GRID_HEIGHT * GameModel.GRID_SIZE));// 設置背景色setBackground(BG_COLOR);// 飛算JavaAI建議:設置焦點,確保鍵盤事件能被捕獲setFocusable(true);requestFocusInWindow();}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);// 飛算JavaAI建議使用雙緩沖繪制if (bufferImage == null) {bufferImage = createImage(getWidth(), getHeight());bufferGraphics = bufferImage.getGraphics();}// 清空緩沖bufferGraphics.setColor(BG_COLOR);bufferGraphics.fillRect(0, 0, getWidth(), getHeight());// 繪制網格線,飛算JavaAI建議添加drawGrid(bufferGraphics);// 繪制蛇bufferGraphics.setColor(SNAKE_COLOR);for (SnakeNode node : model.getSnake()) {bufferGraphics.fillRect(node.getX() * GameModel.GRID_SIZE,node.getY() * GameModel.GRID_SIZE,GameModel.GRID_SIZE - 1,  // 減1是為了讓蛇身體節點之間有縫隙GameModel.GRID_SIZE - 1);}// 繪制食物bufferGraphics.setColor(FOOD_COLOR);SnakeNode food = model.getFood();bufferGraphics.fillOval(food.getX() * GameModel.GRID_SIZE,food.getY() * GameModel.GRID_SIZE,GameModel.GRID_SIZE - 1,GameModel.GRID_SIZE - 1);// 繪制分數和速度信息bufferGraphics.setColor(TEXT_COLOR);bufferGraphics.setFont(new Font("Arial", Font.BOLD, 16));bufferGraphics.drawString("分數: " + model.getScore(), 10, 20);bufferGraphics.drawString("速度: " + (1000/model.getSpeed()) + "步/秒", 120, 20);// 游戲結束時顯示提示if (model.isGameOver()) {drawCenteredString(bufferGraphics, "游戲結束!", getWidth()/2, getHeight()/2, new Font("Arial", Font.BOLD, 24));drawCenteredString(bufferGraphics, "按R鍵重新開始", getWidth()/2, getHeight()/2 + 30,new Font("Arial", Font.PLAIN, 16));}// 暫停時顯示提示if (model.isPaused() && !model.isGameOver()) {drawCenteredString(bufferGraphics, "已暫停", getWidth()/2, getHeight()/2,new Font("Arial", Font.BOLD, 24));drawCenteredString(bufferGraphics, "按P鍵繼續", getWidth()/2, getHeight()/2 + 30,new Font("Arial", Font.PLAIN, 16));}// 將緩沖圖像繪制到屏幕g.drawImage(bufferImage, 0, 0, this);}// 飛算JavaAI建議添加的繪制網格線方法private void drawGrid(Graphics g) {g.setColor(BORDER_COLOR);// 繪制水平線for (int y = 0; y <= GameModel.GRID_HEIGHT; y++) {g.drawLine(0, y * GameModel.GRID_SIZE, GameModel.GRID_WIDTH * GameModel.GRID_SIZE, y * GameModel.GRID_SIZE);}// 繪制垂直線for (int x = 0; x <= GameModel.GRID_WIDTH; x++) {g.drawLine(x * GameModel.GRID_SIZE, 0, x * GameModel.GRID_SIZE, GameModel.GRID_HEIGHT * GameModel.GRID_SIZE);}}// 飛算JavaAI建議添加的居中繪制字符串方法private void drawCenteredString(Graphics g, String text, int x, int y, Font font) {g.setFont(font);FontMetrics metrics = g.getFontMetrics(font);int textX = x - metrics.stringWidth(text) / 2;int textY = y + (metrics.getAscent() - metrics.getDescent()) / 2;g.drawString(text, textX, textY);}@Overridepublic void update(Graphics g) {// 重寫update方法,避免閃爍paint(g);}
}

3. 游戲主框架和事件處理

主框架實現時,飛算JavaAI幫我優化了事件處理和游戲循環邏輯:

public class SnakeGame extends JFrame {private GameModel model;private GamePanel panel;private Timer timer;  // 控制游戲刷新private int highScore;  // 最高分記錄,飛算JavaAI建議添加public SnakeGame() {// 初始化模型和面板model = new GameModel();panel = new GamePanel(model);// 加載最高分,飛算JavaAI建議添加loadHighScore();// 設置窗口setTitle("貪吃蛇");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setResizable(false);  // 窗口不可 resize// 飛算JavaAI建議添加菜單欄createMenuBar();add(panel);pack();setLocationRelativeTo(null);  // 窗口居中顯示// 初始化定時器,控制蛇的移動速度initTimer();// 添加鍵盤監聽addKeyListener(new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {handleKeyPress(e);}});// 窗口關閉時保存最高分,飛算JavaAI建議添加addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {saveHighScore();}});}// 飛算JavaAI建議添加的創建菜單欄方法private void createMenuBar() {JMenuBar menuBar = new JMenuBar();JMenu gameMenu = new JMenu("游戲");JMenuItem newGameItem = new JMenuItem("新游戲");newGameItem.addActionListener(e -> resetGame());JMenuItem exitItem = new JMenuItem("退出");exitItem.addActionListener(e -> {saveHighScore();System.exit(0);});gameMenu.add(newGameItem);gameMenu.addSeparator();gameMenu.add(exitItem);JMenu helpMenu = new JMenu("幫助");JMenuItem aboutItem = new JMenuItem("關于");aboutItem.addActionListener(e -> showAboutDialog());JMenuItem controlsItem = new JMenuItem("操作說明");controlsItem.addActionListener(e -> showControlsDialog());helpMenu.add(controlsItem);helpMenu.add(aboutItem);menuBar.add(gameMenu);menuBar.add(helpMenu);setJMenuBar(menuBar);}// 初始化定時器private void initTimer() {timer = new Timer(model.getSpeed(), e -> {model.move();// 檢查是否刷新速度if (timer.getDelay() != model.getSpeed()) {timer.setDelay(model.getSpeed());}// 檢查是否打破最高分if (model.getScore() > highScore) {highScore = model.getScore();}panel.repaint();});timer.start();}// 處理鍵盤事件private void handleKeyPress(KeyEvent e) {int key = e.getKeyCode();// 方向控制switch (key) {case KeyEvent.VK_UP:case KeyEvent.VK_W:  // 支持WASD控制,飛算JavaAI建議添加model.changeDirection(GameModel.UP);break;case KeyEvent.VK_DOWN:case KeyEvent.VK_S:model.changeDirection(GameModel.DOWN);break;case KeyEvent.VK_LEFT:case KeyEvent.VK_A:model.changeDirection(GameModel.LEFT);break;case KeyEvent.VK_RIGHT:case KeyEvent.VK_D:model.changeDirection(GameModel.RIGHT);break;case KeyEvent.VK_P:  // 暫停/繼續case KeyEvent.VK_SPACE:  // 空格也可暫停,飛算JavaAI建議添加model.setPaused(!model.isPaused());panel.repaint();break;case KeyEvent.VK_R:  // 重新開始resetGame();break;case KeyEvent.VK_ESCAPE:  // 退出游戲,飛算JavaAI建議添加saveHighScore();System.exit(0);break;}}// 重置游戲private void resetGame() {model.reset();timer.setDelay(model.getSpeed());panel.repaint();}// 飛算JavaAI建議添加的加載最高分方法private void loadHighScore() {try {File file = new File("highscore.dat");if (file.exists()) {try (BufferedReader br = new BufferedReader(new FileReader(file))) {String scoreStr = br.readLine();highScore = Integer.parseInt(scoreStr);}} else {highScore = 0;}} catch (Exception e) {highScore = 0;System.err.println("加載最高分失敗: " + e.getMessage());}}// 飛算JavaAI建議添加的保存最高分方法private void saveHighScore() {try (BufferedWriter bw = new BufferedWriter(new FileWriter("highscore.dat"))) {bw.write(String.valueOf(highScore));} catch (Exception e) {System.err.println("保存最高分失敗: " + e.getMessage());}}// 飛算JavaAI建議添加的顯示關于對話框方法private void showAboutDialog() {JOptionPane.showMessageDialog(this,"貪吃蛇 v1.0\nJava課程練手項目","關于",JOptionPane.INFORMATION_MESSAGE);}// 飛算JavaAI建議添加的顯示操作說明方法private void showControlsDialog() {JOptionPane.showMessageDialog(this,"方向鍵或WASD: 控制蛇移動\n" +"空格或P: 暫停/繼續游戲\n" +"R: 重新開始游戲\n" +"ESC: 退出游戲","操作說明",JOptionPane.INFORMATION_MESSAGE);}public static void main(String[] args) {// 在事件調度線程中啟動游戲SwingUtilities.invokeLater(() -> {new SnakeGame().setVisible(true);});}
}

飛算JavaAI在開發中的應用體驗

在開發這個貪吃蛇游戲的過程中,飛算JavaAI作為輔助工具提供了不少幫助:

  1. 代碼優化建議:AI能夠識別出代碼中可以優化的部分,比如使用contains方法簡化碰撞檢測,添加equals和hashCode方法提高對象比較效率等。

  2. 功能擴展建議:AI不僅局限于實現基本功能,還提出了很多擴展建議,如添加最高分記錄、支持WASD控制、增加游戲難度遞增機制等,讓游戲更完善。

  3. 最佳實踐指導:在Swing界面開發方面,AI提供了雙緩沖繪圖、避免界面閃爍等最佳實踐,解決了我開發中遇到的實際問題。

  4. 代碼規范提示:AI建議的代碼結構更清晰,命名更規范,幫助我養成良好的編程習慣。

  5. 問題排查幫助:當遇到蛇移動不同步、食物生成在蛇身上等問題時,AI能夠快速定位原因并提供解決方案。

當然,AI的建議也需要篩選和判斷,不能盲目采納。在實際開發中,我會結合自己的理解和需求,選擇性地應用AI提供的建議。

可以進一步優化的地方

雖然在飛算JavaAI的幫助下已經實現了不少功能,但還有可以完善的地方:

  1. 添加多種游戲模式(如限時模式、障礙模式)
  2. 實現更豐富的食物系統(特殊食物有不同效果)
  3. 添加音效和背景音樂
  4. 優化界面,支持皮膚切換
  5. 實現聯網排行榜功能

總體來說,這個貪吃蛇項目是一次很好的Java練手經歷。借助飛算JavaAI,我不僅提高了開發效率,還學到了很多Java編程的最佳實踐。看到自己開發的小游戲能夠正常運行,并且有不錯的游戲體驗,確實很有成就感。長大,還是挺有成就感的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93795.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何保障內部網絡安全前提下,實現與外部互聯網之間的文件傳輸?

在數字化時代&#xff0c;企業網絡環境日益復雜&#xff0c;普遍采用“內外網隔離”的安全架構&#xff1a;內部辦公網承載業務系統與數據&#xff0c;外部互聯網則用于對外溝通與信息獲取。這種隔離有效抵御了外部攻擊&#xff0c;但也帶來了“信息孤島”問題——如何在保障內…

計算機視覺 圖片處理 在骨架化過程中,每次迭代都會從圖像的邊緣移除一層像素,直到只剩下單像素寬度的骨架

你說得對&#xff0c;if cv2.countNonZero(binary) 0: break 這個條件確實表示圖像中已經沒有非零像素&#xff0c;即圖像完全變為空白。這并不是骨架化完成的標志&#xff0c;而是表示圖像已經被腐蝕到沒有任何內容了。 在骨架化過程中&#xff0c;我們需要一個更合適的停止條…

rt-thread audio框架移植stm32 adc+dac,用wavplayer錄音和播放

D1 參考 rt-thread官方sdk中&#xff0c;正點原子stm32f429-atk-appollo的board中有audio文件夾&#xff0c;包括了mic/play的程序&#xff0c;wm8978的庫文件因為我們基于stm32h750內置adcdac設計&#xff0c;所以不需要wm8978.c/h。只需要移植drv_sound.c和drv_mic.c D2 工程…

AI重塑軟件測試:質量保障的下一站

軟件開發的世界變化飛快&#xff0c;系統越來越復雜&#xff0c;用戶的胃口越來越大&#xff0c;產品上線的壓力也越來越大。作為測試工程師&#xff0c;你是不是常常覺得傳統測試已經跟不上節奏了&#xff1f;手工測試累死人&#xff0c;自動化腳本維護到崩潰&#xff0c;測試…

【前端基礎知識系列六】React 項目基本框架及常見文件夾作用總結(圖文版)

在 React 開發中&#xff0c;一個清晰合理的項目結構不僅能提高開發效率&#xff0c;還能讓代碼更易于維護和擴展。尤其是在團隊協作中&#xff0c;統一的項目結構規范至關重要。本文將通過圖文結合的方式&#xff0c;詳細介紹 React 項目的基本框架以及常見文件夾的定義與作用…

0815 UDP通信協議TCP并發服務器

Part 1.思維導圖一.UDP通信協議1.原理服務器端&#xff1a;1.用socket函數創建一個套接字文件2.創建服務器端地址結構體并賦值3.用ford函數將套接字文件與地址結構體綁定4.創建接收客戶端地址結構體5.利用sendto和recvfrom函數傳輸和接收信息客戶端&#xff1a;1.用socket函數創…

一個基于純前端技術實現的五子棋游戲,無需后端服務,直接在瀏覽器中運行。

一 功能特性1.1 核心游戲功能- **標準五子棋規則**&#xff1a;1515棋盤&#xff0c;黑子(玩家)先手 - **AI對戰模式**&#xff1a;白子AI具有中等難度&#xff0c;會進行智能進攻和防守 - **勝負判定**&#xff1a;支持橫向、縱向、斜向五子連線獲勝 - **平局檢測**&#xff1…

HBuilderX升級,Vue2 scss 預編譯器默認已由 node-sass 更換為 dart-sass

目錄 一、問題描述 二、問題原因 三、問題解析及解決方案 一、問題描述 最近開發新項目&#xff0c;升級了HBuilderX版本到4.75&#xff0c;最近要在之前的項目添加功能的時候發現報錯&#xff0c;錯誤如下&#xff1a;Vue2 scss 預編譯器默認已由 node-sass 更換為 dart-sa…

像素風球球大作戰 HTML 游戲

像素風球球大作戰 HTML 游戲 下面是一個簡單的像素風格球球大作戰 HTML 游戲代碼&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

文件導出時無法獲取響應頭Content-Disposition的文件名

1. 為什么Content-Disposition無法獲取&#xff1f; 要拿到 Content-Disposition 里的 filename&#xff0c;可以用正則或者簡單的字符串解析。 瀏覽器默認不讓前端訪問非標準響應頭&#xff0c;Content-Disposition 需要后端顯式暴露。 在瀏覽器開發者工具 → Network → Re…

Leetcode 128. 最長連續序列 哈希

原題鏈接&#xff1a; Leetcode 128. 最長連續序列 解法1: map&#xff0c;不符合要求 class Solution { public:int longestConsecutive(vector<int>& nums) {if (nums.size()0) return 0;map<int,int> mp;for(auto x: nums){mp[x];}int pre;int l0,r0,res0;…

禾賽激光雷達AT128P/海康相機(2):基于歐幾里德聚類的激光雷達障礙物檢測

目錄 一、參考連接 二、實驗效果?編輯 三、安裝相應的 ros 依賴包 四、代碼驅動 4.1 代碼下載 4.2 代碼文件放置(請按照這個命名放置代碼) 4.3 代碼編譯 4.4 報錯 一、參考連接

Vue Router的常用API有哪些?

文章目錄一、路由配置相關二、路由實例方法&#xff08;router 實例&#xff09;三、組件內路由 API&#xff08;useRouter / useRoute&#xff09;四、導航守衛&#xff08;路由攔截&#xff09;五、路由視圖與導航組件六、其他常用 API七、history模式和hash模式有什么區別&a…

從現場到云端的“通用語”:Kepware 在工業互聯中的角色、使用方法與本土廠商(以胡工科技為例)的差異與優勢

從現場到云端的“通用語”&#xff1a;Kepware 在工業互聯中的角色、使用方法與本土廠商&#xff08;以胡工科技為例&#xff09;的差異與優勢 文章目錄從現場到云端的“通用語”&#xff1a;Kepware 在工業互聯中的角色、使用方法與本土廠商&#xff08;以胡工科技為例&#x…

深入理解Prompt構建與工程技巧:API高效實踐指南

深入理解Prompt構建與工程技巧&#xff1a;API高效實踐指南 引言 Prompt&#xff08;提示&#xff09;工程是推動大模型能力極限的關鍵手段。合理的Prompt不僅能顯著提升模型輸出的相關性與準確性&#xff0c;在實際落地的API接口開發中同樣起到舉足輕重的作用。本文將系統介…

C++之多態(從0到1的突破)

世間百態&#xff0c;每個人都扮演著不同的角色&#xff0c;都進行著不同的行為。C更是如此&#xff0c;C中也會出現有著不同行為的多種形態的出現&#xff0c;那就讓我們一起進入C的多態世界吧&#xff01;&#xff01;&#xff01; 一. 多態的概念 多態&#xff0c;顧名思義&…

路由器NAT的類型測定

目前所使用的NAT基本都是NAPT&#xff0c;即多端口的NAT技術&#xff0c;因此本文主要是設計了兩種測定路由器NAPT類型的實驗。 實驗環境 設備 主機A&#xff1a;Windows主機B&#xff1a;Windows路由器 軟件 ncWiresharkSocketTools 在局域網內部完成所有測試&#xff0c;完全…

ROS 2系統Callback Group概念筆記

核心概念 Callback Group&#xff08;回調組&#xff09;是一個管理一個或多個回調函數執行規則的容器。它決定了這些回調函數是如何被節點&#xff08;Node&#xff09;的 executor 調度的&#xff0c;特別是當多個回調函數同時就緒時&#xff0c;它們之間是并行執行還是必須串…

Qt——主窗口 mainWindow

主窗口 mainWindow 前面學習的所有代碼&#xff0c;都是基于QWidget控件&#xff0c;其更多的是作為別的窗口的部分 現在來學習QMainWindow&#xff0c;即主窗口&#xff0c;其包含以下屬性 Window Title&#xff1a;標題欄Menu Bar&#xff1a;菜單欄Tool Bar Area&#xff1a…

無訓練神經網絡影響下的智能制造

摘要 未訓練神經網絡&#xff08;Untrained Neural Networks, UNNs&#xff09;作為近年來人工智能領域的新興范式&#xff0c;正在逐步改變智能制造的發展路徑。不同于傳統深度學習依賴大規模標注數據與高性能計算資源的模式&#xff0c;UNNs 借助網絡結構自身的歸納偏置與初…