比较一下claude的两种最强模型,并以一个项目与deepseek测试编程能力

众所周知,claude发布了最新的opus5模型,下表则是两者的对比:

特性Claude Fable 5Claude Opus 5
定位最强性能的旗舰模型高性价比的先进模型
发布日期2026年6月9日2026年7月24日
定价 (输入/输出)$10 / $50 每百万Token$5 / $25 每百万Token
目标用户API、企业客户,处理最复杂任务所有用户(Max/Pro的默认最强模型)
核心优势处理跨越多天的、极度复杂的自主项目在多数任务上接近Fable 5的性能,成本仅为一半
适用场景大型代码库迁移、长期自主智能体、前沿研究日常办公、通用编程、知识工作、智能体搜索

简单来说,Fable 5是追求极致性能的“天花板”,而Opus 5是兼顾顶级性能与一半价格的“性价比之王”

尽管Fable 5定位更高,但在一些关键基准测试中,Opus 5凭借其优化,表现甚至更为优异。

  • Opus 5领先的领域
    • 软件工程与编程:在 Frontier-Bench v0.1 (43.3% vs 33.7%) 和 SWE-bench Verified (96.0% vs 95.0%) 上得分更高
    • 知识工作:在 GDPval-AA v2 测试中,Elo得分(1861)领先于Fable 5(1747)
    • 智能体任务:在需要主动搜索、调用工具和验证结果的任务上表现更出色
    • 综合智能:在第三方机构Artificial Analysis的9项综合测试中,以61分微弱领先Fable 5的60分。
  • Fable 5保持优势的领域
    • 复杂编码:在 SWE-bench Pro 上以80.3%的成绩略胜Opus 5的79.2%
    • 纯模型能力:在不借助外部工具的情况下,处理法律问题、多学科推理等任务时,展现出更强的“纯模型”实力
    • 高风险任务:在进攻性网络安全漏洞挖掘等任务上,能力远超Opus 5

值得注意的是,Claude Opus 5 对免费用户不可用。

下面我以经典游戏马里奥医生,给相同的提示词,横向对比一下claude与deepseek的编程能力:

两个问题均是

深刻分析马里奥医生这个游戏,写一个产品分析的文档

根据这个分析,用python写一个exe游戏软件来实现该功能和效果

这是deepseek的:

根据上面的分析文档写的python源码:

import pygame
import random
import sys

# 初始化 Pygame
pygame.init()

# ---------------------------- 游戏常量 ----------------------------
# 网格尺寸 (经典 8x16)
GRID_WIDTH = 8
GRID_HEIGHT = 16
CELL_SIZE = 30  # 像素

# 窗口尺寸 (左边界留白用于显示药品瓶, 右侧留白显示信息)
MARGIN_LEFT = 30
MARGIN_TOP = 30
WINDOW_WIDTH = MARGIN_LEFT + GRID_WIDTH * CELL_SIZE + 200
WINDOW_HEIGHT = MARGIN_TOP + GRID_HEIGHT * CELL_SIZE + 30

# 颜色映射 (0=空, 1=红, 2=黄, 3=蓝)
COLORS = {
    0: (20, 20, 30),  # 黑色背景
    1: (255, 60, 60),  # 红色病毒
    2: (255, 235, 60),  # 黄色病毒
    3: (60, 180, 255),  # 蓝色病毒
    4: (200, 200, 200)  # 胶囊白色边框
}

# 游戏速度 (帧数间隔, 数值越大下落越慢)
BASE_SPEED = 30
SPEED_LEVELS = {1: 30, 2: 25, 3: 20, 4: 15, 5: 10, 6: 6, 7: 4, 8: 2}


# ---------------------------- 游戏类 ----------------------------
class DrMarioGame:
    def __init__(self):
        self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
        pygame.display.set_caption("马里奥医生 - Python版")
        self.clock = pygame.time.Clock()
        self.font = pygame.font.SysFont("simhei", 20, bold=True)

        self.reset_game()

    def reset_game(self):
        """重置游戏状态"""
        # ⚠️ 所有属性必须在这时定义,因为 _spawn_capsule 会用到它们
        self.game_over = False
        self.win = False
        self.score = 0
        self.level = 1
        self.lines_cleared = 0
        self.fall_counter = 0
        self.current_capsule = None
        self.clearing_cells = []
        self.clear_timer = 0

        # 网格数据
        self.grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]

        # 生成病毒 (随机分布在底部 8 行)
        self.virus_count = 0
        for r in range(8, GRID_HEIGHT):
            for c in range(GRID_WIDTH):
                if random.random() < 0.70:
                    color = random.choice([1, 2, 3])
                    self.grid[r][c] = color
                    self.virus_count += 1

        if self.virus_count < 15:
            for _ in range(20):
                r = random.randint(8, GRID_HEIGHT - 1)
                c = random.randint(0, GRID_WIDTH - 1)
                if self.grid[r][c] == 0:
                    self.grid[r][c] = random.choice([1, 2, 3])
                    self.virus_count += 1

        # 生成第一个胶囊
        self.next_colors = self._generate_capsule_colors()
        self._spawn_capsule()  # 此时 self.game_over 等已经定义好了

    def _generate_capsule_colors(self):
        """生成胶囊的两个颜色 (红黄蓝随机组合)"""
        c1 = random.choice([1, 2, 3])
        c2 = random.choice([1, 2, 3])
        # 避免生成两个完全一样的颜色 (让游戏更有策略性)
        while c2 == c1:
            c2 = random.choice([1, 2, 3])
        return [c1, c2]

    def _spawn_capsule(self):
        """在顶部中间生成新胶囊"""
        if self.game_over or self.win:
            return

        colors = self.next_colors
        self.next_colors = self._generate_capsule_colors()

        # 初始位置: 第0行, 第3列和第4列 (水平放置)
        c1 = (0, 3, colors[0])
        c2 = (0, 4, colors[1])
        self.current_capsule = [c1, c2]

        # 检测是否碰撞 (生成即死)
        if self._check_collision(self.current_capsule):
            self.game_over = True
            self.current_capsule = None

    def _check_collision(self, capsule_parts):
        """检测胶囊是否与边界或已有方块重叠"""
        for r, c, color in capsule_parts:
            if c < 0 or c >= GRID_WIDTH or r >= GRID_HEIGHT:
                return True
            if r >= 0 and self.grid[r][c] != 0:
                return True
        return False

    def _rotate_capsule(self):
        """旋转胶囊 (顺时针旋转, 以第一个块为轴心)"""
        if not self.current_capsule or self.game_over or self.win:
            return

        # 获取轴心 (第一个块)
        r0, c0, color0 = self.current_capsule[0]
        r1, c1, color1 = self.current_capsule[1]

        # 计算相对位置
        dr = r1 - r0
        dc = c1 - c0

        # 顺时针旋转: (dr, dc) -> (dc, -dr)
        new_dr = dc
        new_dc = -dr
        new_r1 = r0 + new_dr
        new_c1 = c0 + new_dc

        new_capsule = [(r0, c0, color0), (new_r1, new_c1, color1)]

        # 如果旋转后不碰撞, 则应用
        if not self._check_collision(new_capsule):
            self.current_capsule = new_capsule

    def _move_capsule(self, dc):
        """左右移动胶囊"""
        if not self.current_capsule or self.game_over or self.win:
            return

        new_capsule = [(r, c + dc, color) for r, c, color in self.current_capsule]
        if not self._check_collision(new_capsule):
            self.current_capsule = new_capsule

    def _drop_capsule(self):
        """硬降: 直接落到底"""
        if not self.current_capsule or self.game_over or self.win:
            return
        while not self._check_collision([(r + 1, c, color) for r, c, color in self.current_capsule]):
            self.current_capsule = [(r + 1, c, color) for r, c, color in self.current_capsule]
        self._lock_capsule()

    def _move_down(self):
        """下落一格 (由计时器调用)"""
        if not self.current_capsule or self.game_over or self.win:
            return

        new_capsule = [(r + 1, c, color) for r, c, color in self.current_capsule]
        if not self._check_collision(new_capsule):
            self.current_capsule = new_capsule
        else:
            self._lock_capsule()

    def _lock_capsule(self):
        """将胶囊固定到网格, 然后触发消除检测"""
        if not self.current_capsule:
            return

        for r, c, color in self.current_capsule:
            if 0 <= r < GRID_HEIGHT and 0 <= c < GRID_WIDTH:
                self.grid[r][c] = color

        self.current_capsule = None

        # 执行消除和连锁
        self._clear_matches()

    def _clear_matches(self):
        """消除所有4连以上的同色块 (包含连锁)"""
        cleared_any = False

        while True:
            to_clear = set()

            # 1. 水平扫描 (检查每行连续4个同色)
            for r in range(GRID_HEIGHT):
                c = 0
                while c < GRID_WIDTH:
                    if self.grid[r][c] == 0:
                        c += 1
                        continue
                    color = self.grid[r][c]
                    count = 0
                    # 向右数
                    while c + count < GRID_WIDTH and self.grid[r][c + count] == color:
                        count += 1
                    if count >= 4:
                        for i in range(count):
                            to_clear.add((r, c + i))
                    c += count if count > 1 else 1

            # 2. 垂直扫描 (检查每列连续4个同色)
            for c in range(GRID_WIDTH):
                r = 0
                while r < GRID_HEIGHT:
                    if self.grid[r][c] == 0:
                        r += 1
                        continue
                    color = self.grid[r][c]
                    count = 0
                    while r + count < GRID_HEIGHT and self.grid[r + count][c] == color:
                        count += 1
                    if count >= 4:
                        for i in range(count):
                            to_clear.add((r + i, c))
                    r += count if count > 1 else 1

            # 如果没有可消除的, 退出循环
            if not to_clear:
                break

            # 消除方块并计数
            cleared_any = True
            virus_eliminated = 0
            for r, c in to_clear:
                if self.grid[r][c] in [1, 2, 3]:
                    virus_eliminated += 1
                self.grid[r][c] = 0

            self.virus_count -= virus_eliminated
            self.lines_cleared += len(to_clear) // 4  # 粗略计行
            self.score += virus_eliminated * 10 * self.level

            # 更新等级 (每消除 20 个病毒升1级)
            self.level = min(8, 1 + self.lines_cleared // 4)

            # 3. 物理下落 (填补空洞)
            for c in range(GRID_WIDTH):
                # 从下往上
                write_row = GRID_HEIGHT - 1
                for r in range(GRID_HEIGHT - 1, -1, -1):
                    if self.grid[r][c] != 0:
                        self.grid[write_row][c] = self.grid[r][c]
                        if write_row != r:
                            self.grid[r][c] = 0
                        write_row -= 1

            # 检查胜利条件
            if self.virus_count == 0:
                self.win = True
                self.current_capsule = None
                return

        # 消除结束后, 生成下一个胶囊
        if not cleared_any:
            # 如果没有消除任何东西, 但锁定了胶囊, 继续生成
            pass

        # 生成新胶囊 (如果游戏未结束)
        if not self.game_over and not self.win:
            self._spawn_capsule()
            # 生成时检查是否碰撞 (游戏结束)
            if self.current_capsule and self._check_collision(self.current_capsule):
                self.game_over = True
                self.current_capsule = None

    # ---------------------------- 渲染 ----------------------------
    def draw(self):
        self.screen.fill((10, 10, 20))

        # 绘制药瓶背景 (圆角矩形感觉)
        pygame.draw.rect(self.screen, (30, 40, 50),
                         (MARGIN_LEFT - 10, MARGIN_TOP - 10,
                          GRID_WIDTH * CELL_SIZE + 20, GRID_HEIGHT * CELL_SIZE + 20),
                         border_radius=15)

        # 绘制网格线 (淡淡的)
        for r in range(GRID_HEIGHT):
            for c in range(GRID_WIDTH):
                x = MARGIN_LEFT + c * CELL_SIZE
                y = MARGIN_TOP + r * CELL_SIZE
                # 格子背景
                pygame.draw.rect(self.screen, (25, 30, 40),
                                 (x, y, CELL_SIZE - 1, CELL_SIZE - 1),
                                 border_radius=2)

        # 绘制病毒和固定胶囊
        for r in range(GRID_HEIGHT):
            for c in range(GRID_WIDTH):
                val = self.grid[r][c]
                if val != 0:
                    x = MARGIN_LEFT + c * CELL_SIZE + 2
                    y = MARGIN_TOP + r * CELL_SIZE + 2
                    color = COLORS[val]
                    # 画圆角方块 (带高光效果)
                    pygame.draw.rect(self.screen, color,
                                     (x, y, CELL_SIZE - 4, CELL_SIZE - 4),
                                     border_radius=6)
                    # 高光
                    pygame.draw.rect(self.screen,
                                     (min(255, color[0] + 60), min(255, color[1] + 60), min(255, color[2] + 60)),
                                     (x + 2, y + 2, (CELL_SIZE - 4) // 2, 2),
                                     border_radius=2)

        # 绘制当前活动胶囊
        if self.current_capsule:
            for r, c, color in self.current_capsule:
                if r >= 0:
                    x = MARGIN_LEFT + c * CELL_SIZE + 2
                    y = MARGIN_TOP + r * CELL_SIZE + 2
                    pygame.draw.rect(self.screen, COLORS[color],
                                     (x, y, CELL_SIZE - 4, CELL_SIZE - 4),
                                     border_radius=6)
                    # 胶囊连接线 (让两个方块看起来是一体的)

        # 绘制下一个胶囊预览
        preview_x = MARGIN_LEFT + GRID_WIDTH * CELL_SIZE + 30
        preview_y = MARGIN_TOP + 50
        self.screen.blit(self.font.render("下一个:", True, (200, 200, 200)), (preview_x, preview_y))
        if self.next_colors:
            for i, col in enumerate(self.next_colors):
                px = preview_x + i * 35
                py = preview_y + 30
                pygame.draw.rect(self.screen, COLORS[col], (px, py, 25, 25), border_radius=5)

        # 显示分数和等级
        info_y = preview_y + 100
        self.screen.blit(self.font.render(f"分数: {self.score}", True, (255, 255, 200)), (preview_x, info_y))
        self.screen.blit(self.font.render(f"等级: {self.level}", True, (255, 255, 200)), (preview_x, info_y + 30))
        self.screen.blit(self.font.render(f"病毒: {self.virus_count}", True, (255, 255, 200)), (preview_x, info_y + 60))
        self.screen.blit(self.font.render(f"消除: {self.lines_cleared}", True, (255, 255, 200)),
                         (preview_x, info_y + 90))

        # 操作提示
        tip_y = info_y + 150
        tips = ["↑/X: 旋转", "←/→: 移动", "↓: 加速", "空格: 硬降"]
        for i, tip in enumerate(tips):
            self.screen.blit(self.font.render(tip, True, (150, 150, 180)), (preview_x, tip_y + i * 25))

        # 游戏结束 / 胜利 画面
        if self.game_over:
            overlay = pygame.Surface((WINDOW_WIDTH, WINDOW_HEIGHT), pygame.SRCALPHA)
            overlay.fill((0, 0, 0, 180))
            self.screen.blit(overlay, (0, 0))
            text = self.font.render("💊 游戏结束! 按 R 重新开始", True, (255, 100, 100))
            self.screen.blit(text, (WINDOW_WIDTH // 2 - 150, WINDOW_HEIGHT // 2))
        elif self.win:
            overlay = pygame.Surface((WINDOW_WIDTH, WINDOW_HEIGHT), pygame.SRCALPHA)
            overlay.fill((0, 0, 0, 180))
            self.screen.blit(overlay, (0, 0))
            text = self.font.render("🎉 恭喜! 病毒全部消灭! 按 R 重新开始", True, (100, 255, 100))
            self.screen.blit(text, (WINDOW_WIDTH // 2 - 170, WINDOW_HEIGHT // 2))

        pygame.display.flip()

    # ---------------------------- 主循环 ----------------------------
    def run(self):
        running = True
        while running:
            # 获取下落速度
            speed = SPEED_LEVELS.get(self.level, 2)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False
                    pygame.quit()
                    sys.exit()

                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_r:
                        self.reset_game()
                        continue

                    if self.game_over or self.win:
                        continue

                    if event.key == pygame.K_LEFT:
                        self._move_capsule(-1)
                    elif event.key == pygame.K_RIGHT:
                        self._move_capsule(1)
                    elif event.key == pygame.K_UP or event.key == pygame.K_x:
                        self._rotate_capsule()
                    elif event.key == pygame.K_DOWN:
                        self._move_down()  # 软降一步
                    elif event.key == pygame.K_SPACE:
                        self._drop_capsule()

            # 自动下落 (非游戏结束/胜利状态)
            if not self.game_over and not self.win:
                self.fall_counter += 1
                if self.fall_counter >= speed:
                    self.fall_counter = 0
                    self._move_down()

            self.draw()
            self.clock.tick(60)  # 60帧


# ---------------------------- 启动 ----------------------------
if __name__ == "__main__":
    game = DrMarioGame()
    game.run()

通过在命令行执行

 pip install pygame pyinstaller

安装打包软件

执行打包命令

 pyinstaller --onefile --windowed --name="马里奥医生" dr_mario.py

最后打开dist中的exe文件即可。下面是生成的界面。

从源码来看deepseek最主要通过算法逻辑实现了同色4个连续的消除功能,并随着时间的推移下落速度逐渐加快。除此之外再无其他。想读简单

我给claude opus5同样的提示词:

经过大概40分钟的分析才给出结果这是生成的游戏首页图:

游戏模式分为了单人闯关、双人模式、对战电脑、对战双人、每日挑战,下面是单人闯关的截图:

游戏的画面性非常还原了原有游戏界面,还有动态的效果和音效,也非常契合。当然也可以调整难度和关卡,难度越高下落速度越快,关卡越高,病毒数量越多,这是20关的病毒分布,密密麻麻:

估计知道你过不去,claude还”贴心“的给你提供了作弊面板,通过双击shift调出。包括直接过关、清掉5只病毒、清空胶囊垃圾等。

感兴趣的同学可以在我的GitHub主页复刻该项目:ghostgorge/DrMarioClone

发表回复