当前位置: 首页 > article >正文

CS61A Week1-2 Hog项目实战:手把手教你用Python写一个骰子游戏(附完整代码)

CS61A Hog项目实战用Python构建骰子游戏的完整指南1. 项目介绍与环境准备Hog是加州大学伯克利分校CS61A课程中的经典Python项目它不仅仅是一个简单的骰子游戏更是初学者掌握Python基础语法的完美实践平台。这个项目将帮助你巩固变量、函数、控制流等核心概念并通过有趣的游戏机制让学习过程充满乐趣。为什么选择Hog项目综合性涵盖Python基础语法的多个方面趣味性通过游戏开发激发学习兴趣教育性伯克利名校课程设计的经典项目实践性从零开始构建完整可运行的游戏开发环境配置# 推荐使用Python 3.8版本 python --version # 安装必要的测试工具 pip install ok提示建议使用VS Code或PyCharm等现代IDE它们提供优秀的Python支持包括语法高亮、代码补全和调试功能。2. 游戏规则解析与核心函数实现Hog游戏的基本规则很简单两位玩家轮流掷骰子先达到或超过目标分数默认为100分的玩家获胜。但游戏中有几个特殊规则让策略变得有趣Sow Sad规则如果掷出的骰子中有1点本轮只能得1分Boar Brawl规则可以选择掷0个骰子得分计算公式为3 × |(对手分数十位数 - 玩家分数个位数)|Sus Fuss规则如果得分是只有3或4个因数的数则额外加上下一个质数核心函数实现def roll_dice(num_rolls, dicesix_sided): 模拟掷骰子并计算得分应用Sow Sad规则 total 0 sow_sad False for _ in range(num_rolls): roll dice() if roll 1: sow_sad True total roll return 1 if sow_sad else total骰子点数分布分析表骰子数量平均得分触发Sow Sad概率13.516.67%27.030.56%310.542.13%414.051.77%517.559.81%3. 高级规则实现与策略函数Boar Brawl规则实现def boar_brawl(player_score, opponent_score): 实现Boar Brawl规则得分计算 player_units player_score % 10 opponent_tens (opponent_score // 10) % 10 return max(3 * abs(player_units - opponent_tens), 1)Sus Fuss规则实现def is_prime(n): 检查一个数是否为质数 if n 2: return False for i in range(2, int(n**0.5) 1): if n % i 0: return False return True def sus_points(score): 应用Sus Fuss规则计算额外加分 factors sum(1 for i in range(1, score1) if score % i 0) if factors not in (3, 4): return score next_num score 1 while not is_prime(next_num): next_num 1 return next_num基础策略实现def always_roll(n): 总是掷固定数量骰子的策略 def strategy(score, opponent_score): return n return strategy4. 游戏主循环与AI对战完整游戏循环实现def play(strategy0, strategy1, update, score00, score10, dicesix_sided, goal100): 执行完整的游戏循环 current_player 0 while score0 goal and score1 goal: if current_player 0: num_rolls strategy0(score0, score1) score0 update(num_rolls, score0, score1, dice) else: num_rolls strategy1(score1, score0) score1 update(num_rolls, score1, score0, dice) current_player 1 - current_player return score0, score1进阶策略示例def make_averaged(original_function, trials_count1000): 返回一个函数的多次执行平均值 def averaged_function(*args): total 0 for _ in range(trials_count): total original_function(*args) return total / trials_count return averaged_function def max_scoring_num_rolls(dicesix_sided, trials_count1000): 找出平均得分最高的骰子数量 averaged_roll make_averaged(roll_dice, trials_count) max_score -1 best_num 1 for num in range(1, 11): score averaged_roll(num, dice) if score max_score: max_score, best_num score, num return best_num策略性能对比策略类型平均获胜率平均回合数适用场景固定掷5个骰子45%15简单测试Boar Brawl优先68%12对手分数较高时动态最优骰子数72%14通用场景Sus Fuss优化75%13长期游戏5. 测试与调试技巧编写有效的doctestdef test_roll_dice(): fixed_dice make_test_dice(3, 1, 4, 2) roll_dice(2, fixed_dice) # 3 1 4但触发了Sow Sad 1 roll_dice(3, fixed_dice) # 4 2 3 9 9 使用ok测试框架# 运行所有测试 python ok # 运行特定问题的测试 python ok -q 01 -v # 本地测试模式 python ok --local常见调试技巧使用print语句检查中间值编写小规模测试用例验证边界条件使用Python调试器(pdb)单步执行检查函数返回类型是否符合预期验证特殊规则触发条件是否正确注意当使用随机骰子测试时考虑使用make_test_dice创建确定性骰子序列这样测试结果可重复。6. 项目扩展与进阶挑战完成基础版本后你可以尝试以下扩展图形界面使用Pygame或Tkinter添加可视化界面网络对战通过socket实现双人对战功能机器学习策略使用强化学习训练AI玩家规则扩展添加新的特殊规则和计分方式性能优化建议# 使用记忆化技术优化质数检查 from functools import lru_cache lru_cache(maxsizeNone) def is_prime_cached(n): if n 2: return False for i in range(2, int(n**0.5) 1): if n % i 0: return False return True进一步学习资源伯克利CS61A课程官网提供的额外阅读材料Python官方文档中的函数式编程指南《Python编程从入门到实践》中的游戏开发章节GitHub上其他学生实现的Hog项目参考在实际教学中Hog项目通常需要6-8小时完成基础版本2-3小时进行优化和扩展。建议先完成核心规则实现再逐步添加策略和优化。

相关文章:

CS61A Week1-2 Hog项目实战:手把手教你用Python写一个骰子游戏(附完整代码)

CS61A Hog项目实战:用Python构建骰子游戏的完整指南 1. 项目介绍与环境准备 Hog是加州大学伯克利分校CS61A课程中的经典Python项目,它不仅仅是一个简单的骰子游戏,更是初学者掌握Python基础语法的完美实践平台。这个项目将帮助你巩固变量、函…...

夜神模拟器抓包微信小程序实战指南

1. 环境准备与基础配置 想要抓取微信小程序的数据包,首先得搭建好工作环境。我推荐使用夜神模拟器的安卓7版本,这个版本稳定性好,兼容性强,而且自带root权限,省去了很多麻烦。安装完模拟器后,你会发现系统已…...

别再花钱买Beyond Compare了!用WinMerge搞定二进制文件对比(附详细配置步骤)

用WinMerge实现专业级二进制文件对比:零成本替代收费工具的完整指南 在软件开发和逆向工程领域,二进制文件对比是个高频需求。无论是分析固件更新、检查软件补丁,还是进行安全审计,都需要精确识别文件间的字节级差异。虽然Beyond …...

工厂智能电表远程抄表系统C#源代码案例:实时监控与报表生成功能

工厂智能电表远程抄表系统项目,成功案例,源代码,C#语言,可监控24小时厂区总用电量波形图,单表24小时用电量波形图。 可自动导出多种不同形式excel表,厂区单月各表用电量,厂区各表电量值&#xf…...

为什么ResNet的152层比VGG16快?图解残差连接的计算优化与内存管理

为什么ResNet的152层比VGG16快?图解残差连接的计算优化与内存管理 在深度学习领域,网络深度与计算效率似乎总是一对矛盾体——直到ResNet的出现打破了这一认知。当152层的ResNet在ImageNet竞赛中以更低计算量击败16层的VGG时,整个计算机视觉…...

Gazebo传感器仿真全攻略:从摄像头到Kinect的ROS联动配置

Gazebo传感器仿真全攻略:从摄像头到Kinect的ROS联动配置 1. 传感器仿真基础与Gazebo环境搭建 在机器人算法开发中,传感器仿真是验证算法有效性的关键环节。Gazebo作为ROS生态中最强大的物理仿真平台,能够模拟真实世界中的物理特性和传感器行为…...

AI写论文宝藏汇总!4款实用AI论文生成工具,解决各类论文难题!

你是否也在为撰写期刊论文、毕业论文或职称论文而感到苦恼呢?在进行人工写作时,面对浩如烟海的文献,仿佛像是在大海中捞针。而复杂的格式要求又让人心烦意乱,反复修改的过程更是让耐心逐渐耗尽,效率低下的问题成了很多…...

自动化测试:等待方式详解

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在自动化测试中,等待是一个重要的技术,用于处理页面加载、元素定位、元素状态改变等延迟问题。等待能够确保在条件满足后再进行后续操作&a…...

XUnity.AutoTranslator:Unity游戏智能翻译插件的完整实战指南

XUnity.AutoTranslator:Unity游戏智能翻译插件的完整实战指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款专为Unity游戏设计的智能翻译插件,能够实…...

W25Q256JWEIQ 1.8V 低功耗大容量串行 NOR Flash存储器——华邦电子 全新原装芯片IC

W25Q256JWEIQ:1.8V 低功耗大容量串行 NOR Flash——华邦 SpiFlash 系列,为嵌入式系统注入节能存储芯动力 Winbond(华邦电子)推出的 W25Q256JWEIQ 256Mbit 串行 NOR Flash-存储器, 1.7V ~ 1.95V 的低电压供电、133MHz …...

低代码平台扩展性有多重要?没有这能力,迟早要重构

在企业数字化转型的浪潮中,低代码平台凭借“快速搭建、降低门槛”的核心优势,成为众多企业实现高效开发的首选工具。不少企业在低代码平台选型时,往往过度关注“开发速度”“易用性”等表层指标,却忽略了一个决定平台生命周期的核…...

终极Ventoy指南:从RAID阵列轻松启动多系统的完整解决方案

终极Ventoy指南:从RAID阵列轻松启动多系统的完整解决方案 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 你是否曾为从复杂的RAID存储阵列启动系统而烦恼?传统方法需要繁琐的BI…...

动态模型避坑指南:从事件脚本到状态图的5个常见错误及解决方法

动态模型避坑指南:从事件脚本到状态图的5个常见错误及解决方法 在交互式系统开发中,动态模型是连接用户需求与技术实现的关键桥梁。许多中高级开发者虽然掌握了UML工具的基本操作,却在真实项目交付时频繁遭遇状态机失控、事件响应异常等"…...

5分钟搞定!B站视频下载神器BilibiliDown完整使用指南

5分钟搞定!B站视频下载神器BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi…...

WPF按钮样式进阶:从字体图标到动态交互效果全解析

1. 字体图标在WPF按钮中的应用 在WPF开发中,使用字体图标替代传统图片资源已经成为提升界面美观度和性能的最佳实践。阿里巴巴矢量图标库(iconfont)是目前最受欢迎的免费图标资源平台之一,它提供了海量的矢量图标资源,…...

YOLO系列算法改进 | C2PSA改进篇 | 融合CAFR跨光谱注意力特征细化模块 | 以极低计算代价增强多光谱特征判别性,突破复杂光照与小目标检测瓶颈 | AAAI 2026

0. 前言 本文介绍CAFR(Cross-spectral Attention Feature Refinement)跨光谱注意力特征细化模块,并将其集成到ultralytics最新发布的YOLO26目标检测算法中,构建C2PSA_CAFR创新模块。CAFR是一种基于跨光谱交叉注意力的轻量级特征细化机制,通过显式的对象感知线索引导多光谱…...

Appstore 上架问题汇总--持续更新

一、Guideline 3.2.1(viii) - Business - Other Business Model Issues - Acceptable 问题: We still found the app provides loan services but the domains listed on the apps Product Pages are not clearly under your control or ownership. Since users m…...

你的Xbox手柄电量还能撑多久?解决游戏中断的电量管家

你的Xbox手柄电量还能撑多久?解决游戏中断的电量管家 【免费下载链接】XB1ControllerBatteryIndicator A tray application that shows a battery indicator for an Xbox-ish controller and gives a notification when the battery level drops to (almost) empty.…...

如何通过Jellyfin Bangumi插件实现番剧元数据的精准管理

如何通过Jellyfin Bangumi插件实现番剧元数据的精准管理 【免费下载链接】jellyfin-plugin-bangumi bgm.tv plugin for jellyfin 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-bangumi 在数字媒体管理领域,番剧作为一种特殊的内容形式&…...

ovn 配置逻辑路由器实现三层转发

本文使用ovn搭建一个三层转发的环境,拓扑图如下 image.png 两个虚拟交换机ls1和ls2,端口ip网段分别为 10.10.10.0/24和 10.10.20.0/24。 虚拟交换机上分别连接两个vm(使用namespace模拟),使用dhclient动态获取ip。 一个虚拟路由器lr1,连接两个虚拟交换机ls1和ls2,实现跨网…...

Open UI5 源代码解析之884:OverflowToolbarAssociativePopover.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\OverflowToolbarAssociativePopover.js OverflowToolbarAssociativePopover.js 深度解析 文件定位与整体价值 OverflowToolbarAssociativePopover.js 是 sap.m 库里一个非常典型的内部增强组…...

实时翻译工具Translumo:打破语言障碍的跨语言解决方案

实时翻译工具Translumo:打破语言障碍的跨语言解决方案 【免费下载链接】Translumo Advanced real-time screen translator for games, hardcoded subtitles in videos, static text and etc. 项目地址: https://gitcode.com/gh_mirrors/tr/Translumo 在全球化…...

实用高效:B站缓存视频无损转换工具m4s-converter完全指南

实用高效:B站缓存视频无损转换工具m4s-converter完全指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 还在为B站缓存视频无法在其…...

Open UI5 源代码解析之885:OverflowToolbarAssociativePopoverControls.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\OverflowToolbarAssociativePopoverControls.js OverflowToolbarAssociativePopoverControls.js 深度解析 文件定位与总体结论 OverflowToolbarAssociativePopoverControls.js 是 sap.m 里一…...

Open UI5 源代码解析之886:OverflowToolbarButton.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\OverflowToolbarButton.js OverflowToolbarButton.js 深度解析与项目作用说明 文件定位与总体价值 这个文件定义了一个控件:sap.m.OverflowToolbarButton。从代码体量看,它并不长,却属于…...

用快马AI十分钟搭建班级宠物园应用下载页,快速验证教育产品原型

最近在帮小学老师朋友设计一个班级宠物园应用,想快速验证这个教育产品的可行性。传统开发流程太耗时,于是尝试用InsCode(快马)平台的AI生成功能,十分钟就搭出了可交互的下载页原型。分享下具体实现思路: 需求拆解与框架搭建 先明确…...

数字资产管理问题的创新解法:WeChatMsg的本地化数据主权实现

数字资产管理问题的创新解法:WeChatMsg的本地化数据主权实现 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

Win11Debloat深度解析:让Windows重获新生的系统优化神器

Win11Debloat深度解析:让Windows重获新生的系统优化神器 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

2025最权威的五大AI论文方案推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作跟内容创作的领域当中,要降低AI生成内容的可被检测出来的概率&#xf…...

2026届必备的六大AI科研神器解析与推荐

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 步入人工智能生成内容越来越普遍的大环境里,把文本的机器感给降低变成了提高可读…...