Python开发简易五子棋小游戏


Posted in Python onMay 02, 2022

本文实例为大家分享了Python开发简易五子棋小游戏的具体代码,供大家参考,具体内容如下

class CheckerBoard():
    '''棋盘类'''
    def __init__(self,col=0,row=0,piece_type='--'):
        self.col = col
        self.row = row
        self.piece_type = piece_type
        self.labelx = range(self.col)
        self.labely = range(self.row)

    def chessboard(self):
        '''棋盘初始化数据(棋子的状态)'''
        checkerboardl = []
        for y in self.labely:
            heading_list = []
            checkerboardl.append(heading_list)
            for x in self.labelx:
                heading_list.append(self.piece_type)
        return checkerboardl

    def chess_show(self,checkerboardl):
        '''显示棋子的状态'''
        print('\0\0\0',end=' ')
        for x_title in self.labelx:
            print(str(x_title).zfill(2),end=' ')
        for y_title in range(len(checkerboardl)):
            print('\n',str(y_title).zfill(2),end=' ')
            for instans in checkerboardl[y_title]:
                print(instans,end=' ')

class User():
    '''玩家类'''
    def __init__(self,id,name,piece_type):
        '''构造函数
            id :玩家 id标识
            name:玩家名称
           piece_type:棋子的状态
        '''
        self.id = id
        self.name = name
        self.piece_type = piece_type

    def play(self,x,y,pool,data):
        '''play():   玩家下棋子
            x:下棋子的x坐标
            y:下棋子的y坐标
            pool:棋子的状态集合
            data:棋盘上的棋子状态数据
        '''
        if data[y][x] not in pool:
            data[y][x] = self.piece_type
            return data,True
        else:
            print('\n位置错误,已经有棋子了,重新输入:')
            return data,False

    def __col_list(self, x, y, col,row, data):
        '''获取下棋子的x轴所有棋子的状态
            x:下棋子的x坐标
            y:下棋子的y坐标
            col:棋盘的最大横向坐标
            row:棋盘的最大纵向坐标
            data:棋盘中棋子的状态数据
        '''
        # slist = []
        slist = data[y]
        print(slist,'__col_list')
        return slist
    def __row_list(self, x, y, col,row, data):
        '''获取下棋子的y轴所有棋子的状态
                    x:下棋子的x坐标
                    y:下棋子的y坐标
                    col:棋盘的最大横向坐标
                    row:棋盘的最大纵向坐标
                    data:棋盘中棋子的状态数据
                '''
        slist = []
        for i in data:
            slist.append(i[x])
        print(slist, '__row_list')
        return slist
    def __left_cut_list(self, x, y, col,row, data):
        '''获取下棋子的左斜角所有棋子的状态
                    x:下棋子的x坐标
                    y:下棋子的y坐标
                    col:棋盘的最大横向坐标
                    row:棋盘的最大纵向坐标
                    data:棋盘中棋子的状态数据
                '''
        slist = []
        if 0 <= x+y and  row > x+y:
            x_val_init = x+y
            y_val_init = 0
            while x_val_init >= 0 and y_val_init <= row-1:
                val = data[y_val_init][x_val_init]
                slist.append(val)
                x_val_init -= 1
                y_val_init += 1
        else:
            x_val_init = col-1
            y_val_init = y
            while x_val_init > 0 and y_val_init <= row-1:
                val = data[y_val_init][x_val_init]
                slist.append(val)
                x_val_init -= 1
                y_val_init += 1
        print(slist, '__left_cut_list')
        return slist
    def __right_cut_list(self, x, y, col,row, data):
        '''获取下棋子的右斜角所有棋子的状态
            x:下棋子的x坐标
            y:下棋子的y坐标
            col:棋盘的最大横向坐标
            row:棋盘的最大纵向坐标
            data:棋盘中棋子的状态数据
                        '''
        slist = []
        if 0 <= x-y :
            x_val_init = x-y
            y_val_init = 0
            while x_val_init <= col-1 and y_val_init <= row-1:
                val = data[y_val_init][x_val_init]
                slist.append(val)
                x_val_init += 1
                y_val_init += 1
        else:
            x_val_init = 0
            y_val_init = y-x
            while x_val_init <= col-1 and y_val_init <= row-1:
                val = data[y_val_init][x_val_init]
                slist.append(val)
                x_val_init += 1
                y_val_init += 1
        print(slist, '__right_cut_list')
        return slist

    def fif_diff(slef,list5):
        '''判断连续五个棋子状态都一样'''
        # list5:5个元素的列表
        piece_type = slef.piece_type
        for i in range(len(list5)):
            if list5[i] != piece_type:
                return False
        return True

    def rule(self,x, y, col,row, data):
        '''规则:连续5个棋子状态都一样时,返回True
        x:下棋子的x坐标
        y:下棋子的y坐标
        col:棋盘的最大横向坐标
        row:棋盘的最大纵向坐标
        data:棋盘中棋子的状态数据
        '''


        status = False
        rule_list = [self.__col_list,self.__row_list,self.__left_cut_list,self.__right_cut_list]
        for i in range(len(rule_list)):
            get = rule_list[i]
            slist = get(x, y, col,row, data)
            if len(slist) >= 5:
                start = 0
                end = 5
                while end < len(slist) + 4:
                    fif_ele_list = slist[start:end]
                    if self.fif_diff(fif_ele_list) :
                        print('%s赢了' %self.name,'11111111111111')
                        status = True
                        break
                    else:
                        start += 1
                        end += 1
        return status

def inputbox(obj, pool, checkerboardl_init):
    ''' 输入横向纵向坐标'''
    print('\n*************************************************')
    x = int(input('%s请输入横坐标:'%obj.name).strip())
    if not 0 <= x < 15:
        x = int(input('%s请输入横坐标:'%obj.name).strip())
    y = int(input('%s请输入纵坐标:'%obj.name).strip())
    if not 0 <= y < 15:
        y = int(input('%s请输入纵坐标:'%obj.name).strip())
    checkerboardl,static = obj.play(x, y, pool, checkerboardl_init)
    if static:
        s = obj.rule(x, y, 15, 15, checkerboardl)
        chess.chess_show(checkerboardl)
        if s:
            return True
    else:
        inputbox(obj, pool, checkerboardl_init)
pool = []
checkerboardl=[]
static = ''
if __name__ == '__main__':
    ST = True
    chess = CheckerBoard(15,15)
    checkerboardl_init = chess.chessboard()
    chess.chess_show(checkerboardl_init)
    s1 = User(1,'jack','@@')
    pool.append(s1.piece_type)
    s2 = User(2, 'chen', '##')
    pool.append(s2.piece_type)
    z =1
    while  ST:
        if z == 1:
            a = inputbox(s1, pool, checkerboardl_init)
            if a :
                break
            z = 2
            continue
        if z == 2:
            b = inputbox(s2, pool, checkerboardl_init)
            if b :
                break
            z = 1

简化图:

Python开发简易五子棋小游戏

以上就是本文的全部内容,希望对大家的学习有所帮助。


Tags in this post...

Python 相关文章推荐
Python基础之函数用法实例详解
Sep 10 Python
python自动12306抢票软件实现代码
Feb 24 Python
tensorflow实现简单的卷积神经网络
May 24 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
Jul 31 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
python 怎样进行内存管理
Nov 10 Python
python安装及变量名介绍详解
Dec 12 Python
python 实现百度网盘非会员上传超过500个文件的方法
Jan 07 Python
python 写一个水果忍者游戏
Jan 13 Python
baselines示例程序train_cartpole.py的ImportError
May 20 Python
Python开发五子棋小游戏
python获取带有返回值的多线程
May 02 #Python
总结三种用 Python 作为小程序后端的方式
Python如何用re模块实现简易tokenizer
May 02 #Python
Python实现简单得递归下降Parser
使用Python开发贪吃蛇游戏 SnakeGame
Apr 30 #Python
使用Python开发冰球小游戏
You might like
php md5下16位和32位的实现代码
2008/04/09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
php unlink()函数使用教程
2018/07/12 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
JS基础之undefined与null的区别分析
2011/08/08 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
vue短信验证性能优化如何写入localstorage中
2018/04/25 Javascript
vue中使用better-scroll实现滑动效果及注意事项
2018/11/15 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
python中的列表推导浅析
2014/04/26 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
python 写一个性能测试工具(一)
2020/10/24 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
如何实现jdbc性能优化
2012/07/30 面试题
药学专业大学生自荐信
2013/09/28 职场文书
环境工程毕业生自荐信
2013/11/17 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
《小儿垂钓》教学反思
2014/02/23 职场文书
文明班集体申报材料
2014/05/23 职场文书
运动会广播稿200字
2014/10/18 职场文书
Mysql中mvcc各场景理解应用
2022/08/05 MySQL