|
|
|
|
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()
|