利用利用python3 的的pygame模块实现塔防游戏模块实现塔防游戏
主要介绍了利用python3 的pygame模块实现塔防游戏,本文给大家介绍的非常详细,具有一定的参考借鉴价值,
需要的朋友可以参考下
利用python3的pygame模块基本实现塔防游戏的基本功能,包括血量和分数显示,bgm,防御塔建造,防御塔攻击范围内的
敌军,暂停和加速功能。由于实在没有素材,用的都是自己截图P的,所以美化不好。但基本保证功能,其中有一个BUG,但
不影响游戏效果。
1.运行主类运行主类
"""主程序"""
from pygame.locals import *
from TowerDefend.enemy import *
from TowerDefend.towerposSet import *
from TowerDefend.tower import *
import pygame
def run():
"""运行函数"""
pygame.init()
size = width, height = 1200, 600
screen = pygame.display.set_mode(size)
background_img = pygame.image.load(r'image/background.png').convert_alpha()
background_img = pygame.transform.scale(background_img, (width, height))
# 创建分数和血量
health_count = 5
score_count = 0
score = pygame.font.Font('font/score_health.ttf', 30)
health = pygame.font.Font('font/score_health.ttf', 30)
# 创建背景音乐
bg_music = pygame.mixer.music
bg_music.load('media/bg.mp3')
bg_music.set_volume(2)
# 创建敌军类
enemies = pygame.sprite.Group()
ENEMY_NUM = 5
position = [[258, 600], [258, 670], [258, 740], [258, 810], [258, 880]]
for i in range(ENEMY_NUM):
enemies.add(Enemy(position[i]))
# 创建炮塔
towers = pygame.sprite.Group()
# 加载暂停键
pause_img = pygame.image.load('image/pause.png').convert_alpha()
pause_rect = pause_img.get_rect()
pause_rect.left, pause_rect.top = 1145, 0
# 加载血量和金币显示
health_money_img = pygame.image.load('image/health_money.png').convert_alpha()
health_money_rect = health_money_img.get_rect()
health_money_rect.left, health_money_rect.top = 0, 0
# 加载加速键
speed_img = pygame.image.load('image/speed.png').convert_alpha()
speed_rect = speed_img.get_rect()
speed_rect.left, speed_rect.top = 1090, 0
# 设置炮塔位置
towers_pos = pygame.sprite.Group()
position_list = [[225, 495], [264, 428], [312, 428], [362, 428], [410, 428], [460, 428], [508, 428], [561, 428],
[561, 373], [377, 373]]
for i in range(len(position_list)):
towers_pos.add(Position(position_list[i]))
# 设置循环条件
running = True
clock = pygame.time.Clock()
paused = False
# 播放音乐
if not bg_music.get_busy():
bg_music.play(-1)
while running:
clock.tick(100)
for event in pygame.event.get():
if event.type == QUIT:
running = False
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
if speed_rect.collidepoint(event.pos):
for each in enemies:
each.accelerate *= 2
if pause_rect.collidepoint(event.pos):
paused = not paused
评论0