def swap(request, game_id): if request.is_ajax(): try: game = Game.objects.get(pk=game_id) except: return HttpResponse('{"success":false, "error":"Game does not exist"}', mimetype="application/json") if game.activePlayer.id != request.user.id: return HttpResponse('{"success":false, "error":"Not your turn"}', mimetype="application/json") post = request.POST tiles = post.get('swap','[]') tiles = json.loads(tiles) swap = [] for tile in tiles: swap.append(Tile(tile['x'],tile['y'])) model = Assimilation(JSON=game.state) if not model.swapTiles(swap, request.user.id): return HttpResponse('{"success":false, "error":"Invalid tile submission"}', mimetype="application/json") game.state = model.export() game.activePlayer = game.gameuser_set.exclude(user=game.activePlayer)[0].user game.updated = datetime.now() game.save() return HttpResponse('{"success":true}', mimetype="application/json") raise Http404
def resign(request, game_id): if request.is_ajax(): try: game = Game.objects.get(pk=game_id) except: return HttpResponse('{"success":false, "error":"Game does not exist"}', mimetype="application/json") if game.activePlayer.id != request.user.id: return HttpResponse('{"success":false, "error":"Not your turn"}', mimetype="application/json") model = Assimilation(JSON = game.state) model.resign(request.user.id) game.state = model.export() for player in model.players: p = game.gameuser_set.get(user=player.id) p.score = player.score p.save() if model.status == 'complete': game.status = 'complete' for player in model.players: if player.score > 0: p = game.gameuser_set.get(user = player.id) p.won = True p.save() game.updated = datetime.now() game.save() return HttpResponse('{"success":true}', mimetype="application/json") raise Http404
def getgame(request, game_id): if request.method == 'GET': updated = datetime.fromtimestamp(float(request.GET.get('updated',0))) try: game = Game.objects.get(pk=game_id, updated__gt=updated) game.users = game.gameuser_set.all() except Game.DoesNotExist: return HttpResponse('{"success":true}', mimetype="application/json") if game.state == 'init': return render_to_response('ajax/game.json', {"game":game}, context_instance=RequestContext(request)) temp = Assimilation(JSON=game.state) state = temp.getStateFor(request.user.id, True) return render_to_response('ajax/game.json', {"game":game, "state":state}, context_instance=RequestContext(request)) return HttpResponse('{"success":false, "error":"cannot use ' + request.method + '"}', mimetype="application/json")
def usergames(request): user_id = request.user.id userTime = datetime.fromtimestamp(float(request.GET.get('time',0))) # games = []; try: # gameUsers = GameUser.objects.filter(user = user_id) print 'trying to get games' games = Game.objects.filter(gameuser__user=user_id).filter(updated__gt=userTime) print len(games) for game in games: game.users = game.gameuser_set.all() game.playerState = {} if game.status != 'init': temp = Assimilation(JSON=game.state) game.playerState = temp.getStateFor(user_id) except GameUser.DoesNotExist: pass return render_to_response('ajax/userlist.json', {'current_unix_timestamp': time.time(), 'games':games}, context_instance=RequestContext(request))
def placetile(request, game_id): if request.is_ajax(): try: game = Game.objects.get(pk=game_id) except: return HttpResponse('{"success":false, "error":"Game does not exist"}', mimetype="application/json") if game.activePlayer.id != request.user.id: return HttpResponse('{"success":false, "error":"Not your turn"}', mimetype="application/json") post = request.POST x = request.POST.get('x', None) y = request.POST.get('y', None) if x is None or y is None: return HttpResponse('{"success":false, "error":"Need to submit a tile"}', mimetype="application/json") model = Assimilation(JSON=game.state) if not model.placeTile(Tile(x,y), request.user.id): return HttpResponse('{"success":false, "error":"Invalid move submission"}', mimetype="application/json") game.state = model.export() for player in model.players: p = game.gameuser_set.get(user=player.id) p.score = player.score p.save() game.activePlayer = game.gameuser_set.exclude(user=game.activePlayer)[0].user game.updated = datetime.now() if model.status == 'complete': game.status = 'complete' for player in model.players: if player.score > 0: p = game.gameuser_set.get(user = player.id) p.won = True p.save() game.save() return HttpResponse('{"success":true}', mimetype="application/json") raise Http404
def joingame(request, game_id): if request.method == "POST": post = request.POST color = post.get('color','') password = post.get('password','') try: game = Game.objects.get(pk=game_id) except Game.DoesNotExist: return HttpResponse('{"success":false, "error":"Game does not exist"}', mimetype="application/json") if game.status != "init": return HttpResponse('{"success":false, "error":"Can\'t join this game"}', mimetype="application/json") if game.password: if hashlib.sha384(game.salt + password).hexdigest() != game.password: return HttpResponse('{"success":false, "error":"Invalid password"}', mimetype="application/json") if game.creator == request.user: return HttpResponse('{"success":false, "error":"Can\'t join your own game"}', mimetype="application/json") colors = ['blue','green','yellow','orange','red','teal'] remove = game.gameuser_set.get(user=game.creator).color colors.remove(remove) if color not in colors: return HttpResponse('{"success":false, "error":"invalid color submitted"}', mimetype="application/json") game.status = "playing" game.activePlayer = game.creator if random.random() < 0.5 else request.user g = Assimilation(game.id, game.size, [request.user.id,game.creator.id]) game.state = g.export() game.updated = datetime.now() game.save() player = GameUser() player.game = game player.color = color player.user = request.user player.score = 0 player.won = False player.save() return HttpResponse('{"success":true}', mimetype="application/json") else: raise Http404