本系列博客介绍以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游戏开发常用数据结构的更多相关文章

  1. 【python游戏编程之旅】第二篇--pygame中的IO、数据

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇中,我们介绍了pygame的入门操作http://www.cnblogs.com/msxh/p/49 ...

  2. 【python游戏编程之旅】第九篇---嗷大喵快跑小游戏开发实例

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷 ...

  3. 【python游戏编程之旅】第一篇---初识pygame

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 一.pygame简介 Pygame 是一组用来开发游戏软件的 Python 程序模块,基于 SDL 库的基础 ...

  4. Python之路【第十八篇】:Web框架们

    Python之路[第十八篇]:Web框架们   Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Pytho ...

  5. 【python游戏编程之旅】第四篇---pygame中加载位图与常用的数学函数。

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame事件与设备轮询.http://www.cnblogs.com/msxh ...

  6. 【python游戏编程之旅】第三篇---pygame事件与设备轮询

    本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 在上一篇博客中,我们学习了pygame中的IO.数据http://www.cnblogs.com/msxh/ ...

  7. 【Windows编程】系列第八篇:通用对话框

    上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用.Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单.工具栏.状态栏以及各个 ...

  8. Cocos2D:塔防游戏制作之旅(十八)

    在Enemy.m的getDamaged:方法只给你添加如下1行(在if条件内): [theGame awardGold:200]; 现在运行游戏你将注意到你不能放置超出你资源金币的炮塔了.当然杀死敌人 ...

  9. Python游戏开发:pygame游戏开发常用数据结构

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

随机推荐

  1. 按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位

    package com.hanqi.test; public class Rect { ; ; public double getWidth() { return width; } public vo ...

  2. HBase应用开发回顾与总结系列之三:RowKey行键生成器工具

      所谓RowKey行键生成器,是指通过软件工具制定行键生成策略,并可将策略信息保存成本地策略文件,待需要时再将本地策略文件序列化成行键生成策略对象,传入数据行信息后可自动生成RowKey行键. 那么 ...

  3. Vim光标定位

    *定位到指定行n: 输入"nG". 或输入"ngg". 或输入":n" 这里,n就是指定的行的行号.注意,有时候G=gg. *跳到屏幕顶部: ...

  4. android中ADT和SDK的关系

    ADT(Android Development Tools): 目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升 ...

  5. dedecms调用标签总结(一)

    dedecms 基本包含了一个常规网站需要的一切功能,拥有完善的中文学习资料,很容易上手,学习成本较低.学会dedecms 的模板修改.栏目新增.内容模型新增和常用的标签调用方法后,即便我们不懂 ph ...

  6. Unity Project Wizard (最近打开的项目记录)

    最近打开工程列表 当用Unity打开过的项目越来越多之后,在最近打开项目记录框中就会变的很长,那么如何才能删除最近打开的记录呢? Unity4.x最近打开的工程记录 Unity5.x最近打开的工程记录 ...

  7. 给VIM安装插件。让ubuntu的vim强大起来

    简易安装方法: 打开终端,执行下面的命令就自动安装好了: wget https://raw.github.com/ma6174/vim/master/setup.sh -O ma6174_vim_se ...

  8. 向Tiny6410移植QT4.7.0版本

    在移植QT之前我们首先要安装tslib,没有移植的可以看这篇文章移植. http://www.cnblogs.com/ynxf/p/5392476.html step 1: echo yes |../ ...

  9. hdu 2586 How far away

    How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  10. 03Spring_bean的创建和作用域以及生命周期

    bean的三种创建方式: 方式一: 使用类构造器实例化对象 <!-- 方式一  使用构造器(无参数)实例化对象  --> <bean id="bean1" cla ...