Please help me with this error, i cant seem to solve it. Traceback (most recent call last): File "/Users/Downloads/COS
Posted: Sun May 15, 2022 1:45 pm
Please help me with this error, i cant seem to solve
it.
Traceback (most recent call last):
File "/Users/Downloads/COS30002/Agent Marksmanship/main.py",
line 9, in <module>
world.add(Soldier(600,400))
File "/Users/Downloads/COS30002/Agent
Marksmanship/GameObject.py", line 63, in __init__
self.last_fired = pygame.time() -
Soldier.weapon_cooldown[Soldier.weapon]
TypeError: 'module' object is not callable
main.py
from pyglet.gl import *
from GameObject import *
from World import World
from utils.graphics import KEY
# ---
world = World(1200, 800)
world.add(Soldier(600,400))
world.add(Enemy(800,700))
# ---
def on_key_press(symbol, modifiers):
if symbol == KEY.SPACE:
Soldier.predictive_aiming = not Soldier.predictive_aiming
elif symbol in Soldier.weapon_types:
Soldier.weapon = Soldier.weapon_types[symbol]
# ---
def on_mouse_motion(x, y, dx, dy):
world.mouse_position = Vector2D(x, y)
# ---
def on_mouse_press(x, y, button, modifiers):
world.add(Enemy(x,y))
# ---
window = pyglet.window.Window(
width = 1200,
height = 800,
vsync = True,
resizable = True
)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
graphics.InitWithPyglet(window)
window.push_handlers(on_key_press)
window.push_handlers(on_mouse_motion)
window.push_handlers(on_mouse_press)
while not window.has_exit:
window.dispatch_events()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
world.update()
world.draw()
window.flip()
-----------------------------------------------------------------------------------------------------------------------
GameObject.py
import pygments
from utils.vector2d import *
from utils.graphics import graphics, KEY
import pygame
import random
# ---
class GameObject:
def __init__(self, x, y):
self.world = None
self.active = True
self.position = Vector2D(x,y)
self.color = 'WHITE'
self.radius = 5
self.velocity = Vector2D()
self.previous_position = self.position
# ---
def update(self):
self.velocity = self.position - self.previous_position
self.previous_position = self.position.copy()
# ---
def draw(self):
graphics.set_pen_color(name = self.color)
graphics.set_stroke(2)
graphics.circle(self.position, self.radius)
# ---
class Soldier(GameObject):
weapon = 'Rifle'
predictive_aiming = True
weapon_types = {
KEY._1: 'Rifle',
KEY._2: 'Rocket',
KEY._3: 'Shotgun',
KEY._4: 'Grenade'
}
weapon_cooldown = {
'Rifle': 0.5,
'Rocket': 2.0,
'Shotgun': 1.0,
'Grenade': 1.5
}
def __init__(self, x, y):
GameObject.__init__(self, x, y)
self.color = 'WHITE'
self.radius = 15
self.last_fired = pygame.time() -
Soldier.weapon_cooldown[Soldier.weapon]
# ---
def update(self):
if pygame.time() - self.last_fired >
Soldier.weapon_cooldown[Soldier.weapon]:
self.last_fired = pygame.time()
enemies = list(filter(lambda game_object :
isinstance(game_object, Enemy), self.world.game_objects))
if not enemies:
return
target = min(enemies, key = lambda enemy :
self.position.distance_sq(enemy.position))
self.fire(target)
# ---
def get_predicted_position(self, enemy_position, enemy_velocity,
projectile_speed):
estimated_time = (enemy_position - self.position).length() /
projectile_speed
return enemy_position + enemy_velocity * estimated_time
# ---
def fire(self, enemy):
target_position = enemy.position
if Soldier.predictive_aiming:
projectile_speed = 20 if self.weapon in ['Rifle', 'Shotgun']
else 10
target_position = self.get_predicted_position(enemy.position,
enemy.velocity, projectile_speed)
if Soldier.weapon == 'Rifle':
self.world.add(Bullet(self.position, target_position))
elif Soldier.weapon == 'Rocket':
self.world.add(Rocket(self.position, target_position))
elif Soldier.weapon == 'Shotgun':
for i in range(5):
self.world.add(ShotgunShell(self.position, target_position))
elif Soldier.weapon == 'Grenade':
self.world.add(Grenade(self.position, target_position))
# ---
class Projectile(GameObject):
def __init__(self, position, target_position):
GameObject.__init__(self, position.x, position.y)
self.direction = (target_position - position).normalise()
self.speed = 5
# ---
def update(self):
self.position += self.direction * self.speed
if not pygments.Rect(0, 0, self.world.width,
self.world.height).collidepoint(self.position.x,
self.position.y):
self.active = False
return
for enemy in list(filter(lambda game_object:
isinstance(game_object, Enemy), self.world.game_objects)):
if (self.position - enemy.position).length_sq() <
pow(self.radius + enemy.radius, 2):
self.active = False
enemy.active = False
return
GameObject.update(self)
# ---
class Bullet(Projectile):
def __init__(self, position, target_position):
Projectile.__init__(self, position, target_position)
self.color = 'GREY'
self.radius = 5
self.speed = 20
# ---
class Rocket(Projectile):
def __init__(self, position, target_position):
Projectile.__init__(self, position, target_position)
self.color = 'ORANGE'
self.radius = 10
self.speed = 10
# ---
class ShotgunShell(Projectile):
def __init__(self, position, target_position):
target_position += Vector2D(
random.randrange(-100, 100),
random.randrange(-100, 100)
)
Projectile.__init__(self, position, target_position)
self.color = 'GREY'
self.radius = 5
self.speed = random.randrange(18, 22)
# ---
class Grenade(Projectile):
def __init__(self, position, target_position):
target_position += Vector2D(
random.randrange(-50, 50),
random.randrange(-50, 50)
)
Projectile.__init__(self, position, target_position)
self.color = 'GREEN'
self.radius = 10
self.speed = 10
# ---
class Enemy(GameObject):
def __init__(self, x, y):
GameObject.__init__(self, x, y)
self.speed = 10
self.color = 'RED'
self.radius = 15
# ---
def update(self):
if (self.world.mouse_position - self.position).length_sq() >
pow(self.radius, 2):
self.position += (self.world.mouse_position -
self.position).normalise() * self.speed
GameObject.update(self)
-----------------------------------------------------------------------------------------------------------------------
World.py
from GameObject import *
class World:
def __init__(self, width, height):
self.width = width
self.height = height
self.game_objects = []
self.mouse_position = Vector2D(0,0)
# ---
def update(self):
for game_object in self.game_objects:
game_object.update()
# Remove inactive GameObjects
self.game_objects = list(filter(lambda game_object:
game_object.active, self.game_objects))
# ---
def draw(self):
for game_object in self.game_objects:
game_object.draw()
graphics.white_pen()
graphics.text_at_pos(10, 25, 'Predictive aiming ' + ('on' if
Soldier.predictive_aiming else 'off'))
graphics.text_at_pos(10, 10, 'Weapon: ' + Soldier.weapon)
# ---
def add(self, game_object):
self.game_objects.append(game_object)
game_object.world = self
it.
Traceback (most recent call last):
File "/Users/Downloads/COS30002/Agent Marksmanship/main.py",
line 9, in <module>
world.add(Soldier(600,400))
File "/Users/Downloads/COS30002/Agent
Marksmanship/GameObject.py", line 63, in __init__
self.last_fired = pygame.time() -
Soldier.weapon_cooldown[Soldier.weapon]
TypeError: 'module' object is not callable
main.py
from pyglet.gl import *
from GameObject import *
from World import World
from utils.graphics import KEY
# ---
world = World(1200, 800)
world.add(Soldier(600,400))
world.add(Enemy(800,700))
# ---
def on_key_press(symbol, modifiers):
if symbol == KEY.SPACE:
Soldier.predictive_aiming = not Soldier.predictive_aiming
elif symbol in Soldier.weapon_types:
Soldier.weapon = Soldier.weapon_types[symbol]
# ---
def on_mouse_motion(x, y, dx, dy):
world.mouse_position = Vector2D(x, y)
# ---
def on_mouse_press(x, y, button, modifiers):
world.add(Enemy(x,y))
# ---
window = pyglet.window.Window(
width = 1200,
height = 800,
vsync = True,
resizable = True
)
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
graphics.InitWithPyglet(window)
window.push_handlers(on_key_press)
window.push_handlers(on_mouse_motion)
window.push_handlers(on_mouse_press)
while not window.has_exit:
window.dispatch_events()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
world.update()
world.draw()
window.flip()
-----------------------------------------------------------------------------------------------------------------------
GameObject.py
import pygments
from utils.vector2d import *
from utils.graphics import graphics, KEY
import pygame
import random
# ---
class GameObject:
def __init__(self, x, y):
self.world = None
self.active = True
self.position = Vector2D(x,y)
self.color = 'WHITE'
self.radius = 5
self.velocity = Vector2D()
self.previous_position = self.position
# ---
def update(self):
self.velocity = self.position - self.previous_position
self.previous_position = self.position.copy()
# ---
def draw(self):
graphics.set_pen_color(name = self.color)
graphics.set_stroke(2)
graphics.circle(self.position, self.radius)
# ---
class Soldier(GameObject):
weapon = 'Rifle'
predictive_aiming = True
weapon_types = {
KEY._1: 'Rifle',
KEY._2: 'Rocket',
KEY._3: 'Shotgun',
KEY._4: 'Grenade'
}
weapon_cooldown = {
'Rifle': 0.5,
'Rocket': 2.0,
'Shotgun': 1.0,
'Grenade': 1.5
}
def __init__(self, x, y):
GameObject.__init__(self, x, y)
self.color = 'WHITE'
self.radius = 15
self.last_fired = pygame.time() -
Soldier.weapon_cooldown[Soldier.weapon]
# ---
def update(self):
if pygame.time() - self.last_fired >
Soldier.weapon_cooldown[Soldier.weapon]:
self.last_fired = pygame.time()
enemies = list(filter(lambda game_object :
isinstance(game_object, Enemy), self.world.game_objects))
if not enemies:
return
target = min(enemies, key = lambda enemy :
self.position.distance_sq(enemy.position))
self.fire(target)
# ---
def get_predicted_position(self, enemy_position, enemy_velocity,
projectile_speed):
estimated_time = (enemy_position - self.position).length() /
projectile_speed
return enemy_position + enemy_velocity * estimated_time
# ---
def fire(self, enemy):
target_position = enemy.position
if Soldier.predictive_aiming:
projectile_speed = 20 if self.weapon in ['Rifle', 'Shotgun']
else 10
target_position = self.get_predicted_position(enemy.position,
enemy.velocity, projectile_speed)
if Soldier.weapon == 'Rifle':
self.world.add(Bullet(self.position, target_position))
elif Soldier.weapon == 'Rocket':
self.world.add(Rocket(self.position, target_position))
elif Soldier.weapon == 'Shotgun':
for i in range(5):
self.world.add(ShotgunShell(self.position, target_position))
elif Soldier.weapon == 'Grenade':
self.world.add(Grenade(self.position, target_position))
# ---
class Projectile(GameObject):
def __init__(self, position, target_position):
GameObject.__init__(self, position.x, position.y)
self.direction = (target_position - position).normalise()
self.speed = 5
# ---
def update(self):
self.position += self.direction * self.speed
if not pygments.Rect(0, 0, self.world.width,
self.world.height).collidepoint(self.position.x,
self.position.y):
self.active = False
return
for enemy in list(filter(lambda game_object:
isinstance(game_object, Enemy), self.world.game_objects)):
if (self.position - enemy.position).length_sq() <
pow(self.radius + enemy.radius, 2):
self.active = False
enemy.active = False
return
GameObject.update(self)
# ---
class Bullet(Projectile):
def __init__(self, position, target_position):
Projectile.__init__(self, position, target_position)
self.color = 'GREY'
self.radius = 5
self.speed = 20
# ---
class Rocket(Projectile):
def __init__(self, position, target_position):
Projectile.__init__(self, position, target_position)
self.color = 'ORANGE'
self.radius = 10
self.speed = 10
# ---
class ShotgunShell(Projectile):
def __init__(self, position, target_position):
target_position += Vector2D(
random.randrange(-100, 100),
random.randrange(-100, 100)
)
Projectile.__init__(self, position, target_position)
self.color = 'GREY'
self.radius = 5
self.speed = random.randrange(18, 22)
# ---
class Grenade(Projectile):
def __init__(self, position, target_position):
target_position += Vector2D(
random.randrange(-50, 50),
random.randrange(-50, 50)
)
Projectile.__init__(self, position, target_position)
self.color = 'GREEN'
self.radius = 10
self.speed = 10
# ---
class Enemy(GameObject):
def __init__(self, x, y):
GameObject.__init__(self, x, y)
self.speed = 10
self.color = 'RED'
self.radius = 15
# ---
def update(self):
if (self.world.mouse_position - self.position).length_sq() >
pow(self.radius, 2):
self.position += (self.world.mouse_position -
self.position).normalise() * self.speed
GameObject.update(self)
-----------------------------------------------------------------------------------------------------------------------
World.py
from GameObject import *
class World:
def __init__(self, width, height):
self.width = width
self.height = height
self.game_objects = []
self.mouse_position = Vector2D(0,0)
# ---
def update(self):
for game_object in self.game_objects:
game_object.update()
# Remove inactive GameObjects
self.game_objects = list(filter(lambda game_object:
game_object.active, self.game_objects))
# ---
def draw(self):
for game_object in self.game_objects:
game_object.draw()
graphics.white_pen()
graphics.text_at_pos(10, 25, 'Predictive aiming ' + ('on' if
Soldier.predictive_aiming else 'off'))
graphics.text_at_pos(10, 10, 'Weapon: ' + Soldier.weapon)
# ---
def add(self, game_object):
self.game_objects.append(game_object)
game_object.world = self