第一部分
- 下载这个小项目的程序模板并回顾card类的定义。这个类已经执行了所以你的任务是自己熟悉下代码。开始,通过粘贴card类定义到程序模板中并验证我们的代码如预期那样工作。
- 实现“__init__,__str__,add_card方法在Hand类里面。我们建议建模hand作card列表对象,啥呢,存储在Hand对象的域里面。__init__类函数应该复位Hand对象来有一个空的card对象列表。add_card应该添加一个card对象到cards列表里面。__str__函数应该返回一个代表Hand对象在一种可以人类阅读的方式的字符串。
为了帮你实现__str__函数,回去看看the solution的第四个问题在week 5a的练习题。记得使用字符串函数对Card对象来将每张卡片在手牌卡片列表转变成字符串。(不要在add_card里面将一张card对象转换成字符串来让你的字符串函数工作)一旦你应用Hand类,用测试模板来测试一下。 - Deck类的实现方法已经列在mini_project的模板中了。我们建议以列表的形式表达一副牌。你可以形成这个列表使用一对嵌套的for循环或者一个列表比较。记得使用Card初始化来创建你的卡片,使用random.shuffle()来洗牌。一旦你完成了Deck类,使用提供的测试模板测试你的Deck类,记得洗牌后deck变成随机的了,所以输出,测试模板应该在形式上但不需要在准确的数值对应备注里面的输出。
- 完成”Deal"的handler啥呢,洗牌并给庄家和玩家各两张牌。事件handler deal对应这个按钮应该洗牌(以全局变量的形式存储),创建新玩家和庄家(以全局变量的形式存储),并加给他们两张牌。为了从一叠牌里面发一张牌给到人家手里,你应该联合使用Deck类里面的“deal_card" 函数和Hand类里面的add_card函数。hands的结果应该被打印到控制台待遇合适的信息表明哪只手是哪个。
- 实现Hand类里面的get_value函数。你应该使用提供的VALUE字典来查找单张卡片的值用视频里面的逻辑对这个项目来计算手牌的值。一旦你完成了get_value函数,利用提供的测试模板来测试一下。
- 完成”Hit"按钮。如果手牌小于等于21,点击这个按钮添加一个额外的卡片到玩家手中。如果按hit后值超过21,打印“你爆了”
- Remember the dealer wins ties in our version.完成“Stand"按钮。如果玩家爆了,提醒玩家他已经爆了。否则,再次点击dealer直到他的手牌是17或者更大(使用while循环),如果庄家爆了,要让玩家知道。否则,比较玩家和庄家手牌的数值。如果玩家的手牌低于或等于庄家的手牌,庄家赢。否则玩家赢,记得在我们的版本里面庄家赢得领带。
在我们的blackjack版本中,当游戏开始的时候一手牌自动的发给玩家和庄家。尤其,在复位的时候程序模板包含一个调用deal()函数。在这一点上,我们建议测试你的普遍的执行balckjack
第二部分
在第二部分,你将添加5个特写。包括用全局变量画,记得复位这些变量来适当的值(就好像创建空白的手牌给玩家和庄家)在开始框架之前
- 完成你自己的draw函数对于hand类用draw函数,啥呢,card类里面的draw函数。我们建议画手牌作水平卡片序列在哪呢,pos参数位于左上角最左边卡片,为了简化你的代码,呢可以假设只有前五张玩家的手牌在画布上是可见的。
- 通过画文本信息到画布上代替打印到控制台,我们建议添加一个全局outcome字符串变量啥呢使用draw_text在draw handler里面。这些信息应该提供给玩家去要求一些行为并且有类似“Hit or stand"和”新牌?“.另外,画出游戏的标题”balckjack"在画布的任意位置。
- 使用全局变量in_play添加逻辑来跟着是否玩家的手牌仍然在玩,如果仍然在玩,呢应该画出一个卡片的背面图案(模板有提供)超过庄家的第一个(hole)卡来隐藏它。一旦回合结束,庄家的牌应该被揭示
- 添加一个计分跟踪输赢次数,我们演示的是最简单的情况,程序显示出赢得次数减去输得次数。当然,你也可以制作花哨一点的计分系统
- Modify the logic for the "Deal" button to create and shuffle a new deck (or restock and shuffle an existing deck) each time the "Deal" button is clicked. This change avoids the situation where the deck becomes empty during play.修改“deal"按钮的逻辑来创建并洗一副新牌(或者重新进货并且洗一副已经存在的牌)
- Finally, modify the
deal
function such that, if the "Deal" button is clicked during the middle of a round, the program reports that the player lost the round and updates the score appropriately.最后,修改deal函数,如果”Deal"按钮在回合中已经按了,程序报告玩家输了这局并且合适的更新比赛分数。
恭喜!你已经建立了黑杰克,为了包裹起来,请回顾我们视频里面的演示版本,包装你的版本功能全面。
Grading rubric - 18 pts total (scaled to 100)
你一定要执行黑杰克最简单的规则。跟我们的版本小小的不同是可以接受的,比如显示手牌的值或者加入下注系统。但你不要更改游戏的逻辑系统。在提交日期结束以后,欢迎提交你的加强版黑杰克比如添加双倍下注。
- 1 pt - 程序在画布上显示“Blackjack”
- 1 pt - 控制区域显示三个按钮(“Deal","Hit"和”Stand“)
- 2 pts - 程序用图片形式生动的显示玩家的手牌。(1 pt如果文本显示在控制台)
- 2 pts - 程序生动的显示庄家的手牌使用卡片图片。庄家的卡片全部向上是允许的当计算子弹的时候
- 1 pt - 庄家的底牌是隐藏的直到本局结束。在这局结束后,把他翻过来
- 2 pts - 按”Deal"会发两张陪给玩家和庄家。(一方得1 pt)
- 1 pt - 在一回合中按“Deal"按钮会导致玩家这局失败。
- 1 pt - 按”Hit"按钮给玩家再添一张牌。
- 1 pt - 按“Stand"按钮必要的情况下加一张牌给庄家。
- 1 pt - 程序准确的识别玩家是否爆了。
- 1 pt - 程序准确的识别庄家是否爆了。
- 1 pt - 程序正确的计算手牌值并且宣布胜利者。基于消息来评估。
- 2 pts - 程序准确的提供玩家和信息”Hit or stand?"和“New deal?"(1 pt没个信息)
- 1 pt - 程序以计分形式正确的反应输赢次数。这部分计分可以宽松一点
hand类怎么做。停牌以后庄家底牌揭示。爆了以后庄家底牌揭示,显示“You went bust and lose". Deal相当于重新开始,hand要实现什么效果?什么功能?视频里面有么?有几个参数,fild是啥,codeclinic
连续两个mini project没搞定了。现在再怎么悔恨也没用,上周重感冒一整周,从周日爬山开始回来就重感冒了,现在已经周二,八天了,仍然有点流鼻涕,还有点咳嗽,还有点痰,有点想做一个个人电子病历本,就好像记账有随手记一样。这个貌似是我的独特想法?百度了一下好像没人做呢。黑杰克这个project连URL都没有提交,其实简单的还是能够得1分的,怎么办?姜鸿说碰到class类就不学了,姜鸿说全文翻译没用,也有点道理,挑重点的翻译吧,能理解就行。无论如何也要提交URL,尽量完成这门课,编程并不是青春饭,我在微信公众号上看到了一篇文章,虽然学习碰到了一点困难,知乎上有给出新的参考书目,我们还要尝试,加油,我的挣扎不漂亮,我要挣扎。这周开局不错,今天才星期二,quiz已经完成了。看看下班前能不能尽量把相关信息翻译完。看看自己的博客,已经写了4篇,我坚持了一个月,加油!上周经常从早上就开始忙,然后一忙就是一整天,但是我真正高效率的时间是上午,等我忙完已经下午了,这时候我再学python效率就不高了,不理解的时候经常有挫败感,所以本周我尽量把工作内容放在下午,上午的时候用来学习python,效果不错,今天周二,我已经连蒙带唬把quize完成了。这个经验很好。司马迁的《史记》并不是太史公的工作内容,但是《史记》流传千古,所以去做自己真正想做的事情吧。《小强升职记》说将任务放在篮子里,专注把手头的任务完成,这样才井井有条,这个我执行了一次,感觉很不错,“2分钟内能完成的事情,马上去完成”这个还没执行,应该也是很有道理的。下午的时间如何利用,现在还没找到规律。 - 本周的主要任务:半程马拉松;完成spaceship,起码要提交URL,健身胸背肩。我还记得自己的承诺,每周一篇博客,超过800字。记录自己的挣扎。
- 上周日去爬东莞银瓶嘴,好久好久没爬山了,久违的云雾缭绕,就是人太多了,不过有个基友一起,感觉还是很不错的,希望有空收集些新路线报给登山会长参考。
时间: 2024-10-07 06:47:37