我正在尝试改变一个怪物的属性,如果玩家在最后一场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个小时里,我一直在努力解决这个问题,它让我发疯,我不能改变统计数据,任何和所有的帮助都是感激的抱歉,为大量的代码
如果玩家在某个特定的位置,那么对怪物进行子类化并创建Boss怪物比根据玩家的位置修改怪物更有意义。
错误如下:
怪物没有名为
player
的属性。你必须在创建怪物的时候传递玩家,我认为这是没有意义的。将玩家作为怪物的属性就更没有意义了。相关问题 更多 >
编程相关推荐