python+pygame实现推箱子小游戏之五

前面已经完成了推箱子的基础类的实现

python+pygame实现推箱子小游戏之一

python+pygame实现推箱子小游戏之二

python+pygame实现推箱子小游戏之三

python+pygame实现推箱子小游戏之四

接下来就要实现真正的游戏了,

设计会有一个启动界面,该界面中有 :开始游戏  和 退出游戏 两个按钮

选择开始游戏时就会开始第一关的地图加载。

某关卡顺利完成后,会有一个选择界面,有:进入下关 和 退出游戏 两个按钮

全部关卡结束后,会弹出结束界面。

频繁用到按钮,所以先做个按钮myButton类

创建myButton类

import os
import pygame
from params import Params

class myButton():
    def __init__(self):
        pass;
    
    def genButton(self, gamescreen, position, text):
        bwidth = 310
        bheight = 65
        left, top = position
        pygame.draw.line(gamescreen, (150, 150, 150), (left, top), (left+bwidth, top), 5)
        pygame.draw.line(gamescreen, (150, 150, 150), (left, top-2), (left, top+bheight), 5)
        pygame.draw.line(gamescreen, (50, 50, 50), (left, top+bheight), (left+bwidth, top+bheight), 5)
        pygame.draw.line(gamescreen, (50, 50, 50), (left+bwidth, top+bheight), [left+bwidth, top], 5)
        pygame.draw.rect(gamescreen, (100, 100, 100), (left, top, bwidth, bheight))
        font_path = os.path.join(Params.get('resourcePath'), Params.get('fontFolder'), 'simkai.ttf')
        font = pygame.font.Font(font_path, 50)
        text_render = font.render(text, 1, (255, 0, 0))
        return gamescreen.blit(text_render, (left+50, top+10))

就是用pygame画一个按钮出来。

创建一个界面类,myInterface类

import sys
import pygame
from params import Params
from myButton import *

class myInterface():
    def __init__(self) -> None:
        pass

    def genInterface(self,gamescreen,txt1,txt2):
        gamescreen.fill(Params.get('bgColor'))
        clock = pygame.time.Clock()
        while True:
            myButton_1 = myButton().genButton(gamescreen, (170, 150), txt1)
            myButton_2 = myButton().genButton(gamescreen, (170, 305), txt2)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type == pygame.MOUSEBUTTONDOWN:
                    if myButton_1.collidepoint(pygame.mouse.get_pos()):
                        return
                    elif myButton_2.collidepoint(pygame.mouse.get_pos()):
                        pygame.quit()
                        sys.exit(0)
            clock.tick(60)
            pygame.display.update()

现在做主界面代码就比较简单了,先搭个架子

import os
import sys
import pygame
from workerSprite import *
from gameElementSprite import *
from params import Params
from gameMap import *
from gameDisplay import *
from myButton import *
from myInterface import *

'''
经典的推箱子Sokoban是一个来自日本的古老游戏
'''

'''
退出游戏
'''
def quitGame():
	pygame.quit()
	sys.exit(0)

'''
关卡的游戏主循环
'''
def runGame(screen, gamelevel):
	pass

'''
开始界面
'''
def startGame(screen):
	myInterface().genInterface(screen,'开始游戏','退出游戏')

'''
关卡切换界面
'''
def switchGame(screen):
	myInterface().genInterface(screen,'进入下关','退出游戏')
	
'''
结束界面
'''
def endInterface(screen):
	screen.fill(Params.get('bgColor'))
	clock = pygame.time.Clock()
	font_path = os.path.join(Params.get('resourcePath'), Params.get('fontFolder'), 'simkai.ttf')
	text = '恭喜通关!'
	font = pygame.font.Font(font_path, 80)
	text_render = font.render(text, 1, (255, 0, 0))
	while True:
		for event in pygame.event.get():
			if event.type == pygame.QUIT:
				pygame.quit()
				sys.exit()
		screen.blit(text_render, (120, 200))
		clock.tick(60)
		pygame.display.update()

'''
主函数
'''
def main():
	pygame.init()
	pygame.mixer.init()
	pygame.display.set_caption('推箱子游戏               按R键重新开始本关')
	os.environ['SDL_VIDEO_CENTERED'] = '1' 
	screen = pygame.display.set_mode([Params.get('WIDTH'), Params.get('HEIGHT')])
	pygame.mixer.init()
	audio_path = os.path.join(Params.get('resourcePath'), Params.get('audioFolder'), '般若波罗蜜多心经.mp3')
	pygame.mixer.music.load(audio_path)
	pygame.mixer.music.set_volume(0.38)
	pygame.mixer.music.play(-1)
	startGame(screen)
	levels_path = Params.get('levelsPath')
	for level_name in sorted(os.listdir(levels_path)):
		runGame(screen, level_name)
		switchGame(screen)
	endInterface(screen)

if __name__ == '__main__':
	main()

这部分代码没有太多要讲的,都是基本编程操作。游戏居中对齐,有背景音乐。

runGame的代码待续...

python+pygame实现推箱子小游戏之六

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值