2016-12-19 3 views
0

Ok, also ich bin neu in Python und Programmierung im Allgemeinen. Aber in letzter Zeit habe ich Fortschritte gemacht und beschlossen, das 2D Minecraft Tutorial auf http://www.usingpython.com auszuprobieren - Wenn ich den Code starte, der unvollständig ist, weil er am Anfang des Tutorials steht, gibt es mir diesen Fehler: TypeError: Rect Argument ist ungültigTypeError: Rect Argument ist ungültig

Das Tutorial sagt, dass ich ein Fenster mit meinem bunten 2D-Array sehen sollte, aber anstatt ist es ein schwarzes Fenster, das nach ein paar Sekunden verschwindet und zeigt mir die Fehler ..

Hier was habe ich, was stimmt mit dem "rect" nicht? Ich glaube, wenn ich nichts verpasse, ist es eine perfekte Kopie des Codes, den er gelehrt hat. Frustriert, Hilfe? Vielen Dank!!

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() 

Antwort

1

Sie verpassen ein pygame.Rect Argument hier:

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

das dritte Argument ein pygame.Rect Objekt sein muss, haben Sie es bauen 4 Integer-Parameter (es gibt auch andere Möglichkeiten zu)

Das wäre syntaktisch korrekt und wie quapka bemerkte ein Argument verloren von der ursprünglichen Verbindung, so dass sollte in Ordnung sein:

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

Edit: Ich habe gerade überprüft, und Sie müssen nicht pygame.Rect explizit so lange zu übergeben, wie Sie 4 Parameter liefern:

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

Sie haben den Fehler, da Sie nur aus Versehen 3 Parameter zur Verfügung gestellt.

+0

Das genaue Argument, das auf dem Link von OP gegeben wird, ist '(Spalte * TILESIZE, Zeile * TILESIZE, TILESIZE, TILESIZE)'. Das zweite Argument fehlt im OP-Code. – quapka

+0

danke! Ich werde die Antwort bearbeiten. –

+0

Super, danke! Habe es geschafft zu arbeiten :) – taylorbeeler

Verwandte Themen