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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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