python tkinter实现俄罗斯方块基础版——四、消除与得分

用 Python脚本制作俄罗斯方块小游戏 阅读详情

总目录

一、基础界面

二、界面动起来

三、生成、移动、固定、消除

四、消除与得分

======================= 大爽歌作,made by big shuang =======================

1、消除与得分

最后,要实现俄罗斯方块的消除,就是当一行满了的时候,需要消除这行,同时在通过窗口标题展示得分情况
这里需要添加check_row_completed方法判断指定行是否可以消除
同时添加check_and_clear方法检查所有行并消除
而消除之后,我们需要在画板上重新绘制一遍消除后剩余的俄罗斯方块
这里最好将之前的draw_blank_board方法修改为,可以绘制面板上残留的俄罗斯方块的方法,方法名改为draw_board
修改代码如下

# 绘制面板,将draw_blank_board方法修改成如下方法
def draw_board(canvas, block_list):
    for ri in range(R):
        for ci in range(C):
            cell_type = block_list[ri][ci]
            if cell_type:
                draw_cell_by_cr(canvas, ci, ri, SHAPESCOLOR[cell_type])
            else:
                draw_cell_by_cr(canvas, ci, ri)
 
 
# 在原有的rotate_block方法(外)下面添加
def check_row_complete(row):
    for cell in row:
        if cell=='':
            return False
 
    return True
 
 
score = 0
win.title("SCORES: %s" % score) # 标题中展示分数
 
 
def check_and_clear():
    has_complete_row =False
    for ri in range(len(block_list)):
        if check_row_complete(block_list[ri]):
            has_complete_row = True
            # 当前行可消除
            if ri > 0:
                for cur_ri in range(ri, 0, -1):
                    block_list[cur_ri] = block_list[cur_ri-1][:]
        block_list[0] = ['' for j in range(C)]
            else:
                block_list[ri] = ['' for j in range(C)]
            global score
            score += 10
 
    if has_complete_row:
        draw_board(canvas, block_list)
 
        win.title("SCORES: %s" % score)

同时将原有的这两行代码

draw_blank_board(canvas)
 
block_list = []
for i in range(R):
    i_row = ['' for j in range(C)]
    block_list.append(i_row)

修改成

block_list = []
for i in range(R):
    i_row = ['' for j in range(C)]
    block_list.append(i_row)
 
draw_board(canvas, block_list)

再在game_loop方法内部的current_block = None语句后添加下面语句

check_and_clear()

一般来说,当新的俄罗斯方块无法移动时,游戏就算game over了
这里的判断机制是,新生成的俄罗斯方块已经无法在出生点放置了,也就是出生点都已经被之前的固定的方块占用了,就算游戏结束。
在代码文件开头添加

from tkinter import messagebox

再修改game_loop方法如下就好

def game_loop():
    win.update()
    global current_block
    if current_block is None:
        new_block = generate_new_block()
        # 新生成的俄罗斯方块需要先在生成位置绘制出来
        draw_block_move(canvas, new_block)
        current_block = new_block
        if not check_move(current_block, [0, 0]):
            messagebox.showinfo("Game Over!", "Your Score is %s" % score)
            win.destroy()
            return
    else:
        if check_move(current_block, [0, 1]):
            draw_block_move(canvas, current_block, [0, 1])
        else:
            # 无法移动,记入 block_list 中
            save_block_to_list(current_block)
            current_block = None
    		check_and_clear()
 
    win.after(FPS, game_loop)

到这里,俄罗斯方块基础版就算完成了
最终代码已上传到github:
https://github.com/BigShuang/Tetris/blob/master/1_BASIC/004.py
最终效果见本人b站投稿简介

基于Pierre Dellacherie算法实现俄罗斯方块的人工智能(python实现)《三》 基于Pierre Dellacherie算法实现俄罗斯方块的人工智能(python实现)《三》 本章主要讲述人工智能的实现。先讲解Pierre Dellacherie算法的基本知识,再讲解我是怎么实现的。 一些有趣的背景知识 为啥叫俄罗斯方块?:首先俄罗斯方块是一个俄罗斯人做的,这个无聊的人就是前苏联科学家阿列克谢·帕基特诺夫(铭记前辈) 游戏规则就不说了,不懂的人都是没有童年... 阅读详情

相关推荐

python俄罗斯方块教程-100行代码

使用tkinter库实现基础窗体,不加入任何功能只需如下三行代码运行代码生成的窗口如下接下来我们需要在窗体里面,添加一个画布容器用来“装”俄罗斯方块,就是让这个画布作为面板,俄罗斯方块的移动和绘制均在这个画板上实现。这里我们设定一些俄罗斯方块游戏参数行数为R(取20)列数为C(取12)俄罗斯方块的边长为cell_size(取30)通过tkinger的画布类Canvas实现的代码如下运行代码生成的窗口如下,此时界面的长宽就变成我们所需要的了接下来在画板上绘制俄罗斯方块空白位。

R5463995的博客 1723

实现一款俄罗斯方块小游戏非常简单!但是要实现AI自动俄罗斯方块才算牛逼!

SHAPES = {“”":param canvas: 画板,用于绘制一个方块的Canvas对象:param c: 方块所在列:param r: 方块所在行:param color: 方块颜色,默认为#CCCCCC,轻灰色:return:“”"

2301_82244623的博客 1442

【Python】用Python实现一个俄罗斯方块游戏

 俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录。排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等。 附源码:from Tkinter import *from tkMessageBox import *import rand

guansir的专栏 1万+

一个简单的俄罗斯方块游戏脚本

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> <style type="text/c...

chuijian4298的博客 675

tetris_game:带有AI的俄罗斯方块游戏

俄罗斯方块游戏 它是Tetris Game的python实现工具,是一个简单的AI可以自动玩游戏。 需要安装python3,PyQt5和NumPy。 tetris_game.py是主要应用程序。 tetris_model.py是此游戏的数据模型。 tetris_ai.py是AI部分。 从命令行运行tetris_game.py ,然后开始播放或观看AI的播放。 $ python3 tetris_game.py 手动播放 如果您想自己玩游戏,则应在tetris_game.py取消注释此行: # TETRIS_AI = None 或者只是注释以下行: from tetris_ai import TETRIS_AI 当前的配置对于人类玩家而言可能太快了。 因此,您可能需要通过更改此处定义的Tetris.speed值来使其变慢: class Tetris ( QMainWind

shell编程实例

哈哈,以前经常玩俄罗斯方块,这个shell脚本是可以实现俄罗斯方块的功能哦

python tkinter实现俄罗斯方块基础版——一、基础界面

本教程为我在b站投稿的视频教程av81480858 对应的文字版,项目最终效果见投稿简介部分,视频部分讲解的比较详细,觉得文字版不够详细的可以去看视频。 本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 。其中1234分别对应本项目教程每一部分的最终代码,所以想看完整代码直接看004.py就好。 本项目通过pyt...

大爽老师的博客 1万+

【毕业设计】pytorch训练AI自动玩小游戏代码合辑(含游戏代码)AITetris俄罗斯方块.zip

【毕业设计】pytorch训练AI自动玩小游戏代码合辑(含游戏代码)AITetris俄罗斯方块.zip

Python课程设计之俄罗斯方块

Python课程设计之俄罗斯方块 软件需求:Python环境 压缩包内含:源代码、打包好的可执行文件、文档报告

满天星的博客 1万+

银河麒麟V10新特性解析:从安装到AI应用的全面指南

本文全面解析银河麒麟V10操作系统的新特性,从安装指南到AI应用开发,详细介绍了其智能调度引擎、神经网络加速和场景化AI工具集等核心功能。通过实战案例展示如何高效配置AI环境、优化性能,并解决常见问题,助力开发者在国产操作系统上实现高效AI开发与应用部署。

seed的博客 302

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 988

python制作俄罗斯方块

python制作俄罗斯方块

jakelihua 1万+

基于ASP.NET+SQLServer的美妆网站的设计与实现

通过本次ASP.NET MVC美妆商城项目的开发,我们实现了一个功能完善、性能稳定的在线购物平台。该项目不仅提升了用户的购物体验,也为商家提供了一个高效的商品管理和销售渠道。未来,我们将持续优化系统功能,提升用户体验,以适应不断变化的市场需求。

毕业设计大牛哥 1499

python tkinter实现俄罗斯方块基础版——三、生成、移动、固定、消除

1、随机生成俄罗斯方块 这里需要导入python自带的随机库random 使用其中的choice方法,从俄罗斯方块形状列表中随机选出一个。 该方法源码说明如图 首先我们需要删除原来的位于game_loop方法上面的a_block = ... 和draw_block_move(canvas, a_block)这2行代码(这两行代码俄罗斯方块是在固定位置,按照指定形状生成的,需要删掉这部分代码), ...

大爽老师的博客 6369

NX二次开发 计算多个体的最小包围盒

多个体的最小包围盒

weixin_72680115的博客 430

​​10.3 时间敏感网络(TSN)协议适配​

本文探讨了时间敏感网络(TSN)协议在PCIe网络加速卡开发中的适配方案,重点分析了时间同步、流量调度和冗余传输三大核心问题。研究从协议实现、硬件加速设计和驱动优化三个维度展开,提出采用FPGA实现PTP时钟同步、动态TAS调度器以及双路径冗余传输等技术方案。通过工业控制网络案例验证,该方案将端到端延迟从120μs降至8μs,带宽利用率提升至92%,同时实现了100%的确定性保障。研究还总结了调试工具和典型问题解决方法,为TSN在PCIe网络中的实际应用提供了技术参考。

amy_mhd的博客 364

python tkinter实现俄罗斯方块基础版——二、界面动起来

总目录 一、基础界面 二、界面动起来 三、生成、移动、固定、消除 四、消除与得分 ======================= 大爽歌作,made by big shuang ======================= 0、思路 要让游戏界面动起来,需要实现两点 1-定时刷新页面 2-移动页面内部的俄罗斯方块 这块说一下,光实现一的话理论上页面也算动起来了,但是如果界面内容不变,每次新的...

大爽老师的博客 4885

华为OD机考双机位C卷 - 敌情监控 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 敌情监控 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 964

用100行python代码制作俄罗斯方块游戏,俄罗斯方块游戏教程-附完整代码

本项目通过python自带库tkinter实现,无需安装第三方库本项目基于python3版本开发(如果你的是python2.x,运行可能会有问题)

2401_85737382的博客 1641

高通8155源码下载与Android源码编译

一.下载代码 高通下载源码位置: Qualcomm CreatePoint 注册账号,然后登入 可以先选择edit -> infotainment -> sa8155 -> favorites, 点击View TOC就可以过滤出sa8155所有的信息目录.如下图 拉取代码链接在ChipCode中,点击进去可以看到所有的基线版本,选择你需要下载的版本点进去,如sa8155p-la-1-0_ap_standard_oem,把高通专有代码和开源代码都下载到本机. 1..

Johnny2004的专栏 7675

Python蓝色跳动的爱心(完整代码)

Python语言实现蓝色跳动的爱心的完整代码。 代码分析 这段代码使用了 库来创建一个动态的爱心图案,并在屏幕上显示带有动态效果的“我爱你”字样。以下是对这段代码的详细分析: 用于创建图形用户界面(GUI)。 用于生成随机数,主要用于控制爱心图案的扩散效果。 中的 , , , 用于数学计算,生成爱心形状和扩散效果。 包含了 等常量,用于控制控件的对齐方式。 2. 全局变量定义 , : 定义画布的大小。 , : 爱心的中心坐标。 : 用于定义爱心形状的缩放

AIGC 1919

用100行Python代码,制作游戏《俄罗斯方块》!

用100行Python代码,制作游戏《俄罗斯方块》!

m0_75067840的博客 1868

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

python俄罗斯方块教程_python tkinter实现俄罗斯方块 基础版

本项目最终效果见本人b站投稿av81480858 简介部分本项目最终代码已上传github: https://github.com/BigShuang/Tetris 的1_BASIC文件夹 。其中1234分别对应本项目教程每一部分的最终代码,所以想看完整代码直接看004.py就好。本文已录制视频教程上传b站:https://www.bilibili.com/video/av81480858 。视频...

weixin_39517520的博客 885

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python tkinter实现俄罗斯方块拓展——四种游戏模式

本文代码基于python tkinter实现俄罗斯方块基础版——四、消除与得分 的最终代码, 建议先读懂基础版的代码。 对于基础很好的,可以简单阅读这里的核心梳理 0、核心代码梳理 俄罗斯方块中的核心方法如下,该方法实现界面的刷新,可以认为是整个代码的核心(粗略比喻为控制中心)。后面的四种模式基本上或多或少是与该方法关联的。 def game_loop(): win.update() global current_block if current_block is None:

大爽老师的博客 2147
上一篇: python tkinter实现俄罗斯方块基础版——二、界面动起来
下一篇: python tkinter从入门到撩妹-整蛊弹窗-1
大爽歌
博客等级 码龄9年 422粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值