Skip to content

Commit

Permalink
Create gun object (#28)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
Co-authored-by: Christopher Parks <[email protected]>
  • Loading branch information
3 people authored May 30, 2021
1 parent 2cbd4b7 commit 16e628a
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 2 deletions.
Binary file removed .vs/byte_le_royale_2022/v16/.suo
Binary file not shown.
22 changes: 22 additions & 0 deletions game/common/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
73 changes: 73 additions & 0 deletions game/common/items/gun.py
Original file line number Diff line number Diff line change
@@ -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}
"""
3 changes: 2 additions & 1 deletion game/common/items/item.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -12,4 +13,4 @@ def to_json(self):

def from_json(self, data):
super().from_json(data)
self.count = data['count']
self.count = data['count']
9 changes: 9 additions & 0 deletions game/common/map_object.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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}
"""
21 changes: 20 additions & 1 deletion game/common/stats.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

from game.common.enums import *

class GameStats:
game_board_width = 500
Expand All @@ -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}
}

0 comments on commit 16e628a

Please sign in to comment.