2016-12-19 4 views
0

Итак, я новичок в Python и в общем программировании. Но в последнее время я добился прогресса и решил попробовать 2D-учебник по Minecraft по адресу http://www.usingpython.com. Когда я иду запускать код, который является неполным, поскольку он находится в начале учебника, он дает мне эту ошибку: TypeError: Rect аргумент неверенTypeError: Rect аргумент недействителен

в учебнике сказано, что я должен видеть окно с моей разноцветной 2D массив, но вместо это черное окно, которое исчезает через несколько секунд и показывает мне сказали ошибка ..

Вот что у меня есть, что не так с «прямым»? Я считаю, что если я ничего не пропустил, это идеальная копия кода, который он использовал для обучения. Разочарованный, помогите? Благодаря!!

import pygame 
from pygame.locals import* 

#Color link to constants 
BLACK = (0, 0, 0) 
BROWN = (153, 76, 0) 
GREEN = (0, 255, 0) 
BLUE = (0, 0, 255) 

#Constants, Same as variables but never changing - they're constant! 
DIRT = 0 
GRASS = 1 
WATER = 2 
COAL = 3 

#Dictionary Linking Resources to colors 
colors = { 
      DIRT : BROWN, 
      GRASS :GREEN, 
      WATER : BLUE, 
      COAL : BLACK 
} 

#THE 2D ARRAY 
tilemap = [ 
      [GRASS, COAL, DIRT], 
      [WATER, WATER, GRASS], 
      [COAL, GRASS, WATER], 
      [DIRT, GRASS, COAL], 
      [GRASS, WATER, DIRT] 
] 

#Useful Game Dimensions 
TILESIZE = 40 
MAPWIDTH = 3 
MAPHEIGHT = 5 

#Set up the display for PYGAME 


pygame.init() 
DISPLAYSURF = pygame.display.set_mode((MAPWIDTH*TILESIZE,MAPHEIGHT*TILESIZE)) 
while True: 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    for row in range(MAPHEIGHT): 
     for column in range(MAPWIDTH): 
     pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]],  (column*TILESIZE,TILESIZE,TILESIZE))  
    pygame.display.update() 

ответ

1

Вы не нашли pygame.Rect аргумент здесь:

pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]],  (column*TILESIZE,TILESIZE,TILESIZE)) 

3-й аргумент должен быть pygame.Rect объект, вы должны построить его с помощью 4 целочисленных параметра (есть и другие возможности тоже)

class Rect(builtins.object) | Rect(left, top, width, height) -> Rect

Это было бы синтаксически правильным, и, как отметил квапка, аргумент потерялся из исходной ссылки, так что должно быть хорошо:

pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], pygame.Rect(column*TILESIZE,row*TILESIZE, TILESIZE,TILESIZE)) 

Edit: Я только что проверил, и вам не нужно проходить pygame.Rect явно до тех пор, пока вы предоставляете 4 параметра:

pygame.draw.rect(DISPLAYSURF, colors[tilemap[row][column]], (column*TILESIZE,row*TILESIZE, TILESIZE,TILESIZE)) 

Вы получили ошибку, так как вы только при условии 3 параметра по ошибке.

+0

Точный аргумент, приведенный в ссылке из OP, равен '(столбец * TILESIZE, строка * TILESIZE, TILESIZE, TILESIZE)'. Второй аргумент отсутствует в коде OP. – quapka

+0

спасибо! Я отредактирую ответ. –

+0

Удивительный, спасибо! Получил это, чтобы работать :) – taylorbeeler

Смежные вопросы