【问题标题】:Creating a two-player memory matching game in python在 python 中创建一个两人记忆配对游戏
【发布时间】:2019-10-17 17:51:53
【问题描述】:

我正在用 python 开发一个两人记忆配对游戏。游戏应该有一个 6x6 网格,隐藏数字从 1 到 18。玩家将指定他们两次猜测的行和列,如果匹配,玩家将获得一分奖励。并且同一玩家将继续。如果 2 次猜测不匹配,则下一位玩家继续。每回合程序都应该询问玩家是否要继续。最后程序应该显示每个玩家的总对数。

到目前为止,这就是我所做的工作,我知道这并不多,我希望能得到一点帮助。


x = "▫️️"

answerGrid = [['a  ', 'z  ', 'p  ', 'i  ', 'z  ', 'o  '],
              ['x  ', 'x  ', 'f  ', 'l  ', 'u  ', 'h  '],
              ['d  ', 'd  ', 'l  ', 'o  ', 'p  ', 'f  '],
              ['c  ', 'i  ', 'm  ', 'a  ', 'h  ', 'g  '],
              ['y  ', 'u  ', 's  ', 'b  ', 'y  ', 'k  '],
              ['g  ', 'm  ', 'c  ', 'k  ', 's  ', 'b  ']]

blankGrid = [[x, x, x, x, x, x],
             [x, x, x, x, x, x],
             [x, x, x, x, x, x],
             [x, x, x, x, x, x],
             [x, x, x, x, x, x],
             [x, x, x, x, x, x]]

guesses = 0
guess1 = "  "
guess2 = "  "
option = 0
emptySpaces = 0
correctGuesses = []
rowsAvailable = ["a", "b", "c", "d", "e", "f"]
colsAvailable = ["1", "2", "3", "4", "5", "6"]
cont = 0

【问题讨论】:

    标签: python matrix grid


    【解决方案1】:

    我可能会先让网格易于使用。以这段代码为例:

    grid_width = 6
    grid_height = 6
    grid_dimensions_product = (grid_width * grid_height)
    
    if grid_dimensions_product % 2 != 0:
        raise ValueError("Product of grid dimensions must be divisible by two!")
    
    number_of_pairs = grid_dimensions_product // 2
    
    print(f"For a {grid_width}x{grid_height} grid, you'll have {number_of_pairs} pairs.")
    

    输出:

    For a 6x6 grid, you'll have 18 pairs.
    

    通过这样的设置,我们可以随时更改网格的尺寸,以便为游戏引入更多多样性。对的数量将即时计算,这是可取的,因为我们不喜欢硬编码。但是,网格尺寸必须始终相乘才能产生可​​被 2 整除的乘积。这是一个要求,因为否则我们可能会得到足够的对(网格上没有匹配对的位置) - 例如,一个 5 x 5 的网格将有 12 个对,所以总共只有 24 个数字。这就是 if 语句存在的原因。这是相同的代码,但网格尺寸无效:

    grid_width = 5
    grid_height = 5
    grid_dimensions_product = (grid_width * grid_height)
    
    if grid_dimensions_product % 2 != 0:
        raise ValueError("Product of grid dimensions must be divisible by two!")
    
    number_of_pairs = grid_dimensions_product // 2
    
    print(f"For a {grid_width}x{grid_height} grid, you'll have {number_of_pairs} pairs.")
    

    输出:

    ValueError: Product of grid dimensions must be divisible by two!
    

    一旦我们有了number_of_pairs,我们就可以生成一个隐藏数字列表,稍后我们将使用它来填充我们的网格:

    hidden_numbers = list(range(1, number_of_pairs + 1)) * 2
    print(hidden_numbers)
    

    请记住,range 是专有的。如果我们想要包含 1-18 的数字,我们必须在我们范围的唯一末尾添加 +1。我们将范围变成一个列表,然后将列表乘以 2,这样我们就得到了 1-18 的数字,两次:

    输出:

    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18]
    

    现在,我们必须洗牌隐藏的数字。在代码的顶部,写:

    from random import shuffle
    

    导入shuffle 函数。它接受一个列表作为参数,并在适当的位置打乱其内容。

    hidden_numbers = list(range(1, number_of_pairs + 1)) * 2
    shuffle(hidden_numbers)
    
    hidden_number_iter = iter(hidden_numbers)
    
    grid = []
    
    # Generate the grid
    for y in range(grid_height):
        row = [next(hidden_number_iter) for x in range(grid_width)]
        grid.append(row)
    
    # Print the grid
    for y in range(grid_height):
        print(grid[y])
    

    洗牌后,我们创建了 hidden_numbers 列表的迭代器。这将使我们能够轻松地从我们的洗牌列表中获取“下一个”隐藏号码。如果您不熟悉迭代器,这里有一个迭代器行为的简单示例:

    >>> my_list = ["A", "B", "C"]
    >>> my_list_iterator = iter(my_list)
    >>> next(my_list_iterator)
    'A'
    >>> next(my_list_iterator)
    'B'
    >>> next(my_list_iterator)
    'C'
    >>> next(my_list_iterator)
    Traceback (most recent call last):
      File "<pyshell#34>", line 1, in <module>
        next(my_list_iterator)
    StopIteration
    >>> 
    

    当我们最终打印出我们的网格时,它看起来像这样:

    [9, 1, 2, 14, 18, 8]
    [15, 4, 3, 16, 16, 2]
    [12, 11, 6, 1, 17, 13]
    [17, 7, 5, 5, 13, 4]
    [6, 12, 10, 14, 18, 7]
    [3, 15, 10, 9, 11, 8]
    

    每次您重新启动脚本时,您的隐藏号码列表都会以不同的顺序出现。这是整个脚本:

    from random import shuffle
    
    grid_width = 6
    grid_height = 6
    grid_dimensions_product = (grid_width * grid_height)
    
    if grid_dimensions_product % 2 != 0:
        raise ValueError("Product of grid dimensions must be divisible by two!")
    
    number_of_pairs = grid_dimensions_product // 2
    
    hidden_numbers = list(range(1, number_of_pairs + 1)) * 2
    shuffle(hidden_numbers)
    
    hidden_number_iter = iter(hidden_numbers)
    
    grid = []
    
    # Generate the grid
    for y in range(grid_height):
        row = [next(hidden_number_iter) for x in range(grid_width)]
        grid.append(row)
    
    # Print the grid
    for y in range(grid_height):
        print(grid[y])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      相关资源
      最近更新 更多