• 周六. 4 月 25th, 2026

物嫩软件资讯网

软件资讯来物嫩

射击游戏demo1

admin@wunen

5 月 18, 2025

效果展示

import pygame
import sys

pygame.init()

# 设置帧率控制
clock = pygame.time.Clock()
FPS = 60

# 游戏窗口设置
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 640
LOWER_MARGIN = 100   # 下方边距,用于放置按钮等UI
SIDE_MARGIN = 300    # 右侧边距,用于放置图块选择面板

# 创建游戏窗口(主窗口 + 边距)
screen = pygame.display.set_mode((SCREEN_WIDTH + SIDE_MARGIN, SCREEN_HEIGHT + LOWER_MARGIN))
pygame.display.set_caption('关卡编辑器')  # 设置窗口标题

# 定义游戏变量
ROWS = 16             # 地图行数
MAX_COLS = 150        # 地图最大列数
TILE_SIZE = SCREEN_HEIGHT // ROWS  # 每个图块的大小
TILE_TYPES = 21       # 图块种类数量
level = 0             # 当前编辑的关卡编号
current_tile = 0      # 当前选中的图块编号
scroll_left = False   # 控制是否向左滚动地图
scroll_right = False  # 控制是否向右滚动地图
scroll = 0            # 地图当前滚动偏移量
scroll_speed = 1      # 滚动速度

# 定义颜色常量
GREEN = (144, 201, 120)
WHITE = (255, 255, 255)
RED = (200, 25, 25)

# 加载背景图片
pine1_img = pygame.image.load('img/Background/pine1.png').convert_alpha()
pine2_img = pygame.image.load('img/Background/pine2.png').convert_alpha()
mountain_img = pygame.image.load('img/Background/mountain.png').convert_alpha()
sky_img = pygame.image.load('img/Background/sky_cloud.png').convert_alpha()

# 绘制背景函数:绘制天空、山、松树等远景
def draw_bg():
    screen.fill(GREEN)  # 填充绿色背景
    width = sky_img.get_width()
    for x in range(4):
        # 多张背景图循环绘制,并根据滚动调整位置
        screen.blit(sky_img, ((x * width) - scroll * 0.5, 0))              # 天空层
        screen.blit(mountain_img, ((x * width) - scroll * 0.6, SCREEN_HEIGHT - mountain_img.get_height() - 300))  # 山层
        screen.blit(pine1_img, ((x * width) - scroll * 0.7, SCREEN_HEIGHT - pine1_img.get_height() - 150))  # 松树1层
        screen.blit(pine2_img, ((x * width) - scroll * 0.8, SCREEN_HEIGHT - pine2_img.get_height()))  # 松树2层

# 绘制网格线(辅助对齐图块)
def draw_grid():
    # 绘制垂直线
    for c in range(MAX_COLS + 1):
        pygame.draw.line(screen, WHITE, (c * TILE_SIZE - scroll, 0), (c * TILE_SIZE - scroll, SCREEN_HEIGHT))
    # 绘制水平线
    for c in range(ROWS + 1):
        pygame.draw.line(screen, WHITE, (0, c * TILE_SIZE), (SCREEN_WIDTH, c * TILE_SIZE))

run = True
while run:

    clock.tick(FPS) # 控制帧率

    

    draw_bg() # 绘制背景
    draw_grid() # 绘制网格线
    # 地图滚动逻辑
    if scroll_left and scroll > 0:
        scroll -= 5 * scroll_speed
    if scroll_right and scroll < (MAX_COLS * TILE_SIZE) - SCREEN_WIDTH:
        scroll += 5 * scroll_speed
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            pygame.quit()
            sys.exit()
        # 键盘按下事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                scroll_left = True # 左箭头开始向左滚动
            if event.key == pygame.K_RIGHT:
                scroll_right = True # 右箭头开始向右滚动
            if event.key == pygame.K_LSHIFT:
                scroll_speed = 5 # 左Shift加速滚动

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                scroll_left = False # 松开左箭头停止向左滚动
            if event.key == pygame.K_RIGHT:
                scroll_right = False # 松开右箭头停止向右滚动
            if event.key == pygame.K_LSHIFT:
                scroll_speed = 1 # 松开左Shift恢复正常滚动速度
    pygame.display.update()

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注