예제 #1
0
def start_game(offer):
  error = False
  try:
    if 'userId' in session:
      player_id = session['userId']
    else:
      player = Player()
      Player.insert(player)
      player_id = player.id
      session['userId'] = player.id
    offer = Offer.query.filter_by(id=offer).first()
    new_game = Game(player_one=offer.player_one, player_two = player_id)
    Game.insert(new_game)
    game = new_game.id
    offer.delete()
    current_state = State(game_id=new_game.id, move_number=1,move='white',position=start_position)
    State.insert(current_state)
    data = current_state.position
  except:
    error = True
    db.session.rollback()
    print(sys.exc_info())
  finally:
    db.session.close()
  if error:
    return 'error'
  else:
    return redirect(url_for('black', game = game))
예제 #2
0
파일: app.py 프로젝트: Supersharas/game
def move():
    error = False
    if request.method == 'POST':
        content = json.loads(request.data)
        figure = content.get('figure', None)
        promote = content.get('promote', None)
        move_number = content.get('moveNumber', None)
        gameId = content.get('gameId', None)
        app.logger.info('gameId: %s' % gameId)
        if figure:
            if session['userId']:
                state = State.query.filter_by(game_id=gameId).order_by(
                    State.move_number.desc()).first()
                app.logger.info('state: %s' % state)
                check = legal(state, figure, content['move'])
                if check == 1:
                    try:
                        legal_move = reffery(state, figure, content['move'],
                                             promote)
                        next_state = State(
                            game_id=state.game_id,
                            move_number=state.move_number + 1,
                            move=legal_move['next_move'],
                            position=legal_move['new_position'],
                            white_timer=legal_move['time']['white'],
                            black_timer=legal_move['time']['black'])
                        State.insert(next_state)
                        data = next_state.format()
                        cash_put(state.game_id, state.move_number + 1)
                    except:
                        error = True
                        db.session.rollback()
                        app.logger.info(sys.exc_info())
                        app.logger.info(sys.argv[1])
                    finally:
                        db.session.close()
                    if error:
                        return json.dumps({'error': True})
                    return json.dumps(data)
                    #return json.dumps({'promotion': data})
                else:
                    return json.dumps({'error': check})
        if move_number:
            if session['userId']:
                cashed = cash_get(gameId, move_number)
                if cashed:
                    return json.dumps(None)
                state = State.query.join(Game).filter(
                    or_(Game.player_one == session['userId'],
                        Game.player_two == session['userId'])).order_by(
                            State.move_number.desc()).first()
                new_state = state.format()
                db.session.close()
                if move_number < new_state['move_number']:
                    return json.dumps(new_state)
                else:
                    return json.dumps(None)
    else:
        return json.dumps({'kas': 'per huiniene'})