python实现简单俄罗斯方块游戏
本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下
import pygame,sys,random,timeall_block = [[[0,0],[0,-1],[0,1],[0,2]],[[0,0],[0,1],[1,1],[1,0]],[[0,0],[0,-1],[-1,0],[-1,1]], [[0,0],[0,1],[-1,-1],[-1,0]],[[0,0],[0,1],[1,0],[0,-1]], [[0,0],[1,0],[-1,0],[1,-1]],[[0,0],[1,0],[-1,0],[1,1]]] background = [[0 for column in range(0,10)] for row in range(0,22)]background[0] = [1 for column in range(0,10)]select_block = list(random.choice(all_block))block_initial_position = [21,5] times = 0score = [0]gameover = [] press = Falsepygame.init()screen = pygame.display.set_mode((250,500))title = pygame.display.set_caption("俄罗斯方块")#下落、位置、数组检测、得分、屏幕信息def block_move_down():y_drop=block_initial_position[0] x_move=block_initial_position[1]y_drop-=1 for row,column in select_block:row+=y_dropcolumn+=x_moveif background[row][column]==1:break else:block_initial_position.clear()block_initial_position.extend([y_drop,x_move])returny_drop,x_move=block_initial_positionfor row,column in select_block:background[y_drop+row][x_move+column]=1complete_row=[] for row in range(1,21):if 0 not in background[row]:complete_row.append(row)complete_row.sort(reverse=True)for row in complete_row:background.pop(row)background.append([0 for column in range(0,10)])score[0]+=len(complete_row)pygame.display.set_caption(str(score[0])+'分')select_block.clear()select_block.extend(list(random.choice(all_block))) block_initial_position.clear()block_initial_position.extend([20,5])y_drop,x_move=block_initial_positionfor row,column in select_block:row+=y_dropcolumn+=x_moveif background[row][column]:gameover.append(1)#方块设置、变化、背景改变def new_draw():y_drop,x_move=block_initial_positionfor row,column in select_block:row+=y_dropcolumn+=x_move pygame.draw.rect(screen,(255,165,0),(column*25,500-row*25,23,23))for row in range(0,20):for column in range(0,10):bottom_block=background[row][column]if bottom_block:pygame.draw.rect(screen,(0,0,255),(column*25,500-row*25,23,23))#方块的移动,防止出界,碰撞def move_left_right(n):y_drop,x_move=block_initial_position x_move+=nfor row,column in select_block:row+=y_dropcolumn+=x_moveif column<0 or column>9 or background[row][column]:breakelse:block_initial_position.clear()block_initial_position.extend([y_drop,x_move])#旋转,位置都进行变化def rotate():y_drop,x_move=block_initial_positionrotating_position=[(-column,row)for row,column in select_block]for row,column in rotating_position:row+=y_dropcolumn+=x_moveif column<0 or column>9 or background[row][column]:breakelse:select_block.clear()select_block.extend(rotating_position)while True:screen.fill((255,255,255))for event in pygame.event.get():if event.type==pygame.QUIT:sys.exit()elif event.type==pygame.KEYDOWN and event.key==pygame.K_LEFT:move_left_right(-1)elif event.type==pygame.KEYDOWN and event.key==pygame.K_RIGHT:move_left_right(1)elif event.type==pygame.KEYDOWN and event.key==pygame.K_UP:rotate()elif event.type==pygame.KEYDOWN and event.key==pygame.K_DOWN:press=Trueelif event.type==pygame.KEYUP and event.key==pygame.K_DOWN:press=Falseif press:times+=10if times>=50:block_move_down()times=0else:times+=1if gameover:sys.exit()new_draw()pygame.time.Clock().tick(200)pygame.display.flip()
效果:
【python实现简单俄罗斯方块游戏】
![python实现简单俄罗斯方块游戏](https://img.it610.com/image/info11/289321e0aee744fcb66acb5fa7f268cc.jpg)
文章图片
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
推荐阅读
- MySQL查询字段实现字符串分割split功能的示例代码
- python游戏实战项目之俄罗斯方块的魅力
- vue实现网页语言国际化切换
- 实现JavaScript语言解释器(一)
- 实现JavaScript语言解释器(二)
- 实现JavaScript语言解释器(三)
- React实现复制代码块到codeMirror代码编辑器中
- 详解Python函数式编程之装饰器
- 用Python实现屏幕截图详解
- python|卧槽,做Python兼职又接了一个大单,真香