python实现简单俄罗斯方块游戏

本文实例为大家分享了python实现简单俄罗斯方块游戏的具体代码,供大家参考,具体内容如下

import pygame,sys,random,time

all_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 = 0
score = [0]  
gameover = [] 
press = False

pygame.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_drop
        column+=x_move

        if background[row][column]==1:
            break 
    else:
        block_initial_position.clear()
        block_initial_position.extend([y_drop,x_move])
        return

    y_drop,x_move=block_initial_position

    for row,column in select_block:
        background[y_drop+row][x_move+column]=1

    complete_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_position

    for row,column in select_block:
        row+=y_drop
        column+=x_move
        if background[row][column]:
            gameover.append(1)

#方块设置、变化、背景改变
def new_draw():
    y_drop,x_move=block_initial_position
    for row,column in select_block:
        row+=y_drop
        column+=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+=n
    for row,column in select_block:
        row+=y_drop
        column+=x_move
        if column<0 or column>9 or background[row][column]:
            break
    else:
        block_initial_position.clear()
        block_initial_position.extend([y_drop,x_move])

#旋转,位置都进行变化
def rotate():
    y_drop,x_move=block_initial_position
    rotating_position=[(-column,row)for row,column in select_block]

    for row,column in rotating_position:
        row+=y_drop
        column+=x_move
        if column<0 or column>9 or background[row][column]:
            break
    else:
        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=True
        elif event.type==pygame.KEYUP and event.key==pygame.K_DOWN:
            press=False

    if press:
        times+=10

    if times>=50:
        block_move_down()
        times=0
    else:
        times+=1

    if gameover:
        sys.exit()

    new_draw()
    pygame.time.Clock().tick(200)
    pygame.display.flip()

效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 用Python编写一个简单的俄罗斯方块游戏的教程

    俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等. 附源码: from Tkinter import * from tkMessageBox import * import random import time #俄罗斯方块界面的高度 HEIGHT = 18 #俄罗斯方块界面的宽度 WIDTH = 10

  • python编写俄罗斯方块

    本文实例为大家分享了python实现俄罗斯方块的具体代码,供大家参考,具体内容如下 #coding=utf-8 from tkinter import * from random import * import threading from tkinter.messagebox import showinfo from tkinter.messagebox import askquestion import threading from time import sleep class Brick

  • Python小游戏之300行代码实现俄罗斯方块

    前言 本文代码基于 python3.6 和 pygame1.9.4. 俄罗斯方块是儿时最经典的游戏之一,刚开始接触 pygame 的时候就想写一个俄罗斯方块.但是想到旋转,停靠,消除等操作,感觉好像很难啊,等真正写完了发现,一共也就 300 行代码,并没有什么难的. 先来看一个游戏截图,有点丑,好吧,我没啥美术细胞,但是主体功能都实现了,可以玩起来. 现在来看一下实现的过程. 外形 俄罗斯方块整个界面分为两部分,一部分是左边的游戏区域,另一部分是右边的显示区域,显示得分.速度.下一个方块样式等.

  • python实现俄罗斯方块游戏(改进版)

    本文为大家分享了python实现俄罗斯方块游戏,继上一篇的改进版,供大家参考,具体内容如下 1.加了方块预览部分 2.加了开始按钮 在公司实习抽空写的,呵呵.觉得Python还不错,以前觉得像个玩具语言.希望能够用它做更多大事吧!!!加油. 截图如下: 代码如下: #coding=utf-8 from Tkinter import *; from random import *; import thread; from tkMessageBox import showinfo; import t

  • Python使用pygame模块编写俄罗斯方块游戏的代码实例

    文章先介绍了关于俄罗斯方块游戏的几个术语. 边框--由10*20个空格组成,方块就落在这里面. 盒子--组成方块的其中小方块,是组成方块的基本单元. 方块--从边框顶掉下的东西,游戏者可以翻转和改变位置.每个方块由4个盒子组成. 形状--不同类型的方块.这里形状的名字被叫做T, S, Z ,J, L, I , O.如下图所示: 模版--用一个列表存放形状被翻转后的所有可能样式.全部存放在变量里,变量名字如S_SHAPE_TEMPLATE or J_SHAPE_TEMPLATE 着陆--当一个方块

  • python和pygame实现简单俄罗斯方块游戏

    本文为大家分享了python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 Github:Tetris 代码: # -*- coding:utf-8 -*- import pygame, sys, random, copy from pygame.locals import * pygame.init() CubeWidth = 40 CubeHeight = 40 Column = 10 Row = 20 ScreenWidth = CubeWidth * (Column + 5) S

  • python实现简单俄罗斯方块

    本文实例为大家分享了python实现俄罗斯方块的具体代码,供大家参考,具体内容如下 # teris.py # A module for game teris. # By programmer FYJ from tkinter import * from time import sleep from random import * from tkinter import messagebox class Teris: def __init__(self): #方块颜色列表 self.color =

  • python实现俄罗斯方块

    网上搜到一个Pygame写的俄罗斯方块(tetris),大部分看懂的前提下增加了注释,Fedora19下运行OK的 主程序: #coding:utf8 #! /usr/bin/env python # 注释说明:shape表示一个俄罗斯方块形状 cell表示一个小方块 import sys from random import choice import pygame from pygame.locals import * from block import O, I, S, Z, L, J,

  • python实现俄罗斯方块小游戏

    回顾我们的python制作小游戏之路,几篇非常精彩的文章 我们用python实现了坦克大战 python制作坦克大战 我们用python实现了飞船大战 python制作飞船大战 我们用python实现了两种不同的贪吃蛇游戏 200行python代码实现贪吃蛇游戏 150行代码实现贪吃蛇游戏 我们用python实现了扫雷游戏 python实现扫雷游戏 我们用python实现了五子棋游戏 python实现五子棋游戏 今天我们用python来实现小时候玩过的俄罗斯方块游戏吧 具体代码与文件可以访问我的

  • python实现俄罗斯方块游戏

    在公司实习.公司推崇Python和Django框架,所以也得跟着学点. 简单瞅了下Tkinter,和Canvas配合在一起,还算是简洁的界面开发API.threading.Thread创建新的线程,其多线程机制也算是方便. 只是canvas.create_rectangle居然不是绘制矩形,而是新建了矩形控件这点让人大跌眼镜.先开始,在线程里每次都重绘多个矩形(随数组变化),其实是每次都新建了N个矩形,结果内存暴增.原来,对矩形进行变更时,只需用canvas.itemconfig即可. 下面就是

随机推荐