示例#1
0
	def getMinefield(self):
		"""
		Fetch the minefield for the current user.
		"""
		user = users.get_current_user()
		m = Minefield.gql("WHERE author = :1", user).get()
		if not(m):
			m = Minefield(
				author = user,
			)
			m.put()
		return m
示例#2
0
	def get(self):
		"""
		Processes events, renders minefield. Redirects for login, when necessary.
		"""
		user = users.get_current_user()
		
		if(user):
			m = Minefield.gql("WHERE author = :1", user).get()
			if not(m):
				m = Minefield(
					author = user,
				)
			
			# place any requested mines
			for point in self.request.get_all('mine'):
				x,y = [int(x) for x in point.split(',')]
				m.mine(x, y)
			
			# reveal any requested coordinates
			#  support multiple args for testing
			for point in self.request.get_all('reveal'):
				x,y = [int(x) for x in point.split(',')]
				m.reveal(x, y)
				if(m.getState(x,y) == -1):
					m.finished = True
			
			# hide any requested coordinates
			#  support multiple args for testing
			for point in self.request.get_all('hide'):
				x,y = [int(x) for x in point.split(',')]
				m.hide(x, y)
			
			# toggle 'finished' flag
			finish_req = self.request.get('finished')
			if(finish_req):
				m.finished = bool(int(finish_req))
			
			m.put()
			
			self.response.headers['Content-Type'] = 'text/plain'
			self.response.out.write('Hello, %s\n' % user.nickname())
			
			sep = ''.join(['='] * m.width) + '\n'
			
			self.response.out.write(sep)
			self.response.out.write(m.render())
			self.response.out.write(sep)
		else:
			self.redirect(users.create_login_url(self.request.uri))