2013-07-25 31 views
0
#!/usr/bin/env python 

import random 
import time 
import os 

class vars: 
    running = 1 

def win(): 
    print("You escaped!") 
    vars.running = 0 
    time.sleep(4) 
    return 0 

def main(): 
    char_loc = 11 #The characters current co-ordinates in XY format 
    pos_char_loc = 11 
    ex_y = random.randint(1, 5) 
    ex_x = random.randint(1, 5) * 10 
    ex_loc = ex_x + ex_y 

    while vars.running == 1: 
     os.system('CLS') 
     x0 = ["#"] * 5 
     x1 = ["#"] * 5 
     x2 = ["#"] * 5 
     x3 = ["#"] * 5 
     x4 = ["#"] * 5 
     if (char_loc >= 11 and char_loc <= 55): 
      if (char_loc >= 11 and char_loc <= 15): 
       i = 0; k = 11 
       for x in range(0, 4):   
        if char_loc == k: 
         x0.insert(i, '@') 
        else: 
         i += 1 
         k += 1 
      if (char_loc >= 21 and char_loc <= 25): 
       i =0; k = 21 
       for loop1 in range(0, 4): 
        if char_loc == k: 
         x1.insert(i, '@') 
        else: 
         i += 1 
         k += 1 
      if (char_loc >= 31 and char_loc <= 35): 
       i =0; k = 31 
       for loop2 in range(0, 4): 
        if char_loc == k: 
         x2.insert(i, '@') 
        else: 
         i += 1 
         k += 1         
      if (char_loc >= 41 and char_loc <= 45): 
       i =0; k = 41 
       for loop3 in range(0, 4): 
        if char_loc == k: 
         x3.insert(i, '@') 
        else: 
         i += 1 
         k += 1 
      if (char_loc >= 51 and char_loc <= 55): 
       i =0; k = 51 
       for loop5 in range(0, 4): 
        if char_loc == k: 
         x4.insert(i, '@') 
        else: 
         i += 1 
         k += 1 
      else: 
       print("fail") 

     print(x0[4],x1[4],x2[4],x3[4],x4[4]) 
     print(x0[3],x1[3],x2[3],x3[3],x4[3]) 
     print(x0[2],x1[2],x2[2],x3[2],x4[2]) 
     print(x0[1],x1[1],x2[1],x3[1],x4[1]) 
     print(x0[0],x1[0],x2[0],x3[0],x4[0]) 
     print(char_loc, ex_loc) 
     if char_loc == ex_loc: 
      win()   
     move = input() 
     if move == "w" and (char_loc != 15 and char_loc != 25 and char_loc != 35 and char_loc != 45 and char_loc !=55): 
      char_loc += 1 
      print("up") 
     elif move == "s" and (char_loc != 11 and char_loc != 21 and char_loc != 31 and char_loc != 41 and char_loc != 51): 
      char_loc -= 1 
      print("down") 
     elif move == "a" and (char_loc != 11 and char_loc != 12 and char_loc != 13 and char_loc != 14 and char_loc != 15): 
      char_loc -= 10 
      print("left") 
     elif move == "d" and (char_loc != 51 and char_loc != 52 and char_loc != 53 and char_loc != 54 and char_loc != 55): 
      char_loc += 10 
      print("right") 
     else: print("You can't move there!") 

if __name__ == '__main__': main() 

我想制作一个简单的基于文本的游戏,你在'#'的网格周围移动'@' 并尝试找到退出。我已经改变了代码,使我更容易使电网更大或更小而不添加或删除的代码大块,它不断给我这个输出:Python for loop breaks基于文本的游戏

fail 
# # # # # 
@ # # # # 
@ # # # # 
@ # # # # 
@ # # # # 
11 52 

,我想不出它出什么问题了!只有一个'@'应该出现:( 我只是一个新手在python所以如果你有任何提示,以改善此请,请不要犹豫,并发布它们! 在此先感谢,

+0

你的代码总体上有太多的空白;你能删除过多的空行并减少缩进吗?每层4个空格更具可读性。在代码中似乎也有一些缩进错误。 –

+0

@MartijnPieters我已经做到了,但仍然失败。 – Glollum

+0

我没有说这可以解决您的问题。 :-P我只想让人们更容易帮助你。 –

回答

0

我认为出现“故障”,因为它会发生在每次char_loc是不是和55

if (char_loc >= 11 and char_loc <= 15): 
if (char_loc >= 21 and char_loc <= 25): 
if (char_loc >= 31 and char_loc <= 35): 
if (char_loc >= 41 and char_loc <= 45): 
if (char_loc >= 51 and char_loc <= 55): 
else: 

我想什么你想在这里做的之间的51时间使用ELIF,这只会火如果前面的检查不要't trigger。

if (char_loc >= 11 and char_loc <= 15): 
elif (char_loc >= 21 and char_loc <= 25): 
elif (char_loc >= 31 and char_loc <= 35): 
elif (char_loc >= 41 and char_loc <= 45): 
elif (char_loc >= 51 and char_loc <= 55): 
else: 

关于t他多个@符号,我认为这可能起一部分作用。目前您有:

if char_loc == k: 
    x0.insert(i, '@') 
else: 
    i += 1 
    k += 1 

我想你希望做的是:

if char_loc == k: 
    x0.insert(i, '@') 

i += 1 
k += 1 

既然你想K改变每一次循环迭代。我会建议

最后一两件事,因为你必须:

i =0; k = 21 
i =0; k = 31 
i =0; k = 41 
i =0; k = 51 

你可能会想添加

i =0; k = 11 

到了第一位。

希望有所帮助。