Exemplo n.º 1
0
def on_create(form):
    endgame_map = {
        0: EndGameDeaths.NotEnabled,
        1: EndGameDeaths.NotEnabled,
        2: EndGameDeaths.OneDead,
        3: EndGameDeaths.AllButOneDead
    }
    def_card_deal_map = {
        0: DefCardDeal.DealFixed,
        1: DefCardDeal.DealPlayerCount,
        2: DefCardDeal.KeepSize,
        3: DefCardDeal.DealAverageSpend,
        4: DefCardDeal.RemainingPlusFixed,
    }
    params = GameParams(form.b_falsics.data, form.b_defence.data,
                        form.b_offence.data, form.acc_prob.data / 100.0,
                        endgame_map[form.endgame.data], form.deck_size.data,
                        form.num_rounds.data, form.only_admin_starts.data,
                        form.can_attack_anyone.data,
                        def_card_deal_map[form.def_card_deal.data],
                        form.def_card_deal_size.data, form.hardcore_mode.data)
    game = get_game_manager().create_game(params)
    # TODO: wipe the old player, if set in session
    player = get_player_manager().create_player(form.player_name.data, game)
    game.join_player(player, True)
    db.session.commit()
    SessionHelper.set(SessionKeys.GAME_KEY, game.model.uniqueCode)
    SessionHelper.set(SessionKeys.PLAYER_ID, player.model.id)
    return redirect('/waitroom')
Exemplo n.º 2
0
def on_join(form):
    game = get_game_manager().get_game(form.game_key.data)
    # TODO: wipe the old player, if set in session
    player = get_player_manager().create_player(form.player_name.data, game)
    game.join_player(player, False)
    SessionHelper.set(SessionKeys.GAME_KEY, form.game_key.data)
    SessionHelper.set(SessionKeys.PLAYER_ID, player.model.id)

    return redirect('/waitroom')
Exemplo n.º 3
0
def rejoin() -> bool:
    player = get_player_manager().get_my_player()
    try:
        if player is not None and player.model.game.id == get_game_manager(
        ).get_my_game().model.id:
            print("this player is already in this game with name",
                  player.model.name)
            return True
    except BaseException as e:
        print(e)
    SessionHelper.delete(SessionKeys.PLAYER_ID)
    SessionHelper.delete(SessionKeys.GAME_KEY)
    return False
Exemplo n.º 4
0
def game2redirect(game: GameLogic, player: PlayerLogic) -> Optional[str]:
    if not (SessionHelper.has(SessionKeys.PLAYER_ID)
            and SessionHelper.has(SessionKeys.GAME_KEY)):
        return '/'
    if game is None:
        return '/'
    if game.get_state() == GameLogic.State.WAITROOM:
        return '/waitroom'
    if game.get_state() == GameLogic.State.RUNNING:
        return '/game'
    if game.get_state() == GameLogic.State.FINISHED:
        return '/endgame'
    if player is None or player.model.game != game.model:
        return '/'
    return None
Exemplo n.º 5
0
def index():
    set_current_player()
    join_form = JoinForm()
    create_form = CreateGameForm()
    if rejoin():
        return redirect(
            game2redirect(
                GameManager(db).get_my_game(),
                get_player_manager().get_my_player()))
    form = None
    try:
        if join_form.validate_on_submit():
            form = join_form
            return on_join(join_form)
        if create_form.validate_on_submit():
            form = create_form
            return on_create(create_form)
    except UserError as e:
        if e.error_type == UserError.ErrorType.INVALID_NAME:
            g.error_name = e.message
        elif e.error_type == UserError.ErrorType.INVALID_GAME:
            g.error_game = e.message
        else:
            raise
        return render_template('index.html', form=form)
    game_key = SessionHelper.get(SessionKeys.GAME_KEY, '')
    if 'k' in request.args:
        if not request.args['k'].isalpha():
            raise HackAttemptError("Некорректный ключ игры")
        game_key = request.args['k']

    g.game_key = game_key
    return render_template("index.html", form=create_form)
Exemplo n.º 6
0
def on_exit(form):
    pm = get_player_manager()
    player = pm.get_my_player()
    if player is None:
        return redirect('/')

    game = get_game_manager().get_my_game()
    game.leave_player(player)
    db.session.commit()
    game.notify()
    if first_or_none(
            filter(lambda x: not x.model.hasLeft and x.model.isOnline,
                   game.get_players(False))) is None:
        get_game_manager().delete_game(game)
    SessionHelper.delete(SessionKeys.GAME_KEY)
    SessionHelper.delete(SessionKeys.PLAYER_ID)
    return redirect('/')
Exemplo n.º 7
0
def crawl_loupan(area_code):
	'''
	爬取安居客某城市的楼盘信息
	'''
	session = SessionHelper().get_session()

	base_url = 'https://'+area_code+'.fang.anjuke.com/loupan/'
	r = session.get(base_url)
	html = etree.HTML(r.text)

	result_count = html.xpath('//span[@class="result"]/em/text()')[0]
	page = math.ceil(int(result_count)/30)
	print('>>>>> total count:', result_count, 'page:', page)

	with open('anjuke/.'+area_code+'.csv', 'w', encoding='utf-8-sig', newline='') as csvfile:
		writer = csv.writer(csvfile)
		headers = ['详情链接', '缩略图', '楼盘名称', '楼盘地址', '户型', '楼盘状态', '楼盘标签', '楼盘价格']
		writer.writerow(headers)

		for i in range(1, page+1):
			loupan_url = base_url+'all/p'+str(i)+'/'
			print(loupan_url)
			resp = session.get(loupan_url)
			loupan_html = etree.HTML(resp.text)

			loupan_list = loupan_html.xpath('//div[@class="key-list"]/div[@class="item-mod "]')
			for loupan in loupan_list:
				href = loupan.xpath('./a[@class="pic"]/@href')[0]   # 详情链接
				thum_img = loupan.xpath('./a[@class="pic"]/img/@src')[0]    # 缩略图
				name = loupan.xpath('./div[@class="infos"]/a[@class="lp-name"]/h3/span/text()')[0]  # 楼盘名称
				address = loupan.xpath('./div[@class="infos"]/a[@class="address"]/span/text()')[0]  # 楼盘地址
				huxing = loupan.xpath('./div[@class="infos"]/a[@class="huxing"]/span/text()')	# 户型
				status = loupan.xpath('./div[@class="infos"]/a[@class="tags-wrap"]/div/i/text()')	# 楼盘状态
				tags = loupan.xpath('./div[@class="infos"]/a[@class="tags-wrap"]/div/span/text()')	# 楼盘标签
				price_ele = loupan.xpath('./a[@class="favor-pos"]')[0]
				price_info = price_ele.xpath('string(.)').strip().replace(' ', '').replace('\n', '').replace('\r', '')	# 楼盘价格

				print(href, thum_img)
				print(name, address, huxing)
				print(status, tags, price_info)
				writer.writerow([href, thum_img, name, address, huxing, status, tags, price_info])
			time.sleep(1)
Exemplo n.º 8
0
def crawl():
    session_helper = SessionHelper()
    session = session_helper.get_session()
    r = session.get(url)

    session_helper.print_cookies()
    #   print(r.text)

    html = etree.HTML(r.text)
    product_list = html.xpath(
        '//div[@class="SearchResults"]/ul[@class="row row-2cols--xs row-3cols--sm gutter"]/li[@class="product-container col"]'
    )
    for product in product_list:
        href = product.xpath('./div[@class="c-product-card"]/a/@href')[0]
        name = product.xpath(
            './div[@class="c-product-card"]/a/span[@class="product-name"]/span/span[@class="primary"]/text()'
        )[0]
        price = product.xpath(
            './div[@class="c-product-card"]/div[@class="c-product-price"]//span[@aria-hidden="true"]/text()'
        )[0]
        print(href, name, price)
Exemplo n.º 9
0
def set_current_player():
    if SessionHelper.has(SessionKeys.PLAYER_ID):
        pm = PlayerManager(db)
        g.current_player = pm.get_my_player()
        if g.current_player is not None:
            g.current_game = GameLogic(db, g.current_player.model.game)
Exemplo n.º 10
0
 def get_my_game(self, optional=False) -> GameLogic:
     return self.get_game(SessionHelper.get(SessionKeys.GAME_KEY), optional)
Exemplo n.º 11
0
 def __init__(self):
     self.wd = WebDriver()
     self.wd.implicitly_wait(60)
     self.session = SessionHelper(self)
     self.mail = MailHelper(self)
Exemplo n.º 12
0
 def __init__(self):
     self.driver = WebDriver()
     self.driver.implicitly_wait(30)
     self.session = SessionHelper(self)
     self.group = GroupHelper(self)
Exemplo n.º 13
0
 def get_my_player(self) -> PlayerLogic:
     player = self.get_player(SessionHelper.get(SessionKeys.PLAYER_ID))
     if player is None or player.model.hasLeft:
         return None
     return player