项目简介

之前学python的时候 写了个游戏来练手 用的是 pygame 没有别的依赖
只用了一两百行的代码就实现了 整体来说功能并不算完整

项目背后的故事

这个项目是在大学的时候
偶然一个机遇交一个小朋友Python时 小朋友大概10多岁 正在打算上初一
小朋友分非常非常非常聪明!!!
当时给他讲东西 他很快就可以接受 立马就可以模仿出来
小朋友会的东西很多 其中一项我非常感兴趣哈哈 — 围棋 好像还是业余挺高的那种(不好意思 我不太懂段位)
好像是什么定段之后就可以打职业那种?对我来说是非常非常厉害的存在了
当时我还让他简单的交了交我如何下围棋 以及围棋的一些概念

除了五子棋之外 当时还写了 贪吃蛇、扫雷等等这些游戏
还给他讲了爬虫相关的东西 还有HTML啊CSS之类的
当时有一个游戏叫 “人类资源机器(HumanResource)” 游戏是一个通过简单编程 控制小人来实现目标的游戏

↑就是这个游戏!当时我很惊讶 他过关速度非常快!搞得我压力都上来了哈哈

当时还准备了几页的 “课本” 方便小朋友以后能够回看

项目扩展思路

当然围棋其实也是一个道理 只是计算胜负、计算气的逻辑会不一样
可以改进一下 使用鼠标来落子会更有意思
大家可以参考一下 主项目在GitHub上 除了单机版以外还有一个局域网版

运行截图

安装依赖

pip install pygame
或者
pip3 install pygame

运行游戏

将游戏代码保存后 直接运行即可
上下左右移动光标 空格落子

import pygame# 初始化
pygame.init()
# 设置窗口标题
screencaption=pygame.display.set_caption('Gobang')
# 设置大小
screen=pygame.display.set_mode([350,285])# 初始化字体
myfont=pygame.font.Font(None,30)
textImage=myfont.render("Hello Pygame",True,[255,255,255])
screen.blit(textImage,(100,100))# 棋子状态0为空 1为白色 2为黑色
status_list = {}
for i in range(0, 15*18):status_list[i] = 0
#print(status_list)clock = pygame.time.Clock()# 0 是白棋走 1是黑棋走
flag = 0
# 将要绘制的棋子的位置
movex = 1
movey = 1
while True:clock.tick(30)# 绘制棋盘screen.fill([255,255,255])for i in range(0, 15):pygame.draw.line(screen,[0,0,0],[0,i*20],[280,i*20],2)for i in range(0, 15):pygame.draw.line(screen,[0,0,0],[i*20,0],[i*20,280],2)# 绘制棋子for x in range(0, 15):for y in range(0, 15):if status_list[x*15 + y] == 1:pygame.draw.circle(screen,[255,0,0],[ 2 + y * 20,2 + x*20],10)elif status_list[x*15 + y] == 2:pygame.draw.circle(screen,[0,0,0],[ 2 + y * 20, 2 + x*20],10)# 判断是否获胜# X轴的判定if y < 11:# 白棋获胜if status_list[x*15 + y] == 1 and status_list[x*15 + y + 1] == 1 and status_list[x*15 + y + 2] == 1 and status_list[x*15 + y + 3] == 1 and status_list[x*15 + y + 4] == 1:print("白棋胜利")# break# 黑棋获胜if status_list[x*15 + y] == 2 and status_list[x*15 + y + 1] == 2 and status_list[x*15 + y + 2] == 2 and status_list[x*15 + y + 3] == 2 and status_list[x*15 + y + 4] == 2:print("黑棋胜利")# break# 判断是否获胜# Y轴的判定if x < 11:if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + y] == 1 and status_list[(x+2)*15 + y] == 1 and status_list[(x+3)*15 + y] == 1 and status_list[(x+4)*15 + y] == 1:print("白棋胜利")# breakif status_list[x*15 + y] == 2 and status_list[(x+1)*15 + y] == 2 and status_list[(x+2)*15 + y] == 2 and status_list[(x+3)*15 + y] == 2 and status_list[(x+4)*15 + y] == 2:print("黑棋胜利")# break# 判断是否获胜# 斜着判断 正对角线if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + (y+1)] == 1 and status_list[(x+2)*15 + (y+2)] == 1 and status_list[(x+3)*15 + (y+3)] == 1 and status_list[(x+4)*15 + (y+4)] == 1:print("白棋胜利")# breakif status_list[x*15 + y] == 2 and status_list[(x+1)*15 + (y+1)] == 2 and status_list[(x+2)*15 + (y+2)] == 2 and status_list[(x+3)*15 + (y+3)] == 2 and status_list[(x+4)*15 + (y+4)] == 2:print("黑棋胜利")# break# 判断是否获胜# 斜着判断 反对角线if status_list[x*15 + y] == 1 and status_list[(x+1)*15 + (y-1)] == 1 and status_list[(x+2)*15 + (y-2)] == 1 and status_list[(x+3)*15 + (y-3)] == 1 and status_list[(x+4)*15 + (y-4)] == 1:print("白棋胜利")# breakif status_list[x*15 + y] == 2 and status_list[(x+1)*15 + (y-1)] == 2 and status_list[(x+2)*15 + (y-2)] == 2 and status_list[(x+3)*15 + (y-3)] == 2 and status_list[(x+4)*15 + (y-4)] == 2:print("黑棋胜利")# break# 绘制落棋位置pygame.draw.circle(screen,[0,0,0],[ 2 + movex*20, 2 + movey*20],10,3)# 绘制文字 显示到谁落棋子if flag == 0: textImage=myfont.render("White",True,[255,0,0])else:textImage=myfont.render("Black",True,[0,0,255])screen.blit(textImage,(290,10))# 判断事件for event in pygame.event.get():# 退出事件if event.type==pygame.QUIT:pygame.quit()quit()# 键盘事件if event.type == pygame.KEYDOWN:if event.key == pygame.K_LEFT:if movex > 0:movex = movex - 1if event.key == pygame.K_RIGHT:if movex < 14:movex = movex + 1if event.key == pygame.K_UP:if movey > 0:movey = movey - 1if event.key == pygame.K_DOWN:if movey < 14:movey = movey + 1if event.key == pygame.K_SPACE:if flag == 0:if status_list[movey * 15 + movex] == 0:status_list[movey * 15 + movex] = 1flag = 1elif flag == 1:if status_list[movey * 15 + movex] == 0:status_list[movey * 15 + movex] = 2flag = 0# 刷新页面pygame.display.flip()
print("Done!")

Python pygame 实现游戏 彩色 五子棋 详细注释 附源码 单机版相关推荐

  1. 微信小程序UI自动化实践:python+minium+PO模式(超详细教程附源码供下载)

    文章目录 前言 一.minium介绍 二.安装环境 1. 安装minium doc 2. 安装minium 3. 启动小程序 三.准备知识 1. 启动 2. 配置 3. 命令行运行 4. 元素定位 5 ...

  2. 雷霆战机9.5全新上线,Python+Pygame开发飞机大战完整游戏项目(附源码)

    项目名称:太空大战 开发环境:Python3.6.4 第三方库:Pygame1.9.6 代码编辑器:Sublime Text 先来看一下游戏画面吧!  游戏画面动态且丰富哦!   需求分析 利用Pyt ...

  3. python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)

    Python:游戏:贪吃蛇(附源码) 发布时间:2018-09-05 09:59, 浏览次数:1295 , 标签: Python 贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么 ...

  4. C++小游戏笔记——射击小行星(附源码)

    C++小游戏笔记--射击小行星(附源码) 游戏展示图 一.飞船 1.飞船的绘制 2.飞船的角度 二.小行星 1.小行星的绘制 2."凹凸不平"效果的形成 3.小行星的分裂 三.子弹 ...

  5. python撩人的代码,老师教已毕业的学生,用Python代码每天不定时撩女友,附源码文件...

    原本就是学生会主席,在学校如此优秀的他,毕业参加工作,依然展现出好强的一面. 每天认真的工作,即使在工作之余也要用来给自己充电,所以难免会忽略女友,不够关心,免不了发脾气,甚至是争吵. 有一天,曾经大 ...

  6. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

  7. Python毕设-【课堂人脸签到系统】附源码课件/Python练手项目/Python毕业设计

    Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 文章目录 Python毕设-[课堂人脸签到系统]附源码课件/允许白嫖 系统简介 一.本课题拟解决的问题 二.系统技术栈 三.开发工具 四.数 ...

  8. 暑期Android游戏开发——小兔子跳铃铛(附源码)

    暑期Android游戏开发--小兔子跳铃铛(附源码) 一. 背景说明 我在南京的一所高校学习软件工程.学院里每年会举行一次"创新杯"软件比赛,鼓励同学自主学习和创新.我和几个好兄弟 ...

  9. Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程

    Python开发实战案例之网络爬虫(附源码)-35人已学习 课程介绍         课程特色: 特色1:案例驱动-围绕两大完整的Python网络爬虫实战开发案例:IT电子书下载网络爬虫和股票交易数据 ...

最新文章

  1. 设置VSCode代码编辑器右侧的Minimap代码缩略图滚动条切换显示、隐藏的快捷键Alt+M
  2. html+css+javaScript 写一个简单游戏 看了就会
  3. [zt]数学之美番外篇:平凡而又神奇的贝叶斯方法
  4. 【全文搜索引擎】Elasticsearch基本查询基础JavaAPI
  5. 把时间当作朋友 随笔记
  6. PAT甲级1027 Colors in Mars :[C++题解]进制位
  7. Java中Volatile的理解
  8. 纯CSS3美化单选按钮radio
  9. 韦东山嵌入式第一期14课第004节_und异常模示程序示例_P笔记
  10. 会议交流 | IJCKG 2021 日程表(北京时间)
  11. 结合MSDN理解windows service 服务安装的三个类。
  12. Python实现带有阻塞和超时放弃功能的队列结构
  13. iOS真机UI调试利器——Reveal
  14. 内网服务器putty到天翼云,SSH隧道管理内部服务(putty,ssh secure shell)for win
  15. 十三、VMware vSphere 6.7虚拟化云管理之13、VCSA6.7设置主机许可
  16. 推荐一款串口调试助手(win10,无广告,功能齐全,操作简单)
  17. Python添加pywin32
  18. strcpy()、strncpy()和strcpy_s()函数的区别
  19. 2100306-52-1,N-Mal-N-bis(PEG4-acid)一种马来酰亚胺PEG试剂,具有两个末端羧酸和一个马来酰亚胺(Mal)基团
  20. html5-canvas(简单贪吃蛇)

热门文章

  1. java生成个性化二维码
  2. 用户画像、物品画像【画像就是刻画物品或用户的特征;本质上就是给用户或物品贴标签】
  3. 记一次小米手机下载应用显示“路径不可用”
  4. 基于flowable的upp(统一流程平台)运行性能优化(2)
  5. 团队敏捷实践:迭代演示会议规则--用户故事
  6. ValueError:Dimension must be equal ,but for rnn_layer/bidirection_rnn/fw/fw/while/fw/multi_rnn_cell/
  7. zabbix监控nginx的pv和uv数据
  8. 数据分析——5天破10亿的哪吒,为啥这么火,Python来分析
  9. 给电脑系统备份时的注意事项
  10. 【mysql是怎样运行的】-客户端与服务器连接