python五子棋(附代码)

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

基于pygame实现五子棋

掌握核心算法,怎么判断是否连成五个以及落子位置的模糊判断

1.只需要判断最后一个棋子周围4个方向(上下,左右,左上右下,右下左上)这些方向棋子的颜色是否和最后一个落子颜色连续一致!(详情看代码)

2.落子位置的模糊判断对下棋的体验感提升十分明显!采用基本的四舍五入就行了,超过两棋盘线一半就可以认为是在下一行,反之成立!

有其他问题欢迎交流!

五子棋pygame代码,pygame,python,开发语言

生成棋盘的样子

五子棋pygame代码,pygame,python,开发语言文章来源地址https://www.toymoban.com/news/detail-763895.html

import pygame
pygame.init()

pygame.display.set_caption('五子棋')         #窗口名称


dir1=[(-1, 0), (1, 0)]
dir2=[(0, -1), (0, 1)]
dir3=[(-1, -1), (1, 1)]
dir4=[(-1, 1), (1, -1)]
direct=[dir1,dir2,dir3,dir4]#设定判断连子方向
space=60#四周边距
cell_size=40#每个格子大小
cell_number=15#行列数
screen_size=cell_size*(cell_number-1)+2*space#窗口边长
screen = pygame.display.set_mode((screen_size,screen_size))#窗口大小
chess_arr=[]#已经落下的棋子的屏幕坐标
chess_done=[]#已经落下的棋子的坐标
chess=0#总棋子数
flag='black'#先下者为黑
game_state='good'
chess_board=[[0]*15 for i in range(15)]#设定棋盘集合
'''#第一次的失败实验
def chess_number(chess_board,dx,dy,lastx,lasty):#判断连子数
    tempx=lastx
    tempy=lasty
    num=0
    while True:
        tempx += dx#将tempx移动一格,以便判断连子数
        tempy += dy
        if tempx<0 or tempy< 0 or tempx >14 or tempy >14 or chess_board[tempy][tempx] == '0':num
        num=num+1
        '''
def chess_number(chess_board,dx,dy,lastx,lasty):#判断连子数
    tempx=lastx
    tempy=lasty
    num=0
    while True:
        tempx += dx#将tempx移动一格,以便判断连子数
        tempy += dy
        if 0<=tempx<=14 and 0<=tempy<=14 and chess_board[tempy][tempx]==flag:
            num+=1
        elif 0<=tempx<=14 and 0<=tempy<=14 and chess_board[tempy][tempx]!=flag:
            return num
        if tempx<0 or tempy<0 or tempx>14 or tempy>14 or chess_board[tempy][tempx]==0:
            return num



def check_win(chess_done,flag):

    for dir in direct:#遍历方向
        di1,di2=dir
        dx,dy=di1
        number1=chess_number(chess_board,dx,dy,xi,yi)
        dx,dy=di2
        number2=chess_number(chess_board,dx,dy,xi,yi)
        print(number1+number2)
        if number1+number2>=4:#包括最后一颗子在内,连子数大于等于5
            return True
        



while True:  # 死循环确保窗口一直显示
    for event in pygame.event.get(): # 遍历所有事件
        if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出
            pygame.quit()
        if event.type == pygame.MOUSEBUTTONUP and game_state == 'good': # 鼠标弹起
            x, y = pygame.mouse.get_pos() # 获取鼠标位置
            if (x-space)//cell_size in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:#判断在格子附近
                if (x-space)%cell_size>0.5*cell_size:#向大取整
                    xi=(x-space)//cell_size+1
                else:#向小取整
                    xi=(x-space)//cell_size
            else:
                break
            if (y-space)//cell_size in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14]:#判断在格子附近
                if (y-space)%cell_size>0.5*cell_size:#向大取整
                    yi=(y-space)//cell_size+1
                else:#向小取整
                    yi=(y-space)//cell_size
            else:
                break        
            if xi in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] and yi in [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14] and (xi*cell_size+space,yi*cell_size+space,'black') not in chess_arr and (xi*cell_size+space,yi*cell_size+space,'white') not in chess_arr:
                chess_arr.append((xi*cell_size+space,yi*cell_size+space,flag))#将落子坐标加入集合
                chess_done.append((xi,yi,flag))
                chess_board[yi][xi]=flag


                if check_win(chess_done, flag):
                    game_state = 'black' if flag == 'black' else 'white'#判断输赢
                else:
                    flag = 'white' if flag == 'black' else 'black'#切换棋子颜色
                    chess+=1
                if chess==225:
                    game_state='tie'
   
    screen.fill((222,171,138))#设置底色        
    for x in range(0, cell_size * cell_number, cell_size):
        pygame.draw.line(screen,(255,255,255),(x+space,space),(x+space,screen_size-space),1)#窗口, 线条颜色, 开始坐标, 结束坐标, 线条大小 
    for y in range(0, cell_size * cell_number, cell_size):
        pygame.draw.line(screen,(255,255,255),(space,y+space),(screen_size-space,y+space),1)#窗口, 线条颜色, 开始坐标, 结束坐标, 线条大小 
    for i in [4,10]:
        for j in [4,10]:
            pygame.draw.circle(screen,(255,255,255),(i*cell_size+space,j*cell_size+space),5,5)
    pygame.draw.circle(screen,(255,255,255),(7*cell_size+space,7*cell_size+space),5,5)
    for x,y,c in chess_done:
        if c == 'black':
            color=(0,0,0)#定义颜色
        else:
            color=(255,255,255)
        pygame.draw.circle(screen,color,(x*cell_size+space,y*cell_size+space),12,12)#画出集合内所有棋子
        
    if game_state != 'good':
        myfont = pygame.font.Font(None,120)
        color= 221,207,113#胜利者金黄色
        if game_state=='white':#判断输出语句
            win_text='white win'
        elif game_state == 'black':
            win_text='black win'
        elif game_state == 'tie':
            win_text='TIE'
        textImage = myfont.render(win_text, True, color)
        screen.blit(textImage, (260,320))
    
    
    pygame.display.update()

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

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

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

相关文章

  • Pygame 五子棋编程

    编程说明:  pygame编程五子棋程序。 设计流程 :新建棋盘,落子画圆,校验五子相连,赢家信息显示,自动重启下一局,程序打包成exe。 关键点 :     新建棋盘:考虑线的间隔,需提前计算好。     落子画圆:考虑黑白交替,已落子坐标位不可重复落子。     校验五子

    2024年02月08日
    浏览(37)
  • C语言三子棋,五子棋,n子棋的代码实现

    其中该项目包含3个文件,一个.h文件声明所用的函数,两个.c文件进行主要的代码书写。 项目效果展示: 菜单打印 棋盘的打印(二维数组) 棋子打印(下标) 电脑下棋(随机数) 判断输赢(竖,横,左斜,右斜…) 大致的思路就是这些,看过开发思路,脑海里应该就大致

    2024年02月06日
    浏览(31)
  • python五子棋(附代码)

    基于pygame实现五子棋 掌握核心算法,怎么判断是否连成五个以及落子位置的模糊判断 1.只需要判断最后一个棋子周围4个方向(上下,左右,左上右下,右下左上)这些方向棋子的颜色是否和最后一个落子颜色连续一致!(详情看代码) 2.落子位置的模糊判断对下棋的体验感

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

    本文主要讲解基于p

    2024年02月10日
    浏览(29)
  • Java五子棋详细步骤及完整代码

    1. 用户输入行和列 2. 将输入设为对应棋子 1. 横向判断 2. 竖向判断 3. 左斜判断 4.右斜判断 1.横向胜利 2.竖向胜利 3. 左斜判断 4. 右斜判断

    2024年02月02日
    浏览(29)
  • JavaScript应用:五子棋游戏实战开发

    🏆作者简介,黑夜开发者,全栈领域新星创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 🏆本文已收录于专栏:100个JavaScript的小应用。 🎉欢迎 👍点赞✍评论⭐收藏 五子棋是一

    2024年02月13日
    浏览(31)
  • Python实现五子棋

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

    2024年02月06日
    浏览(32)
  • 五子棋(Python实现)

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

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

    2024年02月12日
    浏览(21)
  • python实现简单五子棋

     规则 :用鼠标下子,黑子白子交替下子 核心 :1、使用turtle库画棋盘            2、turtle库中的onscreenclick()函数,实现鼠标点击 详细步骤: 用turtle()库fd()函数实现画直线,tracer(0)消除动画效果 定义一个二维数组,也就是列表来对应棋盘上的落子情况,没有子为0,黑子为

    2024年02月05日
    浏览(19)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包