Spaces:
Sleeping
Sleeping
File size: 3,299 Bytes
bd2a7ad |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
class Game:
def __init__(self):
self.map_size = 10
self.terrain = self.generate_terrain()
self.player_pos = [1, 1] # [x, y]
self.player_health = 10
self.player_attack = 2
self.inventory = []
self.monsters = {tuple([5, 5]): {'type': 'goblin', 'health': 5, 'attack': 1}}
self.items = {tuple([3, 3]): 'potion', tuple([6, 6]): 'sword'}
def generate_terrain(self):
# Simple hardcoded 10x10 map: 'w' for wall, 'f' for floor
terrain = [['w' if x == 0 or x == 9 or y == 0 or y == 9 else 'f'
for x in range(self.map_size)]
for y in range(self.map_size)]
terrain[4][4] = 'w' # Add an inner wall for variety
return terrain
def get_entities_grid(self):
grid = [['' for _ in range(self.map_size)] for _ in range(self.map_size)]
grid[self.player_pos[1]][self.player_pos[0]] = 'player'
for pos, monster in self.monsters.items():
grid[pos[1]][pos[0]] = monster['type']
for pos, item in self.items.items():
grid[pos[1]][pos[0]] = item
return grid
def get_game_state(self):
return {
'terrain': self.terrain,
'entities': self.get_entities_grid(),
'health': self.player_health,
'inventory': self.inventory,
'attack': self.player_attack
}
def is_valid_position(self, x, y):
return (0 <= x < self.map_size and 0 <= y < self.map_size and
self.terrain[y][x] != 'w')
def move_player(self, direction):
dx, dy = {'up': (0, -1), 'down': (0, 1), 'left': (-1, 0), 'right': (1, 0)}[direction]
new_x, new_y = self.player_pos[0] + dx, self.player_pos[1] + dy
if self.is_valid_position(new_x, new_y):
self.player_pos = [new_x, new_y]
pos_tuple = tuple(self.player_pos)
# Check for monster
if pos_tuple in self.monsters:
self.handle_combat(pos_tuple)
# Check for item
elif pos_tuple in self.items:
item = self.items.pop(pos_tuple)
self.inventory.append(item)
if item == 'sword':
self.player_attack += 1
from flask_socketio import emit
emit('message', 'Picked up a sword! Attack increased.')
else:
emit('message', f'Picked up a {item}!')
def handle_combat(self, pos):
from flask_socketio import emit
monster = self.monsters[pos]
monster_health = monster['health']
while monster_health > 0 and self.player_health > 0:
monster_health -= self.player_attack
emit('message', f"You attack the {monster['type']} for {self.player_attack} damage.")
if monster_health <= 0:
emit('message', f"You defeated the {monster['type']}!")
del self.monsters[pos]
break
self.player_health -= monster['attack']
emit('message', f"The {monster['type']} attacks you for {monster['attack']} damage.")
if self.player_health <= 0:
emit('message', 'Game over! You were defeated.')
break |