Python 数独小游戏视觉优化:打造清新简约的游戏界面
·
以下是一个清新简约的Python数独游戏视觉优化方案,使用Pygame实现:
import pygame
import sys
import random
# 初始化
pygame.init()
WIDTH, HEIGHT = 540, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("简约数独")
# 调色板
BACKGROUND = (249, 251, 253) # 浅蓝背景
GRID_LINES = (200, 212, 225) # 灰蓝网格线
CELL_BG = (255, 255, 255) # 白色单元格
ACCENT = (79, 174, 255) # 蓝色强调色
TEXT = (50, 50, 80) # 深蓝文字
SELECTED = (230, 243, 255) # 选中高亮
# 字体
font = pygame.font.SysFont("microsoftyahei", 40)
small_font = pygame.font.SysFont("microsoftyahei", 24)
class SudokuGenerator:
def __init__(self):
self.board = [[0]*9 for _ in range(9)]
self.generate_puzzle()
def generate_puzzle(self):
# 生成逻辑(简化版)
base = 3
side = base*base
nums = random.sample(range(1, side+1), side)
self.board = [[nums[(base*(r%base)+r//base+c)%side]
for c in range(side)] for r in range(side)]
# 随机挖空
empties = random.randint(40, 50)
for _ in range(empties):
r, c = random.randint(0,8), random.randint(0,8)
self.board[r][c] = 0
class Game:
def __init__(self):
self.generator = SudokuGenerator()
self.board = self.generator.board
self.selected = None
self.cell_size = 60
self.grid_pos = (20, 20)
def draw(self):
# 绘制背景
screen.fill(BACKGROUND)
# 绘制网格
for i in range(10):
# 粗线分隔3x3宫格
line_width = 3 if i % 3 == 0 else 1
pygame.draw.line(screen, GRID_LINES,
(self.grid_pos[0], self.grid_pos[1] + i*self.cell_size),
(self.grid_pos[0] + 9*self.cell_size, self.grid_pos[1] + i*self.cell_size),
line_width)
pygame.draw.line(screen, GRID_LINES,
(self.grid_pos[0] + i*self.cell_size, self.grid_pos[1]),
(self.grid_pos[0] + i*self.cell_size, self.grid_pos[1] + 9*self.cell_size),
line_width)
# 绘制数字
for r in range(9):
for c in range(9):
if self.board[r][c] != 0:
# 选中单元格高亮
if self.selected and self.selected == (r, c):
pygame.draw.rect(screen, SELECTED,
(self.grid_pos[0] + c*self.cell_size,
self.grid_pos[1] + r*self.cell_size,
self.cell_size, self.cell_size))
# 绘制数字
text = font.render(str(self.board[r][c]), True, TEXT)
text_rect = text.get_rect(center=(
self.grid_pos[0] + c*self.cell_size + self.cell_size//2,
self.grid_pos[1] + r*self.cell_size + self.cell_size//2
))
screen.blit(text, text_rect)
# 绘制标题
title = font.render("简约数独", True, ACCENT)
screen.blit(title, (WIDTH//2 - title.get_width()//2, HEIGHT - 60))
def select_cell(self, pos):
x, y = pos[0] - self.grid_pos[0], pos[1] - self.grid_pos[1]
if 0 <= x < 9*self.cell_size and 0 <= y < 9*self.cell_size:
self.selected = (y // self.cell_size, x // self.cell_size)
def place_number(self, num):
if self.selected:
r, c = self.selected
self.board[r][c] = num
# 主游戏循环
def main():
game = Game()
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.MOUSEBUTTONDOWN:
game.select_cell(event.pos)
if event.type == pygame.KEYDOWN:
if event.key in range(pygame.K_1, pygame.K_9+1):
game.place_number(event.key - pygame.K_0)
elif event.key == pygame.K_r: # 重置
game = Game()
game.draw()
pygame.display.flip()
clock.tick(60)
if __name__ == "__main__":
main()
设计特点:
-
色彩方案
- 浅蓝背景 ($\text{RGB}(249,251,253)$) 提供柔和视觉体验
- 灰蓝网格线 ($\text{RGB}(200,212,225)$) 确保清晰不刺眼
- 蓝色强调色 ($\text{RGB}(79,174,255)$) 用于标题和交互元素
-
视觉层次
graph TD A[背景层] --> B[网格层] B --> C[单元格层] C --> D[数字层] D --> E[交互层] -
交互优化
- 选中单元格浅蓝高亮 ($\text{RGB}(230,243,255)$)
- 3x3宫格边界加粗
- 响应式数字输入
-
字体选择
- 主数字:微软雅黑40pt
- 标题:微软雅黑40pt蓝色
-
空间布局
- 单元格尺寸:60x60像素
- 整体居中布局
- 底部留白放置标题
使用说明:
- 点击选择单元格
- 按数字键1-9填入数字
- 按R键重置游戏
- 关闭窗口退出游戏
此设计遵循简约原则,移除所有冗余元素,通过色彩对比和空间留白创造清晰视觉层次,同时保持功能完整性。
更多推荐
所有评论(0)