2017-02-01 6 views
-1

現在、私はPython(IDLE 3.6.0)でスネークゲームを作っています。ループの外に 'break'というエラーが出てくるのです。どういう意味ですか?私は間違って何をしています。このエラーが発生したのはこれが初めてです。ここでスネークゲームの 'break' outsideループ

は私のコードです:

# 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

ループ外に 'break 'があります。エラーメッセージは、それを指すはずです。たぶん 'snake [0:] in snake [1:]:break 'を指しているでしょう。それがどうすると思いましたか? – user2357112

+0

あなたの 'break'はあなたのループの外にあります。あなたが 'KEY_LEFT ...'にないキーで始まる大きなブロックで何を達成しようとしていますか? – BrenBarn

+0

私は蛇[1:]で蛇[0]:それがそれに触れれば蛇を殺すだろうと思った。 –

答えて

0

if snake[0]in snake[1:]: breakという行は、あなたのエラーの原因となります。

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

EDIT:

次にあなたがここにその関数を呼び出します

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

:あなたはおそらくポイントとハイスコアなどを表示するためにゲーム終了機能のいくつかの種類を使用したいです私はあなたの呪いのエラーに関してこれを見つけました:Error no module named curses。 cursesがWindowsマシンをサポートしていないかのようです。 UniCursesまたはthis binaryをインストールしてみてください。

+0

ありがとうございました、これはうまくいきましたが、このエラーはTraceback(最新の最後の呼び出し)を表示しています: ファイル "C:\ Users \ sony \ AppData \ Local \ Programs \ Python \ Python36-32 \ Python Snake Game 3.6.py" 、行4、 import curses ファイル "C:¥Users¥sony¥AppData¥Local¥Programs¥Python¥Python36-32¥lib¥curses¥__ init__.py" 13行目、 from _curses import * ModuleNotFoundError: '_curses'という名前のモジュールがありません –

+0

編集しました – Steampunkery

+0

あなたの編集はどこですか? –