日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

经典方块游戏-俄罗斯方块

發(fā)布時間:2023/12/15 综合教程 36 生活家
生活随笔 收集整理的這篇文章主要介紹了 经典方块游戏-俄罗斯方块 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、俄羅斯方塊類定義

  1 # -*- coding: utf-8 -*-
  2 
  3 from base import Base
  4 from point import Point
  5 from utils import *
  6 import random
  7 
  8 class Tetris(Base):
  9     __SHAPE_NUM = 7
 10     __FORM_NUM_PER_SHAPE = 4
 11     __SHAPE_S, __SHAPE_Z, __SHAPE_L, __SHAPE_J, __SHAPE_I, __SHAPE_O, __SHAPE_T = 0,1,2,3,4,5,6
 12     __FORM_A, __FORM_B, __FORM_C, __FORM_D = 0,1,2,3
 13     __SHIFT_TAB = (
 14         (
 15             ( (-1, -1), (0, -1), (0, 0), (1, 0) ), 
 16             ( (-1, 1), (-1, 0), (0, 0), (0, -1) ), 
 17             ( (-1, -1), (0, -1), (0, 0), (1, 0) ), 
 18             ( (-1, 1), (-1, 0), (0, 0), (0, -1) )
 19         ), # S
 20         (
 21             ( (1, -1), (0, -1), (0, 0), (-1, 0) ), 
 22             ( (1, 1), (1, 0), (0, 0), (0, -1) ), 
 23             ( (1, -1), (0, -1), (0, 0), (-1, 0) ), 
 24             ( (1, 1), (1, 0), (0, 0), (0, -1) )
 25         ), # Z
 26         (
 27             ( (1, -1), (0, -1), (0, 0), (0, 1) ), 
 28             ( (-1, -1), (-1, 0), (0, 0), (1, 0) ), 
 29             ( (-1, 1), (0, 1), (0, 0), (0, -1) ), 
 30             ( (1, 1), (1, 0), (0, 0), (-1, 0) )
 31         ), # L
 32         (
 33             ( (-1, -1), (0, -1), (0, 0), (0, 1) ), 
 34             ( (-1, 1), (-1, 0), (0, 0), (1, 0) ), 
 35             ( (1, 1), (0, 1), (0, 0), (0, -1) ), 
 36             ( (1, -1), (1, 0), (0, 0), (-1, 0) )
 37         ), # J
 38         (
 39             ( (0, 2), (0, 1), (0, 0), (0, -1) ), 
 40             ( (2, 0), (1, 0), (0, 0), (-1, 0) ), 
 41             ( (0, 2), (0, 1), (0, 0), (0, -1) ), 
 42             ( (2, 0), (1, 0), (0, 0), (-1, 0) )
 43         ), # I
 44         (
 45             ( (1, -1), (0, -1), (0, 0), (1, 0) ), 
 46             ( (1, -1), (0, -1), (0, 0), (1, 0) ), 
 47             ( (1, -1), (0, -1), (0, 0), (1, 0) ), 
 48             ( (1, -1), (0, -1), (0, 0), (1, 0) )
 49         ), # O
 50         (
 51             ( (0, -1), (-1, 0), (0, 0), (1, 0) ), 
 52             ( (0, -1), (-1, 0), (0, 0), (0, 1) ), 
 53             ( (0, 1), (-1, 0), (0, 0), (1, 0) ), 
 54             ( (0, -1), (1, 0), (0, 0), (0, 1) )
 55         ) # T
 56     )
 57     
 58     def __init__(self):
 59         Base.__init__(self)
 60         self._point = self._get_start_point()
 61         self._shape = self._get_shape()
 62         self._form = self._get_form()
 63         self._next_shape = self._get_shape()
 64         self._form = self._get_form()
 65     
 66     def _get_shape(self):
 67         return random.randint(0, self.__SHAPE_NUM - 1)
 68     
 69     def _get_form(self):
 70         return random.randint(0, self.__FORM_NUM_PER_SHAPE - 1)
 71         
 72     def _get_start_point(self):
 73         base_x, base_y = int(Base.width() / 2), Base.height()
 74         
 75         if (self._shape == self.__SHAPE_L and self.__form == self.__FORM_D) or 
 76            (self._shape == self.__SHAPE_J and self.__form == self.__FORM_B) or 
 77            (self._shape == self.__SHAPE_T and self.__form == self.__FORM_C) or 
 78            (self._shape == self.__SHAPE_I and (self.__form == self.__FORM_B or self.__form == self.__FORM_B)):
 79             return Point(base_x, base_y)
 80         return Point(base_x, base_y + 1)
 81     
 82     def _get_shape_points(self):
 83         return ( Point(self._point.x + shift_x, self._point.y + shift_y) for shift_x,shift_y in self.__SHIFT_TAB[self._shape][self._form] )
 84         
 85     def _fall(self):
 86         if self._status != Status.Running:
 87             return
 88             
 89         self._clear_shape_in_area()
 90         self._point.y -= 1
 91         if self._check_shape():
 92             
 93             return
 94         else:
 95             
 96         
 97     def _check_shape(self):
 98         shape_points = self._get_shape_points()
 99         for point in shape_points:
100             if not Base.check_point_in_area(point):
101                 return False
102             if self._area[point.x][point.y] != Block.Empty:
103                 return False
104         return True
105     
106     def _clear_shape_in_area(self):
107         shape_points = self._get_shape_points()
108         for point in shape_points:
109             if Base.check_point_in_area(point):
110                 self._area[point.x][point.y] = Block.Empty
111     
112     def _set_shape_in_area(self):
113         shape_points = self._get_shape_points()
114         for point in shape_points:
115             if Base.check_point_in_area(point):
116                 self._area[point.x][point.y] = Block.Fill
117     
118     def _clear_rows(self):
119         
120     
121 if __name__ == '__main__':
122     tetris = Tetris()
123     print(tetris)

tetris.py

總結

以上是生活随笔為你收集整理的经典方块游戏-俄罗斯方块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。