Pygame迷宫

时间:2014-03-09 16:03:14

标签: python pygame

我最近发现了一个使用pygame制作的漂亮小迷宫,我有一个想法:我想用以下方法替换所有那些丑陋的矩形:

  • 背景图片
  • 玩家的精灵
  • 墙上的精灵

我已经尝试了一些东西,但每次尝试时我都有错误(我不能在这里发布代码,因为当我尝试上传它时有一个错误,它告诉我,我没有把4个缩进但是我做了......)

有人可以指出我正确的方向吗? 这是原始游戏的链接:

http://www.pygame.org/project-Rect+Collision+Response-1061-.html

import pygame
import random
from pygame.locals import *

Classe joueur / player Class

类Joueur(对象):

def _init_(self):
    self.rect = pygame.image.load("perso.png").convert_alpha()

def mvmt(self, dx, dy):
    #déplacement sur un axe a la fois avec detection de collision / Move each axis separately. Note that this checks for collisions both times.
    if dx !=0:
        self.mvmt_axe(dx, 0)
    if dy !=0:
        self.mvmt_axe(0, dy)

def mvmt_axe(self, dx, dy):

    self.rect.x +=dx
    self.rect.y +=dy
    # Action en cas de collision /  If you collide with a wall, move out based on velocity
    for mur in murs :
        if self.rect.colliderect(mur.rect):
            if dx > 0 :
                self.rect.right = mur.rect.left
            if dx < 0 :
                self.rect.left = mur.rect.right
            if dy > 0 :
                self.rect.bottom = mur.rect.top
            if dy < 0 :
                self.rect.top = mur.rect.bottom 

1 个答案:

答案 0 :(得分:1)

Dropbox显示了一个类Mur,但问题中的代码没有。我根据你在评论中显示的错误和我在dropbox中看到的代码回答。差异似乎是自我正确的定义。

但是,请重新检查您正在执行的代码。错误显示

回溯(最近一次调用最后一次):文件“C:\ Users \ Maxime \ ISN 2014 \ Dropbox \ Deadalus \ Partie Maxime \ proto collision.py”,第74行,在Mur((x,y))TypeError: object()不带参数

这似乎意味着您在第40行定义self.rect时所做的更改已经充分改变了定义,使Mur不再接受呼叫设置。请检查原始代码是否也能正常工作。还要检查保管箱中的第74行是否正在运行

Mur(x, y)

Mur((x, y))

与足以导致失败。

在您的代码中

#Classe mur / Class for the wall ( it will be represented by a small .png 

class Mur(object):
  def _init_(self, pos): 
    murs.append(self) 
    # Put in a print statement here
    self.rect = pygame.image.load("mur.png").convert_alpha() # line 40

第74行

#Création du niveau après 'lecture' des murs / Parse the level string above. M = wall, S = exit  line 69
x = y = 0                 # This is line 70
for rangée in niveau:     # This is line 71
  for colonne in rangée:  # This is line 72
    if colonne == "M":    # This is line 73
        Mur((x, y))       # This is line 74 and is the error
    if colonnne == "S": 
        end_rect = pygame.Rect(x, y, 30, 30) 
    x += 30
  y += 30
  x = 0

我将Dropbox与原始

进行了比较

持有墙矩形的好班级

类Wall(对象):

def __init__(self, pos):
    walls.append(self)
    self.rect = pygame.Rect(pos[0], pos[1], 16, 16)

# Parse the level string above. W = wall, E = exit
x = y = 0
for row in level:
  for col in row:
    if col == "W":
        Wall((x, y))
    if col == "E":
        end_rect = pygame.Rect(x, y, 16, 16)
    x += 16
  y += 16
  x = 0