def post(self,gpath): GAME=GAMES[gpath] pl=getCurrentPlayer() gmNum=self.request.get("gameID") gm=GAME.get_by_key_name(gmNum) assert gm.player1.email()=="x " assert not pl pNum=randstr() gm.player1=User("p "+pNum) self.response.out.write("play?gameID="+gmNum+"&playerID="+pNum) gm.state|=STARTED gm.lastTurn=datetime.now() gm.put()
def get(self,gpath): GAME=GAMES[gpath] pl=getCurrentPlayer() if pl: tvals={"chtoken":pl.token} else: tvals={"playerID":self.request.get("playerID")} kname=self.request.get("gameID") gm=GAME.get_by_key_name(kname) tvals.update({"game":GAME.name, "gameID":kname, "path":[("/","all games"), ("/"+gpath+"/",GAME.name)]}) if gm.player1.email().startswith("x "): tvals["url"]="%s/%s/startgame?gameID=%s"%(self.request.host,gpath,kname) load(self,"wait.html",tvals)
def get(self,gpath): """Shows a page on which a game can be played""" pl = getCurrentPlayer() GAME=GAMES[gpath] gmNum=self.request.get('gameID') gm=GAME.get_by_key_name(gmNum) if not gm: self.redirect("/") return None if not gm.state&STARTED: logging.error("accessing a game which has not started") crash if pl: tvals = {"player":pl.playername, "chtoken":pl.token} if gm.player0==pl.account: playern=0;opp=gm.player1 elif gm.player1==pl.account: playern=1;opp=gm.player0 else:return None else: pnum=self.request.get("playerID") if gm.player0.email()=="p "+pnum: playern=0;opp=gm.player1 elif gm.player1.email()=="p "+pnum: playern=1;opp=gm.player0 else:return None tvals = {"player":"You","playerID":pnum} if opp.email().startswith("p "): tvals["opponent"]="Opponent" elif gm.state&AIP: tvals["opponent"]="AI" else: tvals["opponent"]=getPlayer(opp).playername tvals["playern"]=playern tvals["player0"]=tvals["opponent"] if playern else tvals["player"] tvals["player1"]=tvals["player"] if playern else tvals["opponent"] pagetype=self.request.get("pageType") if not pagetype:pagetype=gm.views[0] tvals["gameID"]=gmNum tvals["data"]=sjd(gm.getData()) tvals["path"]=[("/","all games"), ("",pagetype+" view")] tvals["links"]=[("?pageType="+ptype+"&gameID="+gmNum+ ("" if pl else "&playerID="+pnum), ptype+" view") for ptype in gm.views if ptype!=pagetype] load(self,"/%s/%s.html"%(gpath,pagetype),tvals)
def post(self,gpath): pl=getCurrentPlayer() if not pl:return None GAME=GAMES[gpath] kname=self.request.get("gameID") gm=GAME.get_by_key_name(kname) if not gm or gm.state&STARTED: self.response.out.write("no") return None check(pl.account,gm.player1,"player replying to a game which they are not part of") answer=self.request.get("answer") assert answer in ["yes","no"] message={"request":"reply","answer":answer} p0=getPlayer(gm.player0) if p0: p0.send(message) if answer=="yes": gm.state|=STARTED gm.lastTurn=datetime.now() gm.put() if answer=="no": db.delete(gm)
def get(self,gpath): GAME=GAMES[gpath] pl=getCurrentPlayer() tvals={} opps = [{"id":p.key().name(), "name":p.playername, "score":p.score }for p in players] opps+= [{"id":"a "+str(n), "name":ai.name, "score":ai.score }for n,ai in enumerate(GAME.ais)] opps+= [{"id":"y", "name":"someone else", "score":"NA" }] tvals.update({"game":GAME.name, "opponents":opps, "path":[("/","all games"), ("/"+gpath+"/",GAME.name)], "links":[("about","about "+GAME.name)]}) load(self,"newGame.html",tvals)
def post(self,gpath): return None #### pl = getCurrentPlayer() if not pl: return None gmNum=self.request.get('gameID') gameID = game_key(gmNum) gm=GameData.get(gameID) if not gm: return None players=[gm.playerX, gm.playerO] if pl.account not in players: return None content=self.request.get('msg') if not content:return None m=Message(parent=gm) m.sender=pl.account m.content=content m.put() chmessage={"request":"message", "content":"\n<b>"+pl.username+"</b>: "+content, "gameID":gm.key().name()} for player in players: channel.send_message(player.nickname(),sjd(chmessage))
def get(self,gpath): GAME=GAMES[gpath] pl=getCurrentPlayer() gmNum=self.request.get("gameID") load(self,"startGame.html",{"gameID":gmNum})