zoukankan      html  css  js  c++  java
  • 福利来啦,送给大家一个小游戏的源码,不要错过哟

    从小到大玩过很多的游戏,在我小时候,能玩游戏的地方不多,那时玩游戏都是偷摸玩的,只要是个游戏就觉得非常有趣,比较经典的有魂斗罗,拳皇,超级玛丽,贪吃蛇,俄罗斯方块等游戏;发展到现在,玩游戏已经成为生活的一部分了,尤其是现在的很多游戏都已经网络社交化了,游戏种类也更加丰富了,没事大家一起组队玩个游戏还是很有趣的事情。

    今天给大家带来的就是俄罗斯方块小游戏

    先给大家看看游戏的试玩效果图

     

    import sys, random
    from PyQt5.QtWidgets import QApplication, QDesktopWidget, QHBoxLayout, QVBoxLayout, QLabel, 
        QPushButton, QFrame, QLCDNumber, QSlider
    
    from PyQt5.QtGui import QIcon, QPainter, QPen, QBrush, QColor, QFont
    from PyQt5.QtCore import Qt, QBasicTimer
    
    
    # 形状
    class Shape:
        def __init__(self):
            # 19种形状:tuple参数分别代表:(形状代号,左、右、上、下边缘距离,类型)
            self.num = 19
            self.type1 = 1
            self.type2 = 2
            self.type3 = 3
            self.type4 = 4
            self.type5 = 5
            self.vL = (1, 0, 0, 0, 3, self.type1)
            self.hL = (2, 0, 3, 0, 0, self.type1)
            self.S = (3, 0, 1, 0, 1, self.type2)
            self.lZ = (4, 0, 2, 0, 1, self.type3)
            self.ruZ = (5, 0, 1, 1, 1, self.type3)
            self.rZ = (6, 0, 2, 1, 0, self.type3)
            self.luZ = (7, 0, 1, 0, 2, self.type3)
            self.lvuF = (8, 0, 1, 0, 2, self.type4)
            self.rvuF = (9, 0, 1, 0, 2, self.type4)
            self.lhdF = (10, 0, 2, 0, 1, self.type4)
            self.rhdF = (11, 0, 2, 0, 1, self.type4)
            self.rvdF = (12, 0, 1, 0, 2, self.type4)
            self.lvdF = (13, 0, 1, 2, 0, self.type4)
            self.rhuF = (14, 0, 2, 1, 0, self.type4)
            self.lhuF = (15, 0, 2, 0, 1, self.type4)
            self.uW = (16, 0, 2, 1, 0, self.type5)
            self.dW = (17, 0, 2, 0, 1, self.type5)
            self.lW = (18, 0, 1, 1, 1, self.type5)
            self.rW = (19, 0, 1, 0, 2, self.type5)
            self.name = (
                (1, 0, 0, 0, 3, self.type1), (2, 0, 3, 0, 0, self.type1),
                (3, 0, 1, 0, 1, self.type2), (4, 0, 2, 0, 1, self.type3),
                (6, 0, 2, 1, 0, self.type3), (7, 0, 1, 0, 2, self.type3),
                (5, 0, 1, 1, 1, self.type3), (8, 0, 1, 0, 2, self.type4),
                (13, 0, 1, 2, 0, self.type4), (9, 0, 1, 0, 2, self.type4),
                (12, 0, 1, 0, 2, self.type4),
                (15, 0, 2, 0, 1, self.type4), (10, 0, 2, 0, 1, self.type4),
                (14, 0, 2, 1, 0, self.type4), (11, 0, 2, 0, 1, self.type4),
                (16, 0, 2, 1, 0, self.type5), (17, 0, 2, 0, 1, self.type5),
                (18, 0, 1, 1, 1, self.type5),
                (19, 0, 1, 0, 2, self.type5))
    
            self.color = (QColor(250, 150, 50), QColor(100, 100, 100), QColor(100, 150, 150), QColor(150, 100, 100))
            self.num_col = len(self.color)
    
    
    # Game
    class Game:
        def __init__(self):
            self.__board = Board()
    
    
    # 界面
    class Board(QFrame):
        def __init__(self):
            super().__init__()
            self.__num_y = 23
            self.__num_x = 25
            self.__time_step = 400
    
            self.__initPara()
            self.__initUI()
            self.__initNet()
            self.setFocusPolicy(Qt.StrongFocus)
    
        # 初始化参数
        def __initPara(self):
            self.__score = 0
            self.__level = 0
            self.__timer = QBasicTimer()
            self.__FACTOR = 4 / 5
            self.__FACTOR_SCREEN = 0.6
            self.__canvas_w = self.geometry().width() * self.__FACTOR
            self.__canvas_h = self.geometry().height()
            self.__szy = int(self.__canvas_h / self.__num_y)
            self.__szx = int(self.__canvas_w / self.__num_x)
            self.__gameOverFlag = False
            self.__net = []
    
            self.__mshape = Shape()
            self.__block = Block(1, 1, self.__mshape.name[random.randint(0, self.__mshape.num - 1)], self.__mshape,
                                 self.__mshape.color[random.randint(0, self.__mshape.num_col - 1)])
    
        # 初始化网格列表
        def __initNet(self):
            self.__net = [[0 for j in range(self.__num_x - 1)] for j in range(self.__num_y - 1)]
    
        # 初始化界面
        def __initUI(self):
            hb1 = QHBoxLayout()
            score_info_la = QLabel('Score: ')
            self.__score_la = QLabel('0')
            hb1.addWidget(score_info_la)
            hb1.addWidget(self.__score_la)
            hb1.addStretch(1)
    
            hb2 = QHBoxLayout()
            level_info_la = QLabel('Level: ')
            self.__level_la = QLabel('0')
            hb2.addWidget(level_info_la)
            hb2.addWidget(self.__level_la)
            hb2.addStretch(1)
    
            self.__speed_la = QLabel()
            self.__speed_la.setText(str((1010 - self.__time_step) / 10))
            self.__speed_label = QLabel('Speed:')
            self.__sd_slider = QSlider()
            self.__sd_slider.setOrientation(Qt.Horizontal)
            self.__sd_slider.setMaximum(1)
            self.__sd_slider.setMaximum(100)
            self.__sd_slider.setValue(int((1010 - self.__time_step) / 10))
            self.__sd_slider.valueChanged.connect(self.__LineEdt)
    
            hb3 = QHBoxLayout()
            hb3.addWidget(self.__speed_label)
            hb3.addWidget(self.__speed_la)
            hb2.addStretch(1)
    
            x_num_la = QLabel('X number:')
            self.__x_num_la_show = QLabel()
            self.__x_num_la_show.setText(str(self.__num_x - 1))
            hb12 = QHBoxLayout()
            hb12.addWidget(x_num_la)
            hb12.addWidget(self.__x_num_la_show)
            hb12.addStretch(1)
    
            self.__x_num_sl = QSlider(Qt.Horizontal, self)
            self.__x_num_sl.setMaximum(100)
            self.__x_num_sl.setMinimum(1)
            self.__x_num_sl.setValue(self.__num_x - 1)
            self.__x_num_sl.valueChanged.connect(self.__setXNum)
    
            y_num_la = QLabel('Y number:')
            self.__y_num_la_show = QLabel()
            self.__y_num_la_show.setText(str(self.__num_y - 1))
            hb13 = QHBoxLayout()
            hb13.addWidget(y_num_la)
            hb13.addWidget(self.__y_num_la_show)
            hb13.addStretch(1)
    
            self.__y_num_sl = QSlider(Qt.Horizontal, self)
            self.__y_num_sl.setMinimum(1)
            self.__y_num_sl.setMaximum(100)
            self.__y_num_sl.setValue(self.__num_y - 1)
            self.__y_num_sl.valueChanged.connect(self.__setYNum)
    
            self.__st_btn = QPushButton('Start')
            self.__st_btn.setEnabled(True)
            hb7 = QHBoxLayout()
            hb7.addWidget(self.__st_btn)
            hb7.addStretch(1)
    
            self.__stop_btn = QPushButton('Stop')
            self.__stop_btn.setEnabled(True)
            hb8 = QHBoxLayout()
            hb8.addWidget(self.__stop_btn)
            hb8.addStretch(1)
    
            self.__pause_btn = QPushButton('Pause')
            self.__pause_btn.setEnabled(True)
            hb9 = QHBoxLayout()
            hb9.addWidget(self.__pause_btn)
            hb9.addStretch(1)
    
            self.__new_btn = QPushButton('New Game')
            self.__new_btn.setEnabled(True)
            hb10 = QHBoxLayout()
            hb10.addWidget(self.__new_btn)
            hb10.addStretch(1)
    
            self.__exit_btn = QPushButton('Exit')
            self.__exit_btn.setEnabled(True)
            hb11 = QHBoxLayout()
            hb11.addWidget(self.__exit_btn)
            hb11.addStretch(1)
    
            self.__new_btn.clicked.connect(self.__newGameBtnAction)
            self.__st_btn.clicked.connect(self.__stBtnAction)
            self.__stop_btn.clicked.connect(self.__stopBtnAction)
            self.__pause_btn.clicked.connect(self.__pauseBtnAction)
            self.__exit_btn.clicked.connect(self.close)
    
            self.__lcd = QLCDNumber()
            self.__lcd.setMinimumSize(100, 100)
            hb4 = QHBoxLayout()
            hb4.addWidget(self.__lcd)
            hb4.addStretch(1)
    
            vb = QVBoxLayout()
            vb.addLayout(hb1)
            vb.addLayout(hb2)
            vb.addLayout(hb4)
            vb.addStretch(1)
            vb.addLayout(hb3)
            vb.addWidget(self.__sd_slider)
            vb.addLayout(hb7)
            vb.addLayout(hb8)
            vb.addLayout(hb9)
            vb.addStretch(1)
            vb.addLayout(hb12)
            vb.addWidget(self.__x_num_sl)
            vb.addLayout(hb13)
            vb.addWidget(self.__y_num_sl)
            vb.addLayout(hb10)
            vb.addStretch(10)
            vb.addLayout(hb11)
    
            hb5 = QHBoxLayout()
            hb5.addStretch(1)
            hb5.addLayout(vb)
    
            self.setLayout(hb5)
            screen = QDesktopWidget().screenGeometry()
            width = screen.width() * self.__FACTOR_SCREEN
            height = screen.height() * self.__FACTOR_SCREEN
            x0 = screen.width() * (1 - self.__FACTOR_SCREEN) / 2
            y0 = screen.height() * (1 - self.__FACTOR_SCREEN) / 2
    
            self.setGeometry(x0, y0, width, height)
            self.__canva_w = self.geometry().width() * self.__FACTOR
            self.__canva_h = self.geometry().height()
            self.__szx = int(self.__canva_w / self.__num_x)
            self.__szy = int(self.__canva_h / self.__num_y)
    
            self.setWindowTitle("Python知识交流群695185429")
            self.setWindowIcon(QIcon('example.png'))
            self.show()
    
        # 绘制网格
        def __drawNetGrid(self, qp):
            pen = QPen(Qt.lightGray, 1, Qt.DashLine)
            qp.setPen(pen)
            for i in range(self.__num_y):
                qp.drawLine(int(self.__szx / 2), int(i * self.__szy + self.__szy / 2),
                            int(self.__num_x * self.__szx - self.__szx / 2), int(i * self.__szy + self.__szy / 2))
            for i in range(self.__num_x):
                qp.drawLine(int(i * self.__szx + self.__szx / 2), int(self.__szy / 2),
                            int(i * self.__szx + self.__szx / 2),
                            int(self.__num_y * self.__szy - self.__szy / 2))
    
        # 提示Game Over
        def __gameOver(self, qp, x, y):
            pen = QPen(Qt.red)
            qp.setPen(pen)
            qp.setFont(QFont('Blackoak Std', 20))
            qp.drawText(x, y, self.__canva_w / 2, self.__canva_h / 2, True, 'Game Over!')
    
        # 类的自调用painter绘制函数
        def paintEvent(self, e):
            self.__canvas_w = self.geometry().width() * self.__FACTOR
            self.__canvas_h = self.geometry().height()
            self.__szx = int(self.__canvas_w / self.__num_x)
            self.__szy = int(self.__canvas_h / self.__num_y)
    
            qp = QPainter()
            qp.begin(self)
            self.__drawNetGrid(qp)  # 绘制网格
            # 绘制形状
            for i, eles in enumerate(self.__net):
                for j, ele in enumerate(eles):
                    if not ele == 0:
                        self.__drawRect(qp, j + 1, i + 1, self.__szx, self.__szy, ele)
            if self.__timer.isActive():
                self.__drawBlock(qp, self.__block, self.__szx, self.__szy)
    
            # game over
            if self.__gameOverFlag:
                self.__gameOverFlag = False
                self.__gameOver(qp, self.__canva_w / 4, self.__canva_h / 2)
            qp.end()
    
        # timer
        def timerEvent(self, e):
            if self.__isNextPosEmpty(self.__block, 0, 1):
                self.__moveBlock(0, 1)
            else:
                self.__refreshFullNet(self.__block)
                for k, ele in enumerate(self.__net):
                    if 0 not in ele:
                        self.__score += 1
                        self.__level += int(self.__score / 10)
                        self.__update_score()
                        self.__update_level()
                        for i in range(k):
                            self.__net[k - i] = self.__net[k - 1 - i]
                        self.__net[0] = [0 for i in range(self.__num_x - 1)]
    
                # 游戏结束
                if sum([1 for ele in self.__net[0] if not ele == 0]) > 0:
                    self.stop()
                    self.__st_btn.setEnabled(False)
                    self.__pause_btn.setEnabled(False)
                    self.__stop_btn.setEnabled(False)
                    self.__gameOverFlag = True
                else:
                    self.__block = self.__generateRandomBlock()
            self.update()
    
        # 键盘按键事件
        def keyPressEvent(self, e):
            key = e.key()
            x, y = self.__block.getXY()
            if key == Qt.Key_Left:
                if (x > 1) & self.__isNextPosEmpty(self.__block, -1, 0):
                    self.__block.setXY(x - 1, y)
            elif key == Qt.Key_Right:
                if self.__isNextPosEmpty(self.__block, +1, 0):
                    self.__block.setXY(x + 1, y)
            elif key == Qt.Key_Down:
                if self.__isNextPosEmpty(self.__block, 0, 2):
                    self.__block.setXY(x, y + 2)
            elif key == Qt.Key_Up:
                block = Block(self.__block.getXY()[0], self.__block.getXY()[1], self.__block.getShape(), self.__mshape,
                              self.__block.getColor())
                block.rota90()
                if (block.getDownBoun() > self.__num_y - 1) | (block.getLeftBoun() < 1) | (
                        block.getRightBoun() > self.__num_x - 1):
                    pass
                else:
                    self.__block.rota90()
            elif key == Qt.Key_P:
                if self.__timer.isActive():
                    self.stop()
                else:
                    self.start()
            self.update()
    
        # 窗口大小改变自动调用事件
        def resizeEvent(self, e):
            self.update()
    
        # 判占位列表是否空
        def __isNextPosEmpty(self, block, step_x, step_y):
            bot = block.getDownBoun()
            right = block.getRightBoun()
            if ((bot + step_y) > self.__num_y - 1) | ((step_x > 0) & ((right + step_x) > self.__num_x - 1)):
                return False
            pos = block.getPos()
            for p in pos:
                if p[1] < 1:
                    pass
                elif not self.__net[p[1] - 1 + step_y][p[0] - 1 + step_x] == 0:
                    return False
            return True
    
        # 更新占位列表
        def __refreshFullNet(self, block):
            for pos in block.getPos():
                if (pos[0] < 1) | (pos[1] < 1) | (pos[0] > self.__num_x - 1) | (pos[1] > self.__num_y - 1):
                    pass
                self.__net[pos[1] - 1][pos[0] - 1] = block.getColor()
    
        # 生成一个随机对象
        def __generateRandomBlock(self):
            num_sha = random.randint(0, self.__mshape.num - 1)
            sha = self.__mshape.name[num_sha]
            num_col = random.randint(0, self.__mshape.num_col - 1)
            color = self.__mshape.color[num_col]
    
            x = random.randint(1, self.__num_x)
            block = Block(x, 1, sha, self.__mshape, color)
            while block.getRightBoun() > (self.__num_x - 1):
                x = random.randint(1, self.__num_x)
                block = Block(x, 1, sha, self.__mshape, color)
            return block
    
        # 绘制方块
        def __drawRect(self, qp, x, y, szx, szy, color):
            x_loca = x * szx - szx / 2
            y_loca = y * szy - szy / 2
            # Brush
            brush = QBrush(color)
            brush.setStyle(Qt.SolidPattern)
            qp.setBrush(brush)
            qp.drawRect(x_loca, y_loca, szx, szy)
            # Pen
            pen = QPen(Qt.darkBlue, 2, Qt.SolidLine)
            qp.setPen(pen)
            qp.drawRect(x_loca, y_loca, szx, szy)
    
        # 绘制特定形状
        def __drawBlock(self, qp, block, szx, szy):
            color = block.getColor()
            pos = block.getPos()
            x1 = pos[0][0]
            y1 = pos[0][1]
            x2 = pos[1][0]
            y2 = pos[1][1]
            x3 = pos[2][0]
            y3 = pos[2][1]
            x4 = pos[3][0]
            y4 = pos[3][1]
            self.__drawRect(qp, x1, y1, szx, szy, color)
            self.__drawRect(qp, x2, y2, szx, szy, color)
            self.__drawRect(qp, x3, y3, szx, szy, color)
            self.__drawRect(qp, x4, y4, szx, szy, color)
    
        # 移动
        def __moveBlock(self, speed_x, speed_y):
            self.__block.setXY(self.__block.getXY()[0] + speed_x, self.__block.getXY()[1] + speed_y)
    
        # 更新成绩
        def __update_score(self):
            self.__score_la.setText(str(self.__score))
            self.__lcd.display(str(self.__score))
    
        # 更新等级
        def __update_level(self):
            self.__level_la.setText(str(self.__level))
    
        # 滑动条事件
        def __LineEdt(self):
            self.__speed_la.setText(str(self.__sd_slider.value()))
            self.__time_step = 1010 - self.__sd_slider.value() * 10
            if self.__stop_btn.isEnabled() & self.__pause_btn.isEnabled():
                self.start()
    
        # 设置Xnum
        def __setXNum(self):
            self.stop()
            self.__st_btn.setEnabled(False)
            self.__stop_btn.setEnabled(False)
            self.__pause_btn.setEnabled(False)
    
            self.__x_num_la_show.setText(str(self.__x_num_sl.value()))
            self.__num_x = self.__x_num_sl.value()
    
        # 设置Y Num
        def __setYNum(self):
            self.stop()
            self.__st_btn.setEnabled(False)
            self.__stop_btn.setEnabled(False)
            self.__pause_btn.setEnabled(False)
    
            self.__y_num_la_show.setText(str(self.__y_num_sl.value()))
            self.__num_y = self.__y_num_sl.value()
    
        # 开始按钮事件
        def __stBtnAction(self):
            if self.__timer.isActive():
                pass
            else:
                self.__st_btn.setEnabled(False)
                self.__stop_btn.setEnabled(True)
                self.__pause_btn.setEnabled(True)
                self.__timer.start(self.__time_step, self)
    
        # 停止按钮事件
        def __stopBtnAction(self):
            if self.__timer.isActive():
                self.__timer.stop()
            self.__st_btn.setEnabled(False)
            self.__pause_btn.setEnabled(False)
            self.__stop_btn.setEnabled(False)
            self.__timer.stop()
    
        # 暂停按钮事件
        def __pauseBtnAction(self):
            if self.__timer.isActive():
                self.__timer.stop()
            self.__st_btn.setEnabled(True)
            self.__pause_btn.setEnabled(False)
            self.__stop_btn.setEnabled(True)
    
        # 新游戏按钮事件
        def __newGameBtnAction(self):
            if self.__timer.isActive():
                self.stop()
            self.__initPara()
            self.__initNet()
            self.__st_btn.setEnabled(True)
            self.__pause_btn.setEnabled(True)
            self.__stop_btn.setEnabled(True)
            self.update()
            self.start()
    
        # 启动时间循环时间
        def start(self):
            self.__timer.start(self.__time_step, self)
    
        # 停止计时器
        def stop(self):
            self.__timer.stop()
    
    
    # 对象类
    class Block:
        def __init__(self, x, y, shape, mshape, color):
            self.__x = x
            self.__y = y
            self.__color = color
            self.__shape = shape
            self.__sha = mshape
    
        # 返回四个块的中心坐标
        def getPos(self):
            x1 = x2 = x3 = x4 = self.__x
            y1 = y2 = y3 = y4 = self.__y
            if self.__shape[0] == self.__sha.hL[0]:
                x2 = x1 + 1
                x3 = x2 + 1
                x4 = x3 + 1
            elif self.__shape[0] == self.__sha.vL[0]:
                y2 = y1 + 1
                y3 = y2 + 1
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.S[0]:
                y2 = y1 + 1
                x3 = x1 + 1
                x4 = x3
                y4 = y2
            elif self.__shape[0] == self.__sha.lZ[0]:
                x2 = x1 + 1
                x3 = x2
                y3 = y2 + 1
                x4 = x3 + 1
                y4 = y3
            elif self.__shape[0] == self.__sha.ruZ[0]:
                y2 = y1 + 1
                x3 = x1 + 1
                y3 = y1 - 1
                x4 = x1 + 1
            elif self.__shape[0] == self.__sha.luZ[0]:
                y2 = y1 + 1
                x3 = x1 + 1
                y3 = y2
                x4 = x3
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.rZ[0]:
                x2 = x1 + 1
                y2 = y1 - 1
                x3 = x2
                y3 = y2 + 1
                x4 = x3 + 1
                y4 = y2
            elif self.__shape[0] == self.__sha.lvuF[0]:
                x2 = x1 + 1
                x3 = x4 = x2
                y3 = y2 + 1
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.rvuF[0]:
                x2 = x1 + 1
                y3 = y2 + 1
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.lhdF[0]:
                y2 = y1 + 1
                x3 = x1 + 1
                x4 = x3 + 1
            elif self.__shape[0] == self.__sha.rhdF[0]:
                x2 = x1 + 1
                x3 = x2 + 1
                x4 = x3
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.rvdF[0]:
                y2 = y1 + 1
                y3 = y2 + 1
                x4 = x3 + 1
                y4 = y3
            elif self.__shape[0] == self.__sha.lvdF[0]:
                x2 = x1 + 1
                y2 = y1 - 2
                x3 = x4 = x2
                y3 = y1 - 1
                y4 = y1
            elif self.__shape[0] == self.__sha.rhuF[0]:
                x2 = x1 + 1
                x3 = x2 + 1
                x4 = x3
                y4 = y3 - 1
            elif self.__shape[0] == self.__sha.lhuF[0]:
                y2 = y1 + 1
                x3 = x2 + 1
                x4 = x3 + 1
                y3 = y4 = y2
            elif self.__shape[0] == self.__sha.uW[0]:
                x2 = x1 + 1
                x3 = x2
                x4 = x3 + 1
                y2 = y1 - 1
            elif self.__shape[0] == self.__sha.dW[0]:
                x2 = x1 + 1
                x3 = x2
                x4 = x3 + 1
                y3 = y2 + 1
            elif self.__shape[0] == self.__sha.lW[0]:
                x2 = x1 + 1
                x4 = x3 = x2
                y2 = y1 - 1
                y3 = y2 + 1
                y4 = y3 + 1
            elif self.__shape[0] == self.__sha.rW[0]:
                y2 = y1 + 1
                y3 = y2 + 1
                y4 = y2
                x4 = x1 + 1
            return [(x1, y1), (x2, y2), (x3, y3), (x4, y4)]
    
        # 返回边界
        def getLeftBoun(self):
            return self.__x - self.__shape[1]
    
        def getRightBoun(self):
            return self.__x + self.__shape[2]
    
        def getTopBoun(self):
            return self.__y - self.__shape[3]
    
        def getDownBoun(self):
            return self.__y + self.__shape[4]
    
        # 返回形状
        def getShape(self):
            return self.__shape
    
        # 返回颜色
        def getColor(self):
            return self.__color
    
        # 设置颜色
        def setColor(self, color):
            self.__color = color
    
        # 设置形状
        def setShape(self, shape):
            self.__shape = shape
    
        # 设置坐标
        def setXY(self, x, y):
            self.__x = x
            self.__y = y
    
        # 返回坐标
        def getXY(self):
            return [self.__x, self.__y]
    
        # 移动坐标
        def __movePos(self, step_x, step_y):
            self.setXY(self.__x + step_x, self.__y + step_y)
    
        # 旋转90度
        def rota90(self):
            # type1
            if self.__shape[-1] == self.__sha.type1:
                if self.__shape[0] == self.__sha.vL[0]:
                    self.setShape(self.__sha.hL)
                    self.__movePos(-1, 1)
                elif self.__shape[0] == self.__sha.hL[0]:
                    self.setShape(self.__sha.vL)
                    self.__movePos(1, -1)
            # type2
            elif self.__shape[-1] == self.__sha.type2:
                pass
            # type3
            elif self.__shape[-1] == self.__sha.type3:
                if self.__shape[0] == self.__sha.lZ[0]:
                    self.setShape(self.__sha.ruZ)
                elif self.__shape[0] == self.__sha.rZ[0]:
                    self.setShape(self.__sha.luZ)
                    self.__movePos(0, -1)
                elif self.__shape[0] == self.__sha.luZ[0]:
                    self.setShape(self.__sha.rZ)
                    self.__movePos(-1, 1)
                elif self.__shape[0] == self.__sha.ruZ[0]:
                    self.setShape(self.__sha.lZ)
                    self.__movePos(0, -1)
            # type4
            elif self.__shape[-1] == self.__sha.type4:
                if self.__shape[0] == self.__sha.lvuF[0]:
                    self.setShape(self.__sha.rhuF)
                    self.__movePos(0, 1)
                elif self.__shape[0] == self.__sha.lvdF[0]:
                    self.setShape(self.__sha.lhuF)
                    self.__movePos(0, -2)
                elif self.__shape[0] == self.__sha.rvuF[0]:
                    self.setShape(self.__sha.rhdF)
                    self.__movePos(-1, 1)
                elif self.__shape[0] == self.__sha.rvdF[0]:
                    self.setShape(self.__sha.lhdF)
                    self.__movePos(-1, 1)
                elif self.__shape[0] == self.__sha.lhuF[0]:
                    self.setShape(self.__sha.rvuF)
                    self.__movePos(1, 0)
                elif self.__shape[0] == self.__sha.lhdF[0]:
                    self.setShape(self.__sha.lvuF)
                    self.__movePos(0, -1)
                elif self.__shape[0] == self.__sha.rhuF[0]:
                    self.setShape(self.__sha.rvdF)
                    self.__movePos(1, -1)
                elif self.__shape[0] == self.__sha.rhdF[0]:
                    self.setShape(self.__sha.lvdF)
                    self.__movePos(0, 1)
            # type5
            elif self.__shape[-1] == self.__sha.type5:
                if self.__shape[0] == self.__sha.uW[0]:
                    self.setShape(self.__sha.rW)
                    self.__movePos(1, -1)
                elif self.__shape[0] == self.__sha.dW[0]:
                    self.setShape(self.__sha.lW)
                elif self.__shape[0] == self.__sha.lW[0]:
                    self.setShape(self.__sha.uW)
                elif self.__shape[0] == self.__sha.rW[0]:
                    self.setShape(self.__sha.dW)
                    self.__movePos(-1, +1)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        game = Game()
        sys.exit(app.exec_())

    赶快抓紧时间动起手来找回童年回忆!

  • 相关阅读:
    MySQL------代码1024,can't get hostname for your address解决方法
    MySQL------存储过程的使用
    MyEclipse------如何添加jspsmartupload.jar,用于文件上传
    JQuery------实现鼠标点击和滑动不同效果
    CSS------如何让div中的div处于右下角
    JQuery------制作div模态框
    CSS------Filter属性的使用方法
    python使用元类
    python __new__()分析
    centos自带python2.6升级到python2.7。并解决yum pip easy_install pip等模块兼容性问题
  • 原文地址:https://www.cnblogs.com/hhh188764/p/13095992.html
Copyright © 2011-2022 走看看