Beispiel #1
0
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
Beispiel #2
0
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 
Beispiel #3
0
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
Beispiel #4
0
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