手搓四人麻将程序

一、麻将牌的表示

在麻将游戏中,总共有一百四十四张牌,这些牌被分为多个类别,每个类别又包含了不同的牌型。具体来说,麻将牌主要包括序数牌、字牌和花牌三大类。序数牌中,包含有万子、条子和筒子,每种花色的序数牌都从一到九排列,每个数字有四张相同的牌。例如,一万、二万一直到九万,一共三十六张万子牌;同样的一条到九条,组成三十六张条子牌;还有一筒到九筒,构成另外三十六张筒子牌。

字牌则有风牌和箭牌之分。风牌包括东、南、西、北四种风向牌,各有四张,总共十六张。箭牌则包含中、发、白搭三种,同样每种四张,共计十二张。与序数牌不同的是,字牌没有大小顺序之分,它们在游戏中的作用主要是增加游戏的复杂性和多样的胡牌方式。比如,在一些胡牌条件中,要求玩家的手牌中包含特定的字牌组合。花牌虽然在大多数麻将规则中不是必需的,但它们的存在为游戏增添了一定的趣味性。花牌包括春、夏、秋、冬和梅、兰、竹、菊这八种,各一张,总共有八张。这些牌通常在游戏中具有特殊的作用,比如可以替代其他牌来形成特殊牌型,或者在某些计分规则中起到加分的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…