0

I have two sprites, a cat and a mouse, and I'm trying to make the cat chase the mouse. The cat should move towards the mouse and try to "catch" it no matter where the mouse is. If the mouse is above the cat, the cat will move up to try to "catch" it. The program runs and I can move the mouse with my arrow keys, but the cat won't move. Here is my code:

from pygame import *

size_x = 800
size_y = 600

class Object:
    def disp(self, screen):
        screen.blit(self.sprite, self.rect)

class Cat(Object):
    def __init__(self):
        self.sprite = image.load("cat.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx = size_x / 2
        self.rect.centery = size_y / 2
        self.move_x = 0
        self.move_y = 0
        def cycle(self):
#           self.rect.centerx = 500 - abs(self.count)
#           self.count += 2
#           if self.count > 400:
#               self.count = -400
            self.rect.centerx += self.move_x
            if self.rect.centerx < 0:
                self.rect.centerx = 800

#           self.rect.centery = 500 - abs(self.count)
#           self.count += 2
#           if self.count > 400:
#               self.count = -400
            self.rect.centery += self.move_y
            if self.rect.centery < 0:
                self.rect.centery = 800

    def chase(self, mouse):

        #These should move the cat towards the mouse.

        #If the cat is to the left of the mouse, this should move the cat right.
        if self.rect.centerx < mouse.rect.centerx:
            self.move_x += 3

        #If the cat is to the right of the mouse, this should move the cat left. 
        elif self.rect.centerx > mouse.rect.centerx:
            self.move_x -= 3

        #If the cat is above the mouse, this should move the cat down.    
        if self.rect.centery < mouse.rect.centery:
            self.move_y += 3

        #If the cat is below the mouse, this should move the cat up.     
        elif self.rect.centery > mouse.rect.centery:
            self.move_y -= 3


class Mouse(Object):
    def __init__(self):
        self.sprite = image.load("mouse.bmp")
        self.rect = self.sprite.get_rect()
        self.rect.centerx = 100
        self.rect.centery = 100
        self.count = 0
        self.move_x = 0
        self.move_y = 0

    def checkwith(self, otherrect):
        if self.rect.colliderect(otherrect):
            exit()

    def cycle(self):
#       self.rect.centerx = 500 - abs(self.count)
#       self.count += 2
#       if self.count > 400:
#           self.count = -400
        self.rect.centerx += self.move_x
        if self.rect.centerx < 0:
            self.rect.centerx = 800

#       self.rect.centery = 500 - abs(self.count)
#       self.count += 2
#       if self.count > 400:
#           self.count = -400
        self.rect.centery += self.move_y
        if self.rect.centery < 0:
            self.rect.centery = 800

    def right(self):
        self.move_x += 10

    def left(self):
        self.move_x -= 10

    def up(self):
        self.move_y -= 10

    def down(self):
        self.move_y += 10

    def stop_x(self):
        self.move_x = 0

    def stop_y(self):
        self.move_y = 0

init()
screen = display.set_mode((size_x, size_y))
c = Cat()
m = Mouse()
clock = time.Clock()

while True:
    for e in event.get():
        if e.type == QUIT:
            quit()
        if e.type == KEYDOWN:
            if e.key == K_RIGHT:
                m.right()
            elif e.key == K_LEFT:
                m.left()
            elif e.key == K_UP:
                m.up()
            elif e.key == K_DOWN:
                m.down()
        if e.type == KEYUP:
            if e.key == K_RIGHT or e.key == K_LEFT:
                m.stop_x()
            if e.key == K_UP or e.key == K_DOWN:
                m.stop_y()

    c.chase(m)
    m.cycle()
    screen.fill((255,255,255))
    m.disp(screen)
    c.disp(screen)
    display.flip()
    clock.tick(60)  
4

2 回答 2

1

您的 Cat 类不会更新其rect,就像您在 中为 Mouse 所做的那样Mouse.cycle()

只需将该方法复制粘贴cycle()到 Cat 类,然后添加c.cycle()到您的主循环中。

于 2013-11-07T00:32:17.633 回答
0

你不应该有

self.rect.centerx += self.move_x

Cat课堂的某个地方?(y当然也一样)

于 2013-11-07T00:31:30.810 回答