当前位置:   article > 正文

《最强大脑第七季》之“黑白迭代”游戏代码(Python)_最强大脑计时程序 python,有页面

最强大脑计时程序 python,有页面

在看了上一期节目后,对黑白迭代这个项目的游戏产生了兴趣,也想自己玩玩,奈何没有渠道可以找到这个游戏,于是便自己尝试写了一个关于这个游戏的小程序。

一、游戏的基础设置

因为这个游戏的核心是方块,所以首先是给这个游戏一些基础的设定:背景和方块的大小,颜色等:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

二、方块类

接下来就是创建游戏的核心方块,通过精灵(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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

三、游戏中事件发生的函数

紧接着需要创建游戏的核心玩法。

  1. check_event:检测游戏过程中发生的事件,并且调用相应的函数;
  2. create_square:为游戏界面创建一行白色方块;
  3. create_fleet:创建白色方块群(8*8);
  4. change_color:将方块的颜色变为相反颜色(白->黑;黑->白);
  5. extend_mouse:当你点击一个白色方块时,将鼠标点击的范围扩大为其相邻方块的范围;
  6. check_button:检测单击了哪个方块;
  7. updata_screen:更新每次事件发生后,屏幕显示的方块群。

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

四、游戏运行的主函数

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

游戏的运行后的一些效果图片

初始界面:

单击其中一个方块后的图片:

节目中的第一题:

!!!转载请注明出处!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/45114
推荐阅读
相关标签
  

闽ICP备14008679号