我怎样才能得到这个python内存gam

2024-09-26 22:11:58 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我到目前为止的代码,我的老师希望游戏在你猜到一个数字时“翻转X”,当它们匹配时,保持不变,但当数字不同时,数字“翻转”并再次成为X。他想让游戏在所有数据都被曝光的时候说“你赢了”。在

import random

visual=[['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']]
data=[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]


random.shuffle(data[0])
random.shuffle(data[1])
random.shuffle(data[2])
random.shuffle(data[3])
random.shuffle(data[4])


while True:


print(visual[0])
print(visual[1])
print(visual[2])
print(visual[3])
print(visual[4])


   user_input_1 = int(input('enter a number 0 thru 4 to pick your first X position: '))

    user_input_2 = int(input('enter a number 0 thru 4 to pick your first Y position: '))
    user_input_3 = int(input('enter a number 0 thru 4 to pick your second X position: '))


user_input_4 = int(input('enter a number 0 thru 4 to pick your second Y position: '))


if data[user_input_1][user_input_2] == data[user_input_3][user_input_4]:
    visual[user_input_1][user_input_2] = str(data[user_input_1][user_input_2])
    visual[user_input_3][user_input_4] = str(data[user_input_3][user_input_4])

    print(visual[0])
    print(visual[1])
    print(visual[2])
    print(visual[3])
    print(visual[4])
    print('Congratulations you won the game!')
    break

Tags: tonumberinputyourdatapositionrandomint
2条回答

关于您的代码的一些建议:

  1. 由于您经常显示板,您可能希望编写一个单独的函数,该函数将变量^{{cd1>}作为输入并打印内容。然后,您可以调用函数,而不是编写所有这些^{cd2>}语句。
  2. 在当前代码中,您只在匹配时显示卡。玩记忆游戏的全部策略之一是,如果你翻倒两张牌,比如看“5”和“2”,那不是比赛,但如果你翻倒了一副新牌,其中一张是另一张“5”,你可能会记得前一轮你翻倒了第一张“5”,因此知道如何进行比赛。所以,您可能应该这样做:在选择第一张卡后更新并显示^{cd1>,然后对第二张卡执行同样的操作。如果有匹配,请按原样保留^{cd1>}。如果它们不匹配,那么用“X”替换两个点,然后返回到循环的顶部。
  3. 你的代码似乎认为一场比赛是“胜利”。所有的牌都配好了,难道不应该认为是赢的吗?在这种情况下,您可以通过检查^{{cd1>}中的任何地方是否显示“X”来跟踪上一步。如果没有,那意味着所有的牌都被揭穿了,因此玩家已经赢了。

以下是我所理解的游戏中的离散步骤:

  1. 初始化电路板和数据。在
  2. 洗牌数据
  3. 进入循环
  4. 打印电路板
  5. 询问用户的第一个猜测
  6. 询问用户的第二个猜测
  7. 打印带有分隔缝的板
  8. 如果用户漏掉了,把它们盖起来
  9. 检查获胜条件(所有信息都显示出来了?)在
  10. 回圈或打印获胜

您的代码成功地初始化了电路板(步骤1),洗牌数据(2),输入循环(3),打印电路板(4),并询问猜测(5)(6)。在

以下是一些关于您缺少的部分的指导:

  • 在得到输入后,您总是希望打印带有分隔缝(7)的板。要做到这一点,你需要先用你写的文章更新视觉效果:

    visual[user_input_1][user_input_2] = str(data[user_input_1][user_input_2])
    visual[user_input_3][user_input_4] = str(data[user_input_3][user_input_4])
    

    然后打印你的图像。这不需要在if语句中发生,因为您总是希望打印显示的板。

  • 之后,如果用户未命中(8),则需要将其交换回X。你基本上已经写了这个条件。您需要检查数据板中是否有误,如果是,请将这些图像交换回X:

    ^{pr2}$

    旁注:理想情况下,您需要清除先前的板印,以测试内存。这部分有点棘手。没有简单的方法可以在不使用操作系统命令的情况下清除分隔缝的打印,这些命令几乎肯定超出了类的范围。我会和你的老师商量一下翻身的期望值。在

    如果您对如何使用Python中的操作系统命令实现这一点感兴趣,here是一篇相关的StackOverflow帖子。你需要导入操作系统和导入时间。打印显示后,使用time.sleep(number_of_seconds)给用户多少秒的时间来记忆位置,然后使用操作系统对于linux/mac os或操作系统('CLS')供windows清除屏幕。再说一遍,这不太可能是你老师想要的。

  • 现在让我们来处理获胜条件(9)。当前您正在使用“while True:”并暂停。虽然在这种情况下这可能是功能性的,但是应该尽量避免使用“whiletrue:”(有很多原因可以解释为什么here是一篇针对一个原因的帖子)。像“while”、“do while”和“for”这样的循环结构具有内置的停止条件,每次循环时都会检查这些条件。在这个程序中,你的停止条件是棋盘完全暴露(这就是你如何知道游戏结束,用户不再需要猜测)。所以,在这之前,你希望while循环继续运行。如下所示:

        while #win condition is not met#:
            #stuff you want to loop#
        #congrats, you have met your win condition# 
    
  • 有多种方法可以检查您的获胜条件尚未满足。一种选择是,如果视觉板与数据板仍不相同,则您知道您尚未获胜:

        while visuals != data:
            #stuff you want to loop#
        print(congrats....)
    

总之,TLDR:

import random
visuals = [...]
data = [...]
    #shuffle
    while visuals != data:
        #print visuals
        #get input
        #update the inputted visuals with reveals
        #print visuals with reveals
        if #not a match:
            #update the inputted visuals back to X's
    print("Congratulations you won the game!")

如果您感兴趣的话,还有一些小的地方可以改进您的代码:对缩进非常警惕,do-while循环在这里更合适(您能想出原因吗?),您可以编写函数和循环,以减少大量重复代码(如打印视觉效果时)。但这对你来说已经足够了。在

相关问题 更多 >

    热门问题