赞
踩
在看了上一期节目后,对黑白迭代这个项目的游戏产生了兴趣,也想自己玩玩,奈何没有渠道可以找到这个游戏,于是便自己尝试写了一个关于这个游戏的小程序。
因为这个游戏的核心是方块,所以首先是给这个游戏一些基础的设定:背景和方块的大小,颜色等:
Settings.py
class Settings():
""" 存储《黑白迭代》的所有设置的类 """
def __init__(self):
""" 初始化游戏的设置 """
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
# 白色方块设置
self.white_square_width = 80
self.white_square_height = 80
self.white_square_color = 255, 255, 255
接下来就是创建游戏的核心方块,通过精灵(Sprite)建立一个class white_square类,里面包含了这个一个方块的起始位置,颜色等。通过draw_square方法来画出方块。
square.py
import pygame from pygame.sprite import Sprite class white_square(Sprite): """ 表示单个白色方块的类 """ def __init__(self,si_settings, screen): """ 初始化白色方块并设置其初始位置 """ super(white_square, self).__init__() self.screen = screen # 在(0,0)处创建一个表示白色方块的矩形,再设置正确的位置 self.rect = pygame.Rect(0, 0, si_settings.white_square_width, si_settings.white_square_height) # self.rect.x = (si_settings.screen_width - 8*si_settings.white_square_width)/2 # self.rect.y = (si_settings.screen_height - 8*si_settings.white_square_height)/2 self.rect.x = 280 self.rect.y = 80 # 存储白色方块的准确位置 self.x = float(self.rect.x) self.color = si_settings.white_square_color def draw_square(self): """ 在屏幕上绘制白色方块 """ pygame.draw.rect(self.screen, self.color, self.rect)
紧接着需要创建游戏的核心玩法。
game_function.py
import sys import pygame from pygame.sprite import Group from square import white_square def check_events(white_squares): """ 响应按键和鼠标事件 """ for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.MOUSEBUTTONDOWN: mouse_x, mouse_y = pygame.mouse.get_pos() check_button(white_squares, mouse_x, mouse_y) def create_square(si_settings, screen, white_squares, square_number, row_number): """ 创建一个白色方块并将其加入当前行 """ square = white_square(si_settings, screen) square_width = square.rect.width square.x = 280 + (square_width + 1) * square_number # 白色方块间距为 1 square.rect.x = square.x square.rect.y = 80 + (square.rect.height + 1) * row_number white_squares.add(square) def create_fleet(si_settings, screen, white_squares): """ 创建 8*8 的白色方块群 """ number_squares = 8 number_rows = 8 # 创建白色方块群 for row_number in range(number_rows): for square_number in range(number_squares): create_square(si_settings, screen, white_squares, square_number, row_number) def change_color(square): """ 将方块自身以及其附近的方块变为相反颜色的方块 """ if square.color == (255, 255, 255): square.color = 0, 0, 0 elif square.color == (0, 0, 0): square.color = 255, 255, 255 def extend_mouse(mouse_x, mouse_y): """ 扩展鼠标单击的位置 """ mouse = [(mouse_x, mouse_y - 81), (mouse_x - 81, mouse_y), (mouse_x, mouse_y), (mouse_x, mouse_y + 81), (mouse_x + 81, mouse_y)] return mouse def check_button(white_squares, mouse_x, mouse_y): """ 检查单击了哪个方块及其相邻方块 """ mouse = extend_mouse(mouse_x, mouse_y) for pos in mouse: for square in white_squares: if square.rect.collidepoint(pos[0], pos[1]): change_color(square) break def updata_screen(si_settings, screen, white_squares): """ 更新屏幕上的图像,并切换到新屏幕 """ # 每次循环时都重绘屏幕 screen.fill(si_settings.bg_color) # 绘制编组中的每个方块 for square in white_squares.sprites(): square.draw_square() # 让最近绘制的屏幕可见 pygame.display.flip()
import pygame from pygame.sprite import Group from settings import Settings import game_function as gf def run_game(): # 初始化游戏并创建一个屏幕对象 pygame.init() si_settings = Settings() screen = pygame.display.set_mode((si_settings.screen_width, si_settings.screen_height)) pygame.display.set_caption("Black and White Iteration") # 创建白色方块编组 white_squares = Group() # 创建白色方块群 gf.create_fleet(si_settings, screen, white_squares) # 开始游戏的主循环 while True: gf.check_events(white_squares) gf.updata_screen(si_settings, screen, white_squares) run_game()
初始界面:
单击其中一个方块后的图片:
节目中的第一题:
!!!转载请注明出处!!!
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。