#作者:公众号:湾区人工智能


#时间:2018年

引入各种库函数

import sys, random
from PyQt5.QtWidgets import QApplication, QDesktopWidget, QHBoxLayout, QVBoxLayout, QLabel, \QPushButton, QFrame, QLCDNumber, QSliderfrom PyQt5.QtGui import QIcon, QPainter, QPen, QBrush, QColor, QFont
from PyQt5.QtCore import Qt, QBasicTimer

定义一个形状类


# 形状
class Shape:def __init__(self):# 19种形状:tuple参数分别代表:(形状代号,左、右、上、下边缘距离,类型)self.num = 19self.type1 = 1self.type2 = 2self.type3 = 3self.type4 = 4self.type5 = 5self.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 = 23self.__num_x = 25self.__time_step = 400self.__initPara()self.__initUI()self.__initNet()self.setFocusPolicy(Qt.StrongFocus)# 初始化参数def __initPara(self):self.__score = 0self.__level = 0self.__timer = QBasicTimer()self.__FACTOR = 4 / 5self.__FACTOR_SCREEN = 0.6self.__canvas_w = self.geometry().width() * self.__FACTORself.__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 = Falseself.__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_SCREENheight = screen.height() * self.__FACTOR_SCREENx0 = screen.width() * (1 - self.__FACTOR_SCREEN) / 2y0 = screen.height() * (1 - self.__FACTOR_SCREEN) / 2self.setGeometry(x0, y0, width, height)self.__canva_w = self.geometry().width() * self.__FACTORself.__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("Russian Block")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 Overdef __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.__FACTORself.__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 overif self.__gameOverFlag:self.__gameOverFlag = Falseself.__gameOver(qp, self.__canva_w / 4, self.__canva_h / 2)qp.end()# timerdef 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 += 1self.__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 = Trueelse: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):passelse: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 Falsepos = block.getPos()for p in pos:if p[1] < 1:passelif not self.__net[p[1] - 1 + step_y][p[0] - 1 + step_x] == 0:return Falsereturn 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):passself.__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 / 2y_loca = y * szy - szy / 2# Brushbrush = QBrush(color)brush.setStyle(Qt.SolidPattern)qp.setBrush(brush)qp.drawRect(x_loca, y_loca, szx, szy)# Penpen = 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() * 10if self.__stop_btn.isEnabled() & self.__pause_btn.isEnabled():self.start()# 设置Xnumdef __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 Numdef __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():passelse: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 = xself.__y = yself.__color = colorself.__shape = shapeself.__sha = mshape# 返回四个块的中心坐标def getPos(self):x1 = x2 = x3 = x4 = self.__xy1 = y2 = y3 = y4 = self.__yif self.__shape[0] == self.__sha.hL[0]:x2 = x1 + 1x3 = x2 + 1x4 = x3 + 1elif self.__shape[0] == self.__sha.vL[0]:y2 = y1 + 1y3 = y2 + 1y4 = y3 + 1elif self.__shape[0] == self.__sha.S[0]:y2 = y1 + 1x3 = x1 + 1x4 = x3y4 = y2elif self.__shape[0] == self.__sha.lZ[0]:x2 = x1 + 1x3 = x2y3 = y2 + 1x4 = x3 + 1y4 = y3elif self.__shape[0] == self.__sha.ruZ[0]:y2 = y1 + 1x3 = x1 + 1y3 = y1 - 1x4 = x1 + 1elif self.__shape[0] == self.__sha.luZ[0]:y2 = y1 + 1x3 = x1 + 1y3 = y2x4 = x3y4 = y3 + 1elif self.__shape[0] == self.__sha.rZ[0]:x2 = x1 + 1y2 = y1 - 1x3 = x2y3 = y2 + 1x4 = x3 + 1y4 = y2elif self.__shape[0] == self.__sha.lvuF[0]:x2 = x1 + 1x3 = x4 = x2y3 = y2 + 1y4 = y3 + 1elif self.__shape[0] == self.__sha.rvuF[0]:x2 = x1 + 1y3 = y2 + 1y4 = y3 + 1elif self.__shape[0] == self.__sha.lhdF[0]:y2 = y1 + 1x3 = x1 + 1x4 = x3 + 1elif self.__shape[0] == self.__sha.rhdF[0]:x2 = x1 + 1x3 = x2 + 1x4 = x3y4 = y3 + 1elif self.__shape[0] == self.__sha.rvdF[0]:y2 = y1 + 1y3 = y2 + 1x4 = x3 + 1y4 = y3elif self.__shape[0] == self.__sha.lvdF[0]:x2 = x1 + 1y2 = y1 - 2x3 = x4 = x2y3 = y1 - 1y4 = y1elif self.__shape[0] == self.__sha.rhuF[0]:x2 = x1 + 1x3 = x2 + 1x4 = x3y4 = y3 - 1elif self.__shape[0] == self.__sha.lhuF[0]:y2 = y1 + 1x3 = x2 + 1x4 = x3 + 1y3 = y4 = y2elif self.__shape[0] == self.__sha.uW[0]:x2 = x1 + 1x3 = x2x4 = x3 + 1y2 = y1 - 1elif self.__shape[0] == self.__sha.dW[0]:x2 = x1 + 1x3 = x2x4 = x3 + 1y3 = y2 + 1elif self.__shape[0] == self.__sha.lW[0]:x2 = x1 + 1x4 = x3 = x2y2 = y1 - 1y3 = y2 + 1y4 = y3 + 1elif self.__shape[0] == self.__sha.rW[0]:y2 = y1 + 1y3 = y2 + 1y4 = y2x4 = x1 + 1return [(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 = xself.__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):# type1if 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)# type2elif self.__shape[-1] == self.__sha.type2:pass# type3elif 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)# type4elif 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)# type5elif 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_())

最后运行程序,得到如图的游戏界面,玩起来很爽,

完整代码可以在公众号:湾区人工智能

里面回复:俄罗斯方块

或者加微信:AI_SHENZHEN

1

1

1

Python设计俄罗斯方块相关推荐

  1. python设计俄罗斯方块游戏流程图_python实现俄罗斯方块游戏(改进版)

    本文为大家分享了python实现俄罗斯方块游戏,继上一篇的改进版,供大家参考,具体内容如下 1.加了方块预览部分 2.加了开始按钮 在公司实习抽空写的,呵呵.觉得Python还不错,以前觉得像个玩具语 ...

  2. python下俄罗斯方块的游戏设计_[源码和文档分享]基于Python的PyGame的俄罗斯方块游戏设计与实现...

    摘 要 近年来,随着游戏产业的突飞猛进,游戏玩家的技术也是与日俱增,当你看见游戏高手完美的表演时,你是否想过我也能达到那种水平,本程序用Python语言编写俄罗斯方块,左侧显示正在运行的游戏,右边显示 ...

  3. 基于Python的俄罗斯方块游戏设计与实现 报告+项目源码

    资源下载地址:https://download.csdn.net/download/sheziqiong/85630943 资源下载地址:https://download.csdn.net/downl ...

  4. Python 精美俄罗斯方块开源项目

    最近想找一些Python相关的游戏开发例子,正好在itch.io上闲逛看到这个俄罗斯方块项目,瞬间被惊艳到了.作者是 Mikhail ,项目地址是: tetris_for_two: https://g ...

  5. Python实现俄罗斯方块

    目录 1.外形设计 2.方块设计 3.停靠设计 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊,等真正写完了发现 ...

  6. python界面设计-手把手教你用Python设计一个简单的命令行界面

    原标题:手把手教你用Python设计一个简单的命令行界面 对 Python 程序来说,完备的命令行界面可以提升团队的工作效率,减少调用时可能碰到的困扰.今天,我们就来教大家如何设计功能完整的 Pyth ...

  7. python经典小游戏-用Python设计一个经典小游戏:猜大小

    码农那点事儿 关注我们,一起学习进步 本文主要介绍如何用Python设计一个经典小游戏:猜大小. 游戏规则: 初始本金是1000元,默认赔率是1倍,赢了,获得一倍金额,输了,扣除1倍金额. 玩家选择下 ...

  8. python游戏-零基础python教程-用Python设计你的第一个小游戏

    学以致用,今天给大家分享零基础Python设计你的第一个小游戏,既然要学习Python就要让它来实现我们想做的东西,这次咱就用Python来做个简单小游戏,在实践中不断成长.刚学习Python的小伙伴 ...

  9. 20行python代码的入门级小游戏-用Python设计一个经典小游戏

    本文主要介绍如何用Python设计一个经典小游戏:猜大小. 在这个游戏中,将用到前面我介绍过的所有内容:变量的使用.参数传递.函数设计.条件控制和循环等,做个整体的总结和复习. 游戏规则: 初始本金是 ...

最新文章

  1. Scala教程之:Scala基础
  2. sap.ca.scfld.md.ComponentBase.extend
  3. java 跳转action_JS 跳转到指定Action | 学步园
  4. hdu5693 D gamehdu 5712 D++ game
  5. 调整 Windows系统参数网址
  6. 数学归类你倾向于哪一方?
  7. 最方便的字符设备驱动的写法
  8. SAP License:SAP安装前添加虚拟网卡步骤
  9. Docker之旅:了解Swarm集群
  10. 问道神兵天降服务器维护,问道12月29日全区更新维护1.473公告(转聊吧)
  11. ora创建物化视图 11g版本
  12. 强人Hibernate文档笔记(下)
  13. PHP100视频解压密码以及目录
  14. kuangbin字典树
  15. 电阻式触摸屏的基本结构和驱动原理
  16. 题9.6:13个人围成一圈, 从第1个人开始顺序报号1, 2, 3。凡报到3者退出圈子。找出最后 留在圈子中的人原来的序号。要求用链表实现。
  17. C语言程序设计预备作业
  18. 优化 | 浅谈旅行商(TSP)的七种整数规划模型
  19. c程序设计总结(红皮书+真题)
  20. win7中USB音箱没有声音解决办法

热门文章

  1. 某度翻译-逆向参数解析
  2. 没想到,中国邮政卖奶茶:一铺开就是全国第一
  3. java画球_我的世界 如何用指令画球 JAVA 1.13+
  4. 关于C语言编译器提示[Error] Id returned 1 exit status的原因
  5. 畅想未来计算机的绘画作品小学生,畅想未来儿童画绘画作品
  6. Java设计模式之外观模式
  7. 第二十章 Caché 命令大全 QUIT 命令
  8. vue 页面长时间静止不动,触发自动退出事件
  9. Matlab之求导篇
  10. PIC16F887 单片机 PROTEUS 仿真 C程序 模拟电话拨号计算器 密码锁