简单的布景游戏演示。

skyzyx-set-game-demo的Python项目详细描述


游戏

核心概念

  • 每个卡都有4个属性:颜色、形状、阴影和数字。
  • 牌组是所有 牌的集合。
  • 牌组 的一个子集,仅包含 正在播放中。
  • a 集合 是三张满足特定条件的卡的集合 (下文讨论)。当在 板上的play中找到 集合 时, set 将从播放中删除,并按原样记录。
  • 游戏 封装了所有这些概念并跟踪 它们。

游戏规则

每张卡上都有一个带有4个正交属性的图像:

  • 颜色(红色、绿色或紫色)
  • 形状(菱形、波浪形或椭圆形)
  • 阴影(实心、空或条纹)
  • 数字(1、2或3)

如果对于每个 属性,值 完全相同或完全不同。

例如:

  • "两个红色固体蠕动","一个绿色固体菱形", "三个紫色实心卵形"将构成一个 集合。(数字、形状和 颜色不同,底纹相同)
  • "两个红色固体蠕动","一个绿色固体蠕动", "三个紫色实心卵形"不会构成一个集合,因为形状 两张卡相同,但第三张不同。
  • "set"的一个游戏开始于12张牌,面朝上。当A 玩家看到三张牌组成一套牌,他们大叫"套!"和 抓住 。新卡 牌组 处理以替换 它们。
  • 如果没有玩家能找到一个 牌组,则再发三张 牌 15,然后18,然后21…
  • 牌组中没有 牌时, 游戏结束,并且 不 设置表的左边。得分最多的选手获胜。

游戏要求

您的任务是在代码中对 游戏建模,并实现以下内容 方法:

  • 一种方法,它接受三张牌,并确定三张牌 设置
  • 一种给一个 卡的 的方法m>将找到一个 集合, 或者确定表上没有 集合
  • 一种方法,从开始到 结束,并返回从 电路板

对于最后一种方法,将有多个正确的解决方案,但是 有效的 集合列表是可以的。

假设

< Buff行情> "如果对于每个属性,值 完全相同或完全不同。"

这句话措辞含糊不清,所举的例子使我相信 以下是对规则的更具体的描述。

  • 拿三张卡片,逐一查看它们的属性。
  • 如果所有卡对该属性或所有卡都有不同的值 对于该属性具有相同的值,则它可以是一个集合。
  • 如果步骤2的任何属性未通过测试,则该组不是 SET.

问题参数

  • 此问题使用数学组合(与 排列 )。这将产生81个组合( 3^4 )。
  • 如果未能成为集合,则表示该组不是集合,因此 尽早失败并继续前行。

逻辑

(而" 组合"指的是数学上的 概念)

  1. 通过确保每张卡 唯一,并且所有属性的 组合都被表示出来。 另外,默认情况下,洗牌组。
  2. 板发12张卡
  3. 计算 板上卡的所有可能的 组合 三人一组。
  4. 对每个 组合进行迭代,应用逻辑来确定 或者这个 组合不代表 集合
  5. 通过移除确定为 a 集合的一部分
  6. 当找不到更多的 集时,从 甲板
  7. 重复步骤3–6,直到 牌组 为空。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java按钮/网格布局   java列出Google日历中的所有事件   java无效:单击API publisher test按钮后连接到后端时出错   带有内部赋值的java While循环导致checkstyle错误   java为什么trimToSize/ensureCapacity方法提供“公共”级访问?   文件输出流的java问题   ListIterator和并发修改异常的java问题   java如何使用两个URL映射   无法识别使用“./../”构造的字符串java相对路径,为什么?   首次写入remotelyclosedsocket不会触发异常,对吗?JAVA   java OneDrive REST API为文件上载提供了400个无效谓词   Java泛型、集合接口和对象类的问题   OpenSSL Java安全提供程序   jmeter java运行jmx禁用操作