python实现简单五子棋

这篇具有很好参考价值的文章主要介绍了python实现简单五子棋。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python实现简单五子棋

 规则:用鼠标下子,黑子白子交替下子

核心:1、使用turtle库画棋盘

           2、turtle库中的onscreenclick()函数,实现鼠标点击

详细步骤:

1、画棋盘,初始化数组

用turtle()库fd()函数实现画直线,tracer(0)消除动画效果

定义一个二维数组,也就是列表来对应棋盘上的落子情况,没有子为0,黑子为1,白子为-1

​
# 1、画棋盘,初始化棋盘
from turtle import *
screensize()
tracer(0)

for i in range(15):#画横向
    penup()
    goto(-280,-280+i*40)
    pendown()
    fd(560)
left(90)
for i in range(15):#画竖向
    penup()
    goto(-280+i*40,-280)
    pendown()
    fd(560)

penup() #画标点
goto(0,0)
dot()
goto(160,160)
dot()
goto(-160,160)
dot()
goto(160,-160)
dot()
goto(-160,-160)
dot()

​

*** 用一个二维数组来表示棋盘里的子

#如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。
#棋盘上每一个点初始值为0
arr=[[0 for i in range(15)] for j in range(15)]

2、实现落子功能

函数:turtle.onscreenclick(fun, btn=1, add=None)

参数:

fun 一个具有两个参数的函数,即画布上单击点的坐标。

btn mouse-button的编号默认为1(鼠标左键)

add 对或错。如果为True,将添加新的绑定,否则它将替换以前的绑定

funclick(x,y)函数:落子功能实现,通过遍历每个点,判断鼠标点击的位置与遍历的位置的距离,如果距离在范围内,并且该位置上没有子,就实现落子,然后交换落子者

# 2、鼠标事件,点击落子

turn=0 #记录该哪方落子
def funclick(x,y):
    global turn
    global arr
    if turn==0: #黑子先下1
        for i in range(15):
            Y=280-i*40
            for j in range(15):
                X=-280+j*40  #棋盘上的整点
                if abs(X-x)<20 and abs(Y-y)<20 and arr[i][j]==0:
                    arr[i][j]=1
                    goto(X,Y)
                    dot(20) 
                    turn=1  #交替下子
                    black_is_end(i,j)
    if turn==1: #白子-1
        for i in range(15):
            Y=280-i*40
            for j in range(15):
                X=-280+j*40  #棋盘上的整点
                if abs(X-x)<20 and abs(Y-y)<20 and arr[i][j]==0:
                    arr[i][j]=-1
                    goto(X+10,Y)
                    pendown()
                    circle(10)
                    penup()
                    turn=0  #交替下子
                    white_is_end(i,j)
    
onscreenclick(funclick)

3、判断是否五子连线、

black_is_end()函数:

①横向:由落子位置所在行数,从该行第一个位置开始判断往右5个是否都为刚才所落颜色的子,不是的话继续从第二个位置开始,往右5个判断,直到判断到最后一个子。

②竖向:由落子位置所在列数,从该列第一个位置开始判断往下5个是否都为刚才所落颜色的子,不是的话继续从第二个位置开始,往下5个判断,直到判断到最后一个子。

③\ 向:由落子位置向左斜上方找到第一个子然后遍历

④/ 向:由落子位置向右斜上方找到第一个子然后遍历

如果连成5子,输出那一方胜利,把onscreenclick()函数置空,使点击鼠标不能再下子。

​



# 3、判断4个方向是否连成五个子

def fun_null(x,y):
    return ;

def black_is_end(i,j):
    global arr
    for m in range(11): #竖向
        if arr[m][j]==1 and arr[m+1][j]==1 and arr[m+2][j]==1 and \
        arr[m+3][j]==1 and arr[m+4][j]==1:
            print("游戏结束,黑子胜利!")
            onscreenclick(fun_null)
    for m in range(11): #横向
        if arr[i][m]==1 and arr[i][m+1]==1 and arr[i][m+2]==1 and \
        arr[i][m+3]==1 and arr[i][m+4]==1:
            print("游戏结束,黑子胜利!")
            onscreenclick(fun_null)
    if i<=j:            #\向
        m=j-i     
        for k in range(m,11):
            if arr[k-m][k]==1 and arr[k-m+1][k+1]==1 and arr[k-m+2][k+2]==1 and \
               arr[k-m+3][k+3]==1 and arr[k-m+4][k+4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    if i>j:             #\向
        m=i-j    
        for k in range(m,11):
            if arr[k][k-m]==1 and arr[k+1][k-m+1]==1 and arr[k+2][k-m+2]==1 and \
               arr[k+3][k-m+3]==1 and arr[k+4][k-m+4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    n=i+j               #/向
    if n<=14:
        for k in range(0,n-4):
            if arr[k][n-k]==1 and arr[k+1][n-k-1]==1 and arr[k+2][n-k-2]==1 and \
               arr[k+3][n-k-3]==1 and arr[k+4][n-k-4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    if n>14:
        for v in range(n-14,11):
            if arr[v][n-v]==1 and arr[v+1][n-v-1]==1 and arr[v+2][n-v-2]==1 and \
               arr[v+3][n-v-3]==1 and arr[v+4][n-v-4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
                


​

源代码 :文章来源地址https://www.toymoban.com/news/detail-448218.html

# 1、画棋盘,初始化棋盘
from turtle import *
screensize()
tracer(0)

for i in range(15):#画横向
    penup()
    goto(-280,-280+i*40)
    pendown()
    fd(560)
left(90)
for i in range(15):#画竖向
    penup()
    goto(-280+i*40,-280)
    pendown()
    fd(560)

penup() #画标点
goto(0,0)
dot()
goto(160,160)
dot()
goto(-160,160)
dot()
goto(160,-160)
dot()
goto(-160,-160)
dot()

#如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。
#棋盘上每一个点初始值为0
arr=[[0 for i in range(15)] for j in range(15)]


# 3、判断4个方向是否连成五个子

def fun_null(x,y):
    return ;

def black_is_end(i,j):
    global arr
    for m in range(11): #竖向
        if arr[m][j]==1 and arr[m+1][j]==1 and arr[m+2][j]==1 and \
        arr[m+3][j]==1 and arr[m+4][j]==1:
            print("游戏结束,黑子胜利!")
            onscreenclick(fun_null)
    for m in range(11): #横向
        if arr[i][m]==1 and arr[i][m+1]==1 and arr[i][m+2]==1 and \
        arr[i][m+3]==1 and arr[i][m+4]==1:
            print("游戏结束,黑子胜利!")
            onscreenclick(fun_null)
    if i<=j:            #\向
        m=j-i     
        for k in range(m,11):
            if arr[k-m][k]==1 and arr[k-m+1][k+1]==1 and arr[k-m+2][k+2]==1 and \
               arr[k-m+3][k+3]==1 and arr[k-m+4][k+4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    if i>j:             #\向
        m=i-j    
        for k in range(m,11):
            if arr[k][k-m]==1 and arr[k+1][k-m+1]==1 and arr[k+2][k-m+2]==1 and \
               arr[k+3][k-m+3]==1 and arr[k+4][k-m+4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    n=i+j               #/向
    if n<=14:
        for k in range(0,n-4):
            if arr[k][n-k]==1 and arr[k+1][n-k-1]==1 and arr[k+2][n-k-2]==1 and \
               arr[k+3][n-k-3]==1 and arr[k+4][n-k-4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
    if n>14:
        for v in range(n-14,11):
            if arr[v][n-v]==1 and arr[v+1][n-v-1]==1 and arr[v+2][n-v-2]==1 and \
               arr[v+3][n-v-3]==1 and arr[v+4][n-v-4]==1:
                print("游戏结束,黑子胜利!")
                onscreenclick(fun_null)
                
def white_is_end(i,j):
    global arr
    for m in range(11): #竖向
        if arr[m][j]==-1 and arr[m+1][j]==-1 and arr[m+2][j]==-1 and \
        arr[m+3][j]==-1 and arr[m+4][j]==-1:
            print("游戏结束,白子胜利!")
            onscreenclick(fun_null)
    for m in range(11): #横向
        if arr[i][m]==-1 and arr[i][m+1]==-1 and arr[i][m+2]==-1 and \
        arr[i][m+3]==-1 and arr[i][m+4]==-1:
            print("游戏结束,白子胜利!")
            onscreenclick(fun_null)
    if i<=j:            #\向
        m=j-i     
        for k in range(m,11):
            if arr[k-m][k]==-1 and arr[k-m+1][k+1]==-1 and arr[k-m+2][k+2]==-1 and \
               arr[k-m+3][k+3]==-1 and arr[k-m+4][k+4]==-1:
                print("游戏结束,白子胜利!")
                onscreenclick(fun_null)
    if i>j:             #\向
        m=i-j    
        for k in range(m,11):
            if arr[k][k-m]==-1 and arr[k+1][k-m+1]==-1 and arr[k+2][k-m+2]==-1 and \
               arr[k+3][k-m+3]==-1 and arr[k+4][k-m+4]==-1:
                print("游戏结束,白子胜利!")
                onscreenclick(fun_null)
    n=i+j               #/向
    if n<=14:
        for k in range(0,n-4):
            if arr[k][n-k]==-1 and arr[k+1][n-k-1]==-1 and arr[k+2][n-k-2]==-1 and \
               arr[k+3][n-k-3]==-1 and arr[k+4][n-k-4]==-1:
                print("游戏结束,白子胜利!")
                onscreenclick(fun_null)
    if n>14:
        for v in range(n-14,11):
            if arr[v][n-v]==-1 and arr[v+1][n-v-1]==-1 and arr[v+2][n-v-2]==-1 and \
               arr[v+3][n-v-3]==-1 and arr[v+4][n-v-4]==-1:
                print("游戏结束,白子胜利!")
                onscreenclick(fun_null)
                


# 2、鼠标事件,点击落子

turn=0 #记录该哪方落子
def funclick(x,y):
    global turn
    global arr
    if turn==0: #黑子先下1
        for i in range(15):
            Y=280-i*40
            for j in range(15):
                X=-280+j*40  #棋盘上的整点
                if abs(X-x)<20 and abs(Y-y)<20 and arr[i][j]==0:
                    arr[i][j]=1
                    goto(X,Y)
                    dot(20) 
                    turn=1  #交替下子
                    black_is_end(i,j)
    if turn==1: #白子-1
        for i in range(15):
            Y=280-i*40
            for j in range(15):
                X=-280+j*40  #棋盘上的整点
                if abs(X-x)<20 and abs(Y-y)<20 and arr[i][j]==0:
                    arr[i][j]=-1
                    goto(X+10,Y)
                    pendown()
                    circle(10)
                    penup()
                    turn=0  #交替下子
                    white_is_end(i,j)
    
onscreenclick(funclick)

到了这里,关于python实现简单五子棋的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现五子棋

    我认为这个五子棋核心还是在于二维数组,将实际当中鼠标点击的物理位置转换到棋盘中的逻辑地址,之后便用数组的方法进行操作,例如检测是否获胜,电脑下棋策略等。 是否可落子 是否有输赢 每次标记最新下棋的位置即可 电脑下棋 策略:主要根据一个网上的经验评分

    2024年02月06日
    浏览(33)
  • python实现《五子棋》

            今天突然心血来潮,想全程自己写一个小游戏(毕竟对于一个才接触python不到一个月的小白来说,还是比较为难,虽然不算是完全成功,因为棋盘大小和布局还是借鉴了其它博主的,但这都是小问题,重要是其它的都是自己写的嘛!!!(咦,这小编真能扯,还不上

    2024年02月12日
    浏览(22)
  • python实现五子棋(完整代码)

    本文主要讲解基于p

    2024年02月10日
    浏览(29)
  • 让电脑变得更聪明——用python实现五子棋游戏

    作为经典的棋类游戏,五子棋深受大众喜爱,但如果仅实现人与人的博弈,那程序很简单,如果要实现人机对战,教会计算机如何战胜人类,那就不是十分容易的事了。本文我们先从简单入手,完成五子棋游戏的基本操作,然后再尝试引入一些实现人工智能的编程方法和技巧

    2024年02月05日
    浏览(33)
  • python项目分享 - 五子棋小游戏设计与实现 (源码)

    🔥 Hi,各位同学好呀,这里是L学长! 🥇今天向大家分享一个今年(2022)最新完成的毕业设计项目作品 python小游戏毕设 五子棋小游戏设计与实现 (源码) 🥇 学长根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数:3分 工作量:3分 创新点:4分 项目获取: htt

    2024年02月03日
    浏览(29)
  • 基于python五子棋的设计与实现(论文+源码)_kaic

    目  录 摘  要 绪  论 一、游戏的需求分析 (一)游戏设计目标 (二)游戏的功能需求 1.可视化模块 2.玩家操作模块 3.胜负判定模块 (三)游戏的性能需求 (四)游戏其它需求 二、五子棋游戏开发的可行性研究 (一)经济可行性研究 (二)社会可行性研究 三、五子棋游

    2024年02月13日
    浏览(23)
  • Java课程设计-简单五子棋

    五子棋介绍     五子棋是起源于中国古代的传统黑白棋种之一。五子棋不仅能增强思维能力,提高智力,而且富含哲理,有助于修身养性。五子棋既有现代休闲的明显特征“短、平、快”,又有古典哲学的高深学问“阴阳易理”;它既有简单易学的特性,为人民群众所喜闻

    2024年02月03日
    浏览(30)
  • Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版

    之前学python的时候 写了个游戏来练手 用的是 pygame 没有别的依赖 只用了一两百行的代码就实现了 整体来说功能并不算完整 这个项目是在大学的时候 偶然一个机遇交一个小朋友Python时 小朋友大概10多岁 正在打算上初一 小朋友分非常非常非常聪明!!! 当时给他讲东西 他很

    2024年02月12日
    浏览(26)
  • python实现五子棋-人机对战/人人对战(动图演示+源码分享)

    大家好,我是梦执,对梦执着。希望能和大家共同进步!   五子棋对战-所有文件文末自取 前言 人人对战 动态演示 源码分享 cheackboard.py 人人对战.py 导入模块 设置棋盘和棋子参数 局内字体设置 落子循坏体 画棋盘 画棋子 运行框返回落子坐标 执行文件 人机对战 动态演示

    2023年04月08日
    浏览(39)
  • Unity 简单联网游戏(双人五子棋)开发(二)

    前言:之前我们尝试开发了一个两个比拼分数的不像游戏的超简单的弱数据联网游戏,主要是想让一些没开发过联网游戏的人了解一下最基础的流程;不过有人仍然有人私信我表示看不懂,所以这次我们再开发一个类似的游戏,为了这个项目更像是一个游戏,而不是不像游戏

    2024年02月08日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包