Python でマルバツゲーム その3 |
ソースはコチラ
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from random import shuffle
import time
bit_ary = [1,2,4,8,16,32,64,128,256]
#横列
#1+2+4=7
#8+16+32=56
#64+128+256=448
#縦列
#1+8+64=73
#2+16+128=146
#4+32+256=292
#斜め
#1+16+256=273
#4+16+64=84
check_ary = [7,56,448,73,146,292,273,84]
def fight():
#盤面を定義
map = [0, 0]
#配置できる場所を定義
selecter = range(9)
#0:先手 1:後手
user = 0
shuffle(selecter)
#勝負がつくまでループ
while(True):
place = selecter[0]
#配置場所を選択肢から削除
del(selecter[0])
#選択した配置場所をユーザIDで埋める
map[user] += bit_ary[place]
#勝敗チェック
#勝負がついていればリターン
if checker(map[user]):
return user
#先手、後手切り替え
if user == 0:
user = 1
else:
user = 0
#配置場所が無くなる(ドロー)であれば、
#ループを抜ける
if len(selecter) == 0:
break
return 2
#勝敗がついているかチェック
def checker(map):
#ビットで勝敗判定
for check in check_ary:
if ((check & map) == check):
return True
return False
if __name__ == '__main__':
print 'start'
t1 = time.time()
#win,lose,tie
result = [0] * 3
for i in xrange(10000):
winer = fight()
result[winer] += 1
print result
t2 = time.time()
print t2 - t1
print 'end'
処理時間
0.297秒
おお。
初回のプログラムから処理速度は半分以下に短縮されています。
一撃で勝敗を判定できるロジックを思いつけば、さらに
処理速度が向上すると思うのですが・・・
今のところ、ネタがないです。