python画五子棋棋盘_python 五子棋-文字版(上)
游戲介紹
五子棋游戲相信大家應該都非常熟悉了,作為策略型棋類游戲還是非常經典的,雙方分別使用黑白兩色的棋子,下在棋盤直線與橫線的交叉點上,先形成五子連線者獲勝;
五子棋盤是由橫縱各15條等距離,垂直交叉的平行線構成,按格子數是14x14個;
在一些專業的比賽中,又有禁手一說,禁手是指對局中禁止先行一方(黑方)使用的戰術,之所有會出現這樣的規則,是因為有棋手說,先行一方(黑方)的優勢過大,甚至有必勝的走法。所以會有各種規則來盡量減少先行棋的優勢。
程序設計思路
本次設計的是終端運行的字符類五子棋,無法實現交叉的效果,最后采用的是在格子里面下棋。
棋子采用兩種不同的字符 O 和 X表示,最終的棋盤棋子效果如下:
要實現五子棋程序,有幾個重要問題需要思考:
1.棋盤采取那種數據結構?
單列表,嵌套列表或者其它的都可以,之前的井字棋由于網格少,采用的是單列表,這里雖然也可以,但是采用嵌套列表可以減少計算;
2.如何想要以那種格式展示棋盤?
網格類型,通過字符串格式化的方法;
3.怎么判斷輸贏?
全棋盤掃描
判斷水平,豎直,左右斜方向有沒有五子連珠的
根據最新下棋位置,部分掃描
以當前下棋位置,判斷水平,豎直,左右斜方向有沒有五子連珠的
4.行棋表示方法
以 6,6 這種格式代表行棋位置
5.模式
人-機 模式
電腦又可分為 隨機下 或者 策略下棋(尋找最優價值位置)
人-人 模式
程序代碼
偽代碼和之前的井字棋一樣:
打印顯示玩法
決定誰先走
創建一個空棋盤
打印顯示當前棋盤
當沒有人獲勝且不是平局:
如果輪到玩家
得到玩家下棋位置
根據位置更改棋盤
否則
計算電腦下棋位置
根據位置更改棋盤
打印顯示當前棋盤
切換下棋方
向獲勝者祝賀或者說明平局
創建棋盤
顯示棋盤
誰先走
得到合法的行棋位置
電腦隨機
輸贏判斷方法
全局判斷
局部判斷,還未優化,邊緣位置未處理
詢問下棋位置
切換行棋方
程序主邏輯:
電腦采用的是隨機方式,玩家可以選擇位置
完整代碼
import randomrow = 10col = 10def new_board():return [[" "]*10 for i in range(row)]def display_board(board):for i in range(row):print(f"{'':-^39}")for j in range(col):print(board[i][j],end=" | ")print()print(f"{'':-^39}")def pieces():is_go_first = input("你想要先走嗎? (y/n): ").lower()if is_go_first == "y":human, computer = "X", "O"else:human, computer = "O", "X"return human, computerdef legal_moves(board):moves = []for i in range(row):for j in range(col):if board[i][j] == " ":moves.append((i,j))return movesdef computer_move(board):moves = legal_moves(board)pos = random.choice(moves)return posdef win(board):# 行判斷for i in range(row):for j in range(col-4):if board[i][j] == board[i][j+1] == board[i][j+2] == board[i][j+3] == board[i][j+4] != " ":return board[i][j]# 列判斷for j in range(col):for i in range(row-4):if board[i][j] == board[i+1][j] == board[i+2][j] == board[i+3][j] == board[i+4][j] != " ":return board[i][j]# 左高右低判斷for i in range(row-4):for j in range(col-4):if board[i][j] == board[i+1][j+1] == board[i+2][j+2] == board[i+3][j+3] == board[i+4][j+4] != " ":return board[i][j]# 左低右高判斷for i in range(4,row):for j in range(col-4):if board[i][j] == board[i-1][j+1] == board[i-2][j+2] == board[i-3][j+3] == board[i-4][j+4]!=" ":return board[i][j]# 判斷是否下完所有位置for i in range(row):for j in range(col):if board[i][j]==" ":return Noneelse:return "平局"def ask_move_pos(board):while True:pos = input("你的輸入位置?(x,y):")str_x, str_y = pos.split(",")x, y = int(str_x), int(str_y)if board[x][y] == " ":return x, ydef next_turn(turn):if turn == "X":return "O"else:return "X"board = new_board()display_board(board)human,computer = pieces()turn = "X"x,y=0,0while not win:if turn ==human:x, y = ask_move_pos(board)board[x][y]=turnelse:x,y = computer_move(board)board[x][y]=turndisplay_board(board)turn = next_turn(turn)win = win(board)print(win)
電腦策略下棋(AI)單獨講。
(全文完)
長按二維碼,加關注!葉子陪你玩
歡迎轉載,轉載請注明出處!
歡迎關注公眾微信號:葉子陪你玩編程 分享自己的python學習之路
總結
以上是生活随笔為你收集整理的python画五子棋棋盘_python 五子棋-文字版(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#秘密武器之反射——基础篇
- 下一篇: AngularJs ngIf、ngSwi