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实现的几个常用排序算法实例
Jun 16 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
Dec 21 Python
Python模拟随机游走图形效果示例
Feb 06 Python
Python中property函数用法实例分析
Jun 04 Python
NumPy 数组使用大全
Apr 25 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 Python
使用Python的networkx绘制精美网络图教程
Nov 21 Python
Python autoescape标签用法解析
Jan 17 Python
使用TensorBoard进行超参数优化的实现
Jul 06 Python
python 基于DDT实现数据驱动测试
Feb 18 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
星际争霸任务指南——神族
2020/03/04 星际争霸
PHP4之COOKIE支持详解
2006/10/09 PHP
用缓存实现静态页面的测试
2006/12/06 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
Jquery 常用方法经典总结
2010/01/28 Javascript
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
javascript中sort() 方法使用详解
2015/08/30 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
详解webpack + vue + node 打造单页面(入门篇)
2017/09/23 Javascript
template.js前端模板引擎使用详解
2017/10/10 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
express框架下使用session的方法
2019/07/31 Javascript
vue实现图片上传预览功能
2019/12/23 Javascript
js实现简单的点名器随机色实例代码
2020/09/20 Javascript
Python实现建立SSH连接的方法
2015/06/03 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
初一生物教学反思
2014/01/18 职场文书
步步惊心观后感
2015/06/12 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书