最中限プログラムのサンプル

これは古いversion

# -*- coding: utf-8 -*-
"""
最中限サーバに接続してプレイするクライアントのサンプル
単純に接続してランダムにプレイをして終了するだけ
"""
from urllib import urlopen, urlencode
from random import shuffle
import logging

logging.basicConfig(level=logging.DEBUG, format="%(message)s")
API_ROOT = "http://nishiotools.appspot.com/saichugen/api/text/"

# 以下2行は自分で作ったActive Playerのものを入れること
API_KEY = "apikey_bacbada52bef74422ae2a4a2016b28fc"
PLAYER_ID = "player_50300b770bb5030b2031af2a503f90f4"

def do_GET(api, params=None):
    if params == None: params = {}
    logging.debug("GET %s %s", api, params)
    params["api_key"] = API_KEY
    url = API_ROOT + api + "?" + urlencode(params)
    return urlopen(url).read()

 
def do_POST(api, params):
    logging.debug("POST %s %s", api, params)
    params["api_key"] = API_KEY
    url = API_ROOT + api 
    return urlopen(url, urlencode(params)).read()


def my_ai_random(hand, played):
    "盤面状況に関係なく自分の手札からランダムに出すAI"
    from random import choice
    logging.debug("hand: %s", hand)
    assert hand != [""]
    return choice(hand)


passive_players = do_GET("passive_players/").split()
# opp := opponent(s). Take 2 opp randomly.
shuffle(passive_players)
opp_player1, opp_player2 = passive_players[:2]

game_id = do_GET("start_game/")
logging.debug("game_id: %s", game_id)
seat_id = do_GET("join/%(game_id)s/%(PLAYER_ID)s/" % globals())
logging.debug("seat_id: %s", seat_id)
opp_seat_id1 = do_GET("add_player/%(game_id)s/%(opp_player1)s/" % globals())
logging.debug("opp 1: %s", opp_seat_id1)
opp_seat_id2 = do_GET("add_player/%(game_id)s/%(opp_player2)s/" % globals())
logging.debug("opp 2: %s", opp_seat_id2)

# 1手分のプレイをする
def play_a_turn():
    # 盤面状況を取得する
    seat = do_GET("seat/%(seat_id)s/" % globals(), {})
    if seat.count("\n") > 2:
        raise RuntimeError("invalid result")
    state, hand, played = seat.split("\n")
    assert state == "TO_PLAY"

    hand = hand.split(",")
    played = [segment.split(",") for segment in played.split(".")]
    logging.debug("hand: %s", hand)
    logging.debug("played: %s", played)
    # 思考する
    play = my_ai_random(hand, played)
    # カードをプレイする
    do_POST("play/%(seat_id)s/" % globals(), {"play": play})


for i in range(15):
    play_a_turn()

logging.debug("result: http://nishiotools.appspot.com/saichugen/game/%s/",game_id)