pythonGame-实现羊了个羊简易字母版

通过python简单复现 羊了个羊 游戏。

使用到的库函数:
python 复制代码
import pygame
import random
游戏源码:
python 复制代码
import pygame
import random

# 初始化pygame
pygame.init()

# 设置窗口大小
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("羊了个羊")

# 颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
COLORS = [(255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 0, 255), (0, 255, 255), (128, 128, 128)]

# 方块大小
BLOCK_SIZE = 40

# 创建不同的图案
PATTERNS = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

# 创建游戏板
board = []

def add_blocks(num):
    for _ in range(num):
        pattern = random.choice(PATTERNS)
        color = COLORS[PATTERNS.index(pattern)]
        x = random.randint(0, (WIDTH - BLOCK_SIZE) // BLOCK_SIZE)
        y = random.randint(0, (HEIGHT - 2*BLOCK_SIZE) // BLOCK_SIZE)
        board.append((pattern, x, y, random.randint(0, 2), color))

# 初始添加100个方块
add_blocks(100)

# 选择区
selected = []

# 游戏循环
clock = pygame.time.Clock()
running = True

def draw_board():
    for item in board:
        pattern, x, y, z, color = item
        pygame.draw.rect(screen, color, (x*BLOCK_SIZE, y*BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))
        font = pygame.font.Font(None, 36)
        text = font.render(pattern, True, WHITE)
        text_rect = text.get_rect(center=(x*BLOCK_SIZE + BLOCK_SIZE//2, y*BLOCK_SIZE + BLOCK_SIZE//2))
        screen.blit(text, text_rect)

def draw_selected():
    for i, item in enumerate(selected):
        pattern, _, _, _, color = item
        pygame.draw.rect(screen, color, (i*BLOCK_SIZE, HEIGHT-BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE))
        font = pygame.font.Font(None, 36)
        text = font.render(pattern, True, WHITE)
        text_rect = text.get_rect(center=(i*BLOCK_SIZE + BLOCK_SIZE//2, HEIGHT-BLOCK_SIZE//2))
        screen.blit(text, text_rect)

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            x, y = pygame.mouse.get_pos()
            for item in board:
                pattern, bx, by, _, color = item
                if bx*BLOCK_SIZE < x < (bx+1)*BLOCK_SIZE and by*BLOCK_SIZE < y < (by+1)*BLOCK_SIZE:
                    if len(selected) < 7:
                        selected.append(item)
                        board.remove(item)
                        # 增加新的方块,直到总数达到200
                        if len(board) + len(selected) < 200:
                            add_blocks(1)
                    break
            
            # 检查是否有三个相同的图案
            if len(selected) >= 3:
                for i in range(len(selected)-2):
                    if selected[i][0] == selected[i+1][0] == selected[i+2][0]:
                        del selected[i:i+3]
                        break

    screen.fill(BLACK)
    draw_board()
    draw_selected()
    
    # 显示当前方块数量
    font = pygame.font.Font(None, 36)
    text = font.render(f"Blocks: {len(board) + len(selected)}/200", True, WHITE)
    screen.blit(text, (10, 10))
    
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
运行效果:

这个游戏对图片资源要求太多了,就用字母替代了,做出来好像简单的连连看,3张相同即可消除。可自己修改增加难度哦。

相关推荐
醉颜凉2 分钟前
【NOIP提高组】潜伏者
java·c语言·开发语言·c++·算法
糊涂君-Q5 分钟前
Python小白学习教程从入门到入坑------第三十一课 迭代器(语法进阶)
python·学习·程序人生·考研·职场和发展·学习方法·改行学it
_小柏_5 分钟前
C/C++基础知识复习(20)
开发语言
天飓10 分钟前
基于OpenCV的自制Python访客识别程序
人工智能·python·opencv
程序员小明z15 分钟前
基于Java的药店管理系统
java·开发语言·spring boot·毕业设计·毕设
取个名字真难呐19 分钟前
矩阵乘法实现获取第i行,第j列值,矩阵大小不变
python·线性代数·矩阵·numpy
技术仔QAQ39 分钟前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
WangYaolove13141 小时前
请解释Python中的装饰器是什么?如何使用它们?
linux·数据库·python
我是哈哈hh1 小时前
HTML5和CSS3的进阶_HTML5和CSS3的新增特性
开发语言·前端·css·html·css3·html5·web
宋发元1 小时前
如何使用正则表达式验证域名
python·mysql·正则表达式