From b8c6d68a5cab956e88a3fc888da2f67ec7b724e8 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Mon, 31 May 2021 13:03:39 -0500 Subject: [PATCH 1/9] created damaging folder for damaging_object and its cchildren --- game/common/moving/{ => damaging}/damaging_object.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename game/common/moving/{ => damaging}/damaging_object.py (100%) diff --git a/game/common/moving/damaging_object.py b/game/common/moving/damaging/damaging_object.py similarity index 100% rename from game/common/moving/damaging_object.py rename to game/common/moving/damaging/damaging_object.py From 60e38d96dad2161877e0aa5601e76fc35d88dba8 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Wed, 2 Jun 2021 21:56:37 -0500 Subject: [PATCH 2/9] added damaging enums to enums.py --- game/common/enums.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/game/common/enums.py b/game/common/enums.py index 73880954..6113156e 100644 --- a/game/common/enums.py +++ b/game/common/enums.py @@ -14,7 +14,11 @@ class ObjectType: map_object = 5 item = 6 gun = 7 - + +class DamagingType: + none = 0 + bullet = 1 + grenade = 2 class GunType: none = 0 From 8af832bbe2a99d1fbd6ceb2f4782ef627bd5e28c Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Wed, 2 Jun 2021 22:51:13 -0500 Subject: [PATCH 3/9] fixed enums for realsies this time and started grenade object and unit tests --- game/common/enums.py | 18 +++------ game/common/moving/damaging/grenade.py | 21 +++++++++++ game/common/stats.py | 6 +++ game/test_suite/tests/test_grenade.py | 51 ++++++++++++++++++++++++++ 4 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 game/common/moving/damaging/grenade.py create mode 100644 game/test_suite/tests/test_grenade.py diff --git a/game/common/enums.py b/game/common/enums.py index 9d1b00a6..9d6f0caf 100644 --- a/game/common/enums.py +++ b/game/common/enums.py @@ -10,17 +10,6 @@ class ObjectType: action = 1 player = 2 game_board = 3 -<<<<<<< HEAD - shooter = 4 - map_object = 5 - item = 6 - gun = 7 - -class DamagingType: - none = 0 - bullet = 1 - grenade = 2 -======= map_object = 4 damaging_object = 5 moving_object = 6 @@ -29,7 +18,12 @@ class DamagingType: gun = 9 wall = 10 ->>>>>>> 56777947cd75f560937fd2892c5f9c0a2502d6b9 + +class DamagingType: + none = 0 + #note that bullet object has not been added yet + bullet = 1 + grenade = 2 class GunType: none = 0 diff --git a/game/common/moving/damaging/grenade.py b/game/common/moving/damaging/grenade.py new file mode 100644 index 00000000..b915982f --- /dev/null +++ b/game/common/moving/damaging/grenade.py @@ -0,0 +1,21 @@ +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 = 0 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 + + @property + def fuse_time(self): + return self._fuse_time + + @fuse_time.setter + def fuse_time(self, val): + if val >= fuse_time_min: + self._fuse_time = val + else: + raise Exception("fuse time value outside bounds, Not set") \ No newline at end of file diff --git a/game/common/stats.py b/game/common/stats.py index 77b9e96e..18a45896 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -48,3 +48,9 @@ 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 + } diff --git a/game/test_suite/tests/test_grenade.py b/game/test_suite/tests/test_grenade.py new file mode 100644 index 00000000..90a46bdb --- /dev/null +++ b/game/test_suite/tests/test_grenade.py @@ -0,0 +1,51 @@ +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_boundary_low(self): + self.grnObj.fuse_time = GameStats.grenade_stats['min_fuse_time'] + self.assertEqual(self.grnObj.damage, 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.damage, GameStats.grenade_stats['max_fuse_time']) + + + def test_grenade_obj_parent_params(self): + + testGrn = GrenadeObject(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 \ No newline at end of file From 1ec97e067f3c174e4e5d661a7d17874187720583 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Fri, 4 Jun 2021 23:49:02 -0500 Subject: [PATCH 4/9] moved grenade test cases into object folder, updated enums, fixed grenade stats syntax, and updated + made fixes to other test_suite files --- game/common/enums.py | 9 +++++---- game/common/stats.py | 3 +-- game/test_suite/tests/__init__.py | 2 ++ game/test_suite/tests/objects/test_damaging_object.py | 4 ++-- game/test_suite/tests/{ => objects}/test_grenade.py | 0 game/test_suite/tests/objects/test_initialization.py | 6 ++++-- 6 files changed, 14 insertions(+), 10 deletions(-) rename game/test_suite/tests/{ => objects}/test_grenade.py (100%) diff --git a/game/common/enums.py b/game/common/enums.py index 9d6f0caf..3292df5d 100644 --- a/game/common/enums.py +++ b/game/common/enums.py @@ -13,10 +13,11 @@ class ObjectType: 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: diff --git a/game/common/stats.py b/game/common/stats.py index 18a45896..ee680a7f 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -49,8 +49,7 @@ class GameStats: 'cooldown': {'max': 1, 'rate': 1}, 'level_mod': 1.25} } - grenade_stats = - { + grenade_stats = { 'min_fuse_time': 10, 'max_fuse_time:': 50 } diff --git a/game/test_suite/tests/__init__.py b/game/test_suite/tests/__init__.py index 5ff200a4..976d0cb7 100644 --- a/game/test_suite/tests/__init__.py +++ b/game/test_suite/tests/__init__.py @@ -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' ] \ No newline at end of file diff --git a/game/test_suite/tests/objects/test_damaging_object.py b/game/test_suite/tests/objects/test_damaging_object.py index 8b274c23..23f7432c 100644 --- a/game/test_suite/tests/objects/test_damaging_object.py +++ b/game/test_suite/tests/objects/test_damaging_object.py @@ -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): diff --git a/game/test_suite/tests/test_grenade.py b/game/test_suite/tests/objects/test_grenade.py similarity index 100% rename from game/test_suite/tests/test_grenade.py rename to game/test_suite/tests/objects/test_grenade.py diff --git a/game/test_suite/tests/objects/test_initialization.py b/game/test_suite/tests/objects/test_initialization.py index d0e2522b..c29d0f5d 100644 --- a/game/test_suite/tests/objects/test_initialization.py +++ b/game/test_suite/tests/objects/test_initialization.py @@ -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 @@ -25,6 +25,7 @@ def setUp(self): # This method is used to set up anything you wish to test prio breakpoint() self.gun = Gun() self.item = Item() + self.grnObj = GrenadeObject() self.damaging = DamagingObject() self.movObj = MovingObject(10, 10) self.shooter = Shooter() @@ -37,6 +38,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) From 956368cbd1676ac7f8347859b606d246fc174414 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Fri, 4 Jun 2021 23:53:00 -0500 Subject: [PATCH 5/9] Updated grenade object and added the to_json and from_json methods --- game/common/moving/damaging/grenade.py | 28 ++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/game/common/moving/damaging/grenade.py b/game/common/moving/damaging/grenade.py index b915982f..2b9f6e42 100644 --- a/game/common/moving/damaging/grenade.py +++ b/game/common/moving/damaging/grenade.py @@ -3,19 +3,31 @@ from game.common.enums import * -class Grenade(DamagingObject) - def __init__(self, fuse_time = 0 range= None, damage= None, heading = None, speed = None, - health=None, coordinates=None, hitbox=None, collidable=None): +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.__fuse_time = fuse_time + self.__object_type = ObjectType.grenade @property def fuse_time(self): - return self._fuse_time + return self.__fuse_time @fuse_time.setter def fuse_time(self, val): - if val >= fuse_time_min: - self._fuse_time = val + if val >= GameStats.grenade_stats['min_fuse_time']: + self.__fuse_time = val else: - raise Exception("fuse time value outside bounds, Not set") \ No newline at end of file + 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'] From 494323697a8ddcea9fdf5b2624f23b8d300b8dfa Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Sat, 5 Jun 2021 10:37:09 -0500 Subject: [PATCH 6/9] Fixed syntax error in grenade stats and resolved errors/fails from unit testing --- game/common/stats.py | 2 +- game/test_suite/tests/objects/test_grenade.py | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/game/common/stats.py b/game/common/stats.py index ee680a7f..0b341b16 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -51,5 +51,5 @@ class GameStats: grenade_stats = { 'min_fuse_time': 10, - 'max_fuse_time:': 50 + 'max_fuse_time': 50 } diff --git a/game/test_suite/tests/objects/test_grenade.py b/game/test_suite/tests/objects/test_grenade.py index 90a46bdb..2749b3c4 100644 --- a/game/test_suite/tests/objects/test_grenade.py +++ b/game/test_suite/tests/objects/test_grenade.py @@ -9,8 +9,8 @@ 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) + self.grnObj.fuse_time = 20 + self.assertEqual(self.grnObj.fuse_time, 20) def test_set_get_fuse_time_invalid_low(self): @@ -18,31 +18,31 @@ def test_set_get_fuse_time_invalid_low(self): def test_set_get_fuse_time_boundary_low(self): self.grnObj.fuse_time = GameStats.grenade_stats['min_fuse_time'] - self.assertEqual(self.grnObj.damage, 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.damage, 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 = GrenadeObject(fuse_time = 20, range = 10, damage = 10, heading = 10, speed = 10, health = 1, coordinates=[{'x': 450, 'y': 450}, {'x': 50, 'y': 50}], + 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.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.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) From 18c9b11ce7f71271bbd35ff61c7d61df595dd5d3 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Sat, 5 Jun 2021 10:48:13 -0500 Subject: [PATCH 7/9] updated Grenade name change in TestInit and removed the name mangling from object_type in Grenade --- game/common/moving/damaging/grenade.py | 2 +- game/test_suite/tests/objects/test_initialization.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/game/common/moving/damaging/grenade.py b/game/common/moving/damaging/grenade.py index 2b9f6e42..c5ddd74d 100644 --- a/game/common/moving/damaging/grenade.py +++ b/game/common/moving/damaging/grenade.py @@ -8,7 +8,7 @@ def __init__(self, fuse_time = GameStats.grenade_stats['min_fuse_time'], range= 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 + self.object_type = ObjectType.grenade @property def fuse_time(self): diff --git a/game/test_suite/tests/objects/test_initialization.py b/game/test_suite/tests/objects/test_initialization.py index c29d0f5d..53244cd3 100644 --- a/game/test_suite/tests/objects/test_initialization.py +++ b/game/test_suite/tests/objects/test_initialization.py @@ -25,7 +25,7 @@ def setUp(self): # This method is used to set up anything you wish to test prio breakpoint() self.gun = Gun() self.item = Item() - self.grnObj = GrenadeObject() + self.grnObj = Grenade() self.damaging = DamagingObject() self.movObj = MovingObject(10, 10) self.shooter = Shooter() From 3dd36a9e1e45876a2c9c233e0601b5824db7292c Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Sat, 5 Jun 2021 15:47:34 -0500 Subject: [PATCH 8/9] removed breakpoint from TestInit, added invalid high value to grenade test case, and updated bounds for setting fuse-time in grenade --- game/common/moving/damaging/grenade.py | 2 +- game/test_suite/tests/objects/test_grenade.py | 3 +++ game/test_suite/tests/objects/test_initialization.py | 1 - 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/game/common/moving/damaging/grenade.py b/game/common/moving/damaging/grenade.py index c5ddd74d..8e433e66 100644 --- a/game/common/moving/damaging/grenade.py +++ b/game/common/moving/damaging/grenade.py @@ -16,7 +16,7 @@ def fuse_time(self): @fuse_time.setter def fuse_time(self, val): - if val >= GameStats.grenade_stats['min_fuse_time']: + 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") diff --git a/game/test_suite/tests/objects/test_grenade.py b/game/test_suite/tests/objects/test_grenade.py index 2749b3c4..6b18c0dd 100644 --- a/game/test_suite/tests/objects/test_grenade.py +++ b/game/test_suite/tests/objects/test_grenade.py @@ -16,6 +16,9 @@ def test_set_get_fuse_time_valid(self): 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']) diff --git a/game/test_suite/tests/objects/test_initialization.py b/game/test_suite/tests/objects/test_initialization.py index 53244cd3..be38c117 100644 --- a/game/test_suite/tests/objects/test_initialization.py +++ b/game/test_suite/tests/objects/test_initialization.py @@ -22,7 +22,6 @@ 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() From fc66398f1eed65ca25c77e3124c2e1e166edab53 Mon Sep 17 00:00:00 2001 From: amanda-f-ndsu <71937870+amanda-f-ndsu@users.noreply.github.com> Date: Sun, 6 Jun 2021 12:57:38 -0500 Subject: [PATCH 9/9] changed attributes so that they use the property setter --- game/common/moving/damaging/damaging_object.py | 4 ++-- game/common/moving/damaging/grenade.py | 2 +- game/common/moving/moving_object.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/game/common/moving/damaging/damaging_object.py b/game/common/moving/damaging/damaging_object.py index da702309..00833f04 100644 --- a/game/common/moving/damaging/damaging_object.py +++ b/game/common/moving/damaging/damaging_object.py @@ -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 diff --git a/game/common/moving/damaging/grenade.py b/game/common/moving/damaging/grenade.py index 8e433e66..fc43f492 100644 --- a/game/common/moving/damaging/grenade.py +++ b/game/common/moving/damaging/grenade.py @@ -7,7 +7,7 @@ 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.fuse_time = fuse_time self.object_type = ObjectType.grenade @property diff --git a/game/common/moving/moving_object.py b/game/common/moving/moving_object.py index e9587757..1a11ca86 100644 --- a/game/common/moving/moving_object.py +++ b/game/common/moving/moving_object.py @@ -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