Please help me with this error, i cant seem to solve it. Traceback (most recent call last): File "/Users/Downloads/COS

Business, Finance, Economics, Accounting, Operations Management, Computer Science, Electrical Engineering, Mechanical Engineering, Civil Engineering, Chemical Engineering, Algebra, Precalculus, Statistics and Probabilty, Advanced Math, Physics, Chemistry, Biology, Nursing, Psychology, Certifications, Tests, Prep, and more.
Post Reply
answerhappygod
Site Admin
Posts: 899604
Joined: Mon Aug 02, 2021 8:13 am

Please help me with this error, i cant seem to solve it. Traceback (most recent call last): File "/Users/Downloads/COS

Post by answerhappygod »

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
Join a community of subject matter experts. Register for FREE to view solutions, replies, and use search function. Request answer by replying!
Post Reply