今天突然心血来潮,想全程自己写一个小游戏(毕竟对于一个才接触python不到一个月的小白来说,还是比较为难,虽然不算是完全成功,因为棋盘大小和布局还是借鉴了其它博主的,但这都是小问题,重要是其它的都是自己写的嘛!!!(咦,这小编真能扯,还不上代码)) 。相信各位既然来到了这里,那一定对这规则了如指掌了的。那我就不多赘述了。

先上图(有图有真相)

下面就由我来盖释盖释(解释解释)这破代码

这个参数是为了记录当前的轮次(该谁来)

class Stats:def __init__(self):"""管理游戏过程中的可变参数"""self.turn = 2  #当前轮次,1表示白棋,2表示黑棋

游戏中的固定参数

class Setting:def __init__(self):self.screen_size = (670, 670)self.screen_color = (238, 154, 73)self.line_color = (0, 0, 0)self.chess = [(), (255, 255, 255), (0, 0, 0)] #1表示白色,2表示黑色

使用sys中的exit()来结束游戏

使用pygame中的画图工具来绘制

1.pygame.draw.line(surface对象,颜色,起点坐标,终点坐标,线条大小) #坐标采用[x,y]表示。

2.pygame.draw.cirle(surface对象,颜色,圆点坐标,半径大小,外边框大小=0)   #外边框大小缺省默认为0,表示绘制实心圆;大于0表示绘制空心圆,数值大小表示边框线条粗细;小于0则什么都不会绘制。

import sysimport pygamefrom game_over import isover
from game_stats import Stats
from setting import Settingclass my_chess:"""管理五子棋的类"""def __init__(self):pygame.init()  # 获取对显示系统的访问# 记录棋子位置的数组,用于判断当前文字是否可下和判断五子连心self.chess_color = []self.chess = []self.chess_position = [[0 for _ in range(15)] for _ in range(15)]self.setting = Setting()  # 游戏参数设置self.stats = Stats()self.screen = pygame.display.set_mode(self.setting.screen_size)pygame.display.set_caption("我的五子棋")def run_game(self):while True:self.update_screen()# 将之前的棋子绘制出来for i in range(len(self.chess_color)):pygame.draw.circle(self.screen, self.chess_color[i], self.chess[i], 22)self.event_check()# pygame.display.flip()  # 让最近绘制的屏幕可见pygame.display.update()def update_screen(self):"""刷新屏幕显示"""self.screen.fill(self.setting.screen_color)  # 先填充背景色"""绘制棋盘"""for i in range(27, 670, 44):if i == 27 or i == 670 - 27:# 边界线条画大一点# 横线pygame.draw.line(self.screen, self.setting.line_color, [i, 27], [i, 670 - 27], 4)# 竖线pygame.draw.line(self.screen, self.setting.line_color, [27, i], [670 - 27, i], 4)else:pygame.draw.line(self.screen, self.setting.line_color, [i, 27], [i, 670 - 27], 2)pygame.draw.line(self.screen, self.setting.line_color, [27, i], [670 - 27, i], 2)# 中心小黑点绘制pygame.draw.circle(self.screen, self.setting.line_color, [27 + 44 * 7, 27 + 44 * 7], 7)def event_check(self):"""对游戏发生的事件进行处理"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.MOUSEBUTTONDOWN:a, b = pygame.mouse.get_pos()x, y = self.get_mouse(a, b)if x == 0 or not self.isOk([x, y]):passelse:self.chess_color.append(self.setting.chess[self.stats.turn])self.chess.append([x, y])if isover(self.chess_position, [x // 44, y // 44]):print('结束')sys.exit()self.chess_position[x // 44][y // 44] = self.stats.turnif self.stats.turn == 1:self.stats.turn += 1else:self.stats.turn -= 1def isOk(self, nums):"""检测当前位置是否可以下棋子"""if nums in self.chess:return Falsereturn Truedef get_mouse(self, a, b):for i in range(27, 670, 44):for j in range(27, 670, 44):left = i - 11right = i + 11up = j - 11down = j + 11if a >= left and a <= right and b >= up and b <= down:return i, jreturn 0, 0if __name__ == '__main__':game = my_chess()game.run_game()

判断这步棋子下了之后是否出现了五子相连的情况,这破代码太长了,当然也可以使用一个列表存储偏移量一个,再使用for循环内嵌一个while循环来减少代码量(我就不再淦它了)

from game_stats import Statsstats = Stats()def isover(chess_position, nums):cur = stats.turnleft, right = 0, 0x = nums[0]y = nums[1]# 检测行for i in range(x - 1, -1, -1):if chess_position[i][y] == cur:left += 1else:breakfor i in range(x + 1, 15, 1):if chess_position[i][y] == cur:right += 1else:breakif left + right >= 4:return True# 检测列left, right = 0, 0for i in range(y - 1, -1, -1):if chess_position[x][i] == cur:left += 1else:breakfor i in range(y + 1, 15, 1):if chess_position[x][i] == cur:right += 1else:breakif left + right >= 4:return True# 检测左对角线left, right = 0, 0i, j = x - 1, y - 1while i >= 0 and j >= 0:if chess_position[i][j] == cur:left += 1i -= 1j -= 1else:breaki, j = x + 1, y + 1while i < 15 and j < 15:if chess_position[i][j] == cur:right += 1i += 1j += 1else:breakif left + right >= 4:return True# 检测右对角线left, right = 0, 0i, j = x - 1, y + 1while i >= 0 and j < 15:if chess_position[i][j] == cur:left += 1i -= 1j += 1else:breaki, j = x + 1, y - 1while i < 15 and j >= 0:if chess_position[i][j] == cur:right += 1i += 1j -= 1else:breakif left + right >= 4:return Truereturn False

python实现《五子棋》相关推荐

  1. Python实现五子棋人机对战 | CSDN博文精选

    作者 | 吴小鹏 来源 | 数据札记倌(ID:Data_Groom) 五子棋是常见的一款小游戏,五子棋问题是人工智能中的一个经典问题.这篇文章主要介绍了Python版本五子棋的实现代码,大家可以做个参 ...

  2. 基于Python实现五子棋

    基于Python实现五子棋 了解游戏的规则是我们首先需要做的事情,如果不知晓规则,那么我们肯定寸步难行. 五子棋游戏规则: 对局双方各执一色棋子. 空棋盘开局. 黑先.白后,交替下子,每次只能下一子. ...

  3. 怎么用python实现五子棋 : 第一节,画出五子棋棋盘

    怎么用python实现五子棋,这是一个看似简单且复杂的游戏. 上来给大家一坨代码,估计许多人都会晕掉,尤其是对新手,直接打击其自信心,可能从此以后与编码无缘了. 所以本人准备拆分步骤,一步一步,由简入 ...

  4. python实现五子棋续

    Python实现五子棋 标记位 思路 代码 效果图 AI策略 一点修正 总结 摘要: 本文主要是针对之前写过的 五子棋一文中的人机进行补充和说明. 补充和说明为两个点 标记位 AI策略 标记位 由于A ...

  5. python单机五子棋详解(tkinter)

    python单机五子棋详解(tkinter) 简介 样式创建 逻辑编写 简介 这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏.面向新手. 程序主要包括两个 ...

  6. python实现五子棋游戏

    五子棋游戏相信大部分人都玩过,今天我们用python来实现一次 具体代码可以访问我的GitHub地址获取 https://github.com/liuzuoping/python_Games 构建五子 ...

  7. python制作五子棋_python制作简单五子棋游戏

    python制作简单五子棋游戏 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python制作简单五子棋游戏.txt ] (友情提示:右键点上行txt文档名->目标另存 ...

  8. Python Tkinter——五子棋游戏

    Python Tkinter 实践系列--五子棋游戏 tkinter模块,窗口创建.消息循环等tkinter的基本架构 绘制图形,键盘及鼠标事件的处理程序 导入程序所需的库和模块 import sys ...

  9. Python简易五子棋

    Python控制台版五子棋 1.写在前面 最近从各种渠道接触到了一些有趣的Python小练习题,适合对Python基础有一定了解的童鞋练习,因为问题都来源于生活,所以码起来有一些趣味,自己也断断续续把 ...

  10. python判断五子棋胜负_一个连珠(带禁手的五子棋)判断胜负的PHP实现

    gist 打不开的凑合看这个吧 xsir317/renju 曾经从一个C++的源码那里(传送门: Index of /renlib/opensrc 就是那个ForbiddenPointFinder ) ...

最新文章

  1. zabbix生成资源性能报表+邮件自动发送
  2. MAX487制作RS485总线接口模块
  3. [原创]C#应用访问Microsoft SQL Server 2005分析服务
  4. matlab里矩阵相除,Matlab中的矩阵除法有问题???
  5. WP7页面的数值传递和对象传递
  6. MYSQL优化---hidba
  7. mysql 设置按天分表_MySQL 优化实战记录
  8. 北京交通大学计算机学院篮球,院际杯篮球赛|男篮小组赛第四轮战报
  9. jsp中的session和上下文
  10. 拓端tecdat|R使用LASSO回归预测股票收益
  11. 使用科来网络分析系统
  12. 微信小程序抓包-夜神模拟器结合BurpSuite抓包(可用于现在最新版本微信)
  13. python使用requests库爬取淘宝食品信息,包含sign参数破解
  14. 女孩的问题,男孩的回答
  15. 一般程序员正常会会几种语言?
  16. virtualbox虚拟机窗口大小调整
  17. js html url编码,js URLdecode()与urlencode方法支持中文解码
  18. 【案例28】银行对账单管理-在线下载优化记录
  19. cocos STG游戏(笔记三)
  20. python GNE 爬虫通用提取文章信息模块

热门文章

  1. 爬虫实战篇(模拟登录)
  2. 曲面细分(loop曲面细分,catmull曲面细分)(计算机图形学学习笔记)
  3. 测试代码(测试函数、测试类)
  4. IEO是行情小阳春的导火索?不,是埋葬者
  5. SLAM轨迹测评工具evo使用
  6. C++之《小货兵摆大炮》
  7. 《算法》-字符串[数据压缩]
  8. 【考研plog】目标院校整理第二弹-复试分数线篇
  9. C语言的宏定义、宏展开
  10. Abp框架从零开始(基于.Net Core 2.2) 小记(二) 简单的文件上传