Example #1
0
 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()
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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)
Example #5
0
 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)
Example #6
0
 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))
Example #7
0
 def get(self,gpath):
     GAME=GAMES[gpath]
     pl=getCurrentPlayer()
     gmNum=self.request.get("gameID")
     load(self,"startGame.html",{"gameID":gmNum})