五子棋游戏,我们将游戏分为两个方面:一个是棋盘,另一个是棋子,利用横线和纵线将棋盘分成一个个小方格,当黑子或者白子形成5个棋子连线时,显示胜利者,游戏结束。本程序难点在于确定胜利条件。


import pygame as pg
class Chessboard:  # 设置棋盘def __init__(s):s.grid_lenght = 26                               #棋盘格子的边长s.grid_count = 20                                #格子的数量s.start_x = 150                                  #棋盘初始点坐标,左上角的坐标s.start_y = 50s.edge_lenght = s.grid_lenght / 2                #棋盘周围边缘的长度13s.piece = "black"s.winner = Nones.gameover = Falses.grid = []for i in range(s.grid_count):                      #棋盘大小为20*20个格子s.grid.append(list("." * s.grid_count))def handle_event(s, e):origin_x = s.start_x - s.edge_lenghtorigin_y = s.start_y - s.edge_lenghtchessboard_lenght = (s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2mouse_pos = e.pos                                  #鼠标位置在棋盘坐标内if (mouse_pos[0] > origin_x and mouse_pos[0] <= origin_x + chessboard_lenght) and (mouse_pos[1] >= origin_y and mouse_pos[1] <= origin_y + chessboard_lenght):if not s.gameover:x = mouse_pos[0] - origin_x                 #X轴方向距离c = int(x / s.grid_lenght)                  #换算出X轴第几格y = mouse_pos[1] - origin_yr = int(y / s.grid_lenght)                  #换算出Y轴第几格if s.set_piece(r, c):s.check_win(r, c)def set_piece(s, r, c):if s.grid[r][c] == ".":                             #该位置没有棋子s.grid[r][c] = s.pieceif s.piece == "black":                          #交替使用棋子s.piece = "white"else:s.piece = "black"return Truereturn Falsedef check_win(s, r, c):n_count = s.get_continuous_count(r, c, -1, 0)            #上方向相周颜色棋子数量s_count = s.get_continuous_count(r, c, 1, 0)             #下方相同颜色棋子数量w_count = s.get_continuous_count(r, c, 0, -1)            #左方e_count = s.get_continuous_count(r, c, 0, 1)             #右方nw_count = s.get_continuous_count(r, c, -1, -1)          #左上方ne_count = s.get_continuous_count(r, c, -1, 1)           #右上方sw_count = s.get_continuous_count(r, c, 1, -1)           #左下方se_count = s.get_continuous_count(r, c, 1, 1)            #右下方if (n_count + s_count + 1 >= 5) or (e_count + w_count + 1 >= 5) or (se_count + nw_count + 1 >= 5) or (ne_count + sw_count + 1 >= 5):s.winner = s.grid[r][c]s.gameover = Truedef get_continuous_count(s, r, c, dr, dc):            #统计一个方向的同颜色棋子数量piece = s.grid[r][c]result = 0i = 1while True:new_r = r + dr * inew_c = c + dc * iif 0 <= new_r < s.grid_count and 0 <= new_c < s.grid_count:if s.grid[new_r][new_c] == piece:              #该方向颜色相同则加上result += 1else:breakelse:breaki += 1return resultdef draw(s, screen):pg.draw.rect(screen, (185, 122, 87), [s.start_x - s.edge_lenght, s.start_y - s.edge_lenght,              #画棋盘(s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2,(s.grid_count - 1) * s.grid_lenght + s.edge_lenght * 2], 0)for r in range(s.grid_count):                                                                           #画棋盘横线y=s.start_y+r*s.grid_lenghtpg.draw.line(screen,(0,0,0),[s.start_x,y],[s.start_x+s.grid_lenght*(s.grid_count-1),y],2)for c in range(s.grid_count):                                                                           #画棋盘竖线x = s.start_x+c*s.grid_lenghtpg.draw.line(screen, (0, 0, 0), [x,s.start_y], [x,s.start_y + s.grid_lenght * (s.grid_count - 1)], 2)for r in range(s.grid_count):for c in range(s.grid_count):piece=s.grid[r][c]if piece!=".":if piece=="black":                                           #设置棋子颜色color=(0,0,0)else:color=(255,255,255)x=s.start_x+c*s.grid_lenghty=s.start_y+r*s.grid_lenghtpg.draw.circle(screen,color,[x,y],s.grid_lenght//2)             #在棋盘上画棋子
class Gomoku:def __init__(s):pg.init()s.screen=pg.display.set_mode((800,600))pg.display.set_caption("五子棋对战")s.clock=pg.time.Clock()s.font=pg.font.Font(u"C:\Windows\Fonts\Candarab.ttf", 24)s.going=Trues.chessboard=Chessboard()def loop(s):                               #主循环while s.going:s.update()s.draw()s.clock.tick(50)pg.quit()def update(s):                            #更新画面for e in pg.event.get():if e.type==pg.QUIT:s.going=Falseelif e.type==pg.MOUSEBUTTONDOWN:s.chessboard.handle_event(e)def draw(s):s.screen.fill((255,255,255))                          #窗口底色为白色s.screen.blit(s.font.render("FPS:{0:.2F}".format(s.clock.get_fps()),True,(0,0,0)),(10,10))s.chessboard.draw(s.screen)                          #画棋盘窗口if s.chessboard.gameover:s.screen.blit(s.font.render("{0}Win".format("black"if s.chessboard.winner=="black"else"white"),True,(0,0,0)),(500,10))pg.display.update()                                 #更新界面
if __name__=="__main__":game=Gomoku()game.loop()

更多Python源代码,请关注公众号:Python代码大全

Python五子棋游戏源代码源程序相关推荐

  1. c语言五子棋游戏源程序代码,C语言五子棋游戏源代码

    <C语言五子棋游戏源代码>由会员分享,可在线阅读,更多相关<C语言五子棋游戏源代码(12页珍藏版)>请在人人文库网上搜索. 1.include#define N 10void ...

  2. Python扫雷游戏源代码及图片素材

    Python扫雷游戏源代码.源程序共有两个文件及一个资源包:main.py及mineblock.py,资源包请前往百度网盘下载, https://pan.baidu.com/s/1u-qsJhAaCJ ...

  3. c语言带坐标五子棋代码复制,C语言编写的五子棋游戏源代码

    已结贴√ 问题点数:20 回复次数:28 C语言编写的五子棋游戏源代码 # include # include # include # include//插入输入输出头文件 # include//字符 ...

  4. python五子棋游戏说明_python实现五子棋游戏(pygame版)

    python实现五子棋游戏(pygame版) 发布时间:2020-10-11 17:05:18 来源:脚本之家 阅读:67 作者:king0964 本文实例为大家分享了python五子棋游戏的具体代码 ...

  5. Python足球游戏源代码,热血足球小游戏,可双人玩

    基于Python pygame的足球游戏源代码,游戏可以双人玩,游戏入口程序为soccer.py. 控制人物一 方向键:wasd ,射门键:r 控制人物二,方向键: 键盘方向键,射门键:k 程序运行截 ...

  6. python五子棋游戏_python小项目之五子棋游戏

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 1.项目简介 在刚刚学习完python套接字的时候做的一个五子棋小游戏,可以在局域网内双人对战,也可以和电脑对战 2.实 ...

  7. python五子棋游戏控制台版_python实现五子棋游戏(pygame版)

    本文实例为大家分享了python五子棋游戏的具体代码,供大家参考,具体内容如下 目录 简介 实现过程 结语 简介 使用python实现pygame版的五子棋游戏: 环境:Windows系统+pytho ...

  8. Python拼图游戏源代码,可定制拼图图片,支持多种难度,可九宫格、十六宫格、二十五宫格

    配置环境 安装pygame模块 pip install pygame 引入资源 将照片,添加到resources/pictures路径下 照片.jpg格式 主函数代码 pintu.py 一个配置文件c ...

  9. python五子棋游戏15*15_python实现五子棋游戏(pygame版)

    分享python 编写的五子棋游戏 分享高手给用python编写一个五子棋游戏,需要代码. .心里知道有这么回事,白天就很正常晚上就胡思乱想,事已至此小编们都该向前走一步了. 请用PYTHON编一个小 ...

  10. python五子棋单机版源代码_python实现单机五子棋

    简介 这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏.面向新手. 程序主要包括两个部分,图形创建与逻辑编写两部分. 程序的运行结果: 样式创建 老规矩,先 ...

最新文章

  1. TCP/IP详解--学习笔记(7)-广播和多播,IGMP协议
  2. Perl 连接 SQL Server(ReShip)
  3. 软工作业3—词频统计
  4. vs2017c语言程序添加图标,笔试编程必备技巧——Visual Studio 2017添加自定义代码片段...
  5. 大商创去后门eval-stdin.php,大商创的开源代码都有哪些后门,如何去除大商创后门...
  6. 配置文件中的数据库连接串加密了,你以为我就挖不出来吗?
  7. H5学习之旅-H5列表(8)
  8. angular,vue,react的基本语法—双向数据绑定、条件渲染、列表渲染、angular小案例...
  9. Java基础类冒泡排序_Java基础 -- 冒泡排序算法(带详细注释)
  10. Linux下Python3.6安装实践与相关问题解决记录
  11. win10系统自带图标/壁纸位置
  12. java xml解析 jdom_Java语言中XML的JDom解析方式
  13. 第7章第33节:五图排版:错落有致的波浪式排版 [PowerPoint精美幻灯片实战教程]
  14. 【Prometheus】Alertmanager告警全方位讲解
  15. ros语音识别:pocketsphinx_continuous工作正常而gst-pocketsphinx不能识别相同语音的问题。
  16. ios中safari浏览器100vh带有滚动条?
  17. opa example
  18. 科技的发展让隐私保护成空谈
  19. Linux教程 第十一课 Linux进程管理及作业控制(几本没看懂)
  20. PhotoFilter for Insta Like Support Of Technology

热门文章

  1. Wireshark使用教程用户手册
  2. 业界最年轻的领军人物--久其总工程师欧阳曜
  3. 学生a3制图标题栏尺寸手绘_机械制图基本知识点
  4. ps3本服务器维修中,PS3大拆解图文详解!降低成本为目的
  5. Echarts官方文档!
  6. mongovue mysql_MongoVUE模糊查询,更新单个字段
  7. 如何删除MySQL服务
  8. java程序的编程规范
  9. Python干货分享+百G资源放送!
  10. 一个苹果证书怎么多次使用——导出p12文件