如果玩家越过某个x y点,则在初始时间内更改boss的统计信息

2024-05-13 02:41:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试改变一个怪物的属性,如果玩家在最后一场boss战斗中穿越了某个xy点Python,我会打电话给你自动播放器.x和自动播放器.y来查看玩家是否在这一点上,如果是的话,那么命中值将是500到1000之间的randint,力量值将是10到20之间。我做错什么了?这是我的密码

从gui运行它

你知道吗图形用户界面.py你知道吗

try:
    from tkinter import *
    from player import *
    from monster import *
    from random import *
    from boss import *
except ImportError as err:
    print('Import Error',err)

class SimpleGUI:
    def __init__(self):
        self.window = Tk()
        self.window.title('Final Project')
        self.window.protocol('WM_DELETE_WINDOW',self.exit)
        self.window.focus_set()
        self.canvas = Canvas(self.window,
                             width = 245,
                             height = 550,
                             bg = 'white')
        self.canvas.pack()

        self.player = Player()

        self.menu = Menu()

        self.monster = None



        self.boss = None



        self.canvas.focus_set()
        self.canvas.bind('w', self.w_key)
        self.canvas.bind('a', self.a_key)
        self.canvas.bind('s', self.s_key)
        self.canvas.bind('d', self.d_key)

        frame1 = Frame(self.window)
        frame1.pack()

        self.player_hp = StringVar()
        self.player_hp.set(int(self.player.hp))

        self.player_armor = StringVar()
        self.player_armor.set(int(self.player.armor))

        self.monster_hp = StringVar()
        self.monster_hp.set('0')


        Label(frame1, text = "Player HP:").grid(row = 1, column = 1)
        ply_hp = Label(frame1, textvariable = self.player_hp).grid(row = 1, column = 2)

        Label(frame1, text = "Monster HP:").grid(row = 3, column = 1)
        monster_hp = Label(frame1, textvariable = self.monster_hp).grid(row = 3, column = 2)



        self.bt_attack = Button(frame1,
                                text = 'Attack',
                                command = self.attack_button).grid(row = 4, column = 0)

        self.bt_defend = Button(frame1,
                                text = 'Defend',
                                command = self.defend_button).grid(row = 4, column = 2)

        self.bt_heal = Button(frame1,
                              text = 'Heal Self',
                              command = self.heal_button).grid(row = 4, column = 1)
        self.boss_attack = Button(frame1,
                                  text = 'Attack Boss',
                                  command = self.boss_battle).grid(row = 4, column = 3)


        self.dcroll = StringVar()

        self.battle_result = StringVar()





        Label(frame1, text = 'YOU ROLLED:').grid(row = 5, column = 0)

        roll = Label(frame1, textvariable = self.dcroll).grid(row = 5, column = 1)

        result = Label(frame1, textvariable = self.battle_result).grid(row = 5, column = 2)

        Label(frame1, text = 'Player Armor:').grid(row = 2, column = 1)

        armor = Label(frame1, textvariable = self.player_armor).grid(row = 2, column = 2)





        self.running = True
        self.menu = Menu()

        self.bt1 = Button(frame1,
                         text = 'Reset',
                         command = self.reset).grid(row = 6, column = 0)




        self.mainloop()
        self.window.mainloop()

    def mainloop(self):
        while self.running:
            self.canvas.delete(ALL)
            #boss square
            boss_start = self.canvas.create_rectangle(100,0,150,100, outline = 'black', fill = 'black', width = 2)
            #player start square
            ply_start = self.canvas.create_rectangle(100,500,150,550, outline = 'black', fill = 'black', width = 2)
            #row 9
            self.canvas.create_rectangle(0,50,50,100, outline = 'navy', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,50,100,100, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,50,150,100, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,50,200,100, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,50,250,100, outline = 'black', fill = 'black', width = 2)
            #row 8
            self.canvas.create_rectangle(0,100,50,150, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,100,100,150, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,100,150,150, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,100,200,150, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,100,250,150, outline = 'black', fill = 'black', width = 2)
            #row 7
            self.canvas.create_rectangle(0,150,50,200, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,150,100,200, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,150,150,200, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,150,200,200, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,150,250,200, outline = 'black', fill = 'black', width = 2)
            #row 6
            self.canvas.create_rectangle(0,200,50,250, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,200,100,250, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,200,150,250, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,200,200,250, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,200,250,250, outline = 'black', fill = 'black', width = 2)
            #row 5
            self.canvas.create_rectangle(0,250,50,300, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,250,100,300, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,250,150,300, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,250,200,300, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,250,250,300, outline = 'black', fill = 'black', width = 2)
            #row 4
            self.canvas.create_rectangle(0,300,50,350, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,300,100,350, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,300,150,350, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,300,200,350, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,300,250,350, outline = 'black', fill = 'black', width = 2)
            #row 3
            self.canvas.create_rectangle(0,350,50,400, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,350,100,400, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,350,150,400, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,350,200,400, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,350,250,400, outline = 'black', fill = 'black', width = 2)
            #row 2
            self.canvas.create_rectangle(0,400,50,450, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,400,100,450, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,400,150,450, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,400,200,450, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,400,250,450, outline = 'black', fill = 'black', width = 2)
            #row 1
            self.canvas.create_rectangle(0,450,50,500, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(50,450,100,500, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(100,450,150,500, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(150,450,200,500, outline = 'black', fill = 'black', width = 2)
            self.canvas.create_rectangle(200,450,250,500, outline = 'black', fill = 'black', width = 2)
            self.player.draw(self.canvas)

            self.canvas.after(30)
            self.canvas.update()




#------Functions------#




    def a_key(self, event):
        if self.boss == None:
            if self.monster == None:
                self.player.x -= self.player.speed
                if self.player.x < 0:
                    self.player.x = 0
                if self.player.y == 0:
                    if self.player.x <= 100:
                        self.player.x = 100
                if self.player.y == 500:
                    if self.player.x <= 100:
                        self.player.x = 100


                self.loot()

                self.will_battle()


    def w_key(self, event):
        if self.boss == None:
            if self.monster == None:
                self.player.y -= self.player.speed
                if self.player.y < 0:
                    self.player.y = 0
                if self.player.x < 100:
                    if self.player.y == 0:
                        self.player.y = 50
                if self.player.x > 100:
                    if self.player.y == 0:
                        self.player.y = 50



            self.loot()                   

            self.will_battle()



    def s_key(self, event):
        if self.boss == None:
            if self.monster == None:
                self.player.y += self.player.speed
                if self.player.y > 500:
                    self.player.y = 500
                if self.player.x < 100:
                    if self.player.y == 500:
                        self.player.y = 450
                if self.player.x > 100:
                    if self.player.y == 500:
                        self.player.y = 450



                self.loot()

                self.will_battle()

    def d_key(self, event):
        if self.boss == None:
            if self.monster == None:
                self.player.x += self.player.speed
                if self.player.x > 200:
                    self.player.x = 200
                if self.player.y == 0:
                    if self.player.x >= 150:
                        self.player.x = 100
                if self.player.y == 500:
                    if self.player.x >= 150:
                        self.player.x = 100



                self.loot()
                self.will_battle()









    def attack_button(self):
        if self.player.x == 100:
            if self.player.y == 0:
                self.monster == None

        if self.monster != None:
            attack = self.player.roll_dice()
            self.dcroll.set(str(attack))
            resolved = False
            for x in [7,9,11,12]:
                if attack == x:
                    self.monster.hp -= self.player.strength
                    self.battle_result.set('Hit')
                    resolved = True
            for x in [2,3,4]:
                if attack == x:
                    self.player.hp -= self.monster.strength
                    self.battle_result.set('Countered')
                    resolved = True
            if not resolved:
                self.battle_result.set('Miss')

            if self.player.hp <= 0:
                print('You died')
                self.player_hp.set(str(self.player.hp))
                self.reset()
            else:
                self.player_hp.set(str(self.player.hp))
            if self.monster.hp <= 0:
                print('You killed the monster')
                self.monster = None
                self.monster_hp.set('No monster')
            else:
                self.monster_hp.set(str(self.monster.hp))

    def defend_button(self):
        if self.monster != None:
            defend = self.player.roll_dice()
            self.dcroll.set(str(defend))
            resolved = False
            for x in [1,2,3,4,5,6,7,8,9,10,11]:
                if self.player.armor <= 0:
                    break
                if defend == x:
                    self.player.armor -= self.monster.strength
                    self.battle_result.set('Deflected some damage')
                    self.player_armor.set(str(self.player.armor))
                    resolved = True
            for x in [12]:
                if self.player.armor <= 0:
                    break
                if defend == x:
                    self.monster.hp -= self.player.strength
                    self.monster_hp.set(str(self.monster.hp))
                    self.battle_result.set('You block and counter attack')
                    resolved = True
            if self.player.armor <= 0:
                print('Armor is broken')
                for x in [1,2,3,4,5,6,7,8,9,10,11]:
                    if defend == x:
                        self.player.hp -= self.monster.strength
                        self.player_hp.set(str(self.player.hp))
                        self.battle_result.set('No Armor')
                        resolved = True
            if self.player.hp <= 0:
                print('You died')
                self.player_hp.set(str(self.player.hp))
                self.reset()
            else:
                self.player_hp.set(str(self.player.hp))

            if self.monster.hp <= 0:
                print('You killed the monster')
                self.monster = None
                self.monster_hp.set('No monster')
            else:
                self.monster_hp.set(str(self.monster.hp))




    def heal_button(self):
        if self.monster != None:
            heal = self.player.roll_dice()
            self.dcroll.set(str(heal))
            resolved = False
            for x in [5,6,8,10,12]:
                if self.player.hp <= 0:
                    break
                if self.player.hp >= 500:
                    self.battle_result.set('Full HP')
                    break
                if heal == x:
                    self.player.hp += 10
                    self.player_hp.set(str(self.player.hp))
                    self.battle_result.set('Healed 10 HP')
                    resolved = True
            for x in [3,7,9,11]:
                if heal == x:
                    self.player.hp -= self.monster.strength
                    self.player_hp.set(str(self.player.hp))
                    self.battle_result.set("You've been hit")
                    resolved = True

            if self.player.hp <= 0:
                print('You died')
                self.player_hp.set(str(self.player.hp))
                self.reset()
            else:
                self.player_hp.set(str(self.player.hp))
            if self.monster.hp <= 0:
                print('You killed the monster')
                self.monster = None
                self.monster_hp.set('No monster')
            else:
                self.monster_hp.set(str(self.monster.hp))




    def reset(self):
        self.running = False
        self.window.destroy()
        self = SimpleGUI()


    def will_battle(self):

        if self.player.x == 100:
            if self.player.y == 0:
                self.monster = None
                self.boss = Boss()
                self.monster_hp.set(int(self.boss.hp))
                print('working boss')

        chance = randint(1,2)
        if chance == 1:
            self.monster = Monster()
            self.monster_hp.set(int(self.monster.hp))
            print('working will_battle function')

    def loot(self):
        if self.monster == None:
            chance_loot = randint(1,6)
            if chance_loot == 6:
                self.player.strength += 1
                self.player.hp += 10
                self.player_hp.set(int(self.player.hp))
                self.battle_result.set('You recieve +1 Strength and a +10 health potion')
            if chance_loot == 3:
                self.player.armor += 50
                self.battle_result.set('You recieve bits of armor')
                self.player_armor.set(int(self.player.armor))


    def boss_battle(self):
        self.monster_hp.set(str(self.boss.hp))
        self.monster = None
        if self.boss != None:
            attack = self.player.roll_dice()
            self.dcroll.set(str(attack))
            resolved = False
            for x in [7,9,11,12]:
                if attack == x:
                    self.boss.hp -= self.player.strength
                    self.battle_result.set('Hit')
                    resolved = True
            for x in [2,3,4]:
                if attack == x:
                    self.player.hp -= self.boss.strength
                    self.battle_result.set('Countered')
                    resolved = True
            if not resolved:
                self.battle_result.set('Miss')

            if self.player.hp <= 0:
                print('You died')
                self.player_hp.set(str(self.player.hp))
                self.reset()
            else:
                self.player_hp.set(str(self.player.hp))
            if self.boss.hp <= 0:
                print('You killed the monster')
                self.boss = None
                self.monster_hp.set('No monster')
            else:
                self.monster_hp.set(str(self.boss.hp))





    def exit(self):
        self.running = False
        self.window.destroy()


if __name__ == '__main__':
    SimpleGUI()

你知道吗播放器.py你知道吗

try:
    from random import *
    from monster import *

except ImportError as err:
    print('Import Error, ', err)


class Player:
    def __init__(self, hp = 100, armor = 100, strength = 10):
        self.hp = hp
        self.armor = armor
        self.strength = strength
        self.x = 100
        self.y = 500
        self.speed = 50

    def draw(self, canvas): 
        canvas.create_oval(self.x,self.y,self.x+50,self.y+50, fill='red')

    def roll_dice(self):
        return randint(2,12)





if __name__ == '__main__':
    player = Player()

你知道吗怪物.py你知道吗

try:
    from random import *
    from player import *

except ImportError as err:
    print('Import Error' , err)

class Monster:
    def __init__(self, hp = 0, defense = 0, strength = 0):

        if self.player.x == 100:
            if self.player.y == 0:
                construct_boss()

        else:        
            self.hp = randint(1,1)
            self.defense = randint(0,50)
            self.strength = randint(0,0)

    def construct_boss(self):
        self.hp = randint(500,100)
        self.defense = randint(0,50)
        self.strength = randint(10,20)   

monster = Monster()

在过去的3个小时里,我一直在努力解决这个问题,它让我发疯,我不能改变统计数据,任何和所有的帮助都是感激的抱歉,为大量的代码


Tags: selfifcreatewidthfillhpcanvasblack
1条回答
网友
1楼 · 发布于 2024-05-13 02:41:46
  1. 如果玩家在某个特定的位置,那么对怪物进行子类化并创建Boss怪物比根据玩家的位置修改怪物更有意义。

  2. 错误如下:

    if self.player.x == 100:
    

    怪物没有名为player的属性。你必须在创建怪物的时候传递玩家,我认为这是没有意义的。将玩家作为怪物的属性就更没有意义了。

相关问题 更多 >