def uncover(request): """ 1. marks the block as selected 2. determines if user selected a mine 3. if there's a mine then send map of all mines to user 4. else return the number of mines in that area """ if request.is_ajax(): if request.method == 'POST': request.session.set_expiry(ONE_HOUR) json_data = json.loads( request.body ) try: row = json_data['row'] col = json_data['col'] except KeyError: print "Error: The post request did not json parameters as expected" return else: response_data = {} gameboard = GameBoard.deserialize( request.session[GAMEBOARD] ) response_data['gameover'] = gameboard.select_block(row, col) response_data['mine_locations'] = gameboard.get_mine_locations() if response_data['gameover'] else None response_data['consecutive_mineless_blocks'] = None if response_data['gameover'] else gameboard.uncover_consecutive_mineless_area(row, col) if response_data['gameover']: request.session.pop( GAMEBOARD, None ) else: request.session[GAMEBOARD] = gameboard.serialize() return HttpResponse(json.dumps(response_data), content_type="application/json; charset=utf8")
def resume_game(request): response_data = {} gameboard = GameBoard.deserialize( request.session[GAMEBOARD] ) selected_blocks = gameboard.get_selected_blocks() selection_data = [] for block in selected_blocks: selection_data += gameboard.uncover_consecutive_mineless_area(block[0], block[1]) response_data['selection_data'] = selection_data return HttpResponse(json.dumps(response_data), content_type="application/json; charset=utf8")
def new_game(request): """ starts a new game by completing the tasks: 1. Overwrite the previous session's game, if exists 2. Set the expiration of the current session in 1 hour """ if request.is_ajax(): if request.method == 'POST': request.session.set_expiry(ONE_HOUR) json_data = json.loads( request.body ) try: dim = json_data['dim'] resume_game = json_data['resume_game'] except KeyError: print "Error: The post request did not json parameters as expected" return else: if len(dim) is 2: try: gameboard = None if resume_game: gameboard = GameBoard.deserialize( request.session[GAMEBOARD] ) dim = gameboard.dim else: gameboard = GameBoard(dim) request.session[GAMEBOARD] = gameboard.serialize() except TypeError: print "Error: The dimensions provided in the request were not of the expected type" return else: response_data = {} t = loader.get_template('minesweeper/gameboard.html') c = Context({'rows' : range(dim[0]), 'cols' : range(dim[1])}) response_data['html_gameboard'] = t.render(c) response_data['dim'] = gameboard.dim return HttpResponse(json.dumps(response_data), content_type="application/json; charset=utf8")