資源準備工作:
1、地圖檔案
.....r.lCC...
.lR.l...rClrC
.lR.l.A.rClrC
.A..A.G.AC.AC
...rU.A.uL.CC
AAl..CAC..rAA
....rCCCl....
GAA.uCCCurAAG
UUU.d.C.d.UUU
.A..A...A....
.Al..u.u..rAC
..u..4d3..CCC
..d..rWl..dCC
13x13的格子,每個位元組點32x32像素,分别為8x8x4(4個小圖塊組成),在我的設定裡位元組含義大概是這樣:
"l,r,u,d"小寫上下左右表示1/2個磚頭,“LRUD”大寫上下左右表示1/2個鋼闆,“1234”表示四個角上1/8個磚頭,
“C”草,“A"整個磚頭,”H"河,“B"冰,”G"整個鋼闆,“W"老窩
2、圖像資源,在《pygame編寫的坦克遊戲(三)》裡已經貼了圖,按常量檔案配置可以取到
3、聲音資源:這個隻能手工錄制了,後面會給出整個源碼的連結,就包含在裡面了
上地圖代碼:
import os, sys
from const import *
from block import *
class Map:
#地圖
_CONFIG = {
"C":{"grid":(M_C0, M_C0, M_C0, M_C0), "class":Block},
"H":{"grid":(M_R1, M_R2, M_R2, M_R1), "class":River},
"B":{"grid":(M_I0, M_I0, M_I0, M_I0), "class":Ice},
"G":{"grid":(M_S0, M_S0, M_S0, M_S0), "class":Steel},
"U":{"grid":(M_S0, M_S0, M_00, M_00), "class":Steel},
"L":{"grid":(M_S0, M_00, M_S0, M_00), "class":Steel},
"R":{"grid":(M_00, M_S0, M_00, M_S0), "class":Steel},
"D":{"grid":(M_00, M_00, M_S0, M_S0), "class":Steel},
"A":{"grid":(M_BA, M_BA, M_BA, M_BA), "class":Brick},
"u":{"grid":(M_BA, M_BA, M_00, M_00), "class":Brick},
"l":{"grid":(M_BA, M_00, M_BA, M_00), "class":Brick},
"r":{"grid":(M_00, M_BA, M_00, M_BA), "class":Brick},
"d":{"grid":(M_00, M_00, M_BA, M_BA), "class":Brick},
"1":{"grid":(M_BA, M_00, M_00, M_00), "class":Brick},
"2":{"grid":(M_00, M_BA, M_00, M_00), "class":Brick},
"3":{"grid":(M_00, M_00, M_BA, M_00), "class":Brick},
"4":{"grid":(M_00, M_00, M_00, M_BA), "class":Brick},
"W":{"grid":(M_H0, M_00, M_00, M_00), "class":Base},
}
@classmethod
def load(self, engine, level):
self.grid = []
map_path = os.getcwd() + os.sep + "map" + os.sep
fname = map_path + "level%.2d.txt"%(level)
map_cfg = []
try:
f = open(fname)
for line in f.readlines():
map_cfg.append(line)
finally:
f.close()
#構造地圖上的對象
for i in range(len(map_cfg)):
for j in range(len(map_cfg[i]) - 1):
ctype = map_cfg[i][j]
self.create_mapblock(engine, ctype, j, i)
@classmethod
def create_mapblock(self, engine, ctype, x, y):
if ctype in Map._CONFIG.keys():
cfg = Map._CONFIG[ctype]
imp = cfg["class"]
grid = cfg["grid"]
delay = 35 if ctype == "B" else 0
for t in range(len(grid)):
if grid[t] != M_00:
pos = [32 + (x * 2 + t % 2) * 16, 32 + (y * 2 + t // 2) * 16]
#0 6 12三個位置的不初始化
if (y == 0) and (x in [0, 6, 12]):
continue
#保護老窩的磚自動生成(磚可以加鍬變鋼闆,持續10秒,閃爍5秒後還原成磚)
pt = (pos[0], pos[1])
if pt in SPADE_CFG.keys():
layer = LIST_SPADE
elif ctype == "C":
layer = LIST_GRASS
else:
layer = LIST_BALKS
impclass = imp
impclass(engine, WHO_BALK, grid[t], pos, delay, layer)