Прикреплённый файл «2014-04-04-xo.py»
Загрузка 1 #!/usr/bin/env python
2 # coding: utf
3 import sys, random
4
5 def show(pos,sz,msg=None):
6 print
7 if msg: print msg
8 print ("\n"+"_"*(sz*2-1)+"\n").join("|".join(pos[sz*i:sz*i+sz]) for i in xrange(sz))
9
10 def good(pos, turn):
11 '''Хороша ли для нас позиция pos (turn -- наш ход)?'''
12 if pos in Field: # Позиция уже встречалась
13 return Field[pos]
14 Field[pos],Mark=[], turn and Me or It
15 for win in Wins: # Не выиграл ли кто?
16 if all((pos[p]==Me for p in win)): # Мы выиграли
17 Field[pos].append(True) # Победа
18 return True
19 if all((pos[p]==It for p in win)): # Выиграл противник
20 return False
21 if " " not in pos: # Больше ходов нет
22 Field[pos].append(False) # Ничья
23 else: # Возможные ходы
24 newposes=[pos[:i]+Mark+pos[i+1:] for i in xrange(SZ) if pos[i]==" "]
25 if turn: # Наш ход
26 Field[pos]=[npos for npos in newposes if good(npos, not turn)]
27 else: # Ход противника
28 if all((good(npos, not turn) for npos in newposes)):
29 Field[pos]=list(newposes) # Если все выигрышные, добавим их
30 return Field[pos]
31
32 Field={}
33 Me,It,Turn=len(sys.argv)>1 and sys.argv[1] not in "Xx" and ("O","X",False) or ("X","O",True)
34 sz=len(sys.argv)>2 and int(sys.argv[2]) or 3
35 SZ=sz*sz
36 Wins=[[x+sz*n for n in xrange(sz)] for x in xrange(sz)]+ \
37 [[x+sz*n for x in xrange(sz)] for n in xrange(sz)]+ \
38 [[n+sz*n for n in xrange(sz)]]+ \
39 [[sz*(n+1)-n-1 for n in xrange(sz)]]
40
41 pos=" "*SZ
42 good(pos,Turn)
43
44 while type(Field[pos][0]) is str:
45 if Turn:
46 pos=random.choice(Field[pos])
47 else:
48 show(pos,sz)
49 n=None
50 while n is None:
51 try:
52 n=int(raw_input("> "))
53 except:
54 n=None
55 else:
56 if n<0 or n>=SZ or pos[n]!=" ":
57 n=None
58 pos=pos[:n]+It+pos[n+1:]
59 Turn = not Turn
60 show(pos,sz,Field[pos][0] and "I win" or "Draw")
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2014-04-11 13:10:46, 2.3 KB) [[attachment:2014-04-04-xo.py]]
- [получить | показать] (2014-04-11 13:11:16, 0.1 KB) [[attachment:xo.test.txt]]
- [получить | показать] (2014-04-11 13:11:03, 4.5 KB) [[attachment:xoproto.py]]
Вам нельзя прикреплять файлы к этой странице.