【Lad】《王者榮耀》莊周開局反野教學(xué)視頻(咬人魚在此)

#全局常量
best_weizhi= (4, 0, 2, 6, 8, 1, 3, 5, 7)
win = ((0, 1, 2),?(3, 4, 5), (6, 7, 8),?(0, 3, 6),(1, 4, 7),?(2, 5, 8), (0, 4, 8),?(2, 4, 6))?
X = "X"
O = "O"
EMPTY = " "
#定義函數(shù)產(chǎn)生一個(gè)新的棋盤
def new_board():
??board = []
??for square in range(9):
????board.append(EMPTY)
??return board
#詢問(wèn)該誰(shuí)下棋
def ask_yes_no(question):
??response = None
??#如果輸入不是"y", "n",繼續(xù)重新輸入
??while response not in ("y", "n"):
??????response = input(question).lower()
??return response
#詢問(wèn)誰(shuí)先走,先走方為X,后走方為O
#函數(shù)返回電腦方、玩家的角色代號(hào)
def pieces():
??go_first = ask_yes_no("玩家你是否先走 (y/n): ")
??if go_first == "y":
????print("\n玩家你先走.")
????human = X
????computer = O
??else:
????print("\n電腦先走.")
????computer = X
????human = O
??return computer, human
#顯示棋盤
def display_board(board):
??board2=board[:]???#創(chuàng)建副本,修改不影響原來(lái)列表board
??for i in range(len(board)):
????if board[i]==EMPTY:
??????board2[i]=i
??print("\t", board2[0], "|", board2[1], "|", board2[2])
??print("\t", "---------")
??print("\t", board2[3], "|", board2[4], "|", board2[5])
??print("\t", "---------")
??print("\t", board2[6], "|", board2[7], "|", board2[8], "\n")
#輸入你想下的位置數(shù)字
def ask_number(question, low, high):
??response = None
??while response not in range(low, high):
????response = int(input(question))
??return response
#產(chǎn)生可以合法走棋位置序列(也就是還未下過(guò)子位置)
def legal_moves(board):
??moves = []
??for i in range(9):
????if board[i] == EMPTY:
??????moves.append(i)
??return moves
#判斷輸贏
def winner(board):
??for row in win:
????if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
??????winner = board[row[0]]
??????return winner????#返回贏方
??#棋盤沒有空位置
??if EMPTY not in board:
????return "True" #"平局和棋,游戲結(jié)束"
??return False
#人走棋
def human_move(board, human):
??legal = legal_moves(board)
??move = None
??while move not in legal:
????move = ask_number("你走那個(gè)位置? (0 - 9):", 0, 9)
????if move not in legal:
??????print("\n此位置已經(jīng)落過(guò)子了")
??return move
#電腦走棋
def computer_move(board, computer, human):
??# make a copy to work with since function will be changing list
??board = board[:]???#創(chuàng)建副本,修改不影響原來(lái)列表board
??#按優(yōu)劣順序排序的下棋位置best_weizhi
??# 如果電腦能贏,就走那個(gè)位置
??for move in legal_moves(board):
????board[move] = computer
????if winner(board) == computer:
??????print("電腦下棋位置是" ,move)
??????return move
????# 取消走棋方案
????board[move] = EMPTY
??# 如果玩家能贏,就堵住那個(gè)位置
??for move in legal_moves(board):
????board[move] = human
????if winner(board) == human:
??????print("電腦下棋位置是" ,move)
??????return move
????#取消走棋方案
????board[move] = EMPTY
??#不是上面情況則,也就是這一輪時(shí)都贏不了則
??#從最佳下棋位置表中挑出第一個(gè)合法位置
??for move in best_weizhi:
????if move in legal_moves(board):
??????print("電腦下棋位置是" ,move)
??????return move
#轉(zhuǎn)換角色
def next_turn(turn):
??if turn == X:
????return O
??else:
????return X
#主方法:
def main():
??computer, human = pieces()
??turn = X
??board = new_board()
??display_board(board)
???
??while not winner(board):
????if turn == human:
??????move = human_move(board, human)
??????board[move] = human
????else:
??????move = computer_move(board, computer, human)
??????board[move] = computer
????display_board(board)
????turn = next_turn(turn)
????the_winner = winner(board)
??#游戲結(jié)束輸出輸贏信息
??if the_winner == computer:
????print("電腦贏!\n")???
??elif the_winner == human:?????
????print("玩家贏!\n")
??elif the_winner == "True": #"平局"?????
????print("平局,和棋,游戲結(jié)束\n")
?
# start the program
main()
input("按任意鍵退出游戲.")