import pygame
from pygame.locals import *
from sys import exit
import random
# 初始化 专业_小鸟
pygame.init()
# 常量
MAX_I = 34 # 让地图预留4行作为放入方块的地方
MAX_J = 15
SIZE = 15
COLORS = [(0, 0, 0), (255, 0, 0), (0, 255, 0), (0, 0, 255), (255, 255, 0), (255, 255, 255)]
gameMap = [[0 for j in range(MAX_J + 3)] for i in range(MAX_I + 3)] # 全局地图
tetrisHeight = 0 # 塔高
# 基本方块
tetrises = [
[
[1, 0, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[1, 0, 0, 0],
[1, 1, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 0]
],
[
[0, 1, 0, 0],
[1, 1, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 1, 0, 0],
[1, 1, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
],
[
[1, 0, 0, 0],
[1, 1, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 0, 1, 0],
[1, 1, 1, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
]
# 分数
score = 0
# 等级
level = 1
# 音乐开关
isMusic = True
# 游戏暂停
isPause = False
# 播放音乐
def playMyMusic(src):
if isMusic:
sound = pygame.mixer.Sound(src)
sound.play()
# 方块类
class Tetris:
__i = 0
__j = 0
__color = 0
__nextColor = 0
__nextType = 0
def __init__(self):
self.__nextColor = random.randint(0, 3) + 1 # 一共四种颜色
self.__nextType = random.randint(0, 6) # 一共七种类型
self.createTetris()
def createTetris(self):
# 根据类型调整一下快出现的位置
if self.__nextType == 0:
self.__i = 1
self.__j = 7
else:
self.__i = 2
self.__j = 6
self.__color = self.__nextColor
# 根据方块模板,放置整个到地图
for i in range(4):
for j in range(4):
if tetrises[self.__nextType][i][j] == 1:
if gameMap[self.__i + i][self.__j + j] == 0:
gameMap[self.__i + i][self.__j + j] = self.__color
else:
print('游戏失败!')
exit()
return -1
# 产生下一种类型和颜色
self.__nextColor = random.randint(0, 3) + 1 # 一共四种颜色
self.__nextType = random.randint(0, 6) # 一共七种类型
playMyMusic('music/get.wav')
def moveDown(self):
global gameMap
# 判断是否可以下移
for j in range(4):
for i in range(3, -1, -1):
if gameMap[self.__i + i][self.__j + j] == self.__color:
# 判断是否到底
if self.__i + i + 1 > MAX_I:
return 1
# 判断前面是否有东西
if gameMap[self.__i + i + 1][self.__j + j] != 0:
return 1
break
# 下移
for j in range(4):
for i in range(3, -1, -1):
if gameMap[self.__i + i][self.__j + j] == self.__color:
gameMap[self.__i + i][self.__j + j], gameMap[self.__i + i + 1][self.__j + j] = \
gameMap[self.__i + i + 1][self.__j + j], gameMap[self.__i + i][self.__j + j]
self.__i += 1
def stopTetris(self):
global tetrisHeight
flag = True
for i in range(4):
for j in range(4):
if gameMap[self.__i + i][self.__j + j] == self.__color:
gameMap[self.__i + i][self.__j + j] += 10
# 找到第一个颜色方块
if flag:
tetrisHeight = MAX_I - self.__i if tetrisHeight < MAX_I - self.__i else tetrisHeight
flag = False
self.deleteRow()
def moveLeft(self):
# 判断是否能够左移
for i in range(4):
for j in range(4):
if gameMap[self.__i + i][self.__j + j] == self.__color:
if self.__j + j - 1 < 0:
return 1
if gameMap[self.__i + i][self.__j + j - 1] != 0:
return 1
break
# 左移
for i in range(4):
for j in range(4):
if gameMap[self.__i + i][self.__j + j] == self.__color:
gameMap[self.__i + i][self.__j + j], gameMap[self.__i + i][self.__j + j - 1] = \
gameMap[self.__i + i][self.__j + j - 1], gameMap[self.__i + i][self.__j + j]
self.__j -= 1
def moveRight(self):
# 判断是否能右移
for i in range(4):
for j in range(3, -1, -1):
if gameMap[self.__i + i][self.__j + j] == self.__color:
if self.__j + j + 1 >= MAX_J:
return 1
if gameMap[self.__i + i][self.__j + j + 1] != 0:
return 1
break
# 右移
for i in range(4):
for j in range(3, -1, -1):
if gameMap[self.__i + i][self.__j + j] == self.__color:
gameMap[self.__i + i][self.__j + j], gameMap[self.__i + i][self.__j + j + 1] = \
gameMap[self.__i + i][self.__j + j + 1], gameMap[self.__i + i][self.__j + j]
self.__j += 1
def change(self):
tMap = [[0 for j in range(4)] for i in range(4)]
# 将所有方块顺时针旋转90度赋值到 tMap 中
i = 0
k = 3
while i < 4:
for j in range(4):
if MAX_I > self.__i + j >= 0 and MAX_J > self.__j + k >= 0 and gameMap[self.__i + j][
self.__j + k] == 0 or \
gameMap[self.__i + j][self.__j + k] == self.__color:
tMap[j][k] = gameMap[self.__i + i][self.__j + j]
else:
return
i += 1
k -= 1
# 赋值
for i in range(4):
for j in range(4):
gameMap[self.__i + i][self.__j + j] = tMap[i][j]
playMyMusic('music/change.wav')
def deleteRow(self):
# 找到有方块的最后一行
lastRow = 0
t = False
for i in range(3, -1, -1):
for j in range(4):
if gameMap[self.__i + i][self.__j + j] == self.__color + 10:
lastRow = self.__i + i
t = True
break
if t:
break
for i in range(lastRow, MAX_I - tetrisHeight - 1, -1):
for j in range(MAX_J):
if gameMap[i][j] == 0:
break
else:
global score
score += 10
playMyMusic('music/delete.wav')
# 删除行
gameMap.pop(i)
gameMap.insert(0, [0 for j in range(MAX_J + 3)])
# 增加等级
global level
level += score // 1000
# 再次调用删除行函数操作删行
self.deleteRow()
def nextTetris(self):
return self.__nextType, self.__nextColor
# 全局变量
screen = '' # 屏幕
gameTetris = Tetris()
# 绘制游戏地图
def drawMap():
# 画上边框
for i in range(MAX_I - 4):
# 画右边
myRect(screen, COLORS[2], [0, i * SIZE, SIZE, SIZE])
# 画左边
myRect(screen, COLORS[2], [(MAX_J + 1) * SIZE, i * SIZE, SIZE, SIZE])
# 画下面
for i in range(MAX_J + 2):
myRect(screen, COLORS[2], [i * SIZE, (MAX_I - 4) * SIZE, SIZE, SIZE])
# 给地图涂色
for i in range(4, MAX_I):
for j in range(MAX_J):
t
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于Python的俄罗斯方块游戏设计与实现(高分毕业设计项目).zip 该项目是个人高分毕业设计项目源码,评审分达到95分以上,都经过严格调试确保可以运行!放心下载使用,小白也可实战。 基于Python的俄罗斯方块游戏设计与实现(高分毕业设计项目).zip 该项目是个人高分毕业设计项目源码,评审分达到95分以上,都经过严格调试确保可以运行!放心下载使用,小白也可实战。基于Python的俄罗斯方块游戏设计与实现(高分毕业设计项目).zip 该项目是个人高分毕业设计项目源码,评审分达到95分以上,都经过严格调试确保可以运行!放心下载使用,小白也可实战。基于Python的俄罗斯方块游戏设计与实现(高分毕业设计项目).zip 该项目是个人高分毕业设计项目源码,评审分达到95分以上,都经过严格调试确保可以运行!放心下载使用,小白也可实战。基于Python的俄罗斯方块游戏设计与实现(高分毕业设计项目).zip 该项目是个人高分毕业设计项目源码,评审分达到95分以上,都经过严格调试确保可以运行!放心下载使用,小白也可实战。基于Python的俄罗斯方块游戏设计与实现(高分毕业
资源推荐
资源详情
资源评论
收起资源包目录
基于Python的俄罗斯方块游戏设计与实现 (1).zip (7个子文件)
基于Python的俄罗斯方块游戏设计与实现
xiaoguo.png 50KB
music
change.wav 40KB
get.wav 207KB
delete.wav 50KB
bgm.mp3 5.51MB
font
SIMYOU.TTF 6.39MB
main.py 14KB
共 7 条
- 1
资源评论
盈梓的博客
- 粉丝: 6839
- 资源: 1245
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功