婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python Pygame實(shí)現(xiàn)俄羅斯方塊

Python Pygame實(shí)現(xiàn)俄羅斯方塊

熱門標(biāo)簽:申請辦個400電話號碼 400電話辦理費(fèi)用收費(fèi) 鎮(zhèn)江人工外呼系統(tǒng)供應(yīng)商 千呼ai電話機(jī)器人免費(fèi) 高德地圖標(biāo)注字母 騰訊地圖標(biāo)注有什么版本 外呼系統(tǒng)前面有錄音播放嗎 深圳網(wǎng)絡(luò)外呼系統(tǒng)代理商 柳州正規(guī)電銷機(jī)器人收費(fèi)

本文實(shí)例為大家分享了Python Pygame實(shí)現(xiàn)俄羅斯方塊的具體代碼,供大家參考,具體內(nèi)容如下

源碼:

# coding : utf-8

#: pip install pygame
import random
import sys
import pygame

#: 顏色定義
COLOR_WHITE = (255, 255, 255)
COLOR_BLACK = (0, 0, 0)

class Block:
 """小塊"""
 width = 24
 height = 24

 @staticmethod
 def draw(s, left, top, color, bg_color):
  pygame.draw.rect(s, bg_color, pygame.Rect(left, top, Block.width, Block.height))
  pygame.draw.rect(s, color, pygame.Rect(left, top, Block.width - 1, Block.height - 1))


class Building:
 """積木"""

 def __init__(self):
  """
  方塊的7種基本形狀
  每次初始化隨機(jī)選擇一個形狀
  @:return True / False
  """
  self.form = random.choice(
   [
    [
     [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]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0],
     [1, 1, 1, 1, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 1, 1, 0, 0],
     [0, 0, 1, 1, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 0, 1, 1, 0],
     [0, 1, 1, 0, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 1, 1, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 0, 0]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 0, 1, 1, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 1, 0, 0],
     [0, 0, 0, 0, 0]
    ],
    [
     [0, 0, 0, 0, 0],
     [0, 1, 1, 0, 0],
     [0, 1, 1, 0, 0],
     [0, 0, 0, 0, 0],
     [0, 0, 0, 0, 0]
    ]
   ])

 def __getitem__(self, pos):
  return self.form[pos]

 def __setitem__(self, key, value):
  self.form[key] = value


class Layout:
 """棋盤"""

 def __init__(self):
  self.block_x_count = 16;
  self.block_y_count = 22;
  self.layout = [[0 if 1  i  self.block_x_count - 2 and j  self.block_y_count - 2 else 1
      for i in range(self.block_x_count)] for j in range(self.block_y_count)]

 @property
 def size(self):
  """返回棋盤屏幕大小(width,height)"""
  return (self.block_x_count * Block.width, self.block_y_count * Block.height)

 def create_new_building(self):
  """
  創(chuàng)建新的積木,初始化位置為第5,0格, 速度為4
  :return: 返回是否無空間創(chuàng)建了
  """
  self.building = Building()
  self.building_left, self.building_top = 5, 0 #
  self.drop_speed = 3
  print(self.test_building_touch_wall())
  return self.test_building_touch_wall()
 
 @property
 def speed(self):
  return self.drop_speed

 def test_building_touch_wall(self, x_offset=0, y_offset=0):
  """
  積木是否已經(jīng)觸底/墻壁
  具體操作:
  判斷積木最后一排的1,是否在當(dāng)前棋牌對應(yīng)的位置是也是1
  @:param x_offset: x的偏移量 移動時可以傳入1/-1來判斷
  @:param y_offset: y的偏移量 正常下落時可以傳入1來判斷
  """
  for i in range(4, -1, -1):
   for j in range(5):
    if self.building[i][j]:
     if self.layout[i + self.building_top + y_offset][j + self.building_left + x_offset]:
      return True
  return False

 def move_left_right(self, x):
  """
  左右移動
  @:param x: 移動量 x_offset
  """
  #: 移動時不能撞墻
  if not self.test_building_touch_wall(x_offset=x):
   self.building_left += x

 def down_build(self):
  """ 盒子的自動下移 """
  self.building_top += 1

 def direct_down(self):
  """ 手動快速降落 """
  self.drop_speed = 50

 def convert_building(self):
  """
  * 扭轉(zhuǎn)盒子的總方位 (右轉(zhuǎn))
  具體操作:
  把第一豎排的倒序給第一橫排的
  把第二豎排的倒序給第二橫排的
  后面同理.
  """
  new_box = [[0 for i in range(5)] for j in range(5)]
  for i in range(5):
   for j in range(4, -1, -1):
    new_box[i][j] = self.building[4 - j][i]
  self.building = new_box

 def clear_full_lines(self):
  """消除滿行的所有行"""
  new_layout = [[0 if 1  i  self.block_x_count - 2 and j  self.block_y_count - 2 else 1
      for i in range(self.block_x_count)] for j in range(self.block_y_count)]

  row_len = self.block_x_count - 4
  new_row = self.block_y_count - 2 - 1
  for cur_row in range(self.block_y_count - 2 - 1, 0, -1):
   if sum(self.layout[cur_row][2:self.block_x_count - 2])  row_len:
    new_layout[new_row] = self.layout[cur_row]
    new_row -= 1
  self.layout = new_layout

 def put_building_to_layout(self):
  """將積木放到棋盤里"""
  for i in range(4, -1, -1):
   for j in range(5):
    if self.building[i][j]:
     self.layout[i + self.building_top][j + self.building_left] = 1
  #: 這里會調(diào)用消除函數(shù)
  self.clear_full_lines()

 def draw_building(self, s):
  """
  顯示積木
  @:param s : pygame = screen 
  """
  cur_left, cur_top = self.building_left * Block.width, self.building_top * Block.height
  for i in range(5):
   for j in range(5):
    # 只畫積木實(shí)體,不管盒子本身
    if self.building[j][i]:
     Block.draw(s, cur_left + i * Block.width, cur_top + j * Block.height, COLOR_BLACK, COLOR_WHITE)

 def draw(self, s):
  """
  顯示棋盤
  @:param s : pygame = screen 
  """
  for i in range(self.block_x_count):
   for j in range(self.block_y_count):
    if self.layout[j][i] == 0:
     Block.draw(s, i * Block.width, j * Block.height, COLOR_WHITE, COLOR_BLACK)
    else:
     Block.draw(s, i * Block.width, j * Block.height, COLOR_BLACK, COLOR_WHITE)


# -------------------------------------------------------------------
# Main
# -------------------------------------------------------------------
def main():
 #: 初始化
 while True:
  layout = Layout()
  layout.create_new_building()
  pygame.init()
  pygame.display.set_caption('俄羅斯方塊')
  screen = pygame.display.set_mode((layout.size), 0, 32)
  is_over = False
  #: 單局游戲循環(huán)開始 [結(jié)束后直接重新開始]
  while not is_over:
   #: 處理游戲消息
   for e in pygame.event.get():
    if e.type == pygame.QUIT:
     sys.exit()
    #: 處理按鍵
    if e.type == pygame.KEYDOWN:
     if e.key == pygame.K_UP:
      layout.convert_building()
     if e.key == pygame.K_DOWN:
      layout.direct_down()
     if e.key == pygame.K_LEFT:
      layout.move_left_right(-1)
     if e.key == pygame.K_RIGHT:
      layout.move_left_right(1)
   #: 是否碰觸底部地面了,是 -> 融合背景 否 -> 繼續(xù)下落
   if layout.test_building_touch_wall(y_offset=1):
    layout.put_building_to_layout()
    is_over = layout.create_new_building()
   else:
    layout.down_build()
   #: 繪制
   layout.draw(screen)
   layout.draw_building(screen)
   pygame.display.update()
   #: 速度
   pygame.time.Clock().tick(layout.speed)


if __name__ == '__main__':
 main()

效果:

更多俄羅斯方塊精彩文章請點(diǎn)擊專題:俄羅斯方塊游戲集合 進(jìn)行學(xué)習(xí)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python 基于pygame實(shí)現(xiàn)俄羅斯方塊
  • Python控制臺輸出俄羅斯方塊的方法實(shí)例
  • Python控制臺輸出俄羅斯方塊移動和旋轉(zhuǎn)功能
  • python如何寫個俄羅斯方塊
  • python游戲?qū)崙?zhàn)項(xiàng)目之俄羅斯方塊的魅力

標(biāo)簽:烏蘭察布 合肥 烏蘭察布 大慶 海南 郴州 平頂山 哈爾濱

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python Pygame實(shí)現(xiàn)俄羅斯方塊》,本文關(guān)鍵詞  Python,Pygame,實(shí)現(xiàn),俄羅斯,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python Pygame實(shí)現(xiàn)俄羅斯方塊》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python Pygame實(shí)現(xiàn)俄羅斯方塊的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91国在线观看| 日韩一区二区在线看| 国产精品水嫩水嫩| 色8久久人人97超碰香蕉987| 免费在线观看不卡| 欧美大片拔萝卜| 国产精品一二二区| 裸体在线国模精品偷拍| 国产亚洲一区二区三区在线观看| 不卡区在线中文字幕| 日韩国产一二三区| 国产精品卡一卡二| 日韩亚洲欧美一区二区三区| 日本韩国一区二区三区| 国产乱妇无码大片在线观看| 亚洲r级在线视频| 久久一区二区三区国产精品| 欧美国产97人人爽人人喊| 成人av网站免费| 欧美日韩的一区二区| 日韩精品一区二区三区蜜臀| 日本在线播放一区二区三区| 亚洲欧美aⅴ...| 热久久久久久久| 国产亲近乱来精品视频 | 免费看精品久久片| 亚洲图片欧美综合| 亚洲一级二级在线| 亚洲国产精品久久久久婷婷884| 精品三级在线观看| 欧美三级电影网站| 成人一区二区视频| 蜜臂av日日欢夜夜爽一区| 久久免费视频一区| 日韩一区二区在线观看| 在线视频综合导航| 91精品国产91久久久久久一区二区 | 日韩精品一区二区三区四区| 91精品福利在线| 欧洲国内综合视频| heyzo一本久久综合| eeuss国产一区二区三区| 丁香五精品蜜臀久久久久99网站| 国产精品综合一区二区| 国产成人亚洲精品青草天美| 日韩专区一卡二卡| 久久99久久99| 国产91精品一区二区麻豆网站 | 亚洲视频免费在线观看| 亚洲情趣在线观看| 欧美激情一区二区三区蜜桃视频 | 国产精品网站在线观看| 欧美日韩国产美女| 欧美男生操女生| 在线观看91精品国产麻豆| 国产亚洲欧美激情| 亚洲大片一区二区三区| 欧美日韩的一区二区| 国产午夜精品一区二区三区四区| 97成人超碰视| 国精品**一区二区三区在线蜜桃| 中文字幕一区二区三区av| 在线观看日韩国产| 欧美韩国日本不卡| 一本大道久久a久久综合| 国产一区二区福利| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲午夜免费电影| 成+人+亚洲+综合天堂| 成人免费av资源| 视频一区视频二区中文字幕| 久久国产剧场电影| 亚洲妇熟xx妇色黄| 精品一区二区三区在线观看国产| 蜜桃一区二区三区在线观看| 中文字幕欧美激情一区| eeuss鲁片一区二区三区| 欧美性感一类影片在线播放| 69av一区二区三区| 色先锋资源久久综合| 精品国产露脸精彩对白| 国产精品不卡在线观看| 欧美在线看片a免费观看| 国产成人精品在线看| 久久99久久久久| 午夜av一区二区三区| 国产欧美一区二区三区鸳鸯浴| 国产精一区二区三区| 免费在线观看一区| 久久一夜天堂av一区二区三区 | 久久综合资源网| 91精品国产综合久久福利| 欧美视频中文字幕| 欧美一区二区播放| 成人小视频在线观看| 成人亚洲一区二区一| 偷拍日韩校园综合在线| 成人夜色视频网站在线观看| 337p亚洲精品色噜噜噜| 一区二区三区在线免费| 极品少妇一区二区三区精品视频| 精品国精品自拍自在线| 国产精品区一区二区三| 欧美军同video69gay| 欧美午夜一区二区三区免费大片| 9久草视频在线视频精品| 2017欧美狠狠色| 成人av免费观看| 久久精品理论片| 中文字幕不卡在线播放| 久久这里只有精品首页| 一区二区三区.www| 国产白丝精品91爽爽久久 | 一区二区三区.www| 国产黄色成人av| 欧美午夜不卡在线观看免费| www久久精品| 欧美在线制服丝袜| 亚洲三级在线免费| 精彩视频一区二区| 日韩欧美一区二区免费| 国产精品美女久久久久久久 | 国产成人福利片| 国产喂奶挤奶一区二区三区| 亚洲小说春色综合另类电影| 加勒比av一区二区| 欧美亚洲动漫另类| 91精品欧美久久久久久动漫| 亚洲你懂的在线视频| 免费观看成人av| 精品一区二区三区日韩| 久久色中文字幕| 国产精品成人免费| 亚洲精品在线免费播放| 日本女人一区二区三区| 精品久久99ma| 黑人精品欧美一区二区蜜桃| 亚洲免费在线视频| 精品福利在线导航| 亚洲欧洲精品一区二区三区不卡| 日本成人在线电影网| 欧美一区二区三区免费在线看 | 成人91在线观看| 成人av网址在线观看| 国产日韩欧美a| 国产三级精品三级| 成人欧美一区二区三区1314| 欧美在线高清视频| 亚洲高清不卡在线| 欧美va日韩va| 一区二区三区欧美久久| 久久疯狂做爰流白浆xx| 国产福利电影一区二区三区| 色狠狠色噜噜噜综合网| 欧美一区二区三区公司| 1000精品久久久久久久久| 91福利小视频| 国产资源在线一区| 欧美丰满嫩嫩电影| 国产91精品一区二区麻豆网站| 中文字幕一区二| 日本成人在线一区| 99九九99九九九视频精品| 国产黄色精品视频| 婷婷国产v国产偷v亚洲高清| 日韩一区二区三区四区| 中文字幕在线不卡视频| 奇米777欧美一区二区| 欧美午夜精品久久久久久孕妇| 欧美日韩不卡一区| 国产激情一区二区三区四区| 日本午夜精品视频在线观看 | 91麻豆精品国产91久久久久久| 玉米视频成人免费看| 精品久久久久久久久久久久包黑料 | 91在线播放网址| 久久亚洲精精品中文字幕早川悠里 | 亚洲色图清纯唯美| 午夜精品久久久久久久99水蜜桃| 视频一区二区三区在线| 精品国产电影一区二区| av亚洲精华国产精华| 国产精品自拍在线| 中文字幕制服丝袜一区二区三区| 国产一区二区三区蝌蚪| 精品久久久久一区二区国产| 国产午夜精品一区二区三区视频| 亚洲成人动漫一区| 亚洲视频免费在线观看| 国产福利精品一区| 午夜成人免费电影| 日韩一卡二卡三卡国产欧美| 国产美女主播视频一区| 亚洲国产成人porn| 亚洲国产精品一区二区久久| 亚洲三级在线看| 男人操女人的视频在线观看欧美| 久久99精品一区二区三区| 丁香婷婷综合五月| 欧美精品 日韩|