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

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# coding by 秋叶夏风

# 导入系统模块,用于保证程序结束后不退出终端

import os

class 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="")

pass

elif [i+1,j+1] in user2:

print("e ", end="")

pass

else:

print("+ ",end="")

pass

print()

pass

def 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,lie

else:

print("你输入的数值不再棋盘范围内,重新输入")

pass

else:

print("你这输入的也不是数字啊,逗我玩呢啊")

print("赶紧的,重新输入")

pass

def 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 True

pass

# 横着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 True

pass

# 斜着\这么斜的情况

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 True

pass

# 斜着/这么斜的情况

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 True

pass

pass

return False

pass

def main_logic(self):

'''

主要执行逻辑

包括循环调用输入方法,显示方法,判断验证方法

更新用户列表的数据

:return:

'''

i = 0 # 用于记录下子的次数,若超出这个范围,即下满棋盘,则和棋

while i <= 225: # 死循环 输入 其实用不着死循环,一共就那么多下

i += 1 # 累加

if i % 2: # 判断出当前的用户

yonghu = self.player1

else:

yonghu = self.player2

print("请玩家%s输入" % yonghu) # 用于提示哪个用户输入

posi = self.input_check() # 调用输入校正方法,防止用户下到已经下的位置上

hang = posi[0] # 将输入校正方法返回的返回值元祖拆开

lie = posi[1]

if yonghu == self.player1:

self.user1.append([hang, lie]) # 将坐标信息添加到对应用户的列表

pass

else:

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值