Finished Part 2

This commit is contained in:
2019-06-22 22:44:41 -04:00
parent a582009210
commit 2e7d121be3
6 changed files with 123 additions and 25 deletions

View File

@@ -1,29 +1,41 @@
import tcod import tcod as tc
from entity import Entity
from render_functions import *
from game_map import *
from input_handlers import handle_keys from input_handlers import handle_keys
def main(): def main():
screen_width = 80 screen_width = 80
screen_height = 50 screen_height = 50
map_width = 80
map_height = 50
player_x = int(screen_width/2) colors = {
player_y = int(screen_height/2) 'dark_wall': tc.Color(0, 0, 100),
'dark_ground': tc.Color(50, 50, 150)
}
tcod.console_set_custom_font('arial10x10.png', tcod.FONT_TYPE_GREYSCALE | tcod.FONT_LAYOUT_TCOD) player = Entity(int(screen_width/2), int(screen_height/2), '@', tc.white)
npc = Entity(int(screen_width/2), int(screen_height/2), '@', tc.yellow)
entities = [npc, player]
tcod.console_init_root(screen_width, screen_height, 'tutorial revised', False) tc.console_set_custom_font('arial10x10.png', tc.FONT_TYPE_GREYSCALE | tc.FONT_LAYOUT_TCOD)
con = tcod.console_new(screen_width, screen_height)
key = tcod.Key() tc.console_init_root(screen_width, screen_height, 'tutorial revised', False)
mouse = tcod.Mouse() con = tc.console_new(screen_width, screen_height)
while not tcod.console_is_window_closed(): game_map = GameMap(map_width, map_height)
tcod.sys_check_for_event(tcod.EVENT_KEY_PRESS, key, mouse)
tcod.console_set_default_foreground(con, tcod.white)
tcod.console_put_char(con, player_x, player_y, '@', tcod.BKGND_NONE)
tcod.console_blit(con, 0,0, screen_width, screen_height, 0,0,0)
tcod.console_flush()
tcod.console_put_char(con, player_x, player_y, ' ', tcod.BKGND_NONE) key = tc.Key()
mouse = tc.Mouse()
while not tc.console_is_window_closed():
tc.sys_check_for_event(tc.EVENT_KEY_PRESS, key, mouse)
render_all(con, entities, game_map, screen_width, screen_height, colors)
tc.console_flush()
clear_all(con, entities)
action = handle_keys(key) action = handle_keys(key)
@@ -33,14 +45,15 @@ def main():
if move: if move:
dx, dy = move dx, dy = move
player_x += dx if not game_map.is_blocked(player.x + dx, player.y + dy):
player_y += dy player.move(dx, dy)
if exit: if exit:
return True return True
if fullscreen: if fullscreen:
tcod.console_set_fullscreen(not tcod.console_is_fullscreen()) tc.console_set_fullscreen(not tc.console_is_fullscreen())
if __name__ == '__main__': if __name__ == '__main__':
main() main()

14
entity.py Normal file
View File

@@ -0,0 +1,14 @@
class Entity:
"""
Generic object to represent players, enemies, items, etc.
"""
def __init__(self, x, y, char, color):
self.x = x
self.y = y
self.char = char
self.color = color
def move(self, dx, dy):
self.x += dx
self.y += dy

View File

@@ -1,18 +1,19 @@
import tcod import tcod as tc
def handle_keys(key): def handle_keys(key):
if key.vk == tcod.KEY_UP: if key.vk == tc.KEY_UP:
return {'move': (0,-1)} return {'move': (0,-1)}
elif key.vk == tcod.KEY_DOWN: elif key.vk == tc.KEY_DOWN:
return {'move': (0,1)} return {'move': (0,1)}
elif key.vk == tcod.KEY_LEFT: elif key.vk == tc.KEY_LEFT:
return {'move':(-1,0)} return {'move':(-1,0)}
elif key.vk == tcod.KEY_RIGHT: elif key.vk == tc.KEY_RIGHT:
return {'move':(1,0)} return {'move':(1,0)}
if key.vk == tcod.KEY_ENTER and key.lalt: if key.vk == tc.KEY_ENTER and key.lalt:
return {'fullscreen':True} return {'fullscreen':True}
elif key.vk == tcod.KEY_ESCAPE: elif key.vk == tc.KEY_ESCAPE:
return {'exit': True} return {'exit': True}
return {} return {}

13
map_objects.py Normal file
View File

@@ -0,0 +1,13 @@
class Tile:
"""
A tile on a map. May or may not be blocked, and may or may not block sight
"""
def __init__(self, blocked, block_sight=None):
self.blocked = blocked
# By default, if a tile is blocked, it also blocks sight
if block_sight is None:
block_sight = blocked
self.block_sight = block_sight

24
venv/game_map.py Normal file
View File

@@ -0,0 +1,24 @@
from map_objects import *
class GameMap:
def __init__(self, width, height):
self.width = width
self.height = height
self.tiles = self.initialize_tiles()
def initialize_tiles(self):
tiles = [[Tile(False) for y in range(self.height)] for x in range(self.width)]
tiles[30][22].blocked = True
tiles[30][22].block_sight = True
tiles[31][22].blocked = True
tiles[31][22].block_sight = True
tiles[32][22].blocked = True
tiles[32][22].block_sight = True
return tiles
def is_blocked(self, x, y):
if self.tiles[x][y].blocked:
return True
return False

33
venv/render_functions.py Normal file
View File

@@ -0,0 +1,33 @@
import tcod as tc
def render_all(con, entities, game_map, screen_width, screen_height, colors):
# Draw all tiles in the game map
for y in range(game_map.height):
for x in range(game_map.width):
wall = game_map.tiles[x][y].block_sight
if wall:
tc.console_set_char_background(con, x, y, colors.get('dark_wall'), tc.BKGND_SET)
else:
tc.console_set_char_background(con, x, y, colors.get('dark_ground'), tc.BKGND_SET)
# Draw all entities in the list
for entity in entities:
draw_entity(con, entity)
tc. console_blit(con, 0,0, screen_width, screen_height, 0, 0, 0)
def clear_all(con, entities):
for entity in entities:
clear_entity(con, entity)
def draw_entity(con, entity):
tc.console_set_default_foreground(con, entity.color)
tc.console_put_char(con, entity.x, entity.y, entity.char, tc.BKGND_NONE)
def clear_entity(con, entity):
# Erase the charect that represents this object
tc.console_put_char(con, entity.x, entity.y, ' ', tc.BKGND_NONE)