1建设网站的重要性,网站建设的一般过程包括哪些方面,网站开发哪种语言最好,电子商务网站开发环境一、游戏规则#xff1a;
1、点击方格#xff0c;如果是地雷#xff0c;游戏失败#xff0c;找到所有地雷游戏胜利
2、如果方块上出现数字#xff0c;则表示在其周围的八个方块中共有多少颗地雷
二、游戏主逻辑#xff1a;
主要逻辑即调用run_game, 然后循环检测事件…一、游戏规则
1、点击方格如果是地雷游戏失败找到所有地雷游戏胜利
2、如果方块上出现数字则表示在其周围的八个方块中共有多少颗地雷
二、游戏主逻辑
主要逻辑即调用run_game, 然后循环检测事件和更新屏幕 检测事件逻辑主要分两种一种为是否退出另一种是否有鼠标点击 更新屏幕主要分三部分首先是刷白屏幕然后是画出覆盖物最后是将缓存更新到屏幕 至此游戏的主要逻辑就完成了
三、游戏细节
根据此主要逻辑我们可以设计一个游戏类Game,定义三个函数
run_game()
_event_check()
_update_screen()
分别对应为运行游戏主逻辑事件检测更新屏幕
现在我们来看一下所谓的覆盖物是一个什么东西 从图上可以看出是一个20*20的方格列表我们可以定义一个类Cover 将关于怎样画这些小方格包在里面
看起来是需要设计一个列表其长度是20宽度也是20每一个方格都是一个25像素的正方形画的时候可以用一个循环将列表中的方格依次用draw.rect画出来
for cur in self.covers:pygame.draw.rect(self.screen, self.setting.cover_color, [cur[0] * 25, cur[1] * 25, 24, 24])
这儿注意的是方格是宽高都为25但真正画的时候宽高应该少一个像素原因是画满的话格子边界就会混在一起看不出来了
self.covers在一开始需要定义 def __init__(self, setting, screen): # 游戏参数设置和游戏主界面self.setting settingself.screen screenself.covers [] # 存储未被点击过的方块的覆盖物的位置for i in range(20):for j in range(20):self.covers.append([i, j]) # 刚开始时整个界面都是被覆盖的
主程序的实现代码非常简单
if __name__ __main__:my_game Game()my_game.run_game()
Game的定义主要是为了实现前面定义的三个函数初始化时需要将covers也一并引入 class Game:def __init__(self):pygame.init()self.setting setting()self.screen pygame.display.set_mode(self.setting.screen_size)self.covers Cover(self.setting, self.screen) # 表面覆盖物def run_game(self):while True:self._event_check_() # 检测事件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:x, y pygame.mouse.get_pos() # 检测到单击鼠标事件将鼠标的位置传入self.covers.delete(x, y) # 删除对应方块上的覆盖物def _update_screen_(self):self.screen.fill(self.setting.background_color) # 填充背景颜色self.covers.show() # 将还没有被点击过的数字展现出来pygame.display.flip() # 更新屏幕显示将上面所做的工作展现在游戏界面上 最后附上本节课的全部代码
import pygame
from settings import setting # 游戏参数设置
from covers import Cover # 未点击方块时表面的覆盖物
import sysclass Game:def __init__(self):pygame.init()self.setting setting()self.screen pygame.display.set_mode(self.setting.screen_size)self.covers Cover(self.setting, self.screen) # 表面覆盖物def run_game(self):while True:self._event_check_() # 检测事件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:x, y pygame.mouse.get_pos() # 检测到单击鼠标事件将鼠标的位置传入self.covers.delete(x, y) # 删除对应方块上的覆盖物def _update_screen_(self):self.screen.fill(self.setting.background_color) # 填充背景颜色self.covers.show() # 将还没有被点击过的数字展现出来self.covers.show_frame()pygame.display.flip() # 更新屏幕显示将上面所做的工作展现在游戏界面上if __name__ __main__:my_game Game()my_game.run_game()funcs: 覆盖们import pygameclass Cover:管理游戏覆盖物的类def __init__(self, setting, screen): # 游戏参数设置和游戏主界面self.setting settingself.screen screenself.covers [] # 存储未被点击过的方块的覆盖物的位置for i in range(20):for j in range(20):self.covers.append([i, j]) # 刚开始时整个界面都是被覆盖的def show_frame(self):for i in range(20):pygame.draw.line(self.screen, self.setting.frame_color, [0, i*25], [500, i*25])pygame.draw.line(self.screen, self.setting.frame_color, [i*25, 0], [i*25, 500])def show(self): # 将所有未被点击过的方块展现出来for cur in self.covers:pygame.draw.rect(self.screen, self.setting.cover_color, [cur[0] * 25, cur[1] * 25, 24, 24])def delete(self, posx, posy):x posx // 25y posy // 25if [x, y] in self.covers:self.covers.remove([x, y])class setting:管理游戏中的参数的类def __init__(self):self.screen_size [500, 500] # 屏幕大小self.background_color [255, 255, 255] # 背景色self.frame_width 1 # 线条粗细self.cover_color [150, 150, 150] # 展示界面的颜色self.frame_color [120, 120, 120]