如何使用python实现俄罗斯方块

  介绍

这篇文章主要介绍了如何使用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实现俄罗斯方块