【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构
本系列博客介绍以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 name
- print name[0]
- name[0] = "zhaoliu"
- print name
- ---------------------------------------------------
- ['zhangsan', 'lisi', 'wangwu']
- zhangsan
- ['zhaoliu', 'lisi', 'wangwu']
添加元素:
可以使用append方法把一个元素添加到列表中:
- name = ["zhangsan","lisi","wangwu"]
- print name
- name.append("zhaoliu")
- print name
-----------------------------------------------------
['zhangsan', 'lisi', 'wangwu']
['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
也可以使用insert(index,value)方法把一个元素插入到列表的中间,index代表索引参数,value代表值。
- name = ["zhangsan","lisi","wangwu"]
- print name
- name.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的肯定有了解的。
在下期的博客里我们将一起制作一个酷跑类的小游戏:《嗷大喵快跑》。效果图如下:
【python游戏编程之旅】第八篇---pygame游戏开发常用数据结构的更多相关文章
- 【python游戏编程之旅】第二篇--pygame中的IO、数据
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...
- 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...
- 【python游戏编程之旅】第一篇---初识pygame
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...
- Python之路【第十八篇】:Web框架们
Python之路[第十八篇]:Web框架们 Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...
- 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...
- 【python游戏编程之旅】第三篇---pygame事件与设备轮询
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...
- 【Windows编程】系列第八篇:通用对话框
上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用.Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单.工具栏.状态栏以及各个 ...
- Cocos2D:塔防游戏制作之旅(十八)
在Enemy.m的getDamaged:方法只给你添加如下1行(在if条件内): [theGame awardGold:200]; 现在运行游戏你将注意到你不能放置超出你资源金币的炮塔了.当然杀死敌人 ...
- Python游戏开发:pygame游戏开发常用数据结构
一.数组与列表 数组可以理解为简化的列表.像我们之前使用的pygame.sprite.Group这样的精灵组,也是一个列表.列表的元素是可变的,它具有添加.删除.搜索.排序等多种方法. 1.一维列表 ...
随机推荐
- Mysql中使用find_in_set函数查找字符串
mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...
- 开启 CONFIG_HUGETLB_PAGE
File systems ---> Pseudo filesystems ---> [*] HugeTLB file system support 相关Kconfig如下 ...
- Windows批处理:自动检查服务器连通性
该技术与上一篇<自动检查网络连通性>的实现原理相同,我将脚本稍微改动了下,用于检查公司服务器的连通性,简单快捷.在这里附上修改方法. @echo off color 1F title 服务 ...
- 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)
国际版Microsoft Azure的Preview Portal已经于12月2日正式GA,现在登录国际版的Microsoft Azure,默认就会进入Microsoft Azure New Port ...
- css实现一个写信的格式
一.目标 目标实现如下效果: 二.完成 1.分析 这个效果看起来很简单,实际上可能并不那么容易实现. 首先是全部东西都居中显示,除了“亲爱的starof”这个称呼的地方.这也是难点,也是本文要重点说的 ...
- z-index堆叠规则
一.z-index z-index用来控制元素重叠时堆叠顺序. 适用于:已经定位的元素(即position:relative/absolute/fixed). 一般理解就是数值越高越靠上,好像很简单, ...
- MMORPG大型游戏设计与开发(客户端架构 part4 of vegine)
昨天是七夕,祝大家都过的快乐,希望这句迟到的问候不会造成大家心中的困扰.这一节讲到了前端比较重要的模块,性能以及调试异常模块.一个应用的性能往往是最核心的部分,就像人身体的各个器官一样,一小部分也不能 ...
- apache poi导出excel报表
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...
- Struts2 Action中动态方法调用、通配符的使用
一.Struts2执行过程图: 二.struts2配置文件的加载顺序 struts-default.xml---struts-plugin.xml---struts.xml 具体步骤: 三.Actio ...
- 面试题:return和finally执行
Demo类: public class Demo { public int get() { int x=1; try { x++; return x; }finally{ ++x; } } } Tes ...