日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python之用循环实现五子棋小程序

發布時間:2023/12/20 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python之用循环实现五子棋小程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在python中我們學過流程控制中的循環結構,現在我們來進行一個小應用的練習
本程序是通過循環控制結構來實現五子棋小程序的

游戲規則

五子棋的規則如下:

  • 對局雙方各執一色棋子。
  • 空棋盤開局。
  • 黑先、白后,交替下子,每次只能下一子。
  • 棋子下在棋盤的空白點上,棋子下定后,不得向其它點移動,不得從棋盤上拿掉或拿起另落別處。
  • 黑方的第一枚棋子可下在棋盤任意交叉點上。
  • 輪流下子是雙方的權利,但允許任何一方放棄下子權(即:PASS權)

實現過程

由于本程序較為簡單,基礎知識要求較低,通過觀看本教程,大部分同學都能夠理解和掌握.
在這里需要提前了解的知識有:

  • python中的流程控制
  • python中列表操作

棋盤界面是通過我們利用循環打印出來的,棋子的兩種是通過"e"和"o"兩個字母打印出來的,其他地方用"+"填充出網格

其中,用戶通過輸入棋子的橫縱坐標來進行位置信息的輸入,這里在輸入后進行了一系列的驗證,輸入的內容是否為數值,數值是否超出范圍,落子的位置是否為空等

用于驗證獲勝者的模塊,是通過循環遍歷所有棋盤中的位置,判斷相鄰的位置的棋子是否同時存在于當前用戶的列表中,若條件成立,則返回True,否則返回False

主模塊中是一個while循環,提示用戶輸入位置信息,并且加入用戶列表數據存儲,以便于計算棋子的位置信息以及數量,每次顯示出新的界面,然后進入win模塊進行獲勝者的檢驗,若通過檢驗,循環終止,游戲結束.

代碼實現

具體代碼如下

#!/usr/bin/env python # -*- coding:utf-8 -*- # coding by 秋葉夏風# 定義顯示方法 def dis(user1,user2):print("\t1 2 3 4 5 6 7 8 9 101112131415")for i in range(15):print(i+1,end="")print("\t",end="")for j in range(15):# 遍歷所有位置,判斷是否有下過子if [i+1,j+1] in user1:print("o ", end="")passelif [i+1,j+1] in user2:print("e ", end="")pass# else:# print(" ",end="")else:print("+ ",end="")passprint()pass# 定義輸入校正方法 def ini():while True:hang = input("行數:")lie = input("列數:")if hang.isdigit() and lie.isdigit():hang = int(hang)lie = int(lie) # 判斷輸入的字符是不是數字# 判斷輸入的點位置有沒有之前下過if [hang,lie] in user1 or [hang,lie] in user2:print("這個點已經下過了,請重新輸入")else:# 判斷輸入的數字范圍在不在 棋盤空間內if hang in range(1,16) and lie in range(1,16):return hang,lieelse:print("你輸入的數值不再棋盤范圍內,重新輸入")passelse:print("你這輸入的也不是數字啊,逗我玩呢啊")print("趕緊的,重新輸入")pass# 定義判斷方法 def win(user):# 遍歷所有位置坐標for hang in range(1,15):for lie in range(1,15):# 判斷 有沒有5連子的情況,要是有返回真# 豎著5個子連上的情況if [hang ,lie] in user and\[hang+1,lie] in user and\[hang+2,lie] in user and\[hang+3,lie] in user and\[hang+4,lie] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 橫著5個子連接的情況elif [hang ,lie] in user and\[hang,lie+1] in user and\[hang,lie+2] in user and\[hang,lie+3] in user and\[hang,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 斜著\這么斜的情況elif [hang ,lie] in user and\[hang+1,lie+1] in user and\[hang+2,lie+2] in user and\[hang+3,lie+3] in user and\[hang+4,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 斜著/這么斜的情況elif [hang ,lie] in user and\[hang-1,lie+1] in user and\[hang-2,lie+2] in user and\[hang-3,lie+3] in user and\[hang-4,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepasspassreturn Falsepass# 定義邏輯控制方法 def logic_control():print("-------歡迎使用連珠五子棋程序-------")print("本游戲需要兩名玩家一起玩")wanjia1 = input("請輸入玩家1的名字:")wanjia2 = input("請輸入玩家2的名字:")print("用戶1:o")print("用戶2:e")dis(user1,user2) # 先顯示一下原始狀態i = 0 # 用于記錄下子的次數while i<=225: # 死循環 輸入 其實用不著死循環,一共就那么多下i += 1 # 累加if i%2 : # 判斷出當前的用戶yonghu = wanjia1else:yonghu = wanjia2print("請玩家%s輸入" %yonghu) #用于提示哪個用戶輸入posi = ini() # 調用輸入校正方法,防止用戶下到已經下的位置上hang = posi[0] # 將輸入校正方法返回的返回值元祖拆開lie = posi[1]if yonghu == wanjia1:user1.append([hang, lie]) # 將坐標信息添加到對應用戶的列表passelse:user2.append([hang, lie]) # 將坐標信息添加到對應用戶的列表pass# 調用顯示方法dis(user1, user2)# 游戲勝負判斷if win(user1):print("五子連珠")print("恭喜玩家%s贏了,游戲結束" % yonghu)break # 跳出循環終止程序if win(user2):print("五子連珠")print("恭喜玩家%s贏了,游戲結束" % yonghu)break# print(user1) # 調試的時候用,游戲的時候可以隱藏了# print(user2)# 初始化兩個列表,用于存儲用戶下子的信息 user1 = [] #用于記錄用戶1的下子信息 user2 = [] #用于記錄用戶2的下子信息 # 執行主函數 logic_control() '''

上面的程序是用的面向過程的思維方式實現的,當然,你也可以使用面向對象的方式編寫
下面是經過封裝后的程序代碼

#!/usr/bin/env python # -*- coding:utf-8 -*- # coding by 秋葉夏風# 導入系統模塊,用于保證程序結束后不退出終端 import osclass Chess():def __init__(self):'''初始化魔術方法用于設定初始的狀態值'''# 定義兩個數組self.user1 = [] # 用于記錄用戶1的下子信息self.user2 = [] # 用于記錄用戶2的下子信息print("-------歡迎使用連珠五子棋程序-------")print("本游戲需要兩名玩家一起玩")self.player1 = '1'self.player2 = '2'print("%s:o" % self.player1)print("%s:e" % self.player2)self.display(self.user1, self.user2) # 先顯示一下原始狀態# 調用主邏輯函數self.main_logic()def display(self,user1,user2):'''更新顯示的方法:param user1: 用戶1的數組:param user2: 用戶2的數組:return: 無返回值'''print("\t1 2 3 4 5 6 7 8 9 101112131415")for i in range(15):print(i+1,end="")print("\t",end="")for j in range(15):# 遍歷所有位置,判斷是否有下過子if [i+1,j+1] in user1:print("o ", end="")passelif [i+1,j+1] in user2:print("e ", end="")passelse:print("+ ",end="")passprint()passdef input_check(self):'''定義輸入校正方法用于驗證輸入的數據的規范性:return: 無返回值'''while True:hang = input("行數:")lie = input("列數:")if hang.isdigit() and lie.isdigit():hang = int(hang)lie = int(lie) # 判斷輸入的字符是不是數字# 判斷輸入的點位置有沒有之前下過if [hang,lie] in self.user1 or [hang,lie] in self.user2:print("這個點已經下過了,請重新輸入")else:# 判斷輸入的數字范圍在不在 棋盤空間內if hang in range(1,16) and lie in range(1,16):return hang,lieelse:print("你輸入的數值不再棋盤范圍內,重新輸入")passelse:print("你這輸入的也不是數字啊,逗我玩呢啊")print("趕緊的,重新輸入")passdef choose_winner(self,user):'''# 定義判斷方法,用于驗證玩家的獲勝一方:param user: 當前用戶:return: bool'''# 遍歷所有位置坐標for hang in range(1,15):for lie in range(1,15):# 判斷 有沒有5連子的情況,要是有返回真# 豎著5個子連上的情況if [hang ,lie] in user and\[hang+1,lie] in user and\[hang+2,lie] in user and\[hang+3,lie] in user and\[hang+4,lie] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 橫著5個子連接的情況elif [hang ,lie] in user and\[hang,lie+1] in user and\[hang,lie+2] in user and\[hang,lie+3] in user and\[hang,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 斜著\這么斜的情況elif [hang ,lie] in user and\[hang+1,lie+1] in user and\[hang+2,lie+2] in user and\[hang+3,lie+3] in user and\[hang+4,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepass# 斜著/這么斜的情況elif [hang ,lie] in user and\[hang-1,lie+1] in user and\[hang-2,lie+2] in user and\[hang-3,lie+3] in user and\[hang-4,lie+4] in user :# print("恭喜用戶%s贏了,游戲結束"%yonghu)return Truepasspassreturn Falsepassdef main_logic(self):'''主要執行邏輯包括循環調用輸入方法,顯示方法,判斷驗證方法更新用戶列表的數據:return: '''i = 0 # 用于記錄下子的次數,若超出這個范圍,即下滿棋盤,則和棋while i <= 225: # 死循環 輸入 其實用不著死循環,一共就那么多下i += 1 # 累加if i % 2: # 判斷出當前的用戶yonghu = self.player1else:yonghu = self.player2print("請玩家%s輸入" % yonghu) # 用于提示哪個用戶輸入posi = self.input_check() # 調用輸入校正方法,防止用戶下到已經下的位置上hang = posi[0] # 將輸入校正方法返回的返回值元祖拆開lie = posi[1]if yonghu == self.player1:self.user1.append([hang, lie]) # 將坐標信息添加到對應用戶的列表passelse:self.user2.append([hang, lie]) # 將坐標信息添加到對應用戶的列表pass# 調用顯示方法self.display(self.user1, self.user2)# 游戲勝負判斷if self.choose_winner(self.user1):print("五子連珠")print("恭喜玩家%s贏了,游戲結束" % yonghu)os.system("pause")break # 跳出循環終止程序if self.choose_winner(self.user2):print("五子連珠")print("恭喜玩家%s贏了,游戲結束" % yonghu)os.system("pause")break# print(user1) # 調試的時候用,游戲的時候可以隱藏了# print(user2)# 實例化對象 c = Chess()

還想看更多python相關練習,寶寶們可以關注小編:秋葉夏風的博客

總結

以上是生活随笔為你收集整理的python之用循环实现五子棋小程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。