介绍
这篇文章主要介绍了如何使用python实现俄罗斯方块,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
网上搜到一个Pygame写的俄罗斯方块(俄罗斯方块),大部分看懂的前提下增加了注释,Fedora19下运行好的的
主程序:
#编码:use utf8 # !,/usr/bin/env python #,注释说明:形状表示一个俄罗斯方块形状,细胞表示一个小方块 import 系统 得到random import 选择 import pygame 得到pygame.locals import * 得到block import 啊,,我,,,,,,,,,,T COLS =16 ROWS =20 时间=CELLS COLS *,行 时间=CELLPX 32, #,每个细胞的像素宽度 时间=POS_FIRST_APPEAR COLS /2 SCREEN_SIZE =, (COLS *, CELLPX,, ROWS *, CELLPX) COLOR_BG =, (0, 0, 0) def 画(电网,pos=None): ,#网格是一个列表,要么值为没有,要么值为& # 39;块# 39; ,#非空值在eval()的作用下,用于配置颜色 ,if pos: #, 6 x5 s 才能=,pos 作用;3,安康;2,*,COLS #, upper left 位置 for 才能;p 拷贝范围(0,coles): ,,q =, s +, p *关口 ,,for 小姐:拷贝范围(q,, q +, 6): ,,,if 0, & lt;=,小姐:& lt;,细胞: ,,,,#,0,& lt;=小姐:& lt;,细胞:表示我这个细胞在董事会内部。 ,,,,c =, eval(网格(我),+,“.color"), if 网格[我],else COLOR_BG ,,,,#,执行着色.shape的细胞涂对应的类设定好的颜色,否则涂黑(背景色) ,,,,a =,小姐:%,COLS * CELLPX ,,,,b =,小姐:/,COLS * CELLPX ,,,,screen.fill (c, (a, b,, CELLPX,, CELLPX)) ,其他:#所有 screen.fill才能(COLOR_BG) for 我,才能,occupied 拷贝列举(网格): ,,if 占领: ,,,c =, eval(网格(我),+,“.color"), #,获取方块对应的颜色 ,,,a =,小姐:%,COLS *, CELLPX #,横向长度 ,,,b =,小姐:/,COLS *, CELLPX #,纵向长度 ,,,screen.fill (c, (a, b,, CELLPX,, CELLPX)) ,,,#,填补:为细胞上,色,第二个参数表示矩形 ,pygame.display.flip () ,#刷新屏幕 def φ(grid1, grid2,, pos): #, 4 x4 #,两个网格之4 * 4区域内是否会相撞(冲突)=,,s  pos 作用;2,安康;1,*,COLS #, upper left 位置 ,for p 拷贝范围(0,4): 时间=q 才能;s +, p *关口 for 才能小姐:拷贝范围(q,, q +, 4): ,,试一试: ,,,if grid1[我],以及grid2[我]: ,,,,return 错误的 ,,除了: ,才能通过 return 真正的 def 合并(grid1, grid2): ,#合并两个网格=,,grid  grid1 [:] ,for 我,c 拷贝列举(grid2): if 才能;c: 网格(我),,,=,c return 网格 def 完成(网格): ,#减去满行 n =, 0 ,for 小姐:拷贝范围(0,,细胞,峡路): #才能,步长为一行。 if 才能;not  None 拷贝网格(我:小姐:+,峡路): #才能这一句很容易理解错误。 #才能实际含义是:如果网格(我:小姐:+,关口)都不是没有,那么执行下面的语句 ,,grid =,(没有),*,COLS +,网格(我),+,网格(小姐:+,关口:] ,,n +=1 ,return 网格,n # n表示减去的行数,用作统计分数 pygame.init () pygame.event.set_blocked(没有) pygame.event.set_allowed ((KEYDOWN,退出) pygame.key.set_repeat (75, 0) pygame.display.set_caption(& # 39;俄罗斯方块# 39;) 时间=screen pygame.display.set_mode (SCREEN_SIZE) pygame.display.update () grid =,(没有),*,细胞 speed =500 screen.fill (COLOR_BG) while 真实:#,spawn a 块=,block 选择([O,,我,,,,,,,,,,T)) ()=,pos  POS_FIRST_APPEAR ,if not φ(网格,block.grid (pos), pos):, break #,你输了 ,pygame.time.set_timer (KEYDOWN,速度) ,# repeatedly create  an event 提醒,event 队列 ,#速度是时间间隔…速度越小,方块下落的速度越快……速度应该换为其他名字 ,while 事实:#,move 从而阻止 画才能(合并(电网,block.grid (pos)),, pos) 时间=event 才能;pygame.event.wait () if 才能;event.type ==,退出:,sys.exit () 尝试才能: ,,aim =, { ,,,K_UNKNOWN:, pos +关口, ,,,K_UP:, pos机, null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何使用python实现俄罗斯方块