北极浮冰 2018-10-01 07:23 采纳率: 50%
浏览 817
已结题

python游戏的问题有一两个错误,我总是解决不了。

#duobielong.py

import sys,time,random,math,pygame

from pygame.locals import *

r = (0,0)

class MySprite(pygame.sprite.Sprite):

def __init__(self,target):

    pygame.sprite.Sprite.__init__(self)

    self.master_image = None

    self.frame = 0

    self.old_frame = -1

    self.frame_with = 1

    self.frame_height = 1

    self.first_frame = 0

    self.last_frame = 0

    self.columns = 1

    self.last_time = 0



def _getx(self): return self.rect.x

def _setx(self,value): self.rect.x = value

X = property(_getx,_setx)

def _gety(self): return self.rect.y

def _sety(self,value): self.rect.y

Y = property(_gety,_sety)

def _getpos(self): return self.rect.topleft

def _setpos(self,pos): self.rect.topleft = pos

position = property(_getpos,_setpos)



def load(self,filename,width,height,columns):

        self.master_image = pygame.image.load(filename).convert_alpha()

        self.frame_width = width

        self.frame_height = height

        self.rect = Rect(0,0,width,height)

        self.columns = columns

        r = self.master_image.get_rect()

        #self.last_frame = (rect.width//width)*(rect.height//height) - 1



def update(self,current_time,rate=30):

      if current_time > self.last_time + rate:

           self.frame += 1

           if self.frame > self.last_frame:

               self.frame = self.first_frame

           self.last_time = current_time

      if self.frame != self.old_frame:

                frame_x = (self.frame%self.columns)*self.frame_width

                frame_y = (self.frame//self.columns)*self.frame_height

                self.image = self.master_image.subsurface(r)

                self.old_frame = self.frame



def __str__(self):

      return str(self.frame) + "," + str(self.first_frame) + \

           "," +str(self.last_frame)+ "," +str(self.frame_width) + \

           "," +str(self.frame_height) + "," +str(self.columns) + \

           "," +str(self.rect)

def print_text(font,x,y,text,color = (255,255,255)):

       imgtext = font.render(text,True,color)

       screen.blit(imgtext,(x,y))

def reset_arrow():

        y = random.randint(250,300)

        arrow.position = 800,y

pygame.init()

screen = pygame.display.set_mode((800,600))

font = pygame.font.Font(None,18)

framerate = pygame.time.Clock()

bg = pygame.image.load("background.png").convert_alpha()

group = pygame.sprite.Group()

dragon = MySprite(screen)

dragon.load("dragon.png",260,150,3)

dragon.first_frame = 0

dragon.last_frame = 5

dragon.position = 100,230

group.add(dragon)

player = MySprite(screen)

player.load("biao.png",85,144,4)

player.first_frame = 0

player.last_frame = 7

player.position = 400,303

group.add(player)

arrow = MySprite(screen)

arrow.load("火球.png",100/3,100/3,3)

arrow.first_frame = 3

arrow.last_frame = 5

arrow.position = 800,320

group.add(arrow)

arrow_vel = 8.0

game_over = False

you_win = False

player_jumping = False

jump_vel = 0.0

player_start_y = player.Y

while True:

framerate.tick(30)

ticks = pygame.time.get_ticks()

for event in pygame.event.get():

    if  event.type == QUIT:  sys.exit()

keys = pygame.key.get_pressed()

if keys[K_ESCAPE]: sys.exit()

elif keys[K_SPACE]:

    if not player_jumping:

        player_jumping = True

        jump_vel = -8.0

if not game_over:

    arrow.X -= arrow_vel

    if arrow.X < -40: reset_arrow()

if pygame.sprite.collide_rect(arrow,player):

    reset_arrow()

    player.X -= 10

if pygame.sprite.collide_rect(arrow,dragon):

    reset_arrow()

    dragon.X -= 10

if pygame.sprite.collide_rect(player,dragon):

     game_over = True

if dragon.X < -100:

    you_win = True

    game_over =True

if player_jumping:

    player.Y += jump_vel

    jump_vel += 0.5

    if player.Y >player_start_y:

        player_jumping  = False

        player.Y = player_start_y

        jump_vel = 0.0

screen.blit(bg,(0,0))



if not game_over:

    group.update(ticks,50)

group.draw(screen)

print_text(font,350,560,"按空格起跳")

if game_over:

  print_text(font,360,100,"游戏结束")

  if you_win:

     print_text(font,330,130,"你战胜了恶龙")

  else:

     print_text(font,330,130,"恶龙击败了你")



pygame.display.update()

pygame.quit()

  • 写回答

2条回答 默认 最新

  • 北极浮冰 2018-10-01 10:04
    关注

    Traceback (most recent call last):
    File "/home/pi/python程序/躲避恶龙/duobielong.py", line 128, in
    group.update(ticks,50)
    File "/usr/lib/python3/dist-packages/pygame/sprite.py", line 462, in update
    s.update(*args)
    File "/home/pi/python程序/躲避恶龙/duobielong.py", line 48, in update
    self.image = self.master_image.subsurface(rect)
    NameError: name 'rect' is not defined
    这些是错误提示

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大