Skip to content

Commit

Permalink
Merge pull request #52 from HagenSR/Create-Grenade-Object
Browse files Browse the repository at this point in the history
Create grenade object
  • Loading branch information
erickbickler authored Jun 6, 2021
2 parents d540908 + 9143cc1 commit 8389e9e
Show file tree
Hide file tree
Showing 9 changed files with 115 additions and 13 deletions.
15 changes: 11 additions & 4 deletions game/common/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,19 @@ class Upgrades:
map_object = 4
damaging_object = 5
moving_object = 6
shooter = 7
item = 8
gun = 9
wall = 10
grenade = 7
shooter = 8
item = 9
gun = 10
wall = 11


class DamagingType:
none = 0
#note that bullet object has not been added yet
bullet = 1
grenade = 2

class GunType:
none = 0
handgun = 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class DamagingObject(MovingObject):
def __init__(self, range=0, damage=0, heading = None, speed = None,
health=None, coordinates=None, hitbox=None, collidable=None):
super().__init__(heading, speed, health, coordinates, hitbox, collidable)
self.__range = range
self.__damage = damage
self.range = range
self.damage = damage
self.object_type = ObjectType.damaging_object

@property
Expand Down
33 changes: 33 additions & 0 deletions game/common/moving/damaging/grenade.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from game.common.moving.damaging.damaging_object import DamagingObject
from game.common.stats import GameStats
from game.common.enums import *


class Grenade(DamagingObject):
def __init__(self, fuse_time = GameStats.grenade_stats['min_fuse_time'], range= None, damage= None,
heading = None, speed = None, health=None, coordinates=None, hitbox=None, collidable=None):
super().__init__(range, damage, heading, speed, health, coordinates, hitbox, collidable)
self.fuse_time = fuse_time
self.object_type = ObjectType.grenade

@property
def fuse_time(self):
return self.__fuse_time

@fuse_time.setter
def fuse_time(self, val):
if val >= GameStats.grenade_stats['min_fuse_time'] and val <= GameStats.grenade_stats['max_fuse_time']:
self.__fuse_time = val
else:
raise Exception("fuse time value outside bounds, Not set")


def to_json(self):
data = super().to_json()
data['fuse_time'] = self.fuse_time

return data

def from_json(self, data):
super().from_json(data)
self.fuse_time = data['fuse_time']
4 changes: 2 additions & 2 deletions game/common/moving/moving_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class MovingObject(MapObject):
def __init__(self, heading=0, speed=0, health=None, coordinates=None, hitbox=None, collidable=None):
super().__init__(health, coordinates, hitbox, collidable)
# Double underscore 'name mangles' the variable. The closest to private we can get in python
self.__heading = heading
self.__speed = speed
self.heading = heading
self.speed = speed
self.object_type = ObjectType.moving_object

@property
Expand Down
5 changes: 5 additions & 0 deletions game/common/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,11 @@ class GameStats:
'fire_rate': 1, 'range': 100, 'mag_size': 1, 'reload_speed': 8,
'cooldown': {'max': 1, 'rate': 1}, 'level_mod': 1.25}
}

grenade_stats = {
'min_fuse_time': 10,
'max_fuse_time': 50
}

Upgrades.gun_upgrades = 20 #Could potentially incease bullet speed?
Upgrades.movement_upgrades = 20 #May be used to make the player go faster?
Expand Down
2 changes: 2 additions & 0 deletions game/test_suite/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@
from game.test_suite.tests.objects.test_game_board import TestGameBoard
from game.test_suite.tests.objects.test_moving_object import TestMovingObject
from game.test_suite.tests.objects.test_damaging_object import TestDamagingObject
from game.test_suite.tests.objects.test_grenade import TestGrenade
from game.test_suite.tests.objects.test_initialization import TestInit

__all__ = [
'TestGameBoard',
'TestMovingObject',
'TestDamagingObject',
'TestGrenade',
'TestInit'
]
4 changes: 2 additions & 2 deletions game/test_suite/tests/objects/test_damaging_object.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import unittest
from game.common.moving import damaging_object
from game.common.moving.damaging_object import DamagingObject
from game.common.moving.damaging import damaging_object
from game.common.moving.damaging.damaging_object import DamagingObject
from game.common.stats import GameStats

class TestDamagingObject(unittest.TestCase):
Expand Down
54 changes: 54 additions & 0 deletions game/test_suite/tests/objects/test_grenade.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import unittest
from game.common.moving.damaging import grenade
from game.common.moving.damaging.grenade import Grenade
from game.common.stats import GameStats

class TestGrenade(unittest.TestCase):

def setUp(self):
self.grnObj = Grenade(10)

def test_set_get_fuse_time_valid(self):
self.grnObj.fuse_time = 20
self.assertEqual(self.grnObj.fuse_time, 20)


def test_set_get_fuse_time_invalid_low(self):
self.assertRaises(Exception, lambda : self.grnObj.fuse_time(0))

def test_set_get_fuse_time_invalid_high(self):
self.assertRaises(Exception, lambda : self.grnObj.fuse_time(100))

def test_set_get_fuse_time_boundary_low(self):
self.grnObj.fuse_time = GameStats.grenade_stats['min_fuse_time']
self.assertEqual(self.grnObj.fuse_time, GameStats.grenade_stats['min_fuse_time'])


def test_set_get_fuse_time_boundary_high(self):
self.grnObj.fuse_time = GameStats.grenade_stats['max_fuse_time']
self.assertEqual(self.grnObj.fuse_time, GameStats.grenade_stats['max_fuse_time'])


def test_grenade_obj_parent_params(self):

testGrn = Grenade(fuse_time = 20, range = 10, damage = 10, heading = 10, speed = 10, health = 1, coordinates=[{'x': 450, 'y': 450}, {'x': 50, 'y': 50}],
hitbox={'width': 10, 'height': 10}, collidable=True)

self.assertIsNotNone(testGrn.range)
self.assertIsNotNone(testGrn.damage)
self.assertIsNotNone(testGrn.heading)
self.assertIsNotNone(testGrn.speed)
self.assertIsNotNone(testGrn.coordinates)
self.assertIsNotNone(testGrn.hitbox)
self.assertIsNotNone(testGrn.collidable)

self.assertIsNone(self.grnObj.range)
self.assertIsNone(self.grnObj.damage)
self.assertIsNone(self.grnObj.heading)
self.assertIsNone(self.grnObj.speed)
self.assertIsNone(self.grnObj.coordinates)
self.assertIsNone(self.grnObj.hitbox)
self.assertIsNone(self.grnObj.collidable)

if __name__ == '__main__':
unittest.main
7 changes: 4 additions & 3 deletions game/test_suite/tests/objects/test_initialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
import unittest
from game.common.items.gun import Gun
from game.common.items.item import Item
from game.common.moving.damaging_object import DamagingObject
from game.common.moving.moving_object import MovingObject
from game.common.moving.damaging_object import DamagingObject
from game.common.moving.damaging.damaging_object import DamagingObject
from game.common.moving.damaging.grenade import Grenade
from game.common.moving.shooter import Shooter
from game.common.action import Action
from game.common.game_board import GameBoard
Expand All @@ -22,9 +22,9 @@
class TestInit(unittest.TestCase): # Your test class is a subclass of unittest.Testcase, this is important

def setUp(self): # This method is used to set up anything you wish to test prior to every test method below.
breakpoint()
self.gun = Gun()
self.item = Item()
self.grnObj = Grenade()
self.damaging = DamagingObject()
self.movObj = MovingObject(10, 10)
self.shooter = Shooter()
Expand All @@ -37,6 +37,7 @@ def setUp(self): # This method is used to set up anything you wish to test prio

self.assertEqual(self.gun.object_type, ObjectType.gun)
self.assertEqual(self.item.object_type, ObjectType.item)
self.assertEqual(self.grnObj.object_type, ObjectType.grenade)
self.assertEqual(self.damaging.object_type, ObjectType.damaging_object)
self.assertEqual(self.movObj.object_type, ObjectType.moving_object)
self.assertEqual(self.shooter.object_type, ObjectType.shooter)
Expand Down

0 comments on commit 8389e9e

Please sign in to comment.