Python小项目俄罗斯方块代码基于pygame编写

这篇具有很好参考价值的文章主要介绍了Python小项目俄罗斯方块代码基于pygame编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python实习作业或者期末作业,俄罗斯方块,基于pygame编写
有很多小伙伴想要找一些小项目练练手,下面是我在闲暇时写的一个俄罗斯方块的一个小游戏,它是基于pygame板块来实现的
这是它的首页界面
Python小项目俄罗斯方块代码基于pygame编写
然后这里是它的运行界面
Python小项目俄罗斯方块代码基于pygame编写
总共有四个速度等级,分别对应四种不同的速度,可以自行调整

import math
import random
import sys
from copy import deepcopy
import pygame as pg
import pygame.locals as pl

pg.init()        # 初始化pygame模块

pg.display.set_caption('俄罗斯方块')       # 设置当前窗口标题
fclock = pg.time.Clock()               # 创建一个对象来帮助跟踪时间

FPS = 30    # 每秒的传送帧数
FONT = pg.font.SysFont('simhei', 30)         # 从系统字体创建字体对象
WindowX = 30
WindowY = 25
award = 10  # 奖励倍数
BLOCK_SIZE = 30          # 一个方块的大小
LINE_SPACE = 2
MAIN_X, MAIN_Y = MAIN_WINDOW = [30, 25]
GAME_X, GAME_Y = GAME_WINDOW = [20, MAIN_Y]
NEXT_X = MAIN_X - GAME_X

RED = (255, 0, 0)       # 运用RGB颜色转载,RGB的颜色表示方法
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
YELLOW = (255, 255, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)


class BaseBlock:                 # 创建一个类建立基本的方块
    def __init__(self):
        self.turn_times = 0
        self.x_move = 0
        self.y_move = 0
        self.location = []


class IBlock(BaseBlock):            #  定义一个小类,创建I型方块,#在4*4的小网格内,以中间左上角坐下为原点(0,0),7种方块及其各形态4个方块在小网格的相对坐标
                                    # 移动时记录小网络(0,0)点在游戏网格的(x,y),就知道4个方块在游戏网格中的位置
    def __init__(self):
        super().__init__()
        self.dot = {
            0: [(0, 1), (0, 0), (0, -1), (0, -2)],
            1: [(-1, 0), (0, 0), (1, 0), (2, 0)],
        }


class OBlock(BaseBlock):
    def __init__(self):
        super().__init__()           # 创建o型方块
        self.dot = {
            0: [(0, 0), (1, 0), (1, 1), (0, 1)],
        }


class LBlock(BaseBlock):
    def __init__(self):
        super().__init__()
        self.dot = {
            0: [(0, 0), (0, 1), (0, -1), (-1, 1),(1,1)],           # 创建L型方块
            1: [(0, 0), (-1, 0), (1, 0), (1, 1)],
            2: [(0, 0), (0, 1), (0, -1), (1, -1)],
            3: [(0, 0), (1, 0), (-1, 0), (-1, -1)],
        }


class ULBlock(BaseBlock):
    def __init__(self):                                        # 定义一个小类创建U型方块
        super().__init__()
        self.dot = {
            0: [(0, 0), (0, 1), (0, -1), (1, 1)]
            ,
            1: [(0, 0), (-1, 0), (1, 0), (1, -1)],
            2: [(0, 0), (0, 1), (0, -1), (-1, -1)],
            3: [(0, 0), (1, 0), (-1, 0), (-1, 1)],
        }


class TBlock(BaseBlock):
    def __init__(self):
        super().__init__()
        self.dot = {
            0: [(0, 0), (1, 0), (0, 1), (-1, 0)],
            1: [(0, 0), (1, 0), (0, 1), (0, -1)],
            2: [(0, 0), (1, 0), (0, -1), (-1, 0)],            # 创建T型方块
            3: [(0, 0), (0, -1), (0, 1), (-1, 0)],
        }


class SBlock(BaseBlock):
    def __init__(self, *args, **kwargs):
        super().__init__()                             # 定义一个小类,创建S型方块
        self.dot = {
            0: [(0, 0), (0, 1), (-1, 0), (-1, -1)],
            1: [(0, 0), (1, 0), (0, 1), (-1, 1)],
        }


class ZBlock(BaseBlock):
    def __init__(self):
        super().__init__()
        self.dot = {
            0: [(0, 0), (0, 1), (-1, 0), (-1, -1)],              # 创建Z型方块
            1: [(0, 0), (1, 0), (0, 1), (-1, 1)],
        }


class Game():
    def __init__(self):      # self表示对象本身,谁调用,就表示谁
        self.fps = FPS
        self.screen = pg.display.set_mode([MAIN_X * BLOCK_SIZE, MAIN_Y * BLOCK_SIZE])    # 初始化窗口或屏幕以供显示并设置大小
        self.screen.fill(WHITE)
        self.stop_block = {k: [] for k in range(MAIN_Y)}     # 当k在y轴上循环,当方块在y轴最下方时停止下落;
        self.level_list = ['简单', '一般', '困难', '地狱']    # 设置难度分类
        self.moshi_list = ['单人','双人']
        self.moshi = 1      # 定义初始的单人模式
        self.level = 1      # 定义初始难度等级
        self.score = 0      # 定义初始分数
        self.next_block = self.create_next()     # 调用create_next这个函数生成下一个方块
        self.now_block = None
        self.gaming = False
        self.click_box = []
        self.click_color = RED

    def draw_text(self):
        score_obj = FONT.render('分数: %s' % self.score, True, (0, 0, 0), )   # render(内容,是否抗锯齿,字体颜色,字体背景颜色)
        level_obj = FONT.render('等级: %s' % self.level_list[self.level - 1], True, (0, 0, 0), )
        x, y = self.three.topleft

        self.screen.blit(score_obj, [x + BLOCK_SIZE * 2.5, y + BLOCK_SIZE * 5])   # 在主窗口上建立一个小窗口显示分数
        self.screen.blit(level_obj, [x + BLOCK_SIZE * 1.5, y + BLOCK_SIZE * 7.5])  # 在主窗口上建立一个小窗口显示难度等级

    @property              # 装饰器,让此方法变为私有属性,防止对其修改,可以用调用属性形式来调用方法,后面不需要加();
    def speed(self):
        # print(round(self.level / 10, 1))
        return round(self.level / 10, 1)         # 定义一个速度函数,用等级除以10,保留一位小数。控制着难度的等级,难度越大,速度越快。

    def start(self):
        if self.gaming:
            if not self.now_block:
                self.change_next()
            self.draw_next_block()
            self.draw_now_block()
            self.draw_stop()
            self.draw_wall()
            self.move()
            remove_line = self.check_full_block()        # 消去的行数调用check.full.block函数;
            if remove_line:                             # 分数等于除去的行数乘上倍数;
                self.score += award * remove_line
            self.draw_text()
        else:
            self.choice_level()

    def level_add(self):
        if self.level + 1 <= len(self.level_list):
            self.level += 1
        else:
            self.level = 1

    def level_pop(self):
        if self.level - 1 >= 1:
            self.level -= 1
        else:
            self.level = len(self.level_list)

    def moshi_add(self):
        if self.moshi + 1 <= len(self.moshi_list):
            self.moshi += 1
        else:
            self.moshi = 1

    def moshi_pop(self):
        if self.moshi - 1 <= len(self.moshi_list):
            self.moshi -= 1
        else:
            self.moshi = len(self.moshi_list)

    def to_gaming(self):
        self.gaming = not self.gaming

这是一部分的开头,创建函数的部分
完整代码可以去博主的Github仓库或者Gitee仓库下载
Gitee仓库地址:
点击跳转Gitee仓库
觉得喜欢的可以给博主的仓库加个星哦
Github仓库地址:
点击跳转Github仓库
觉得有用的可以给博主的仓库加个小星星哦
最后,觉得这篇文章对你来说有用的话,给博主点个赞再走吧文章来源地址https://www.toymoban.com/news/detail-400405.html

到了这里,关于Python小项目俄罗斯方块代码基于pygame编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python基础项目实战-俄罗斯方块

    一、俄罗斯方块游戏设计分析: 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑、手机、掌上游戏机产品,是一款游戏规则简单,但又不缺乏乐趣的简单经典小游戏,上手容易,适用范围广泛,人所共知。俄罗斯方块游戏基本规则是油4个小方块组成的7种不

    2024年02月12日
    浏览(29)
  • python实现俄罗斯方块【含代码和讲解】

    Python实现俄罗斯方块:打造经典游戏的代码实现教程 俄罗斯方块是世界上最受欢迎的电子游戏之一,源自俄罗斯。这是一个简单却富有挑战和乐趣的游戏,让玩家必须思考如何将各种形状的积木放入底部的平面上,以便完整地填满一行或多行,每填满一行就会消失并获得分数

    2024年02月11日
    浏览(38)
  • Python课程设计 基于python的俄罗斯方块小游戏

    目录 基于python的俄罗斯方块小游戏 1.概述 1.1 摘要 1.2 开发背景 1.3 开发环境 1.4 实现功能 2.代码描述 2.1 模块导入 2.2 初始化变量 2.3 播放音乐 2.4 创建方块类 2.5 绘制游戏地图 2.6 游戏初始化 2.7 绘制有边框矩形 2.8 绘制我的文字 2.9 游戏主体 2.10 主程序运行 3.运行效果 4.注

    2024年02月22日
    浏览(45)
  • Javascript 俄罗斯方块 游戏代码

    本俄罗斯方块代码采用 JavaScript 脚本代码写成,简单易懂; 全代码采用静态类及静态变量成员组成; 全脚本通过实现代码全局配置 OLSFK.Options = {...} 定义方块起始坐标及定义各自的旋转点; 从初始化俄罗斯方块界面开始,再监听键盘事件;以及左右,向下及旋转动作判断,

    2024年02月07日
    浏览(35)
  • 经典俄罗斯方块代码(转javascript代码)

    在网上发现一篇60行javascript超经典俄罗斯方块代码,值得学习,转为Delphi如下,有详细注释,不再另讲解:

    2024年01月20日
    浏览(30)
  • 基于STM32 LCD屏实现的俄罗斯方块小游戏(20220522完成 第一个综合类项目)

    本项目基于 正点原子mini(stm32f103RCT6) 2.8 寸的 ALIENTEK TFTLCD 模块 二轴摇杆模块 的俄罗斯方块小游戏。(学习过程中的项目自测) 1.随机数生成我是用RTC的时钟自己写的,用srand+rand 只能生成一次。 2.并行程序(有什么更好的方法)。 3.觉得我哪里需要改进或者有什么见解可以评论

    2024年02月08日
    浏览(53)
  • 免费分享一套Python俄罗斯方块源码 PyQt5俄罗斯方块源码,太好玩了~

    大家好,我是java1234_小锋老师,看到一个不错的Python俄罗斯方块源码 PyQt5俄罗斯方块源码,分享下哈。 【免费】Python俄罗斯方块源码 PyQt5俄罗斯方块源码 Python小游戏源码_哔哩哔哩_bilibili 【免费】Python俄罗斯方块源码 PyQt5俄罗斯方块源码 Python小游戏源码项目来自互联网,免

    2024年01月25日
    浏览(33)
  • python制作俄罗斯方块

    作者简介 :一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。 座右铭 :未来是不可确定的,慢慢来是最快的。 个人主页 :极客李华-CSDN博客 合作方式 :私聊+ 这个专栏内容 :BAT等大厂常见后端java开发面试题详细讲解,更新数目10

    2024年02月12日
    浏览(36)
  • 用python制作俄罗斯方块

    代码如下,可以直接运行:

    2024年02月11日
    浏览(35)
  • C语言项目小游戏之俄罗斯方块

    今天给大家带来一个用C语言实现的俄罗斯方块小游戏 游戏截图:       首先我们先创建一个名为mywindows.h的头文件。用来设置我们操作台的各种功能实现 每一个函数的功能都有注释向大家解释,现在给大家放出函数功能的具体实现,博主创建了了个名为mywindows.c的源文件 这

    2024年02月15日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包