python实现简单俄罗斯方块游戏
作者:大学生编程地 发布时间:2023-04-13 03:28:05
标签:python,俄罗斯方块
本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下
import pygame,sys,random,time
all_block = [[[0,0],[0,-1],[0,1],[0,2]],
[[0,0],[0,1],[1,1],[1,0]],
[[0,0],[0,-1],[-1,0],[-1,1]],
[[0,0],[0,1],[-1,-1],[-1,0]],
[[0,0],[0,1],[1,0],[0,-1]],
[[0,0],[1,0],[-1,0],[1,-1]],
[[0,0],[1,0],[-1,0],[1,1]]]
background = [[0 for column in range(0,10)] for row in range(0,22)]
background[0] = [1 for column in range(0,10)]
select_block = list(random.choice(all_block))
block_initial_position = [21,5]
times = 0
score = [0]
gameover = []
press = False
pygame.init()
screen = pygame.display.set_mode((250,500))
title = pygame.display.set_caption("俄罗斯方块")
#下落、位置、数组检测、得分、屏幕信息
def block_move_down():
y_drop=block_initial_position[0]
x_move=block_initial_position[1]
y_drop-=1
for row,column in select_block:
row+=y_drop
column+=x_move
if background[row][column]==1:
break
else:
block_initial_position.clear()
block_initial_position.extend([y_drop,x_move])
return
y_drop,x_move=block_initial_position
for row,column in select_block:
background[y_drop+row][x_move+column]=1
complete_row=[]
for row in range(1,21):
if 0 not in background[row]:
complete_row.append(row)
complete_row.sort(reverse=True)
for row in complete_row:
background.pop(row)
background.append([0 for column in range(0,10)])
score[0]+=len(complete_row)
pygame.display.set_caption(str(score[0])+'分')
select_block.clear()
select_block.extend(list(random.choice(all_block)))
block_initial_position.clear()
block_initial_position.extend([20,5])
y_drop,x_move=block_initial_position
for row,column in select_block:
row+=y_drop
column+=x_move
if background[row][column]:
gameover.append(1)
#方块设置、变化、背景改变
def new_draw():
y_drop,x_move=block_initial_position
for row,column in select_block:
row+=y_drop
column+=x_move
pygame.draw.rect(screen,(255,165,0),(column*25,500-row*25,23,23))
for row in range(0,20):
for column in range(0,10):
bottom_block=background[row][column]
if bottom_block:
pygame.draw.rect(screen,(0,0,255),(column*25,500-row*25,23,23))
#方块的移动,防止出界,碰撞
def move_left_right(n):
y_drop,x_move=block_initial_position
x_move+=n
for row,column in select_block:
row+=y_drop
column+=x_move
if column<0 or column>9 or background[row][column]:
break
else:
block_initial_position.clear()
block_initial_position.extend([y_drop,x_move])
#旋转,位置都进行变化
def rotate():
y_drop,x_move=block_initial_position
rotating_position=[(-column,row)for row,column in select_block]
for row,column in rotating_position:
row+=y_drop
column+=x_move
if column<0 or column>9 or background[row][column]:
break
else:
select_block.clear()
select_block.extend(rotating_position)
while True:
screen.fill((255,255,255))
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN and event.key==pygame.K_LEFT:
move_left_right(-1)
elif event.type==pygame.KEYDOWN and event.key==pygame.K_RIGHT:
move_left_right(1)
elif event.type==pygame.KEYDOWN and event.key==pygame.K_UP:
rotate()
elif event.type==pygame.KEYDOWN and event.key==pygame.K_DOWN:
press=True
elif event.type==pygame.KEYUP and event.key==pygame.K_DOWN:
press=False
if press:
times+=10
if times>=50:
block_move_down()
times=0
else:
times+=1
if gameover:
sys.exit()
new_draw()
pygame.time.Clock().tick(200)
pygame.display.flip()
效果:
来源:https://blog.csdn.net/qq_46500711/article/details/122507233
0
投稿
猜你喜欢
- 从某种程度上说,判断一个网页设计师是否优秀,可以从其在WEB开发(或网页设计)中是否合理的采用各种图片格式得出结论。事实上,或许所有人都知道
- 使用Python语句,读取Linux远端服务器上的文件打印到控制台的代码实现:下载包:paramikoimport paramiko#服务器
- 因为我们现在的前端框架做性能优化,为了找到各个组件及框架的具体解析耗时,需要在框架中嵌入一个耗时测试工具,性能测试跟不同的计算机硬件配置有很
- NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供
- 之前我在《各类Excel表格批量合并问题的实现思路与案例》一文中演示了各种常见的表格合并的需求,但VBA复制粘贴的需求却没有演示,今天我演示
- 很多现代的浏览器在地址栏的右边有个搜索框,默认的安装有 Google 搜索等。如下图所示:其实这是 OpenSearch 的一个应用,只要编
- 在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置,授权
- 本文实例讲述了Python输出PowerPoint(ppt)文件中全部文字信息的方法。分享给大家供大家参考。具体分析如下:下面的代码依赖于w
- MYSQL数据库安装完成后,默认最大连接数是100,一般流量稍微大一点的论坛或网站这个连接数是远远不够的,增加默认MYSQL连接数的方法有两
- 本文实例讲述了python模拟鼠标拖动操作的方法。分享给大家供大家参考。具体如下:pdf中的书签只有页码,准备把现有书签拖到一个目录中,然后
- 本文实例总结了python格式化字符串的方法,分享给大家供大家参考。具体分析如下:将python字符串格式化方法以例子的形式表述如下:* 定
- 为了能够使用ERWin能够进行基于MySQL数据库的物理设计,可以采用以下方法步骤(假设你已经有了一个设计好的LOGICAL MODEL):
- 我们的目标是秒杀淘宝或京东等的订单,这里面有几个关键点,首先需要登录淘宝或京东,其次你需要准备好订单,最后要在指定时间快速提交订单。这里就要
- 一.简介发展由来:随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重
- 效果图:图(1) 原始图图(2) 缩小后图(3) 放大后代码如下:<!DOCTYPE html><html> <
- 谷歌在大型图像数据库ImageNet上训练好了一个Inception-v3模型,这个模型我们可以直接用来进来图像分类。下载链接: https
- Access保留字&变量名列表,建表时应避免使用这些词汇和符号。Access 2002/2003-A &nbs
- Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下:1.在python安装目录的Lib
- 1. 引入messages模块from django.contrib import messages2. 把messages写入view中@
- 根据 Dotzler 的统计,IE6 的份额正在缩水,这可能是 2009 年本人听到的第一个好消息。于此同时,Gmail 的浏览器支持列表中