python之用循环实现五子棋小程序
生活随笔
收集整理的這篇文章主要介紹了
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() '''上面的程序是用的面向過程的思維方式實現的,當然,你也可以使用面向對象的方式編寫
下面是經過封裝后的程序代碼
還想看更多python相關練習,寶寶們可以關注小編:秋葉夏風的博客
總結
以上是生活随笔為你收集整理的python之用循环实现五子棋小程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杨中科老师-C语言也能干大事链接
- 下一篇: 不改动当前账户密码的情况下,启用其他账户