源码及资源请前往github获取
如果觉得还不错的话,请赏个 star 呗。

点击查看象棋小游戏系列目录导航

在上一篇博客中,我们实现了需求的分析,流程图,以及框架的搭建,这一篇,我们正式开始具体功能的实现
先上一张效果图:

需要做的任务:
1、让32 个棋子随机排布(给他们随机的位置),把棋子绘制到棋盘的相应位置。

分析:我们要实现这个功能必须有三步

  • 创建 32 个对象
  • 让这32个对象随机排布(给他们不同的位置)

刚开始想到两个解决思路:

  1. 先创建32个对象,然后循环产生随机的行列,通过不同的行列给对象随机位置
  2. 循环棋盘位置,随机取出对象,给该对象当前位置

第一种思路难点在于产生的行列可能会重复,我们需要去判断,因为会重复,所以循环的次数不确定,剩下的对象越少,无用的循环次数就越多,不好。
第二种思路的难点在于随机取出对象,瓶颈与第一种方式一样。

最终发现,如果我们可以得到乱序的对象数组,然后直接一个一个放到棋盘中,这应该是最好的方法了。
好了,现在问题集中在如何得到乱序的对象数组。翻阅api,发现新大陆。

 # 产生随机数 0-31resultList = random.sample(range(0,32), 32);

有了这个方法我们就可以给对象随机的位置,然后得到乱序的对象数组了,好了,写代码

# 创建对象数组
# 象棋 1*将 + 2*(士+象+马+车+炮)+ 5 * 兵 = 一共16子*2 = 32 子
chess_class = [] #[shi_chess,xiang_chess,ma_chess,che_chess,pao_chess]*2
for j in range(2):for i in range(2):chess_class.append(ChessPieces.ShiChess(bg_rect))chess_class.append(ChessPieces.XiangChess(bg_rect))chess_class.append(ChessPieces.MaChess(bg_rect))chess_class.append(ChessPieces.CheChess(bg_rect))chess_class.append(ChessPieces.PaoChess(bg_rect))chess_class.append(ChessPieces.JiangChess(bg_rect))for i in range(5):chess_class.append(ChessPieces.ZuChess(bg_rect))# 一半的棋子为黑色
for i in range(len(chess_class)//2):chess_class[i].role = ChessPieces.BLACK_ROLE# 获得乱序对象数组
def getChessList():# 产生随机数 0-31resultList = random.sample(range(0,32), 32);j = 0;#print('chess_class 的长度 %d  resultList 的长度 %d' % (len(chess_class),len(resultList)))for i in resultList:#print((i,j,chess_class[j].type))chess_class[j].position = (86+(i%4)*90, \66+((i//4))*71)chess_class[j].rect.left = 86+(i%4)*90chess_class[j].rect.top = 66+((i//4))*71#print(chess_class[j].position)j+=1return chess_class

上边的 86 和 66 指的是左上角棋盘正方形格子的左上角的坐标。
获得乱序对象数组时,棋子的位置需要做一个计算,逻辑如下:计算有些许偏差(单位为像素)

思路,根据得到的随机值,计算所在的行和列,计算出坐标,给对象赋坐标。

象棋小游戏(pygame)棋子随机摆布相关推荐

  1. Pathon开发象棋小游戏

    因为参加了python学习竞赛,自学了python的一些基础语法,做了一个中国象棋的小游戏,作为参赛项目,开始之前专门在电脑上下载了一个象棋小游戏,研究了一下象棋规则以及一些按键,接下来就把这个象棋小 ...

  2. 用 pygame 开发象棋小游戏

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 最近因为工作原因,需要学习一下python,学习了基础语法,打算做一个游戏,算做python 学习的一个阶段点. 前段时间 ...

  3. 象棋小游戏(pygame)总体分析及资源准备

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 点击查看象棋小游戏系列目录导航 上边是我初步构思之后画出的一个结构图: 思路解析: 1.首先分析游戏过程 大概分为三部分 ...

  4. 象棋小游戏(pygame)代码汇总

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 点击查看象棋小游戏系列目录导航 流程图: 效果图: 主函数代码: import pygame from pygame.lo ...

  5. 象棋小游戏(python)棋子的翻转和移动

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 点击查看象棋小游戏系列目录导航 继续贴出流程图: 从流程图中可以看出,首先判断棋子有没有被选中(鼠标点击位置是否有棋子) ...

  6. 象棋小游戏(pygame)吃子判赢

    源码及资源请前往github获取 如果觉得还不错的话,请赏个 star 呗. 点击查看象棋小游戏系列目录导航 流程图依旧需要: 吃子的条件是啥呢? 1.当前自己的棋子有被选中(select_chess ...

  7. 如何用Python开发象棋小游戏

    如何用Python开发象棋小游戏,源代码版本 人生苦短,我用Python! hello 大家好!我是Mark,一个姓马名克的中国人. 最近,我在CSDN当中看到了这一篇文章: 传送门 他详细地讲解了如 ...

  8. 不愧是大厂牛人!用Java实现象棋小游戏(附超详细,超长究极无敌代码)

    本文实例为大家分享了java实现象棋小游戏的具体代码,供大家参考,具体内容如下 用Eclipse编写 java环境1.8jdk 代码如下 package xiangqi象棋; /***中国象棋Java ...

  9. 用html+css+js实现中国象棋小游戏开发项目

    用html+css+js中国象棋小游戏开发项目 最近刚学习完JS的相关课程,跟着老师做了两个小游戏项目,就已经抑制不住内心的小激动,想着要迫不及待的着手准备做一个网页小游戏--中国象棋 由于从小就比较 ...

最新文章

  1. 记selenium1.0升级到selenium2.0
  2. 大数据2 Hadoop伪分布模式配置部署
  3. 内核代号101 — 动手写自己的内核
  4. Musical Theme
  5. 浅谈 G1 GC 日志格式
  6. GB 18030介绍及其与相关标准的比较-GB13000(附:Unicode规范)
  7. linux火狐浏览器49.0安装教程,火狐浏览器Linux最新版下载
  8. python数据拟合固定参数_如何将数据拟合到非理想二极管方程(隐式非线性函数)并检索参数 - python...
  9. 计算机考试时间2021安徽,安徽省2021年高考录取结果查询正式开通!查询方式权威公布...
  10. 如何成为更优秀的工程师?
  11. ajax文件上传进度条实现
  12. 谭浩强C语言程序设计第五版第七章例题
  13. c语言中judge的用法,judge的用法总结大全
  14. 函数调用之特殊三位数
  15. Google Colab V100 +TensorFlow1.15.2 性能测试
  16. oeasy教您玩转vim - 21 - 状态横条
  17. ubuntu20.04安装到u盘+配置美化
  18. AMCL代码详解(五)根据激光观测更新粒子权重
  19. 计算机考研规划 知乎,考研知乎最全117个问题!看完让你的考研成功率大大提高...
  20. 2007年中国优秀无线互联网站点TOP50点评

热门文章

  1. QT5 学习之路15---布局管理器
  2. mac word2011 设置图目录和表目录
  3. TL-WR703Nv1.7刷写openwrt固件
  4. 随记(17)场景AOI、游戏场景
  5. 手机二次认证怎么操作?关于二次认证的常见问题!
  6. mdadm命令的基本使用
  7. java发送会议邀请邮件模板_java mail text/calendar格式会议邀请邮件,网页版邮箱接收到的邮件内容无法换行...
  8. 【服务器数据恢复】HP StorageWorks系列存储RAID5两块盘离线的数据恢复
  9. G - dfs POJ - 2386
  10. 图片无损放大的方法详细介绍