【问题标题】:Python game's world generation odd outputPython游戏的世界生成奇数输出
【发布时间】:2014-09-11 05:07:05
【问题描述】:

我一直在制作 rougelike 游戏,在保存随机生成的世界时遇到了问题。

以下代码:

import random import pickle

size = 6 
a = [["WHAT"]*size for x in xrange(size)] 

def make():
    for x in range(0, size):
        for z in range(0, size):
            a[x][z] =  random.choice(["T","G", "S", "M"]) 

def save():
    try:
        pickle.dump( a, open( "save.p", "wb" ) )
    except:
        print "Error" 

def load():
    a = pickle.load( open( "save.p", "rb" ) ) 

def printworld():
    for x in range(0, size):
        print""
        for z in range(0, size):
            print a[x][z],
            print "", 

make() 
printworld() 
save() 
print""

make() 
printworld() 
print"" 
load() 
printworld()

输出以下内容:

G  G  T  M  M  S   
T  G  G  G  T  G   
T  M  S  G  M  M   
G  S  M  S  M  S   
M  S  T  M  G  T   
M  G  G  T  G  S  

G  G  S  T  T  S   
S  M  G  G  S  G   
T  M  S  G  T  M   
S  M  S  T  G  G   
M  T  S  G  M  S   
G  G  S  G  M  S  

G  G  S  T  T  S   
S  M  G  G  S  G   
T  M  S  G  T  M   
S  M  S  T  G  G   
M  T  S  G  M  S   
G  G  S  G  M  S

什么时候应该有输出:

G  G  T  M  M  S   
T  G  G  G  T  G   
T  M  S  G  M  M   
G  S  M  S  M  S   
M  S  T  M  G  T   
M  G  G  T  G  S  

G  G  S  T  T  S  
S  M  G  G  S  G   
T  M  S  G  T  M   
S  M  S  T  G  G   
M  T  S  G  M  S   
G  G  S  G  M  S  

G  G  T  M  M  S   
T  G  G  G  T  G   
T  M  S  G  M  M   
G  S  M  S  M  S   
M  S  T  M  G  T   
M  G  G  T  G  S

【问题讨论】:

  • 您能否指出这两个输出之间有什么不同,特别是当前输出有什么问题?它们看起来有些微妙的不同,但我不确定你在期待什么。
  • Cyber​​: 代码 print "", make() printworld() save() print"" make() printworld() print"" load() printworld() 假设它是一个单个字符数组,但它输出 ab b。为什么?
  • 如果您将函数更改为采用显式参数并返回适当的值,您可能会发现单独测试每个部分会更容易。
  • 您会强调(粗体/斜体)观察到的输出和预期输出的差异吗?会更容易解释。
  • 我是编辑问题的人——据我所知,OP 正在尝试创建两个“世界”。他保存了第一个世界并尝试加载它,但最终却获得了第二个世界。

标签: python arrays pickle


【解决方案1】:
def load():
    a = pickle.load( open( "save.p", "rb" ) ) 

在这里,您正在写入一个局部变量a,然后该变量将被丢弃。您需要添加 global a 才能为全局变量分配新值。


在你的下一个问题中,请用文字写出代码应该做什么以及实际发生了什么。在这里你可能写过:

此代码应该生成一个列表并将其保存到文件中,生成一个新列表,然后加载原始列表。但是加载后,当我打印它的值时,我仍然看到第二个列表的值而不是原来的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2018-07-19
    相关资源
    最近更新 更多