首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生成游戏地图文件

生成游戏地图文件

作者头像
叶子陪你玩
发布2021-04-29 14:51:46
8060
发布2021-04-29 14:51:46
举报

做很多游戏,都需要有地图,而地图一般是根据地图文件来生成的。

比如下面是一个推箱子游戏的第一关,里面的游戏角色都是通过文件自动摆上的。

地图关卡文件:

这种文件可以通过自己手动写上,也可以通过一些地图软件制作。


比如我之前做的一个程序,加了一个按钮,变成一个生成地图文件的程序。

生成的文件效果:


生成一个字母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()  

(全文完)


欢迎转载,转载请注明出处!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图数据库 KonisGraph
图数据库 KonisGraph(TencentDB for KonisGraph)是一种云端图数据库服务,基于腾讯在海量图数据上的实践经验,提供一站式海量图数据存储、管理、实时查询、计算、可视化分析能力;KonisGraph 支持属性图模型和 TinkerPop Gremlin 查询语言,能够帮助用户快速完成对图数据的建模、查询和可视化分析。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档