コード例 #1
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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
コード例 #2
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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 
コード例 #3
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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")
コード例 #4
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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))
コード例 #5
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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
コード例 #6
0
ファイル: views.py プロジェクト: stringham/assimilationgame
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