手搓四人麻將程序

一、麻將牌的表示

在麻將游戲中,總共有一百四十四張牌,這些牌被分為多個類別,每個類別又包含了不同的牌型。具體來說,麻將牌主要包括序數牌、字牌和花牌三大類。序數牌中,包含有萬子、條子和筒子,每種花色的序數牌都從一到九排列,每個數字有四張相同的牌。例如,一萬、二萬一直到九萬,一共三十六張萬子牌;同樣的一條到九條,組成三十六張條子牌;還有一筒到九筒,構成另外三十六張筒子牌。

字牌則有風牌和箭牌之分。風牌包括東、南、西、北四種風向牌,各有四張,總共十六張。箭牌則包含中、發、白搭三種,同樣每種四張,共計十二張。與序數牌不同的是,字牌沒有大小順序之分,它們在游戲中的作用主要是增加游戲的復雜性和多樣的胡牌方式。比如,在一些胡牌條件中,要求玩家的手牌中包含特定的字牌組合。花牌雖然在大多數麻將規則中不是必需的,但它們的存在為游戲增添了一定的趣味性。花牌包括春、夏、秋、冬和梅、蘭、竹、菊這八種,各一張,總共有八張。這些牌通常在游戲中具有特殊的作用,比如可以替代其他牌來形成特殊牌型,或者在某些計分規則中起到加分的效果。

from enum import Enumclass TileType(Enum):"""麻將牌的類型枚舉"""WIND = 1     # 風牌DRAGON = 2   # 箭牌BAMBOO = 3   # 筒子CHARACTER = 4  # 萬子DOT = 5      # 條子class TileValue(Enum):"""麻將牌的值枚舉(用于風牌和箭牌)"""EAST = 1     # 東SOUTH = 2    # 南WEST = 3     # 西NORTH = 4    # 北RED = 5      # 中GREEN = 6    # 發WHITE = 7    # 白搭class Tile:"""表示一張麻將牌"""def __init__(self, tile_type, value):self.tile_type = tile_type  # 牌的類型self.value = value          # 牌的值def __repr__(self):"""返回牌的字符串表示,便于調試和顯示"""type_name = {TileType.WIND: "風",TileType.DRAGON: "箭",TileType.BAMBOO: "筒",TileType.CHARACTER: "萬",TileType.DOT: "條"}.get(self.tile_type, "未知")value_name = ""if self.tile_type == TileType.WIND:value_name = {TileValue.EAST: "東",TileValue.SOUTH: "南",TileValue.WEST: "西",TileValue.NORTH: "北"}.get(self.value, "未知")elif self.tile_type == TileType.DRAGON:value_name = {TileValue.RED: "中",TileValue.GREEN: "發",TileValue.WHITE: "白"}.get(self.value, "未知")else:value_name = str(self.value)return f"{type_name}{value_name}"class TileDeck:"""表示麻將牌堆"""def __init__(self):self.tiles = []self.initialize_deck()def initialize_deck(self):"""初始化麻將牌堆,包含所有144張牌"""# 風牌(東、南、西、北)for wind in [TileValue.EAST, TileValue.SOUTH, TileValue.WEST, TileValue.NORTH]:for _ in range(4):  # 每種風牌有4張self.tiles.append(Tile(TileType.WIND, wind))# 箭牌(中、發、白)for dragon in [TileValue.RED, TileValue.GREEN, TileValue.WHITE]:for _ in range(4):  # 每種箭牌有4張self.tiles.append(Tile(TileType.DRAGON, dragon))# 序數牌:萬子、條子、筒子,每種從1到9,每種有4張for tile_type in [TileType.CHARACTER, TileType.DOT, TileType.BAMBOO]:for value in range(1, 10):  # 1到9for _ in range(4):     # 每張牌有4張self.tiles.append(Tile(tile_type, value))# 示例用法
if __name__ == "__main__":deck = TileDeck()print(f"麻將牌堆中共有 {len(deck.tiles)} 張牌")print("前10張牌為:")for tile in deck.tiles[:10]:print(tile)

為了在程序中準確地表示這些牌,我們需要為每張牌定義其屬性,包括牌的類型、花色、值或符號等。例如,對于序數牌,我們可以用一個結構來存儲其花色(萬子、條子、筒子)和數值(1到9);對于字牌,我們則可以使用特定的標識符來表示東、南、西、北風以及中、發、白搭等;而花牌則可以用對應的季節或花卉名稱來標識。在程序內部,這些屬性可以通過枚舉類型、類屬性或簡單的整數編碼來實現,以便于游戲邏輯的處理和牌的比較、匹配等操作。

為了便于程序的實現和擴展,我們可能還需要為這些牌設計一些輔助的函數或方法,比如比較兩張牌是否相同、判斷一張牌是否屬于某個特定類別、根據牌的屬性生成對應的顯示符號等。這些功能將幫助我們在游戲的不同階段,如發牌、摸牌、打牌、胡牌判定等,快速準確地處理各種與牌相關的操作。通過對麻將牌的詳細表示,我們能夠確保程序能夠正確地模擬麻將游戲中的各種情況,從而為玩家提供一個既真實又有趣的麻將游戲體驗。這種對基礎元素的深入理解和精確建模,是構建一個完整且功能豐富的麻將程序的關鍵所在。

二、游戲主循環

在麻將游戲中游戲主循環是整個程序的核心部分它控制著游戲的節奏和進程。游戲主循環的主要任務是不斷地循環處理每個玩家的回合直至游戲結束的條件被滿足。這個循環需要精確地管理牌的流動、玩家的操作、游戲狀態的更新以及勝利條件的檢測。

首先游戲開始時需要初始化所有玩家的狀態以及牌堆。每個玩家都有自己的手牌區域和得分情況。接著程序進入主循環在每個循環迭代中依次處理當前玩家的回合。當前玩家從牌堆中摸一張牌加入到自己的手牌中。這時候需要檢查該玩家是否因為這張牌而胡牌如果滿足胡牌條件游戲就在此時結束并結算分數。

import random
from enum import Enumclass TileType(Enum):"""麻將牌的類型枚舉"""WIND = 1     # 風牌DRAGON = 2   # 箭牌BAMBOO = 3   # 筒子CHARACTER = 4  # 萬子DOT = 5      # 條子class TileValue(Enum):"""麻將牌的值枚舉(用于風牌和箭牌)"""EAST = 1     # 東SOUTH = 2    # 南WEST = 3     # 西NORTH = 4    # 北RED = 5      # 中GREEN = 6    # 發WHITE = 7    # 白搭class Tile:"""表示一張麻將牌"""def __init__(self, tile_type, value):self.tile_type = tile_type  # 牌的類型self.value = value          # 牌的值def __repr__(self):"""返回牌的字符串表示,便于調試和顯示"""type_name = {TileType.WIND: "風",TileType.DRAGON: "箭",TileType.BAMBOO: "筒",TileType.CHARACTER: "萬",TileType.DOT: "條"}.get(self.tile_type, "未知")value_name = ""if self.tile_type == TileType.WIND:value_name = {TileValue.EAST: "東",TileValue.SOUTH: "南",TileValue.WEST: "西",TileValue.NORTH: "北"}.get(self.value, "未知")elif self.tile_type == TileType.DRAGON:value_name = {TileValue.RED: "中",TileValue.GREEN: "發",TileValue.WHITE: "白"}.get(self.value, "未知")else:value_name = str(self.value)return f"{type_name}{value_name}"class TileDeck:"""表示麻將牌堆"""def __init__(self):self.tiles = []self.discard_pile = []  # 廢牌堆self.initialize_deck()self.shuffle()def initialize_deck(self):"""初始化麻將牌堆,包含所有144張牌"""# 風牌(東、南、西、北)for wind in [TileValue.EAST, TileValue.SOUTH, TileValue.WEST, TileValue.NORTH]:for _ in range(4):  # 每種風牌有4張self.tiles.append(Tile(TileType.WIND, wind))# 箭牌(中、發、白)for dragon in [TileValue.RED, TileValue.GREEN, TileValue.WHITE]:for _ in range(4):  # 每種箭牌有4張self.tiles.append(Tile(TileType.DRAGON, dragon))# 序數牌:萬子、條子、筒子,每種從1到9,每種有4張for tile_type in [TileType.CHARACTER, TileType.DOT, TileType.BAMBOO]:for value in range(1, 10):  # 1到9for _ in range(4):     # 每張牌有4張self.tiles.append(Tile(tile_type, value))def shuffle(self):"""洗牌"""random.shuffle(self.tiles)def draw_tile(self):"""摸牌"""if len(self.tiles) == 0:return Nonereturn self.tiles.pop()def discard_tile(self, tile):"""打牌到廢牌堆"""self.discard_pile.append(tile)class Player:"""表示一個玩家"""def __init__(self, name):self.name = nameself.hand = []  # 手牌self.score = 10000  # 初始分數def draw(self, deck):"""摸牌"""tile = deck.draw_tile()if tile:self.hand.append(tile)return tiledef discard(self, tile):"""打牌"""if tile in self.hand:self.hand.remove(tile)return tilereturn Noneclass MahjongGame:"""麻將游戲主循環"""def __init__(self):self.deck = TileDeck()self.players = [Player(f"玩家 {i + 1}") for i in range(4)]self.current_player_index = 0  # 當前玩家索引self.game_over_flag = False  # 游戲結束標志def deal_tiles(self):"""發牌"""# 每個玩家摸13張牌for _ in range(13):for player in self.players:player.draw(self.deck)def check_win(self, player):"""檢查玩家是否胡牌(簡化版,僅檢查手牌數量)"""# 這里只是一個簡單的示例,實際胡牌判斷邏輯更復雜return len(player.hand) == 14  # 假設摸到第14張牌就胡牌def play_turn(self, player):"""玩家回合"""print(f"{player.name} 的回合")print(f"手牌: {player.hand}")# 摸牌drawn_tile = player.draw(self.deck)print(f"摸到: {drawn_tile}")print(f"當前手牌: {player.hand}")# 檢查是否胡牌if self.check_win(player):print(f"{player.name} 胡牌!")self.game_over_flag = Truereturn# 打牌(這里簡化為隨機打出一張牌)discarded_tile = random.choice(player.hand)player.discard(discarded_tile)self.deck.discard_tile(discarded_tile)print(f"打出: {discarded_tile}")def switch_player(self):"""切換到下一個玩家"""self.current_player_index = (self.current_player_index + 1) % 4def game_over(self):"""檢查游戲是否結束"""return self.game_over_flag or len(self.deck.tiles) == 0def start(self):"""開始游戲"""print("麻將游戲開始!")self.deal_tiles()  # 發牌while not self.game_over():current_player = self.players[self.current_player_index]self.play_turn(current_player)if not self.game_over():self.switch_player()print("游戲結束!")# 運行游戲
if __name__ == "__main__":game = MahjongGame()game.start()

如果沒有胡牌玩家則需要選擇一張牌打出。打出的牌可能會引發其他玩家的一系列操作比如其他玩家可以選擇碰牌、杠牌或者胡牌。這時候程序需要暫停當前玩家的回合等待其他玩家的響應。如果玩家選擇進行這些操作相應的牌會被移動到新的位置并且可能再次檢查是否有人因此胡牌。在處理完這些可能的操作后游戲會繼續進行下一位玩家的回合。這個過程一直持續直到牌堆中的牌全部被摸完或者有玩家成功胡牌。如果牌摸完了而沒有人胡牌則游戲以平局結束所有玩家的得分根據剩余的牌和游戲規則進行調整。

游戲主循環不僅要處理正常的出牌和胡牌還需要處理一些特殊的游戲事件比如玩家的杠牌操作或者特殊牌型的檢測。此外游戲主循環還需要管理玩家的分數及時更新并且在游戲結束時顯示最終的結果。在實現游戲主循環時需要特別注意游戲邏輯的正確性和流暢性。每個玩家的操作都需要被準確地記錄和響應游戲狀態的變化要被及時地反映到用戶界面上。同時游戲主循環還要處理可能出現的各種異常情況比如網絡延遲(如果是在線游戲)或者玩家的不合法操作確保游戲能夠順利進行。

三、胡牌判定

在麻將程序中,胡牌判定是游戲邏輯的核心部分之一,它的復雜性和多樣性直接關系到游戲的真實性和可玩性。胡牌判定不僅僅是一個簡單的條件判斷,而是一個需要綜合考慮多種牌型組合和規則細節的復雜過程。胡牌的基本條件通常是玩家手中的牌形成特定的有效組合。這些組合在不同的麻將變體中可能有所不同,但大多數情況下包括“和牌”的基本結構,比如四個順子或刻子加一個將牌(一對)。除此之外,還有一些特殊的胡牌形式,如“七對”“清一色”“大三元”等,每一種都有其獨特的判定邏輯。

import random
from enum import Enumclass TileType(Enum):"""麻將牌的類型枚舉"""WIND = 1     # 風牌DRAGON = 2   # 箭牌BAMBOO = 3   # 筒子CHARACTER = 4  # 萬子DOT = 5      # 條子class TileValue(Enum):"""麻將牌的值枚舉(用于風牌和箭牌)"""EAST = 1     # 東SOUTH = 2    # 南WEST = 3     # 西NORTH = 4    # 北RED = 5      # 中GREEN = 6    # 發WHITE = 7    # 白搭class Tile:"""表示一張麻將牌"""def __init__(self, tile_type, value):self.tile_type = tile_type  # 牌的類型self.value = value          # 牌的值def __repr__(self):"""返回牌的字符串表示,便于調試和顯示"""type_name = {TileType.WIND: "風",TileType.DRAGON: "箭",TileType.BAMBOO: "筒",TileType.CHARACTER: "萬",TileType.DOT: "條"}.get(self.tile_type, "未知")value_name = ""if self.tile_type == TileType.WIND:value_name = {TileValue.EAST: "東",TileValue.SOUTH: "南",TileValue.WEST: "西",TileValue.NORTH: "北"}.get(self.value, "未知")elif self.tile_type == TileType.DRAGON:value_name = {TileValue.RED: "中",TileValue.GREEN: "發",TileValue.WHITE: "白"}.get(self.value, "未知")else:value_name = str(self.value)return f"{type_name}{value_name}"class TileDeck:"""表示麻將牌堆"""def __init__(self):self.tiles = []self.discard_pile = []  # 廢牌堆self.initialize_deck()self.shuffle()def initialize_deck(self):"""初始化麻將牌堆,包含所有144張牌"""# 風牌(東、南、西、北)for wind in [TileValue.EAST, TileValue.SOUTH, TileValue.WEST, TileValue.NORTH]:for _ in range(4):  # 每種風牌有4張self.tiles.append(Tile(TileType.WIND, wind))# 箭牌(中、發、白)for dragon in [TileValue.RED, TileValue.GREEN, TileValue.WHITE]:for _ in range(4):  # 每種箭牌有4張self.tiles.append(Tile(TileType.DRAGON, dragon))# 序數牌:萬子、條子、筒子,每種從1到9,每種有4張for tile_type in [TileType.CHARACTER, TileType.DOT, TileType.BAMBOO]:for value in range(1, 10):  # 1到9for _ in range(4):     # 每張牌有4張self.tiles.append(Tile(tile_type, value))def shuffle(self):"""洗牌"""random.shuffle(self.tiles)def draw_tile(self):"""摸牌"""if len(self.tiles) == 0:return Nonereturn self.tiles.pop()def discard_tile(self, tile):"""打牌到廢牌堆"""self.discard_pile.append(tile)class Player:"""表示一個玩家"""def __init__(self, name):self.name = nameself.hand = []  # 手牌self.score = 10000  # 初始分數def draw(self, deck):"""摸牌"""tile = deck.draw_tile()if tile:self.hand.append(tile)return tiledef discard(self, tile):"""打牌"""if tile in self.hand:self.hand.remove(tile)return tilereturn Noneclass MahjongGame:"""麻將游戲主循環"""def __init__(self):self.deck = TileDeck()self.players = [Player(f"玩家 {i + 1}") for i in range(4)]self.current_player_index = 0  # 當前玩家索引self.game_over_flag = False  # 游戲結束標志def deal_tiles(self):"""發牌"""# 每個玩家摸13張牌for _ in range(13):for player in self.players:player.draw(self.deck)def check_win(self, player):"""檢查玩家是否胡牌(簡化版)"""# 這里只是一個簡單的示例,實際胡牌判斷邏輯更復雜# 簡化版:檢查手牌是否為14張(正常胡牌為14張)return len(player.hand) == 14 def check_exact_win(self, player):"""精確胡牌判定(示例:檢查是否為七對)"""# 統計手牌中每張牌的出現次數tile_count = {}for tile in player.hand:tile_str = str(tile)if tile_str in tile_count:tile_count[tile_str] += 1else:tile_count[tile_str] = 1# 檢查是否所有牌都是對子for count in tile_count.values():if count != 2:return Falsereturn Truedef play_turn(self, player):"""玩家回合"""print(f"{player.name} 的回合")print(f"手牌: {player.hand}")# 摸牌drawn_tile = player.draw(self.deck)print(f"摸到: {drawn_tile}")print(f"當前手牌: {player.hand}")# 檢查是否胡牌if self.check_win(player):print(f"{player.name} 胡牌!")self.game_over_flag = Truereturn# 打牌(這里簡化為隨機打出一張牌)if self.check_exact_win(player):print(f"{player.name} 七對胡牌!")self.game_over_flag = Truereturndiscarded_tile = random.choice(player.hand)player.discard(discarded_tile)self.deck.discard_tile(discarded_tile)print(f"打出: {discarded_tile}")def switch_player(self):"""切換到下一個玩家"""self.current_player_index = (self.current_player_index + 1) % 4def game_over(self):"""檢查游戲是否結束"""return self.game_over_flag or len(self.deck.tiles) == 0def start(self):"""開始游戲"""print("麻將游戲開始!")self.deal_tiles()  # 發牌while not self.game_over():current_player = self.players[self.current_player_index]self.play_turn(current_player)if not self.game_over():self.switch_player()print("游戲結束!")if __name__ == "__main__":game = MahjongGame()game.start()

要實現胡牌判定功能,首先需要對玩家的手牌進行分析。手牌通常是一個包含多張牌的列表,程序需要檢查這個列表是否滿足胡牌的條件。這涉及到對牌的排序、分組和模式匹配。比如,程序需要能夠識別出牌中的順子(三種連續的序數牌)和刻子(三張相同的牌),并確保這些組合的數量和結構符合胡牌的要求。在實現過程中,遞歸和回溯算法常常被用來窮舉可能的牌型組合。這是因為麻將牌的組合方式非常多,直接遍歷所有可能性可能會導致效率低下。遞歸算法可以有效地分解問題,將手牌分成不同的部分進行檢查,并在發現不符合條件時及時回溯,嘗試其他組合方式。

此外,胡牌判定還需要考慮一些特殊情況,比如是否有剩余的牌未被使用,或者是否滿足某些特殊的加分條件。例如,“碰碰胡”要求所有的組合都是刻子,這就需要程序在判定時特別檢查是否存在順子。為了提高判定的效率和準確性,通常會將手牌進行預處理,比如排序和分類。這樣可以減少不必要的計算,加快判定過程。同時,為了處理不同的麻將規則變體,胡牌判定邏輯需要具有一定的靈活性和可配置性。可以通過參數化的方式,讓程序能夠適應不同的規則要求。

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

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

相關文章

【Java高階面經:數據庫篇】17、分庫分表分頁查詢優化:告別慢查詢與內存爆炸

一、分庫分表基礎:策略與中間件形態 1.1 分庫分表核心策略 分庫分表是應對海量數據存儲和高并發訪問的關鍵架構設計,其核心在于將數據分散到不同的數據庫或表中,以突破單庫單表的性能限制。常見的分庫分表策略包括: 1.1.1 哈希…

貪心算法之跳躍游戲問題

問題背景 本文背景是leetcode的一道經典題目:跳躍游戲,描述如下: 給定一個非負整數數組 nums,初始位于數組的第一個位置(下標0)。數組中的每個元素表示在該位置可以跳躍的最大長度。判斷是否能夠到達最后…

Label Studio:開源標注神器

目錄 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多類型數據全兼容 2.2 個性化定制隨心配 2.3 團隊協作超給力 2.4 機器學習巧集成 三、上手實操超簡單 3.1 安裝部署不頭疼 3.1.1 Docker安裝 3.1.2 pip安裝 3.1.3 Anaconda安裝 3.2 快速開啟標注…

創建信任所有證書的HttpClient:Java 實現 HTTPS 接口調用,等效于curl -k

在 Java 生態中,HttpClient 和 Feign 都是調用第三方接口的常用工具,但它們的定位、設計理念和使用場景有顯著差異。以下是詳細對比: DIFF1. 定位與抽象層級 特性HttpClientFeign層級底層 HTTP 客戶端庫(處理原始請求/響應&#…

從零基礎到最佳實踐:Vue.js 系列(7/10):《常用內置 API 與插件》

引言 Vue.js 是一款輕量且強大的前端框架,因其易用性和靈活性受到廣泛歡迎。無論是初學者還是資深開發者,都可以通過其內置 API 和插件生態快速構建高效、可維護的 Web 應用。本文將從基礎用法講起,逐步深入到進階技巧,結合大量實…

線性代數:AI大模型的數學基石

🧑 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C、C#等開發語言,熟悉Java常用開…

Java-System工具類深度解析

Java-System工具類深度解析 前言一、System 類概述1.1 基本定義與特點1.2 重要成員變量 二、標準輸入輸出功能2.1 標準輸入(System.in)2.2 標準輸出(System.out)2.3 標準錯誤輸出(System.err) 三、系統屬性…

刪除用戶憑證

Git 部分倉庫無法操作,部分倉庫沒問題 問題出現 我用個人電腦修改了項目,提交了git。然后第二天在公司電腦git pull的時候失敗,只有部分倉庫,git colne直接失敗,部分倉庫無問題。 解決方式 刪除git相關憑證&#xff…

19. 結合Selenium和YAML對頁面實例化PO對象改造

19. 結合Selenium和YAML對頁面實例化PO對象改造 一、架構升級核心思路 1.1 改造核心目標 # 原始PO模式:顯式定義元素定位 username (id, ctl00_MainContent_username)# 改造后PO模式:動態屬性訪問 self.username.send_keys(Tester) # 自動觸發元素定…

鴻蒙App開發學習路徑

以下是一份系統的鴻蒙(HarmonyOS)App開發學習路徑,適合從零開始逐步掌握相關技能: 1. 基礎知識儲備 1.1 理解鴻蒙系統 鴻蒙核心特性:分布式能力、一次開發多端部署、原子化服務、ArkUI框架。與Android/iOS的區別&…

spring boot啟動報錯:2002 - Can‘t connect to server on ‘192.168.10.212‘ (10061)

錯誤代碼 10061 通常表明無法建立到指定服務器的網絡連接。這個錯誤屬于 Windows Sockets 錯誤代碼,具體指的是無法建立網絡連接,通常是因為目標地址不可達。以下是一些解決此問題的步驟: 檢查 IP 地址和端口: 確保你輸入的 IP …

ARMv7的NVIC中斷優先級

1. 優先級模型 數值規則:數值越小,優先級越高(例如優先級0的異常比優先級1的異常更高);若多個異常的優先級相同,則 異常號(Exception Number) 較小的異常優先執行。固定優先級異常(不可配置):異常類型 優先級值 說明 Reset -3 最高優先級(系統復位) NMI -2 不可屏…

gitee錯誤處理總結

背景 如上圖,根據圖片中的 Git 錯誤提示,我們遇到的問題是 ?本地分支落后于遠程分支,導致 git push 被拒絕。 ?問題原因? 遠程倉庫的 master 分支有其他人推送的新提交,而您的本地 master 分支未同步這些更新(即本…

阿里云合集(不定期更新)

一、阿里云申請免費域名證書流程:https://blog.csdn.net/humors221/article/details/143266059 二、阿里云發送國內短信怎樣編程:https://blog.csdn.net/humors221/article/details/139544193 三、阿里云ECS服務器磁盤空間不足的幾個文件:h…

leetcode239 滑動窗口最大值deque方式

這段文字描述的是使用單調隊列&#xff08;Monotonic Queue&#xff09; 解決滑動窗口最大值問題的優化算法。我來簡單解釋一下&#xff1a; 核心思路 問題分析&#xff1a;在滑動窗口中&#xff0c;若存在兩個下標 i < j 且 nums[i] ≤ nums[j]&#xff0c;則 nums[i] 永遠…

小白的進階之路系列之三----人工智能從初步到精通pytorch計算機視覺詳解下

我們將繼續計算機視覺內容的講解。 我們已經知道了計算機視覺,用在什么地方,如何用Pytorch來處理數據,設定一些基礎的設置以及模型。下面,我們將要解釋剩下的部分,包括以下內容: 主題內容Model 1 :加入非線性實驗是機器學習的很大一部分,讓我們嘗試通過添加非線性層來…

elementUI 單選框存在多個互斥的選項中選擇的場景

使用 el-radio-group 來使用單選框組&#xff0c;代碼如下&#xff1a; <el-radio-group input"valueChangeHandler" v-model"featureForm.type"><el-radio name"feature" label"feature">業務對象</el-radio><…

Qt項目開發中所遇

講述下面代碼所表示的含義&#xff1a; QWidget widget_19 new QWidget(); QVBoxLayout *touchAreaLayout new QVBoxLayout(widget_19);QWidget *buttonArea new QWidget(widget_19); 1、新建一個名為widget_19的QWidget&#xff0c;將給其應用垂直管路布局。 2、新建一個…

相機標定與圖像處理涉及的核心坐標系

坐標系相互關系 #mermaid-svg-QxaMjIcgWVap0awV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QxaMjIcgWVap0awV .error-icon{fill:#552222;}#mermaid-svg-QxaMjIcgWVap0awV .error-text{fill:#552222;stroke:#552…

CICD編譯時遇到npm error code EINTEGRITY的問題

場景 CICD編譯時拋出npm error code EINTEGRITY的錯誤 npm error code EINTEGRITY npm error sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA integrity checksum failed when using sha512: wanted sha512-PlhdFcillOINfeV…