You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
3.6 KiB

9 months ago
import sys #调用exit()函数来结束游戏
import pygame
from covers import Cover #未点击方块时表面的覆盖物
from map_of_game import Map #游戏方块里面的地图
from settings import setting #游戏参数设置
from button import Button
class Game:
"""管理游戏的主程序"""
def __init__(self):
pygame.init()
pygame.mixer.init()
self.setting = setting()
#创立游戏主界面
self.screen = pygame.display.set_mode(self.setting.screen_size)
self.screen_rect = self.screen.get_rect()
pygame.display.set_caption('扫雷')
self.covers = Cover(self.setting, self.screen) #表面覆盖物
self.maps = Map(self.setting, self.covers, self.screen) # 内部地图
self.over_image=Button(self.screen, 'Contratution')
self.clock = pygame.time.Clock() #游戏大时钟
#背景音乐
#pygame.mixer.music.load('data/bgmusic.wav')
#pygame.mixer.music.play()
#pygame.mixer.music.fadeout(3)
def run_game(self):
while True:
#if not pygame.mixer.music.get_busy():
# pygame.mixer.music.play()
self.clock.tick(60) #更新游戏设置每秒60帧的刷新率
if self.setting.closeGame: #判断之前是否已经触发结束游戏事件
self.setting.endTime+=1 #记录时间戳
if self.setting.endTime>=180: #触发时间>3*60
exit() #结束游戏
self._event_check_() # 检测事件
if self.setting.closeGame==False:
self._update_screen_() # 更新屏幕
def _event_check_(self):
for event in pygame.event.get():
if event.type == pygame.QUIT: #结束游戏
sys.exit()
elif event.type == pygame.MOUSEBUTTONDOWN and self.setting.closeGame==False:
x, y = pygame.mouse.get_pos() #检测到单击鼠标事件,将鼠标的位置传入
self.covers.delete(x, y) #删除对应方块上的覆盖物
isCloseGameNow=self.maps.add(x, y) #将该位置的覆盖物下的游戏地图加入即将要显示的队伍中
if isCloseGameNow==True:
self.setting.closeGame=True
def _update_screen_(self):
self.screen.fill(self.setting.background_color) #填充背景颜色
for i in range(25): #绘制方格
pygame.draw.line(self.screen, self.setting.line_color, [0, i * 25], [500, i * 25],
self.setting.line_width) #横线
pygame.draw.line(self.screen, self.setting.line_color, [i * 25, 0], [i * 25, 500],
self.setting.line_width) #竖线
self.maps.show() #将所有被点击过的方格下的数字展现出来
self.covers.show() #将还没有被点击过的数字展现出来
pygame.display.update() #更新屏幕显示,将上面所做的工作展现在游戏界面上
if __name__ == '__main__':
my_game = Game()
my_game.run_game()