做很多游戏,都需要有地图,而地图一般是根据地图文件来生成的。
比如下面是一个推箱子游戏的第一关,里面的游戏角色都是通过文件自动摆上的。
地图关卡文件:
这种文件可以通过自己手动写上,也可以通过一些地图软件制作。
比如我之前做的一个程序,加了一个按钮,变成一个生成地图文件的程序。
生成的文件效果:
生成一个字母A数据文件,
配合一起一篇文章的贴图处理,可以生成一副乐高图。
完整的地图程序生成代码:
import pygame
import json
ROW_COUNT = 15
COLUMN_COUNT = 15
WIDTH = 30
HEIGHT = 30
MARGIN = 5
SCREEN_WIDTH = (WIDTH + MARGIN) * COLUMN_COUNT + MARGIN
SCREEN_HEIGHT = (HEIGHT + MARGIN) * ROW_COUNT + MARGIN
pygame.init()
screen = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT+50]) # 设置窗体大小
bg_color = (0, 0, 0) # 背景颜色的RBG值为纯黑
screen.fill(bg_color) # 填充为纯白色
grid=[[0 for row in range(ROW_COUNT)] for column in range(COLUMN_COUNT)]
#加载字体
font=pygame.font.Font("fangzheng.TTF",20)
text=font.render("生成地图文件",True,(255,0,0))
text_width,text_height=text.get_size()
#----
# 更改网格数值 0-1切换
def change_grid_value(x,y):
column = int(x // (WIDTH + MARGIN))
row = int(y // (HEIGHT + MARGIN))
if row < ROW_COUNT and column < COLUMN_COUNT:
if grid[row][column] == 0:
grid[row][column] = 1
else:
grid[row][column] = 0
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
# 鼠标左键检测
if event.type == pygame.MOUSEBUTTONDOWN:
state_list = pygame.mouse.get_pressed()
if state_list[0] == 1:
pos_x,pos_y = pygame.mouse.get_pos()
change_grid_value(pos_x, pos_y)
pos_x,pos_y = pygame.mouse.get_pos()
if pos_y>SCREEN_HEIGHT:
with open("map.json","w") as f:
json.dump(grid,f)
print("成功生成地图数据")
# 绘制格子
for row in range(ROW_COUNT):
for column in range(COLUMN_COUNT):
if grid[row][column] == 1:
color = (255,255,0)
else:
color = (255, 255, 255)
x = (MARGIN + WIDTH) * column + MARGIN
y = (MARGIN + HEIGHT) * row + MARGIN
pygame.draw.rect(screen, color,[x, y, WIDTH, HEIGHT])
# 绘制按钮
pygame.draw.rect(screen, (255,255,255),[SCREEN_WIDTH//2-160//2, SCREEN_HEIGHT,160,45])
screen.blit(text,((SCREEN_WIDTH-text_width)/2,(45-text_height)/2+SCREEN_HEIGHT))
pygame.display.update()
(全文完)
欢迎转载,转载请注明出处!