源码及资源请前往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. vc++64位系统下long的长度为4个字节_64位系统究竟牛逼在哪里?
  2. 中国计算机学会CCF推荐国际学术会议和期刊目录-人工智能
  3. get请求的乱码解决方式
  4. 【LeetCode从零单排】No129 Sum Root to Leaf Numbers
  5. ITK:将所有像素的总和缩放为常数
  6. 神经网络Drop大法真香定律
  7. 阿里云 超级码力在线编程大赛初赛 第4场 题目3. from start to end
  8. vue 组件第一次不渲染问题_vue使用组件不渲染 只有代码变了才渲染
  9. day34-常见内置模块三(re模块)
  10. Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
  11. Web项目(四)————异步队列的实现
  12. mate10是否支持html,NFC功能是什么 华为Mate 10支持NFC功能吗【详解】
  13. Linux(ubuntu)内容整理(常用命令)
  14. Invalid bound statement (not found)出现原因和解决方法
  15. HALCON获取区域的中心点、面积和最小外接圆半径
  16. 红米手机html文件,红米手机怎么传文件到电脑
  17. 【贪心算法】-背包问题
  18. 【python爬虫学习】cookie模拟登陆
  19. [索引]引用Balancing bike sharing systems with constraint programming的文章
  20. Caché的studio如何Debug

热门文章

  1. java 百千万亿转换_JAVA将数字转表示成相应的钱
  2. 全面了解近视眼的前因后果
  3. Threejs贴图为了更好的渲染(门)
  4. 单片机控制步进电机正反转
  5. 海湾gst5000主机消防广播_海湾JB-QG-GST5000消防报警主机
  6. 如何将SQL查出的结果拼成json串
  7. Java初学者——求长方形的面积和周长。
  8. IDC报告:云计算服务仍面临安全性等三大挑战
  9. Ubuntu因显卡驱动原因无法启动
  10. 华为2017年大牛机试题—10进制转换位12进制