鱼C论坛

 找回密码
 立即注册
查看: 1557|回复: 11

[已解决]为什么用get_rect方法或的的矩形 不能够随着图像移动而移动呢?

[复制链接]
发表于 2020-7-14 14:55:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import sys
import pygame
from pygame.locals import *

class Player():
    def __init__(self):
        self.MAXHP = 100 #生命上限
        self.HP = 100 #初始化当前生命
        self.MAXMP = 100 #魔法值上限
        self.MP = 100 #初始化当前魔法值
        self.EXP = 0 #初始化经验值
        self.LV = 1 #初始化登记
        self.PA = 50 #初始化物理攻击力
        self.MA = 50 #初始化魔法攻击力
        self.PD = 10 #初始化物理防御值
        self.MD = 10 #初始化魔法防御值
        self.dead = False
        self.playerX = 200 #初始X坐标
        self.playerY = 200 #初始Y坐标
        self.playerwalkforward = False #向前移动
        self.playerwalkback = False #向后移动
        self.playerwalkleft = False #向左移动
        self.playerwalright = False #向右移动
        self.speed = 5 #移动速度
       self.playerStatus = pygame.image.load('player.png') #加载任务图像
        self.playerRect = self.playerStatus.get_rect()

    def playerUpdate(self):
        if self.playerwalkforward:
            self.playerY -= self.speed #向前移动
            print (self.playerY)
        elif self.playerwalkback:
            self.playerY += self.speed #向后移动
        elif self.playerwalkleft:
            self.playerX -= self.speed #向左移动
        elif self.playerwalright:
            self.playerX += self.speed #向右移动
最佳答案
2020-7-14 15:42:39
下面是在你基础上改的,图片名称你自己换下,代码里加了几个print输出验证的,你自己删掉。
  1. import sys
  2. import pygame
  3. from pygame.locals import *


  4. class Player(pygame.sprite.Sprite):
  5.     def __init__(self):
  6.         pygame.sprite.Sprite.__init__(self)
  7.         self.MAXHP = 100  # 生命上限
  8.         self.HP = 100  # 初始化当前生命
  9.         self.MAXMP = 100  # 魔法值上限
  10.         self.MP = 100  # 初始化当前魔法值
  11.         self.EXP = 0  # 初始化经验值
  12.         self.LV = 1  # 初始化登记
  13.         self.PA = 50  # 初始化物理攻击力
  14.         self.MA = 50  # 初始化魔法攻击力
  15.         self.PD = 10  # 初始化物理防御值
  16.         self.MD = 10  # 初始化魔法防御值
  17.         self.dead = False
  18.         self.playerX = 200  # 初始X坐标
  19.         self.playerY = 200  # 初始Y坐标
  20.         self.playerwalkforward = False  # 向前移动
  21.         self.playerwalkback = False  # 向后移动
  22.         self.playerwalkleft = False  # 向左移动
  23.         self.playerwalright = False  # 向右移动
  24.         self.speed = 5  # 移动速度
  25.         self.playerStatus = pygame.image.load('code.jpg')  # 加载任务图像
  26.         self.playerRect = self.playerStatus.get_rect()
  27.         # self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
  28.         # self.playerRect = pygame.Rect((200,200),(50,71))

  29.     def playerUpdate(self):
  30.         if self.playerwalkforward:
  31.             #self.playerY -= self.speed  # 向前移动
  32.             self.playerRect = self.playerRect.move([0,self.speed])
  33.             print('Y', self.playerY)
  34.             print(self.playerStatus.get_rect())
  35.         elif self.playerwalkback:
  36.             #self.playerY += self.speed  # 向后移动
  37.             self.playerRect = self.playerRect.move([0, -self.speed])
  38.             print('Y', self.playerY)
  39.             print(self.playerStatus.get_rect())
  40.         elif self.playerwalkleft:
  41.             #self.playerX -= self.speed  # 向左移动
  42.             self.playerRect = self.playerRect.move([-self.speed,0])
  43.             print('X', self.playerX)
  44.             print(self.playerStatus.get_rect())
  45.         elif self.playerwalright:
  46.             #self.playerX += self.speed  # 向右移动
  47.             self.playerRect = self.playerRect.move([self.speed, 0])
  48.             print('X', self.playerX)
  49.             print(self.playerStatus.get_rect())


  50. class Monster():
  51.     def __init__(self):
  52.         self.MAXHP = 100
  53.         self.HP = 100
  54.         self.MAXMP = 100
  55.         self.MP = 100
  56.         self.EXP = 0
  57.         self.LV = 1
  58.         self.PA = 50
  59.         self.MA = 50
  60.         self.PD = 10  # 初始化物理防御值
  61.         self.MD = 10  # 初始化魔法防御值
  62.         # self.GU = GU
  63.         self.dead = False
  64.         self.monsterX = 100
  65.         self.monsterY = 100
  66.         self.monsterStatus = pygame.image.load('code.jpg')
  67.         self.monsterRect = pygame.Rect((self.monsterX, self.monsterY), (50, 71))
  68.         self.monster_Rect = self.monsterStatus.get_rect()


  69. def createMap():
  70.     screen.fill((255, 255, 255))
  71.     screen.blit(pygame.image.load('背景图.jpg'), (0, 0))  # 加载背景图片
  72.     screen.blit(Monster.monsterStatus, Monster.monsterRect)  # 加载怪物
  73.     screen.blit(Player.playerStatus, Player.playerRect)  # 加载任务
  74.     Player.playerUpdate()
  75.     pygame.display.update()
  76.     pygame.display.flip()


  77. def impactCheck():
  78.     # Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
  79.     # Player.playerRect = Player.playerStatus.get_rect()
  80.     # Monster.monsterRect = Monster.monsterStatus.get_rect()
  81.     # print (Player.playerRect)
  82.     # print (Monster.monsterRect)
  83.     if Monster.monsterRect.colliderect(Player.playerRect):

  84.         # fighting()
  85.         i = True
  86.         print(i)


  87. def fighting():
  88.     while True:
  89.         if Player.dead == False and Monster.dead == False:
  90.             if Player.PD >= Monster.PA:
  91.                 Player.HP = Player.HP
  92.             else:
  93.                 Player.HP -= Monster.PA
  94.             if Monster.PD >= Player.PA:
  95.                 Monster.HP = Monster.PD
  96.             else:
  97.                 Monster.HP -= Player.PA
  98.         else:
  99.             break


  100. if __name__ == '__main__':
  101.     pygame.init()
  102.     size = width, height = 800, 800
  103.     screen = pygame.display.set_mode(size)
  104.     pygame.display.set_caption('魔塔')
  105.     clock = pygame.time.Clock()
  106.     Player = Player()
  107.     Monster = Monster()
  108.     impactCheck()
  109.     while True:
  110.         clock.tick(60)
  111.         # impactCheck()
  112.         createMap()
  113.         for event in pygame.event.get():
  114.             if event.type == pygame.QUIT:
  115.                 pygame.quit()
  116.                 sys.exit()
  117.             # 在按下键盘时,设置player的属性为True
  118.             elif event.type == KEYDOWN:
  119.                 if event.key == K_a or event.key == K_LEFT:
  120.                     Player.playerwalkleft = True
  121.                 elif event.key == K_d or event.key == K_RIGHT:
  122.                     Player.playerwalright = True
  123.                 elif event.key == K_w or event.key == K_UP:
  124.                     Player.playerwalkforward = True
  125.                 elif event.key == K_s or event.key == K_DOWN:
  126.                     Player.playerwalkback = True
  127.                 # elif event.key == K_SPACE:
  128.                 # hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
  129.             # 在松开键盘时,设置player的属性为False
  130.             elif event.type == KEYUP:
  131.                 if event.key == K_a or event.key == K_LEFT:
  132.                     Player.playerwalkleft = False
  133.                     print('m', Monster.monsterRect)
  134.                     print('p', Player.playerRect)
  135.                     print('mmmmm',Monster.monster_Rect)
  136.                 elif event.key == K_d or event.key == K_RIGHT:
  137.                     Player.playerwalright = False
  138.                     print('m', Monster.monsterRect)
  139.                     print('p', Player.playerRect)
  140.                 elif event.key == K_w or event.key == K_UP:
  141.                     Player.playerwalkforward = False
  142.                     print('m', Monster.monsterRect)
  143.                     print('p', Player.playerRect)
  144.                 elif event.key == K_s or event.key == K_DOWN:
  145.                     Player.playerwalkback = False
  146.                     print('m', Monster.monsterRect)
  147.                     print('p', Player.playerRect)
  148.             # else:
  149.             # Player.playerwalkforward = False
  150.             # createMap()
  151.         # pygame.display.flip()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-14 14:59:40 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 15:02:30 | 显示全部楼层
循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 15:05:07 | 显示全部楼层
yhhpf 发表于 2020-7-14 15:02
循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。

没复制过来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 15:05:47 | 显示全部楼层
import sys
import pygame
from pygame.locals import *

class Player():
    def __init__(self):
        self.MAXHP = 100 #生命上限
        self.HP = 100 #初始化当前生命
        self.MAXMP = 100 #魔法值上限
        self.MP = 100 #初始化当前魔法值
        self.EXP = 0 #初始化经验值
        self.LV = 1 #初始化登记
        self.PA = 50 #初始化物理攻击力
        self.MA = 50 #初始化魔法攻击力
        self.PD = 10 #初始化物理防御值
        self.MD = 10 #初始化魔法防御值
        self.dead = False
        self.playerX = 200 #初始X坐标
        self.playerY = 200 #初始Y坐标
        self.playerwalkforward = False #向前移动
        self.playerwalkback = False #向后移动
        self.playerwalkleft = False #向左移动
        self.playerwalright = False #向右移动
        self.speed = 5 #移动速度
        self.playerStatus = pygame.image.load('player.png') #加载任务图像
        self.playerRect = self.playerStatus.get_rect()
        #self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
        #self.playerRect = pygame.Rect((200,200),(50,71))
    def playerUpdate(self):
        if self.playerwalkforward:
            self.playerY -= self.speed #向前移动
            print ('Y',self.playerY)
        elif self.playerwalkback:
            self.playerY += self.speed #向后移动
            print ('Y',self.playerY)
        elif self.playerwalkleft:
            self.playerX -= self.speed #向左移动
            print ('X',self.playerX)
        elif self.playerwalright:
            self.playerX += self.speed #向右移动
            print ('X',self.playerX)

            
class Monster():
    def __init__(self):
        self.MAXHP = 100
        self.HP = 100
        self.MAXMP = 100
        self.MP = 100
        self.EXP = 0
        self.LV = 1
        self.PA = 50
        self.MA = 50
        self.PD = 10 #初始化物理防御值
        self.MD = 10 #初始化魔法防御值
        #self.GU = GU
        self.dead = False
        self.monsterX = 100
        self.monsterY = 100
        self.monsterStatus = pygame.image.load('player.png')
        self.monsterRect = pygame.Rect((self.monsterX,self.monsterY),(50,71))

def createMap():
    screen.fill((255,255,255))
    screen.blit(pygame.image.load('Drawing1-Model2.png'),(0,0))#加载背景图片
    screen.blit(Monster.monsterStatus,(Monster.monsterX,Monster.monsterY))#加载怪物
    screen.blit(Player.playerStatus,(Player.playerX,Player.playerY))#加载任务
    Player.playerUpdate()
    pygame.display.update()
    pygame.display.flip()

def impactCheck():
    #Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
    #Player.playerRect = Player.playerStatus.get_rect()
    #Monster.monsterRect = Monster.monsterStatus.get_rect()
    #print (Player.playerRect)
    #print (Monster.monsterRect)
    if Monster.monsterRect.colliderect(Player.playerRect):
        #fighting()
        i = True
        print (i)

def fighting():
    while True:
        if Player.dead == False and Monster.dead == False:
            if Player.PD >= Monster.PA:
                Player.HP = Player.HP
            else:
                Player.HP -= Monster.PA
            if Monster.PD >= Player.PA:
                Monster.HP = Monster.PD
            else:
                Monster.HP -= Player.PA
        else:
            break
   
if __name__ == '__main__':
    pygame.init()
    size = width,height = 800,800
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption('魔塔')
    clock = pygame.time.Clock()
    Player = Player()
    Monster = Monster()
    impactCheck()
    while True:
        clock.tick(60)
        #impactCheck()
        createMap()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            # 在按下键盘时,设置player的属性为True
            elif event.type == KEYDOWN:
                if event.key == K_a or event.key == K_LEFT:
                    Player.playerwalkleft = True
                elif event.key == K_d or event.key == K_RIGHT:
                    Player.playerwalright = True
                elif event.key == K_w or event.key == K_UP:
                    Player.playerwalkforward = True
                elif event.key == K_s or event.key == K_DOWN:
                    Player.playerwalkback = True
                #elif event.key == K_SPACE:
                    #hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
            # 在松开键盘时,设置player的属性为False
            elif event.type == KEYUP:
                if event.key == K_a or event.key == K_LEFT:
                    Player.playerwalkleft = False
                    print('m',Monster.monsterRect)
                    print('p',Player.playerRect)
                elif event.key == K_d or event.key == K_RIGHT:
                    Player.playerwalright = False
                    print('m',Monster.monsterRect)
                    print('p',Player.playerRect)
                elif event.key == K_w or event.key == K_UP:
                    Player.playerwalkforward = False
                    print('m',Monster.monsterRect)
                    print('p',Player.playerRect)
                elif event.key == K_s or event.key == K_DOWN:
                    Player.playerwalkback = False
                    print('m',Monster.monsterRect)
                    print('p',Player.playerRect)
            #else:
                #Player.playerwalkforward = False
                #createMap()
        #pygame.display.flip()

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 15:06:00 | 显示全部楼层

那你这部分代码咋看...我只能看到加载图像那一行的缩进肯定是错的- -...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 15:06:18 | 显示全部楼层
yhhpf 发表于 2020-7-14 15:02
循环语句都没有...图像出的来么...图像也没刷出来...你这少的有点多啊。。。

下面贴个全的 帮忙看看谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 15:41:08 | 显示全部楼层

#self.playerY -= self.speed  # 向前移动
self.playerRect = self.playerRect.move([0,-self.speed])
你是通过定义x.y实现的移动,你改成rect.move()的方法即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 15:42:39 | 显示全部楼层    本楼为最佳答案   
下面是在你基础上改的,图片名称你自己换下,代码里加了几个print输出验证的,你自己删掉。
  1. import sys
  2. import pygame
  3. from pygame.locals import *


  4. class Player(pygame.sprite.Sprite):
  5.     def __init__(self):
  6.         pygame.sprite.Sprite.__init__(self)
  7.         self.MAXHP = 100  # 生命上限
  8.         self.HP = 100  # 初始化当前生命
  9.         self.MAXMP = 100  # 魔法值上限
  10.         self.MP = 100  # 初始化当前魔法值
  11.         self.EXP = 0  # 初始化经验值
  12.         self.LV = 1  # 初始化登记
  13.         self.PA = 50  # 初始化物理攻击力
  14.         self.MA = 50  # 初始化魔法攻击力
  15.         self.PD = 10  # 初始化物理防御值
  16.         self.MD = 10  # 初始化魔法防御值
  17.         self.dead = False
  18.         self.playerX = 200  # 初始X坐标
  19.         self.playerY = 200  # 初始Y坐标
  20.         self.playerwalkforward = False  # 向前移动
  21.         self.playerwalkback = False  # 向后移动
  22.         self.playerwalkleft = False  # 向左移动
  23.         self.playerwalright = False  # 向右移动
  24.         self.speed = 5  # 移动速度
  25.         self.playerStatus = pygame.image.load('code.jpg')  # 加载任务图像
  26.         self.playerRect = self.playerStatus.get_rect()
  27.         # self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
  28.         # self.playerRect = pygame.Rect((200,200),(50,71))

  29.     def playerUpdate(self):
  30.         if self.playerwalkforward:
  31.             #self.playerY -= self.speed  # 向前移动
  32.             self.playerRect = self.playerRect.move([0,self.speed])
  33.             print('Y', self.playerY)
  34.             print(self.playerStatus.get_rect())
  35.         elif self.playerwalkback:
  36.             #self.playerY += self.speed  # 向后移动
  37.             self.playerRect = self.playerRect.move([0, -self.speed])
  38.             print('Y', self.playerY)
  39.             print(self.playerStatus.get_rect())
  40.         elif self.playerwalkleft:
  41.             #self.playerX -= self.speed  # 向左移动
  42.             self.playerRect = self.playerRect.move([-self.speed,0])
  43.             print('X', self.playerX)
  44.             print(self.playerStatus.get_rect())
  45.         elif self.playerwalright:
  46.             #self.playerX += self.speed  # 向右移动
  47.             self.playerRect = self.playerRect.move([self.speed, 0])
  48.             print('X', self.playerX)
  49.             print(self.playerStatus.get_rect())


  50. class Monster():
  51.     def __init__(self):
  52.         self.MAXHP = 100
  53.         self.HP = 100
  54.         self.MAXMP = 100
  55.         self.MP = 100
  56.         self.EXP = 0
  57.         self.LV = 1
  58.         self.PA = 50
  59.         self.MA = 50
  60.         self.PD = 10  # 初始化物理防御值
  61.         self.MD = 10  # 初始化魔法防御值
  62.         # self.GU = GU
  63.         self.dead = False
  64.         self.monsterX = 100
  65.         self.monsterY = 100
  66.         self.monsterStatus = pygame.image.load('code.jpg')
  67.         self.monsterRect = pygame.Rect((self.monsterX, self.monsterY), (50, 71))
  68.         self.monster_Rect = self.monsterStatus.get_rect()


  69. def createMap():
  70.     screen.fill((255, 255, 255))
  71.     screen.blit(pygame.image.load('背景图.jpg'), (0, 0))  # 加载背景图片
  72.     screen.blit(Monster.monsterStatus, Monster.monsterRect)  # 加载怪物
  73.     screen.blit(Player.playerStatus, Player.playerRect)  # 加载任务
  74.     Player.playerUpdate()
  75.     pygame.display.update()
  76.     pygame.display.flip()


  77. def impactCheck():
  78.     # Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
  79.     # Player.playerRect = Player.playerStatus.get_rect()
  80.     # Monster.monsterRect = Monster.monsterStatus.get_rect()
  81.     # print (Player.playerRect)
  82.     # print (Monster.monsterRect)
  83.     if Monster.monsterRect.colliderect(Player.playerRect):

  84.         # fighting()
  85.         i = True
  86.         print(i)


  87. def fighting():
  88.     while True:
  89.         if Player.dead == False and Monster.dead == False:
  90.             if Player.PD >= Monster.PA:
  91.                 Player.HP = Player.HP
  92.             else:
  93.                 Player.HP -= Monster.PA
  94.             if Monster.PD >= Player.PA:
  95.                 Monster.HP = Monster.PD
  96.             else:
  97.                 Monster.HP -= Player.PA
  98.         else:
  99.             break


  100. if __name__ == '__main__':
  101.     pygame.init()
  102.     size = width, height = 800, 800
  103.     screen = pygame.display.set_mode(size)
  104.     pygame.display.set_caption('魔塔')
  105.     clock = pygame.time.Clock()
  106.     Player = Player()
  107.     Monster = Monster()
  108.     impactCheck()
  109.     while True:
  110.         clock.tick(60)
  111.         # impactCheck()
  112.         createMap()
  113.         for event in pygame.event.get():
  114.             if event.type == pygame.QUIT:
  115.                 pygame.quit()
  116.                 sys.exit()
  117.             # 在按下键盘时,设置player的属性为True
  118.             elif event.type == KEYDOWN:
  119.                 if event.key == K_a or event.key == K_LEFT:
  120.                     Player.playerwalkleft = True
  121.                 elif event.key == K_d or event.key == K_RIGHT:
  122.                     Player.playerwalright = True
  123.                 elif event.key == K_w or event.key == K_UP:
  124.                     Player.playerwalkforward = True
  125.                 elif event.key == K_s or event.key == K_DOWN:
  126.                     Player.playerwalkback = True
  127.                 # elif event.key == K_SPACE:
  128.                 # hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
  129.             # 在松开键盘时,设置player的属性为False
  130.             elif event.type == KEYUP:
  131.                 if event.key == K_a or event.key == K_LEFT:
  132.                     Player.playerwalkleft = False
  133.                     print('m', Monster.monsterRect)
  134.                     print('p', Player.playerRect)
  135.                     print('mmmmm',Monster.monster_Rect)
  136.                 elif event.key == K_d or event.key == K_RIGHT:
  137.                     Player.playerwalright = False
  138.                     print('m', Monster.monsterRect)
  139.                     print('p', Player.playerRect)
  140.                 elif event.key == K_w or event.key == K_UP:
  141.                     Player.playerwalkforward = False
  142.                     print('m', Monster.monsterRect)
  143.                     print('p', Player.playerRect)
  144.                 elif event.key == K_s or event.key == K_DOWN:
  145.                     Player.playerwalkback = False
  146.                     print('m', Monster.monsterRect)
  147.                     print('p', Player.playerRect)
  148.             # else:
  149.             # Player.playerwalkforward = False
  150.             # createMap()
  151.         # pygame.display.flip()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 15:58:37 | 显示全部楼层
yhhpf 发表于 2020-7-14 15:42
下面是在你基础上改的,图片名称你自己换下,代码里加了几个print输出验证的,你自己删掉。

Y 195
Y 200
Y 205
m <rect(100, 100, 50, 71)>
p <rect(0, -25, 50, 71)>
好像不太行啊,移动后坐标对不上啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 16:00:28 | 显示全部楼层

你初始化的X、Y,我改掉之后的初始化是在0,0。rect和你代码上的X,Y肯定对不上。两个调整为一致即可。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 16:06:29 | 显示全部楼层

你加上self.playerRect.left , self.playerRect.top = self.playerX ,self.playerY再看吧。这样是不是就对应上了?
其实你没必要去专门定义X,Y。直接用rect.left rect.top代替即可。


  1. import sys
  2. import pygame
  3. from pygame.locals import *


  4. class Player():
  5.     def __init__(self):
  6.         self.MAXHP = 100  # 生命上限
  7.         self.HP = 100  # 初始化当前生命
  8.         self.MAXMP = 100  # 魔法值上限
  9.         self.MP = 100  # 初始化当前魔法值
  10.         self.EXP = 0  # 初始化经验值
  11.         self.LV = 1  # 初始化登记
  12.         self.PA = 50  # 初始化物理攻击力
  13.         self.MA = 50  # 初始化魔法攻击力
  14.         self.PD = 10  # 初始化物理防御值
  15.         self.MD = 10  # 初始化魔法防御值
  16.         self.dead = False
  17.         self.playerX = 200  # 初始X坐标
  18.         self.playerY = 200  # 初始Y坐标
  19.         self.playerwalkforward = False  # 向前移动
  20.         self.playerwalkback = False  # 向后移动
  21.         self.playerwalkleft = False  # 向左移动
  22.         self.playerwalright = False  # 向右移动
  23.         self.speed = 5  # 移动速度
  24.         self.playerStatus = pygame.image.load('code.jpg')  # 加载任务图像
  25.         self.playerRect = self.playerStatus.get_rect()
  26.         self.playerRect.left , self.playerRect.top = self.playerX ,self.playerY
  27.         # self.playerRect = pygame.Rect((self.playerX,self.playerY),(50,71)) #获取任务矩形
  28.         # self.playerRect = pygame.Rect((200,200),(50,71))

  29.     def playerUpdate(self):
  30.         if self.playerwalkforward:
  31.             self.playerY -= self.speed  # 向前移动
  32.             self.playerRect = self.playerRect.move([0, -self.speed])
  33.             print('Y', self.playerY)
  34.         elif self.playerwalkback:
  35.             self.playerY += self.speed  # 向后移动
  36.             self.playerRect = self.playerRect.move([0, self.speed])
  37.             print('Y', self.playerY)
  38.         elif self.playerwalkleft:
  39.             self.playerX -= self.speed  # 向左移动
  40.             self.playerRect = self.playerRect.move([-self.speed, 0 ])
  41.             print('X', self.playerX)
  42.         elif self.playerwalright:
  43.             self.playerX += self.speed  # 向右移动
  44.             self.playerRect = self.playerRect.move([self.speed, 0])
  45.             print('X', self.playerX)


  46. class Monster():
  47.     def __init__(self):
  48.         self.MAXHP = 100
  49.         self.HP = 100
  50.         self.MAXMP = 100
  51.         self.MP = 100
  52.         self.EXP = 0
  53.         self.LV = 1
  54.         self.PA = 50
  55.         self.MA = 50
  56.         self.PD = 10  # 初始化物理防御值
  57.         self.MD = 10  # 初始化魔法防御值
  58.         # self.GU = GU
  59.         self.dead = False
  60.         self.monsterX = 100
  61.         self.monsterY = 100
  62.         self.monsterStatus = pygame.image.load('code.jpg')
  63.         self.monsterRect = pygame.Rect((self.monsterX, self.monsterY), (50, 71))


  64. def createMap():
  65.     screen.fill((255, 255, 255))
  66.     screen.blit(pygame.image.load('背景图.jpg'), (0, 0))  # 加载背景图片
  67.     screen.blit(Monster.monsterStatus, (Monster.monsterX, Monster.monsterY))  # 加载怪物
  68.     screen.blit(Player.playerStatus, (Player.playerX, Player.playerY))  # 加载任务
  69.     Player.playerUpdate()
  70.     pygame.display.update()
  71.     pygame.display.flip()


  72. def impactCheck():
  73.     # Player.playerRect = pygame.Rect((Player.playerX,Player.playerY),(Player.playerStatus.get_width(),Player.playerStatus.get_height()))
  74.     # Player.playerRect = Player.playerStatus.get_rect()
  75.     # Monster.monsterRect = Monster.monsterStatus.get_rect()
  76.     # print (Player.playerRect)
  77.     # print (Monster.monsterRect)
  78.     if Monster.monsterRect.colliderect(Player.playerRect):
  79.         # fighting()
  80.         i = True
  81.         print(i)


  82. def fighting():
  83.     while True:
  84.         if Player.dead == False and Monster.dead == False:
  85.             if Player.PD >= Monster.PA:
  86.                 Player.HP = Player.HP
  87.             else:
  88.                 Player.HP -= Monster.PA
  89.             if Monster.PD >= Player.PA:
  90.                 Monster.HP = Monster.PD
  91.             else:
  92.                 Monster.HP -= Player.PA
  93.         else:
  94.             break


  95. if __name__ == '__main__':
  96.     pygame.init()
  97.     size = width, height = 800, 800
  98.     screen = pygame.display.set_mode(size)
  99.     pygame.display.set_caption('魔塔')
  100.     clock = pygame.time.Clock()
  101.     Player = Player()
  102.     Monster = Monster()
  103.     impactCheck()
  104.     while True:
  105.         clock.tick(60)
  106.         # impactCheck()
  107.         createMap()
  108.         for event in pygame.event.get():
  109.             if event.type == pygame.QUIT:
  110.                 pygame.quit()
  111.                 sys.exit()
  112.             # 在按下键盘时,设置player的属性为True
  113.             elif event.type == KEYDOWN:
  114.                 if event.key == K_a or event.key == K_LEFT:
  115.                     Player.playerwalkleft = True
  116.                 elif event.key == K_d or event.key == K_RIGHT:
  117.                     Player.playerwalright = True
  118.                 elif event.key == K_w or event.key == K_UP:
  119.                     Player.playerwalkforward = True
  120.                 elif event.key == K_s or event.key == K_DOWN:
  121.                     Player.playerwalkback = True
  122.                 # elif event.key == K_SPACE:
  123.                 # hero_temp.shoot() # 这里应该是飞机.显示子弹方法()
  124.             # 在松开键盘时,设置player的属性为False
  125.             elif event.type == KEYUP:
  126.                 if event.key == K_a or event.key == K_LEFT:
  127.                     Player.playerwalkleft = False
  128.                     print('m', Monster.monsterRect)
  129.                     print('p', Player.playerRect)
  130.                 elif event.key == K_d or event.key == K_RIGHT:
  131.                     Player.playerwalright = False
  132.                     print('m', Monster.monsterRect)
  133.                     print('p', Player.playerRect)
  134.                 elif event.key == K_w or event.key == K_UP:
  135.                     Player.playerwalkforward = False
  136.                     print('m', Monster.monsterRect)
  137.                     print('p', Player.playerRect)
  138.                 elif event.key == K_s or event.key == K_DOWN:
  139.                     Player.playerwalkback = False
  140.                     print('m', Monster.monsterRect)
  141.                     print('p', Player.playerRect)
  142.             # else:
  143.             # Player.playerwalkforward = False
  144.             # createMap()
  145.         # pygame.display.flip()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 13:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表