From 16e628ac276913f2fbd7e06310bf7a3a98a3b58f Mon Sep 17 00:00:00 2001 From: Christopher Parks <55614090+Anomalous-Creator@users.noreply.github.com> Date: Sun, 30 May 2021 01:20:12 +0000 Subject: [PATCH] Create gun object (#28) * added game board and stats file * fixed imports * added obfuscate method * added lethal list * added unit tests * added lethal list to json methods * add logic for test based on game stats * initial map objects * removed unnecessary changes * added collidable property to map object * fixed mistakes, old implementation * unnecessary parameter removed * Created gun object, enums, stats, to string * added pattern, missing cooldown * added level, inheritance from item * added object types * moved gun object, added object types * removed .vs dir Co-authored-by: unknown Co-authored-by: Christopher Parks --- .vs/byte_le_royale_2022/v16/.suo | Bin 17920 -> 0 bytes game/common/enums.py | 22 ++++++++++ game/common/items/gun.py | 73 +++++++++++++++++++++++++++++++ game/common/items/item.py | 3 +- game/common/map_object.py | 9 ++++ game/common/stats.py | 21 ++++++++- 6 files changed, 126 insertions(+), 2 deletions(-) delete mode 100644 .vs/byte_le_royale_2022/v16/.suo create mode 100644 game/common/items/gun.py diff --git a/.vs/byte_le_royale_2022/v16/.suo b/.vs/byte_le_royale_2022/v16/.suo deleted file mode 100644 index f473652bf8696408e0da740e87268b42b8f1c9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17920 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 Sz(OJ$SCLSSG~ufroA7_XGWW;; diff --git a/game/common/enums.py b/game/common/enums.py index 4e048794..0cd31962 100644 --- a/game/common/enums.py +++ b/game/common/enums.py @@ -10,3 +10,25 @@ class ObjectType: action = 1 player = 2 game_board = 3 + map_object = 4 + item = 5 + gun = 6 + +class GunType: + none = 0 + handgun = 1 + assault_rifle = 2 + shotgun = 3 + sniper = 4 + +class GunLevel: + level_zero = 0 + level_one = 1 + level_two = 2 + level_three = 3 + +class ShotPattern: + none = 0 + single = 1 + multi = 2 + spread = 3 diff --git a/game/common/items/gun.py b/game/common/items/gun.py new file mode 100644 index 00000000..f72f6a05 --- /dev/null +++ b/game/common/items/gun.py @@ -0,0 +1,73 @@ +from game.common.enums import * +from game.common.stats import GameStats +from game.common.items.item import Item + +class Gun(Item): + def __init__(self, gun_type, level): + super().__init__() + self.object_type = ObjectType.gun + + self.gun_type = gun_type + # Leveling subject to change + self.level = level + self.pattern = GameStats.gun_stats[gun_type]['pattern'] + self.damage = (round(GameStats.gun_stats[gun_type]['damage'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level), 1) + if self.level > GunLevel.level_zero else 0) + self.fire_rate = (round(GameStats.gun_stats[gun_type]['fire_rate'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level)) + if self.level > GunLevel.level_zero else 0) + self.range = (round(GameStats.gun_stats[gun_type]['range'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level)) + if self.level > GunLevel.level_zero else 0) + self.mag_size = (round(GameStats.gun_stats[gun_type]['mag_size'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level)) + if self.level > GunLevel.level_zero else 0) + self.reload_speed = (round(GameStats.gun_stats[gun_type]['reload_speed'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level)) + if self.level > GunLevel.level_zero else 0) + if self.level > GunLevel.level_zero: + self.cooldown = GameStats.gun_stats[gun_type]['cooldown'] + self.cooldown['max'] = round(self.cooldown['max'] + * (GameStats.gun_stats[gun_type]['level_mod'] ** self.level)) + else: + self.cooldown = {'max': 0, 'rate': 0} + + def to_json(self): + data = super().to_json() + data['gun_type'] = self.gun_type + data['level'] = self.level + data['pattern'] = self.pattern + data['damage'] = self.damage + data['fire_rate'] = self.fire_rate + data['range'] = self.range + data['mag_size'] = self.mag_size + data['reload_speed'] = self.reload_speed + data['cooldown'] = self.cooldown + + return data + + def from_json(self, data): + super().from_json(data) + self.gun_type = data['gun_type'] + self.level = data['level'] + self.pattern = data['pattern'] + self.damage = data['damage'] + self.fire_rate = data['fire_rate'] + self.range = data['range'] + self.mag_size = data['mag_size'] + self.reload_speed = data['reload_speed'] + self.cooldown = data['cooldown'] + + def __str__(self): + return f""" + Gun Type: {self.gun_type} + Level: {self.level} + Pattern: {self.pattern} + Damage: {self.damage} + Fire Rate: {self.fire_rate} + Range: {self.range} + Mag Size: {self.mag_size} + Reload Speed: {self.reload_speed} + Cooldown: {self.cooldown} + """ diff --git a/game/common/items/item.py b/game/common/items/item.py index 5f48bf8b..1e132fa7 100644 --- a/game/common/items/item.py +++ b/game/common/items/item.py @@ -3,6 +3,7 @@ class Item(MapObject): def __init__(self, coordinates, hitbox, health=None, count = 1): super().__init__(health, coordinates, hitbox, True) + self.object_type = ObjectType.item self.count = count def to_json(self): @@ -12,4 +13,4 @@ def to_json(self): def from_json(self, data): super().from_json(data) - self.count = data['count'] \ No newline at end of file + self.count = data['count'] diff --git a/game/common/map_object.py b/game/common/map_object.py index 6ac52587..c0dc8780 100644 --- a/game/common/map_object.py +++ b/game/common/map_object.py @@ -4,6 +4,8 @@ class MapObject(GameObject): def __init__(self, health=None, coordinates=None, hitbox=None, collidable=None): super().__init__() + self.object_type = ObjectType.map_object + self.health = health self.coordinates = coordinates self.hitbox = hitbox @@ -25,3 +27,10 @@ def from_json(self, data): self.hitbox = data['hitbox'] self.collidable = data['collidable'] + def __str__(self): + return f""" + Health: {self.health} + Coordinates: {self.coordinates} + Hitbox: {self.hitbox} + Collidable: {self.collidable} + """ diff --git a/game/common/stats.py b/game/common/stats.py index 3b40d68d..29d380c5 100644 --- a/game/common/stats.py +++ b/game/common/stats.py @@ -1,4 +1,4 @@ - +from game.common.enums import * class GameStats: game_board_width = 500 @@ -9,3 +9,22 @@ class GameStats: 'starting_coordinates': [{'x': 450, 'y': 450}, {'x': 50, 'y': 50}], 'hitbox': {'width': 10, 'height': 10} } + +# Placeholder stats, stats may be created for all gun levels + gun_stats = { + GunType.none: {'pattern': ShotPattern.none, 'damage': 0, + 'fire_rate': 0, 'range': 0, 'mag_size': 0, 'reload_speed': 0, + 'cooldown': {'max': 0, 'rate': 0}, 'level_mod': 1}, + GunType.handgun: {'pattern': ShotPattern.single, 'damage': 1, + 'fire_rate': 2, 'range': 30, 'mag_size': 13, 'reload_speed': 3, + 'cooldown': {'max': 8, 'rate': 2}, 'level_mod': 1.25}, + GunType.assault_rifle: {'pattern': ShotPattern.multi, 'damage': 1, + 'fire_rate': 5, 'range': 50, 'mag_size': 30, 'reload_speed': 6, + 'cooldown': {'max': 15, 'rate': 5}, 'level_mod': 1.25}, + GunType.shotgun: {'pattern': ShotPattern.spread, 'damage': 8, + 'fire_rate': 1, 'range': 10, 'mag_size': 2, 'reload_speed': 8, + 'cooldown': {'max': 1, 'rate': 1}, 'level_mod': 1.25}, + GunType.sniper: {'pattern': ShotPattern.single, 'damage': 9, + 'fire_rate': 1, 'range': 100, 'mag_size': 1, 'reload_speed': 8, + 'cooldown': {'max': 1, 'rate': 1}, 'level_mod': 1.25} + }