python编写五子棋游戏


Posted in Python onMay 25, 2021

本文实例为大家分享了python编写五子棋游戏的具体代码,供大家参考,具体内容如下

游戏代码及部分注释

import pygame        #导入pygame游戏模块
import time           #调用time库
import sys
from pygame.locals import *

initChessList = []          #保存的是棋盘坐标
initRole = 1                #1:代表白棋; 2:代表黑棋
resultFlag = 0              #结果标志

class StornPoint():
    def __init__(self,x,y,value):
        '''
        :param x: 代表x轴坐标
        :param y: 代表y轴坐标
        :param value: 当前坐标点的棋子:0:没有棋子 1:白子 2:黑子
        '''
        self.x = x            #初始化成员变量
        self.y = y
        self.value = value

def initChessSquare(x,y):     #初始化棋盘
    for i in range(15):       # 每一行的交叉点坐标
        rowlist = []
        for j in range(15):   # 每一列的交叉点坐标
            pointX = x+ j*40
            pointY = y+ i*40
            sp = StornPoint(pointX,pointY,0)
            rowlist.append(sp)
        initChessList.append(rowlist)

def eventHander():            #监听各种事件
    for event in pygame.event.get():
        global initRole
        if event.type == QUIT:#事件类型为退出时
            pygame.quit()
            sys.exit()
        if event.type == MOUSEBUTTONDOWN: #当点击鼠标时
            x,y = pygame.mouse.get_pos()  #获取点击鼠标的位置坐标
            i=0
            j=0
            for temp in initChessList:
                for point in temp:
                    if x>=point.x-10 and x<=point.x+10 and y>=point.y-10 and y<=point.y+10:
                        if point.value == 0 and initRole == 1:   #当棋盘位置为空;棋子类型为白棋
                            point.value = 1             #鼠标点击时,棋子为白棋
                            judgeResult(i,j,1)
                            initRole = 2                #切换角色
                        elif point.value == 0 and initRole ==2:  #当棋盘位置为空;棋子类型为黑棋
                            point.value = 2             #鼠标点击时,棋子为黑棋
                            judgeResult(i,j,2)
                            initRole = 1                #切换角色
                        break
                    j+=1
                i+=1
                j=0

def judgeResult(i,j,value):   #横向判断
    global resultFlag
    flag = False
    for  x in  range(j - 4, j + 5):  # 横向有没有出现5连(在边缘依次逐一遍历,是否五个棋子的类型一样)
        if x >= 0 and x + 4 < 15 :
            if initChessList[i][x].value == value and \
                initChessList[i][x + 1].value == value and \
                initChessList[i][x + 2].value == value and \
                initChessList[i][x + 3].value == value and \
                initChessList[i][x + 4].value == value :
                flag = True
                break
                pass
    for x in range(i - 4, i + 5):  # 纵向有没有出现5连(在边缘依次逐一遍历,是否五个棋子的类型一样)
        if x >= 0 and x + 4 < 15:
            if initChessList[x][j].value == value and \
                    initChessList[x + 1][j].value == value and \
                    initChessList[x + 2][j].value == value and \
                    initChessList[x + 3][j].value == value and \
                    initChessList[x + 4][j].value == value:
                flag = True
                break
                pass

    # 先判断东北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(右斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
    for x, y in zip(range(j + 4, j - 5, -1), range(i - 4, i + 5)):
        if x >= 0 and x + 4 < 15 and y + 4 >= 0 and y < 15:
            if initChessList[y][x].value == value and \
                    initChessList[y - 1][x + 1].value == value and \
                    initChessList[y - 2][x + 2].value == value and \
                    initChessList[y - 3][x + 3].value == value and \
                    initChessList[y - 4][x + 4].value == value:
                flag = True

    # 2、判断西北方向的对角下输赢 x 列轴, y是行轴 , i 是行 j 是列(左斜向)(在边缘依次逐一遍历,是否五个棋子的类型一样)
    for x, y in zip(range(j - 4, j + 5), range(i - 4, i + 5)):
        if x >= 0 and x + 4 < 15 and y >= 0 and y + 4 < 15:
            if initChessList[y][x].value == value and \
                    initChessList[y + 1][x + 1].value == value and \
                    initChessList[y + 2][x + 2].value == value and \
                    initChessList[y + 3][x + 3].value == value and \
                    initChessList[y + 4][x + 4].value == value:
                flag = True


    if flag:               #如果条件成立,证明五子连珠
        resultFlag = value #获取成立的棋子颜色
        print("白棋赢" if value ==1 else "黑棋赢")

# 加载素材
def main():
    global initChessList,resultFlag
    initChessSquare(27,27)
    pygame.init()     # 初始化游戏环境
    screen = pygame.display.set_mode((620,620),0,0)          # 创建游戏窗口 # 第一个参数是元组:窗口的长和宽
    pygame.display.set_caption("陈晓超五子棋")                # 添加游戏标题
    background = pygame.image.load("D:/cxc/4.png")          #加载背景图片
    whiteStorn = pygame.image.load("D:/cxc/2.png") #加载白棋图片
    blackStorn = pygame.image.load("D:/cxc/1.png") #加载黑棋图片
    resultStorn = pygame.image.load("D:/cxc/3.png")#加载 赢 时的图片
    rect = blackStorn.get_rect()

    while True:
        screen.blit(background,(0,0))
        for temp in initChessList:
            for point in temp:
                if point.value == 1:          #当棋子类型为1时,绘制白棋
                    screen.blit(whiteStorn,(point.x-18,point.y-18))
                elif point.value == 2:        #当棋子类型为2时,绘制黑棋
                    screen.blit(blackStorn,(point.x-18,point.y-18))

        if resultFlag >0:
            initChessList = []                 # 清空棋盘
            initChessSquare(27,27)             # 重新初始化棋盘
            screen.blit(resultStorn,(200,200)) #绘制获胜时的图片
        pygame.display.update()                #更新视图

        if resultFlag >0:
            time.sleep(3)
            resultFlag = 0                     #置空之前的获胜结果
        eventHander()                          #调用之前定义的事件函数
if __name__ == '__main__':
    main()        #调用主函数绘制窗口
    pass

运行后就会出现游戏的窗口,像这样:

python编写五子棋游戏

我们可以任意的在棋盘上落子,像这样:

python编写五子棋游戏

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中利用Future对象异步返回结果示例代码
Sep 07 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python 识别图片中的文字信息方法
May 10 Python
详解Django中间件的5种自定义方法
Jul 26 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
基于python plotly交互式图表大全
Dec 07 Python
Python命名空间namespace及作用域原理解析
Jun 05 Python
无惧面试,带你搞懂python 装饰器
Aug 17 Python
python通过cython加密代码
Dec 11 Python
去除python中的字符串空格的简单方法
Dec 22 Python
Python Socket编程详解
Apr 25 Python
浅谈python数据类型及其操作
对Keras自带Loss Function的深入研究
May 25 #Python
pytorch中的model=model.to(device)使用说明
May 24 #Python
解决pytorch-gpu 安装失败的记录
May 24 #Python
如何解决.cuda()加载用时很长的问题
一劳永逸彻底解决pip install慢的办法
May 24 #Python
Django实现翻页的示例代码
May 24 #Python
You might like
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
基于jquery的商品展示放大镜
2010/08/07 Javascript
再谈javascript原型继承
2014/11/10 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
jQuery实现定位滚动条位置
2016/08/05 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
Vue中mintui的field实现blur和focus事件的方法
2018/08/25 Javascript
Vue作用域插槽slot-scope实例代码
2018/09/05 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
主治医师岗位职责
2013/12/10 职场文书
纠风工作实施方案
2014/03/15 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
债务追讨授权委托书范本
2014/10/16 职场文书
简历中自我评价范文
2015/03/11 职场文书
写自招自荐信的绝招!
2019/04/19 职场文书
python flask框架快速入门
2021/05/14 Python