没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
用python实现五子棋简单人机模式的练习过程,供大家参考,具体内容如下 第一次写博客,我尽力把它写好。 最近在初学python,今天就用自己的一些粗浅理解,来记录一下这几天的python简单人机五子棋游戏的练习,下面是实现过程的理解(是在cmd中运行的): 主要流程: *重点内容* – 首先是模块及类的划分 – 棋子类和棋盘类的方法 – 对策略类里的功能进行细分,调用棋子类和棋盘类 – 写出判断输赢的方法 – 用main函数进行整个游戏进度的控制 模块及类的划分 类的划分涉及到了面向对象的内容,根据五子棋游戏的设定,人和机器依次在一个棋盘里下棋,一方五子连线为赢,初步分为棋子类、棋盘
资源推荐
资源详情
资源评论
使用使用python实现简单五子棋游戏实现简单五子棋游戏
用python实现五子棋简单人机模式的练习过程,供大家参考,具体内容如下
第一次写博客,我尽力把它写好。
最近在初学python,今天就用自己的一些粗浅理解,来记录一下这几天的python简单人机五子棋游戏的练习,下面是实现过程
的理解(是在cmd中运行的):
主要流程:主要流程: *重点内容*
– 首先是模块及类的划分
– 棋子类和棋盘类的方法
– 对策略类里的功能进行细分,调用棋子类和棋盘类
– 写出判断输赢的方法
– 用main函数进行整个游戏进度的控制
模块及类的划分模块及类的划分
类的划分涉及到了面向对象的内容,根据五子棋游戏的设定,人和机器依次在一个棋盘里下棋,一方五子连线为赢,初步分
为棋子类、棋盘类棋子类、棋盘类和策略类策略类,每个类单独放一个模块,加上main模块一共四个模块。
棋子类包含棋子的坐标和棋子颜色(阵营),及相关get、set方法
棋盘类包含了棋盘的大小和棋盘的状态 ,及相关get、set方法
棋盘类的功能:接收要放入的棋子,清空棋盘,打印(显示)棋盘,给出对应位置的状态
策略类:一个策略类对应一个棋盘类,在构造器里导入一个棋盘类
策略类的功能:人把棋子放入棋盘、机器把棋子放入棋盘、判断棋局的输赢
棋子类和棋盘类棋子类和棋盘类
棋子类棋子类比较简单,在棋子的角度,只要接收位置和颜色(阵营),传出位置和颜色(阵营)即可,其中位置用元组打包传递
class Chessman(object):
#初始化
def __init__(self):
pass
def set_pos(self,pos):
self.pos = pos
def get_pos(self):
return self.pos
def set_color(self,color):
self.color = color
def get_color(self):
return self.color
棋盘类棋盘类需要用到棋子类,在这之前,先要进行棋盘的设定
在这里棋盘是用列表来构建,分为两层,实现x,y的位置,棋盘大小设为类属性
#类属性
board_size =15
#初始化棋盘
def __init__(self):
self.__board = [[0 for i in range(0,Chessboard.board_size+1)] for j in range(0,Chessboard.board_size+1)]
清空棋盘类似
#清空棋盘,‘+'为棋盘的样子
def init_board(self):
#忽略第0行
for i in range(1,Chessboard.board_size+1):
for j in range(1,Chessboard.board_size+1):
self.__board[i][j] = '+'
打印也差不多,注意在坐标轴旁放上序列号,这里纵坐标为1-15,横坐标为a-o
# 打印棋盘
def print_board(self):
#打印列号
print(' ', end='')
for i in range(1,Chessboard.board_size+1):
c = chr(ord('a') + i-1) # ord 字母转ASCLL码
print(c,end='')
print()
#棋盘
for i in range(1,Chessboard.board_size+1):
if 1<= i <=9:
print(' ', end='')
print(i, end='')
for j in range(1,Chessboard.board_size+1):
print(self.__board[i][j], end='')
print()
效果为如下
接下来是棋子的放入:
这个可分为两个方法,一个根据传入的位置放置传入的颜色;另一个接收一个棋子类的实例对象,获取该实例的位置和颜色,
调用第一个方法并传入数值,一定要注意在传参的时候验证
#写入对应位置的颜色
def set_chess(self,pos, color):
if not isinstance(pos,tuple):
raise RuntimeError('第一个参数必须为元组')
if pos[0] <= 0 or pos[0] > Chessboard.board_size:
raise RuntimeError('行下标越界')
if pos[1] <=0 or pos[1] > Chessboard.board_size:
raise RuntimeError('纵下标越界')
self.__board[pos[0]][pos[1]] = color
#把棋子对象摆放到棋盘上
def set_chessman(self,chessman):
if not isinstance(chessman, Chessman):
raise RuntimeError('类型不对,第一个参数应为ChessMan对象')
pos = chessman.get_pos()
color = chessman.get_color()
self.set_chess(pos,color)
接下来的根据棋盘位置获取棋子颜色的方法主要是为了策略类的判定输赢准备的
#根据棋盘位置获取棋子的颜色
def get_chess(self,pos):
if pos[0] <= 0 or pos[0] > Chessboard.board_size:
raise RuntimeError('行下标越界')
if pos[1] <=0 or pos[1] > Chessboard.board_size:
raise RuntimeError('纵下标越界')
return self.__board[pos[0]][pos[1]]
策略类策略类
策略类要用到前面两类,有更多名称的方法或属性的要用,所以要更仔细一点搞清楚哪个是哪个
首先传入一个棋盘实例对象
#初始化要把棋盘对象传入
def __init__(self,chessboard):
self.__chessboard = chessboard
剩余6页未读,继续阅读
weixin_38596413
- 粉丝: 6
- 资源: 956
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页