本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/p/5027688.html

这次我们来一起学习在pygame游戏里面常用的一些数据结构: 数据,列表,元组,队列,栈。

一、数组与列表

数组可以理解为简化的列表。像我们之前使用的pygame.sprite.Group这样的精灵组,也是一个列表。列表的元素是可变的,它具有添加、删除、搜索、排序等多种方法。

1、一维列表

可以在创建列表的时候一次性的定义所有元素,也可以以后再向列表里面添加:

name = ["zhangsan","lisi","wangwu"]
print name
['zhangsan', 'lisi', 'wangwu']

修改元素

可以通过索引号来获取列表中的任何元素的数据,也可以通过引用索引编号来修改元素值(索引编号是从0开始的):

name = ["zhangsan","lisi","wangwu"]
print nameprint name[0]
name[0] = "zhaoliu"print name
---------------------------------------------------
['zhangsan', 'lisi', 'wangwu']
zhangsan
['zhaoliu', 'lisi', 'wangwu']

添加元素:

可以使用append方法把一个元素添加到列表中:

name = ["zhangsan","lisi","wangwu"]
print namename.append("zhaoliu")
print name-----------------------------------------------------

['zhangsan', 'lisi', 'wangwu']
['zhangsan', 'lisi', 'wangwu', 'zhaoliu']

也可以使用insert(index,value)方法把一个元素插入到列表的中间,index代表索引参数,value代表值。

name = ["zhangsan","lisi","wangwu"]
print namename.insert(0,"zhaoliu")
print name
name.insert(1,"liuqi")
print name
-------------------------------------------------
['zhangsan', 'lisi', 'wangwu']
['zhaoliu', 'zhangsan', 'lisi', 'wangwu']
['zhaoliu', 'liuqi', 'zhangsan', 'lisi', 'wangwu']

对元素统计:

如果一个列表中有重复的元素,可以使用count()对其计数,其实就是统计一个列表中某个元素出现的次数:

num =[]num.append(10)
num.append(10)
num.append(90)
num.append(79)
num.append(10)print num.count(10)
---------------------------
3

搜索元素:

可以使用index()方法来搜索一个元素在列表中第一次出现的位置:

num =[90,10,89,78,30,40,90,10]print (num.index(10))
-----------------------------------------
1

删除元素:

使用remove()方法可以删除列表中的一个元素。

num =[90,10,89,78,30,40,90,10]print (num)
num.remove(10)
print (num)
--------------------------------------------
[90, 10, 89, 78, 30, 40, 90, 10]
[90, 89, 78, 30, 40, 90, 10]

列表元素反转:

使用reverse()方法可以将整个列表翻转:

num =[90,10,89,78,30,40,90,10]print (num)
num.reverse()
print (num)
------------------------------------------
[90, 10, 89, 78, 30, 40, 90, 10]
[10, 90, 40, 30, 78, 89, 10, 90]

列表排序:

可以使用sort方法对列表中元素进行排序(默认是升序排列):

num =[9,11,35,2,49,12,8,5,99]print (num)
num.sort()
print (num)
---------------------------------------
[9, 11, 35, 2, 49, 12, 8, 5, 99]
[2, 5, 8, 9, 11, 12, 35, 49, 99]

2.栈式列表

栈使用后进先出的方法来管理元素。pop方法可以弹出栈顶的元素(列表中的最后一项),append用来将一个元素压入栈中:

stack = []
for i in range(10):stack.append(i)print (stack)
stack.append(10)
print (stack)
j = stack.pop()
k = stack.pop()
print (j,k)
print (stack)
------------------------------------------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(10, 9)
[0, 1, 2, 3, 4, 5, 6, 7, 8]

3.队列式列表:

队列使用的是先进先出的模式管理元素,python中有一个名为queue的模块实现了队列的功能,为了便于说明我们这里使用一个列表来代替队列:

queue = []
for i in range(10):queue.append(i)
print (queue)
queue.append(89)
queue.append(70)
print (queue)
n = queue[0]
queue.remove(n)
print (queue)
----------------------------------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 70]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 70]

二、元组

元组是一种和列表类似的数据类型,但是元组的元素是只读的,不可更改的。一旦初始化了,里面的元素就不可以再进行更改了。元组的比列表的优点就是元组的速度更快。

1.初始化一个元组

创建一个元组的过程叫做打包:

tup = (1,2,3,4,5)
print tup
---------------------
(1, 2, 3, 4, 5)

如果此时你尝试修改元组中的元素的话,程序会报错。

Traceback (most recent call last):File "C:/Users/Administrator/Desktop/1.py", line 4, in <module>tup[0]=20
TypeError: 'tuple' object does not support item assignment

2.解包元组

读取一个元素的过程叫做解包

3.搜索元素

可以使用index方法来返回一个元素第一次出现的位置。也可以使用in()方法来搜索一个元素是否在元组中:

tup = (1,2,3,4,5)print (10 in tup)
print (2 in  tup)--------------------
False
True

以上就是一些在pygame游戏开发中常用的数据结构,很简单,接触过python的肯定有了解的。

在下期的博客里我们将一起制作一个酷跑类的小游戏:《嗷大喵快跑》。效果图如下:

转载于:https://www.cnblogs.com/msxh/p/5040483.html

【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构相关推荐

  1. 有奖征集活动系列—— iOS游戏编程之旅 已结束

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 为了帮助 ...

  2. 有奖征集活动系列——《iOS游戏编程之旅》已结束

    为了帮助广大iOS开发者更好地了解和学习开发技术,为CSDN博主们搭建技术交流分享的平台,为活跃社区气氛,CSDN博客频道特携手CSDN博客专家.<iOS游戏编程之从零开始-Cocos2dx与c ...

  3. 《游戏编程》第一部 基础篇

    <游戏编程>第一部 基础篇 目录: 零.基础篇的目的 一.游戏的动画原理 二.基于动画原理的提高 三.游戏的基石: 窗口 的建立 四.游戏制作利器: 引擎 的选择 文章内容: 零.基础篇的 ...

  4. 【通知】▁▂▃ Himi 最新著作《iOS游戏编程之从零开始—Cocos2d-x与cocos2d引擎游戏开发》★书籍源码+第4/5/6样章★-免费下载★ ▃▂▁

    2013年新年,Himi的第二本著作:<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>一书正式发售: (大家可以到新华书店.淘宝.拍拍.当当.亚马逊等进行购买) ...

  5. python游戏背景音乐循环_Python:pygame游戏编程之旅六(游戏中的声音处理)

    一款人性化的游戏中缺少不了声音,比如角色挂时惨叫一声,或PK时武器交锋的声音,还有就是英雄出场时的背景音乐,无不涉及到声音,本节我们就来看一下pygame中如何控制声音,下面是一个例子,但博客上传不了 ...

  6. 《从问题到程序:用Python学编程和计算》——1.3 程序开发

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.3节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1. ...

  7. python动画精灵_【python游戏编程之旅】第六篇---pygame中的Sprite(精灵)模块和加载动画...

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 直到现在我们已经学了很多pygame基础知识了,从这篇博客开始我们将会学习pygame中高级部分,更多和精灵 ...

  8. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...

    一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...

  9. python写界面文字游戏_Python:pygame游戏编程之旅五(游戏界面文字处理详解)

    再简单的游戏界面中均涉及文字处理,本节主要解读一下pygame模块中对文字及字体的处理方式. 同样,以实例进行讲解,先看看代码: #!/usr/bin/env python # -*- coding: ...

  10. 谢绝枯燥快乐编程,四大游戏编程网站,让你边玩游戏,边学Python

    欢迎点击右上角关注小编,除了分享技术文章之外还有很多福利,点击:资料 可以领取包括不限于Python实战演练.PDF电子文档.面试集锦.学习资料等. 前言 学习编程虽然对有些人来说是件乐事,但是对大多 ...

最新文章

  1. seq2seq里的数学
  2. PowerDesigner的使用二
  3. ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建
  4. 英语不会读怎么办?它来教你……
  5. 微信开发之——Ubuntu Apache2的https域名配置
  6. [Err] 1093 - You can't specify target table 'xxx' for update in FROM clause解决方法
  7. 富士通成功开发全球最快的36量子位量子模拟器
  8. linux cam软件,基于Linux图形交互式线切割CAM软件实现技术研究
  9. 陇原战“疫“2021网络安全大赛 Re
  10. 蚪侠模板站群-V25版[泛域名+泛目录+泛内页]-[代码+汉字]干扰-字体繁简切换-蜘蛛欺骗-主动推送-全局锚文本锁定-自动新闻采集-自动模板采集
  11. 百度网盘 http://pandownload.com/index.html
  12. wwdc2019_wwdc 20愿望清单
  13. 卧兔观察:决心有了,就让拼多多飞一会儿吧
  14. 做好 FIBOS 生态门户 —— FO 钱包 v2.0.0 新版上线
  15. Trackback, Pingback , Backlink与博客
  16. UVA1626 简单DP
  17. 转:一个古老的编程游戏:Python Challenge全通攻略
  18. Excel工作表单保护密码忘记如何找回
  19. 机械设计师图纸管理系统,实现数字化管理图纸
  20. vscode open in browser插件失效

热门文章

  1. 遇到Python中文目录名问题,未解决
  2. 世界杯:裁判看了视频后判罚更重?
  3. 染色法判断是否是二分图
  4. python中tab的用法_详解Python中expandtabs()方法的使用
  5. java html5 上传_Java实现HTML5拖拽文件上传
  6. windows 拖拽功能
  7. 计算机cmd复制粘贴指令,win7系统使用CMD命令复制和删除文件夹的方法
  8. eclipse+java类不报错_eclipse,代码中有错误,项目或者java类中却不显示红叉
  9. mysql求数据库平均成绩视图_MySQL数据库视图
  10. java发送qq邮件_「java发邮件」Java 通过SMTP实现发送QQ邮件 - seo实验室