2017-10-19 7 views
2

私はTicTacToeゲームのメインゲームの仕組みを作りました。しかし、私はエンド・ゲームの勝利条件をコードする方法、つまり誰かが勝つ/結びつくときを見つける方法を知らない。PythonでTicTacToeゲームの勝利/結婚条件をコード化する方法

私はall()機能を使用しようとしましたが、これは機能しなかったか、間違って使用しました(おそらく後者)。ここ

コードの変数のリストは、(コメントが存在しないように)完全なコードであり、:

def get_grid(): 
    r1 = ['-','-','-'] 
    r2 = ['-','-','-'] 
    r3 = ['-','-','-'] 
    return r1, r2, r3 

def get_coords(): 
    x = 0 
    y = 0 
    while True: 
     try: 
      x = int(input("x coord : ")) 
      y = int(input("y coord : ")) 
     except ValueError: 
      print("Must be an integer") 
     if x < 0 or x > 3 or y < 0 or y > 3: 
      print('Both values must be in the grid!') 
     else: 
      break 
    return x, y 

def pgrid(x, y, r1, r2, r3, player): 
    rdict = {1:r1, 2:r2, 3:r3} 
    if x != 0 and y != 0: 
     while True: 
      if rdict[y][x-1] == '-': 
       rdict[y][x-1] = player 
       break 
      else: 
       print("Invalid Space!") 
       x, y = get_coords() 
    print('\t1\t2\t3') 
    print(' 1 |', end = '\t') 
    for i in r1: 
     print(i, end = ' | ') 
    print() 
    print(' 2 |', end = '\t') 
    for i in r2: 
     print(i, end = ' | ') 
    print() 
    print(' 3 |', end = '\t') 
    for i in r3: 
     print(i, end = ' | ') 
    print() 


def main(): 
    r1, r2, r3 = get_grid() 
    players = ['X', 'O'] 
    pgrid(0, 0, r1, r2, r3, None) 
    win = False 
    while win == False: 
     for i in players: 
      x, y = get_coords() 
      pgrid(x, y ,r1 ,r2 , r3, i) 

変数
r1, r2 and r3をするための、第一、第二、及び第三の行でありますボード。 リスト
x and yは、 'X'または 'O'が配置されている座標です。 整数
rdict入力された値はyの値とボードの行の間をナビゲートします。 辞書
playerはプレイヤーです。 文字列 playersは、プレイヤーの一覧'X' and 'O'
winあるプレイヤーが/ゲームが結ばれた勝った時に真です。 ブール

win変数は、この質問への回答で変更する必要があるものである私はちょうどそれをコーディングする方法についてのコードまたは少なくともアイデアを必要とする(私はいずれかを持っていないので!)。
ありがとうございます!

答えて

1

3つの同じ文字が行または列にあるかどうかを確認する最も簡単な方法は何ですか?幸い

if r1[0] == 'X' and r2[0] == 'X' and r3[0] == 'X': 
    print('First column meets victory conditions', 'X') 

今では、すべての行と列の両方の文字のためにこれを行うにはビット面倒なことだろうが、:最初の列についてr1[0]r2[0]r3[0]を取り、確認し、それらはすべて同じ文字が含まれている場合forループが私たちの仕事をすることができます。行のために

for letter in 'XO': 
    for i in range(3): 
     if r1[i] == letter and r2[i] == letter and r3[i] == letter: 
      print('Column', i, letter) 

だけではなく、range(3)(r1, r2, r3)を反復して確認してください:

あなたはまた、すべての文字かどうかを確認するために all機能やリストの内包やジェネレータ式を使用することができます
if row[0] == letter and row[1] == letter ... 

そしてもちろんのは同じ。

for row in (r1, r2, r3): 
    if all(item == letter for item in row): 
関連する問題