2017-02-01 4 views
-1

В настоящее время я делаю змеиную игру на python (IDLE 3.6.0), и она продолжает придумывать ошибку, называемую наружным циклом break. Что это значит? Что я делаю не так. Это первый случай, когда я когда-либо сталкивался с этой ошибкой.'break' out loop in snake game

Вот мой код:

# SNAKES GAME 
# Use ARROW KEYS to play, SPACE BAR for pausing/resuming and Esc Key for exiting 

import curses 
from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN 
from random import randint 


curses.initscr() 
win = curses.newwin(20, 60, 0, 0) 
win.keypad(1) 
curses.noecho() 
curses.cur_set(0) 
win.border(0) 
win.nodelay(1) 

key = KEY_RIGHT           # Initalizing Values 
score = 0 

snake = [[4,10], [4,9], [4,8]]       # Initial snake co-ordinates 
food = [10,20]           # First food co-ordinates       

win.addc(food[0], food[1], '*')        # Prints the food 

while key != 27: 
    win.border(0) 
    win.addstr(0, 2, 'Score :' + str(score) + ' ')   # Printing 'Score' and  
    win.addstr(0, 27, ' SNAKE ')       # 'SNAKE' strings 
    win.timeout(150 - (len(snake)/5 + len(snake)/10)%120) 

    prevKey = key           # Previous key pressed 
    event = win.getch 
    key = key if event == -1 else event 


    if key == ord(' '):          # If SPACE BAR is pressed, wait for another 
     key = -1           # one (Pause/Resume) 
     while key != ord(' '): 
      key = win.getch() 
    key = prevKey 
    continue 

if key not in [KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, 27]: # If an invalid key is pressed 
    key = prevKey 

    # Calculates the new coordinates of the head of the snake. NOTE: len(snake) increases. 
    # This is taken care of later at [1]. 
    snake.insert(0, [snake[0][0] + (key == KEY_DOWN and 1) + (key == KEY_UP and -1), snake[0][1] + (key == KEY_LEFT and -1) + (key == KEY_RIGHT and 1)]) 

    # If snake crosses the boundaries, make it enter from the other side     
    if snake[0][0] == 0: snake[0][0] = 18 
    if snake[0][1] == 0: snake[0][1] = 58 
    if snake[0][0] == 19: snake[0][0] = 1 
    if snake[0][1] == 59: snake[0][1] = 1 

    # Exit if snake crosses the boundaries (Uncomment to enable) 
    # if snake[0][0] == 0 or snake[0][0] == 19 or snake[0][1] == 0 or snake[0][1] == 59: break 

    # If snake runs over itself 
    if snake[0]in snake[1:]: break 


    if snake[0] == food: 
     food = []                               
     score += 1 
     while food == []: 
      food = [randint(1, 18), randint(1, 58)] 
      if food in snake: food = [] 
     win.addch(food[0], food[1], '*') 
    else:                              
     last = snake.pop() 
     win.addch(last[0], last[1], ' ') 
    win.addch(snake[0][0], snake[0][1], '#')                                

curses.erdwin() 
print("\nScore - " + str(score)) 
print("http://bitemelater.in\n")                                

Я был бы рад, если вы могли бы помочь! Благодаря!

+0

У вас есть «перерыв» вне цикла. Сообщение об ошибке должно указывать на него; вероятно, указывая на «если змея [0] в змее [1:]: break'. Как вы думаете, что бы вы сделали? – user2357112

+0

Ваш 'break' находится вне вашей петли. Что вы намереваетесь выполнить с большим блоком, начинающимся с 'if key not in [KEY_LEFT ...'? – BrenBarn

+0

Я думал, что змея [0] в змее [1:]: break убьет змею, если она коснется себя. –

ответ

0

Линия, в которой говорится, что находится if snake[0]in snake[1:]: break. Вы, вероятно, хотите использовать какой-то игры окончание функции для отображения точек и высокие баллы и такие:

def end_game(): 
    #do your game ending things here 

Тогда вы могли бы назвать эту функцию здесь:

if snake[0]in snake[1:]: end_game() 

EDIT:

Я нашел это по отношению к вашей ошибке curses: Error no module named curses. Кажется, что проклятия не поддерживают машины Windows. Попробуйте установить UniCurses или this binary.

+0

Спасибо, что сработало, но теперь эта ошибка показывает Traceback (последний последний звонок): Файл «C: \ Users \ sony \ AppData \ Local \ Programs \ Python \ Python36-32 \ Python Snake Game 3.6.py" , строка 4, в импорта проклинает Файл "C: \ Users \ \ Сони AppData \ Local \ Programs \ Python \ Python36-32 \ Lib \ проклятий \ __ init__.py", строки 13, в от _curses импорта * ModuleNotFoundError: Нет модуля с именем '_curses' –

+0

См. Редактирование, которое я только что сделал – Steampunkery

+0

, в какую строку вы редактируете? –