纸牌project
- 用range[0,8)的列表表示牌,这些数字要出现两次。我们建议你通过连接两个range[0,8)的列表来创建这个list.利用Docs来安排列表串联操作
- 写一个draw handler啥样的draw handler呢?用for循环来迭代Memory deck,并用draw_text在画布上画出表示每个卡片的数字。结果应该是一个水平均等间隔的数字序列画在画布上
- 用random.shuffle()来洗牌。在洗牌之前记得消灭你canvas drawing代码的bug,这样的话消灭bug会比较容易一点
- 然后,修改draw handler来或者画一个空白的绿色矩形或者卡片数值。为了执行这个行为,我们建议你建立第二个叫做exposed的list。在这个exposed列表里面,这个ith应该是True如果ith卡片朝上,并且它的值是可见的;值是False如果ith卡片朝下并且它的值是隐藏的。我们建议你初始化exposed在一些已知的数值当测试你的drawing代码用这种修饰
- 现在,添加函数来确定你已经用鼠标点击了哪张卡片。添加一个鼠标点击event handler,这个函数有鼠标点击的位置并在控制台打印出你已经点击的纸牌的索引。为了简单的确认你已经点击了哪张卡片,我们建议用标准的画布,这样的话这一系列的卡片可以完整的填充画布。
- 修改鼠标点击的event handler以达到根据鼠标点击的位置来翻转卡片的目的。如果玩家点击第i张卡片,你可改变exposed[i]的值,从False改成True。如果卡片已经揭露了,你应该忽略鼠标点击。在这一点上,这就是这个游戏的基本构造。
- 现在你要添加游戏逻辑到鼠标点击handler里面为了选择两种卡片并确认他们是否是一对。我们建议跟随模板里面的游戏逻辑。状态0对应游戏开始的状态,在状态0,如果你点击一个没被揭露的卡片,那卡片就被揭露了,并且你转换到状态2.状态2对应一个turn结束了。在状态2,如果你点击一个没被揭露的卡片,那卡片就被揭露了并且你转换到状态1.
- 记得在状态2的情况下,你也要决定是否之前的两对卡片是一对的或者不是一对的。如果他们不是一对的,你要把它们翻转回去,这样的话他们就被隐藏起来了在移动到状态1.我们建议你使用两个全局变量来存储每两张卡片的索引,啥索引呢,我们之前的turn点击
- 添加一个计数器干啥的呢?用来跟踪回合次数并用set_text来更新这个计数器作为一个控制面板里面的标签。
- 最后,执行new_game()功能(如果你还没)这样的话“Reset"按钮可以洗牌,重置回合计数器并重新开始游戏。开始的时候所有的卡片是隐藏的。
- (可选)你可以替换 draw_text对每张卡片通过draw_image用一个里面的8个不同图片。
一旦按了开始按钮,游戏应该开始。你不用按”Reset"来开始。一旦游戏结束,你要按“Reset"来重新开始游戏。
尽管这个游戏开始可能觉得挺难的,我们完整的代码包含注释和空格不到100行。如果你觉得有难度,集中注意到第六步。我们的经验是,在这个点上,你将开始看的你的游戏组装起来了,接下来就更简单了。
评分标准
- 1 pt - 游戏正确的在画布中画出16张卡片(水平,或者栅格)。使用图像代替文本数字比较好,但是提交者有责任确保能加载图片
- 1 pt - 卡片是8对
- 1 pt - 游戏忽略点击已经揭示的卡片
- 1 pt - 游戏开始的时候,点击一张卡片,卡片可以被揭示
- 1 pt - 如果一张没配对的卡片被揭开了,点击第二张没被揭示的卡片,这第二张卡片应该被显露出来
- 1 pt - 如果两个没配对的卡片被揭露出来,点击一个没被揭露出来的卡片,这张卡片可以被揭露出来并且没配对的两张卡片翻转过去。
- 1 pt - If all exposed cards are paired, a click on an unexposed card exposes the card that was clicked on and does not flip any other cards.如果所有的卡片都配对了,点击到一个没配对的卡片会揭露这张被点击的卡片,其他已经配对的不会被翻过去。
- 1 pt - .配对的卡片通过一个循环里面的两次点击以被揭露的状态保留知道开始下一次游戏。
1 pt - 游戏 在控制区域以标签的形式 正确的更新并显示当前的游戏回合次数。计数器要在一个回合里面增加在第一或者第二张卡片翻转过来
- 1 pt - 这个游戏包含一个“Reset"按钮,这个Reset按钮可以重置回合计数器并且重置这个游戏
- 1 pt - 每次按Reset,8个数字序列也要洗牌,所以每次纸牌顺序都不
Tip #1
你们许多人想要使用16个if语句来控制每个可能的卡片位置在画布上。别那么做。学习如何使用for loops循环,例如,下面的代码是一个比较好的开端来画卡片
for c in cards:
canvas.draw_text(str(c), pos, ....)
pos[0] += ...
0votes received.
Joe WarrenINSTRUCTOR· 20 days ago
Tip #2
在你的鼠标点击handler里面,你要确定你已经点击了哪张卡片。不要在这使用一个长长的 if/elif/else陈述。通过pos[0]//50计算卡片的序列.你之后也可以利用这个序列,当操作显露出来的list,显露出来的list是永康控制是否一个卡片被画出或者没被画出。
0votes received.
Joe WarrenINSTRUCTOR· 20 days ago
Tip #3
但你接近完成这个项目的时候,当你从状态2过度到状态1的时候你将需要决定是否两张卡片是一对。这的关键是记录两张卡片的目录,啥呢,最后一个回合里面点击的(在两个独立的变量)所以你可以在下一个回合里面测试是否他们的数字是相等的
0votes received.
def draw(canvas):
cards = range(0,8)
cards.extend(cards)
random.shuffle(cards)
for c in cards:
canves.draw_text(str(c), (pos[0],50), 12, "White")#canvas少写了个a
pos[0] += 50#报错了,用简化模式试试看
下面的好的
def draw(canvas):
cards = range(0,8)
cards.extend(cards)
random.shuffle(cards)
pos = [10, 70]
for c in cards:
canvas.draw_text(str(c), (pos), 60, "White")
pos[0] += 50
线宽50--48
我画出了第一个绿色矩形,如何画16个呢,画出来了但是不清楚是否正确,我的边缘是黑色的,而且数字在一直闪
==========================================================================================
def draw(canvas):
cards = range(0,8)
cards.extend(cards)
random.shuffle(cards)
pos = [10, 70]
posa = 25
exposed = [True, False,False, False,False,False, False,False,False, False,False,False,False,False,False, False]
for c in cards:
canvas.draw_text(str(c), (pos), 60, "White")
pos[0] += 50
canvas.draw_line((posa, 0),(posa, 100), 48, "Green")
posa += 50
===============================
根据参考答案,数字不闪了
这个任务估计是做不完了,因为没时间,为啥没时间?因为上周的时间都被浪费了,有很多意外,都有啥意外?
昨晚头痛(接到猎头电话高兴过头了?);调部门的事情也让我心情不太好,周日去姑姑那没学习,约会3次。补考勤的事情也花了很长时间。有一天健身花了一个多小时。看北大的课程刷了一整晚,明天要去爬山,
这一周经常感觉看视频的进度很慢,在quiz上浪费了太多时间。
下周该怎么做呢?这个任务该怎么办呢?
首先,上午的时间一定要安排给coursera,尽量排除其他事情的干扰,我能漂亮的完成一门课程已经不错了,不要好高骛远。即使是紧急的事情也要清楚我的最重要的任务是什么。用最好的时间研究视频,跟着视频敲代码,一段段的敲,不要全部看完再敲,会忘记的,迅速过一遍视频,然后做quie,quize不要花太多时间,超过80分就赶快着手mini project
对于本次任务,我已经提交了一个狗屎版本,我一定要自己写出来,
我又一次fail了,但是我还要挣扎,还要再次站起来
纸牌project的更多相关文章
- C语言-纸牌计算24点小游戏
C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...
- Code Project精彩系列(转)
Code Project精彩系列(转) Code Project精彩系列(转) Applications Crafting a C# forms Editor From scratch htt ...
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- ASP.NET Core project.json imports 是什么意思?
示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...
- PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...
- CSharpGL(20)用unProject和Project实现鼠标拖拽图元
CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
随机推荐
- [译]C#控制管理VisualSVN Server
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- Java Hour 50 日期类型
Plan List: 1 Java 中的日期类型 2 mysql 相关 3 java code style 鉴于本问题太过普通,所以参考文章满大街都是,因此本文内容基本为转载和验证. java.sql ...
- javaWeb项目中web.xml的xsd( XML Schemas Definition)文件
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://w ...
- 利用SQLiteOpenHelper来管理SQLite数据库 (转)
转载自 利用SQLiteOpenHelper来管理SQLite数据库 http://blog.csdn.net/conowen/article/details/7306545 Android学习笔记( ...
- 获取表信息(MSSQL)
涉及到的系统表汇总 sys.databases sys.objects sys.indexes sys.tables sys.columns sys.data_spaces sys.partition ...
- php二位数组合并
转自:http://www.cnblogs.com/losesea/archive/2013/06/14/3134900.html 题目:有以下2个二维数组 1$a=Array(0 => Arr ...
- 手持扫描打印终端POS机应用商场零售批发移动销售开单
无线开单系统,通过此无线开单系统,使用者可以进行日常的盘点.开单等作业.与进销存软件实时对接,可以提供给使用者即时.准确的库存数量.商品价格等信息.手持系统易上手.一次配置即可使用,极大的方便了使用者 ...
- mysql之对索引的操作
1. 为什么使用索引? 数据库对象索引与书的目录非常类似,主要是为了提高从表中检索数据的速度.由于数据储存在数据库表中,所以索引是创建在数据库表对象之上的,由表中的一个字段或多个字段生成的键组成,这些 ...
- 简单几何(线段覆盖) POJ 3347 Kadj Squares
题目传送门 题意:告诉每个矩形的边长,它们是紧贴着的,问从上往下看,有几个还能看到. 分析:用网上猥琐的方法,将边长看成左端点到中心的距离,这样可以避免精度问题.然后先求出每个矩形的左右端点,然后如果 ...
- LightOJ1422 Halloween Costumes(区间DP)
题目大概是依次有n场派对,每场派对都有需要穿某套衣服去参加,可以同时穿多套衣服,就是一套套着一套,如果脱了的话就不能再穿上那套了,问最少需要几套衣服去参加完所有派对. 区间DP: dp[i][j]第i ...