python实现俄罗斯方块

这篇文章主要为大家详细介绍了python实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

网上搜到一个Pygame写的俄罗斯方块(tetris),大部分看懂的前提下增加了注释,Fedora19下运行OK的

主程序:

 #coding:utf8 #! /usr/bin/env python # 注释说明:shape表示一个俄罗斯方块形状 cell表示一个小方块 import sys from random import choice import pygame from pygame.locals import * from block import O, I, S, Z, L, J, T COLS = 16 ROWS = 20 CELLS = COLS * ROWS CELLPX = 32 # 每个cell的像素宽度 POS_FIRST_APPEAR = COLS / 2 SCREEN_SIZE = (COLS * CELLPX, ROWS * CELLPX) COLOR_BG = (0, 0, 0) def draw(grid, pos=None): # grid是一个list,要么值为None,要么值为'Block' # 非空值在eval()的作用下,用于配置颜色 if pos: # 6x5 s = pos - 3 - 2 * COLS # upper left position for p in range(0, COLS): q = s + p * COLS for i in range(q, q + 6): if 0 <= i 

调用的模块:

 #coding:utf-8 #! /usr/bin/env python COLS = 16 ROWS = 20 class Block(): color = (255,255,255) def __init__(self): self._state = 0 def __str__(self): return self.__class__.__name__ def _orientations(self): raise NotImplementedError() def rotate(self, times=1): for i in range(times): if len(self._orientations())-1 == self._state: self._state = 0 #只要_state比_orientations长度-1还要小,就让_state加1 else: self._state += 1 def blades(self): # 返回对应形状的一种旋转形状。(返回一个list,list中每个元素是一个(x,y)) return self._orientations()[self._state] def grid(self, pos, cols=COLS, rows=ROWS): # grid()函数:对于一个形状,从它的cell中的pos位置,按照orientations的位置提示,把所有cell涂色 # pos表示的是shape中的一个cell,也就是(0,0) if cols*rows <= pos: return None # 这种情况应该不可能出现吧。如果出现<=的情况 # 那么,pos都跑到界外了。。 grid = [None] * cols * rows grid[pos] = str(self) for b in self.blades(): x, y = b # pos/cols表示pos处于board的第几行 if pos/cols != (pos+x)/cols: return None i = pos + x + y * cols if i <0: continue elif cols*rows <=i: return none grid[i]=str(self) # 给相应的其他位置都“涂色”,比如对于方块,是o型的,那么pos肯定是有值的,pos位于有上角。。 grid 以下每个形状class,_orientations()都返回形状的列表。(0,0)一定被包含在其中,为了省略空间所以都没有写出. class o(block): color=(207,247,0) def _orientations(self): ( [(-1,0), (-1,1), (0,1)], ) i(block): (135,240,60) [(-2,0), (-1,0), (1,0)], [(0,-1), (0,1), (0,2)], s(block): (171,252,113) [(1,0), (1,0), (1,1)], z(block): (243,61,110) [(1,-1), l(block): (253,205,217) [(-1,1), (1,-1)], [(-1,-1), (0,-1), j(block): (140,180,225) [(0,1), (0,-1)], t(block): (229,251,113) )< pre>

更多俄罗斯方块精彩文章请点击专题:俄罗斯方块游戏集合 进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持html中文网。

以上就是python实现俄罗斯方块的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » python