【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的肯定有了解的。

在下期的博客里我們將一起制作一個酷跑類的小游戲:《嗷大喵快跑》。效果圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM