0
这个节目,我想提出在Python 2.7使用pygame的。这是我第一次尝试使用类创建游戏。我正在尝试初始化一个英雄的统计数据,比如hp,速度等,命名为'archer'。当我尝试运行代码,它给了我这个错误:错误而调用的类实例
Traceback (most recent call last): File "C:/Python27/rpg.py", line 85, in <module> archer.walk() NameError: name 'archer' is not defined
这里是我的代码。
from pygame import *
from random import *
from time import *
import pygame
init()
###############VARIABLES
xmove = 0
ymove = 0
white = (255,255,255)
###############INITIALIZING
def preStuff():
heroSelect()#choose a hero
initiateScreen()#set screen size
def initiateScreen():
screen = display.set_mode ((500,500))
def heroSelect():
print """ Welcome to Boss Fights!
Select a hero:
Archer: Use a bow for long range attacks! Attacks do little damage, but can hit from far away. Has average health.
Warrior: Smite enemies with his powerful sword! Attacks a very powerful, but have very short range and are quite slow. Has high health.
Assasin: Hit your enemy without them even seeing you! Assasin moves very quickly, and attacks quickly Has low health.
Alien: Blast your enemy with fire! Use a staff to shoot strong fireballs at enemies, with moderate damage and range. Has average health.
"""
heroC = raw_input('Which class would you like?')
if heroC == 'Archer' or 'archer' or 'ar':
archer=Hero(50,250,image.load('archer.png'),100,.3,.1)#initialize Hero as: archer
elif heroC == 'Warrior' or 'warrior' or 'w':
warrior=Hero(50,250,image.load('warrior.png'),200,.4,.05)
elif heroC == 'Assasin' or 'assasin' or 'as':
assasin=Hero(50,250,image.load('asassin.png'),125,.1,.2)
elif heroC == 'Alien' or 'alien' or 'al':
alien=Hero(50,250,image.load('alien.png'),150,.3,.1)
class Hero:
def __init__(self,x,y, blitImg,hp,attackspeed,speed):
self.x=x
self.y=y
self.blitImg=blitImg
self.hp = hp
self.attackspeed = attackspeed
self.speed=speed
def walk(self):
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_s:
ymove = self.speed
elif event.key == K_w:
ymove = -self.speed
elif event.key == K_a:
xmove = -self.speed
elif event.key == K_d:
xmove = self.speed
elif event.type == KEYUP:
if event.key == K_a or K_s or K_d or K_w:
xmove = 0
ymove = 0
self.y += ymove
self.x += xmove
screen.fill(white)
screen.blit(self.blitImg,(self.x,self.y))
display.update()
if __name__ == "__main__":
preStuff()
while True:
archer.walk()
我只是试图让现在的字符的步行路程。(和公正的弓箭手类) 我试图运行
archer=Hero(50,250,image.load('archer.png'),100,.3,.1)
在外壳
,并能正常工作。我可以调用archer.y和其余的变量,并且它们打印完美。请有人帮我弄清楚为什么这不起作用! (附注:我是一个初学编程的,所以请原谅如果是一些简单的,简单的办法是我太愚蠢实现) 谢谢!
好了,我将如何做呢?我之前从未使用过返回函数,并且在研究之后,我并不真正了解如何使用它。我会在heroSelect()和preStuff()的末尾添加返回射手吗? 'heroSelect'末尾的 –
只需添加'return heroC'这一行。在'preStuff'当调用'heroSelect',输出存储到一些变量,即'英雄= heroSelect()',这将给'hero'您从'heroSelect' reterned的值,并在preStuff的'结束'返回这个英雄变量,即'返回英雄' – George