The first thing I did was to copy the entire contents of ex47 to ex52. Then I renamed game.py to map.py and made a corresponding change for the test case also. Then I ran 'nosetests' and everything seems to be fine at this stage.
In exercise 42, each room was a function in the Room class. But now in exercise 52, we will make each Room an instance of the Room class. I coded the class map.py (containing all the rooms) as shown in the book. Next, I am going to copy the map_tests.py file as is in the tests directory.
After copying the code in map.py, I created another Python module for messages, called messages.py. This module will contain the initial text for all the rooms, as well as the transition text, which is displayed to the user when they transition from one room to another.
Next, I refactored map_tests.py to test all the rooms, their initial text, and transitions.
The book then explains how lpthw.web maintains sessions. I understand how sessions are managed, but the session variable which seems global to the module confused me, because it makes me think that only one instance of that variable would exist.
I copied the apps.py file in bin, and also fixed a couple of bugs.
I also added two HTML templates - layout.html, show_room.html, and game_lost.html
Part of the code is embedded below:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import web | |
from gothonweb import map | |
urls = ( | |
'/game', 'GameEngine', | |
'/', 'Index', | |
) | |
app = web.application(urls, globals()) | |
# little hack so that debug mode works with sessions | |
if web.config.get('_session') is None: | |
store = web.session.DiskStore('sessions') | |
session = web.session.Session(app, store, initializer={'room': None}) | |
web.config._session = session | |
else: | |
session = web.config._session | |
render = web.template.render('templates/', base="layout") | |
class Index(object): | |
def GET(self): | |
# setup the session with starting values | |
session.room = map.START | |
web.seeother("/game") | |
class GameEngine(object): | |
def GET(self): | |
if session.room: | |
return render.show_room(room=session.room) | |
else: | |
return render.game_lost() | |
def POST(self): | |
form = web.input(action=None) | |
if session.room and form.action: | |
transition = session.room.go(form.action) | |
if transition == None: | |
transition = session.room.go('*') | |
if transition != None: | |
session.room = transition.room | |
else: | |
session.room = None | |
web.seeother("/game") | |
if __name__ == "__main__": | |
app.run() |
No comments:
Post a Comment