婷婷综合国产,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
    久久国产欧美日韩精品| 久久99精品国产麻豆婷婷| 亚洲国产aⅴ天堂久久| 中文字幕一区二区三区视频| 97久久精品人人澡人人爽| 亚洲欧美日韩国产综合| 在线观看一区二区精品视频| 久久久久久久综合日本| 国产一区欧美一区| 亚洲欧美另类久久久精品2019| 欧美日韩一区国产| 国内不卡的二区三区中文字幕| 综合电影一区二区三区| 激情综合网av| 国产日产欧美一区二区三区| 在线亚洲人成电影网站色www| 美女脱光内衣内裤视频久久网站| 中文字幕免费不卡在线| 国产成人免费在线| 天堂资源在线中文精品| 欧美一区二区三区四区久久| 国产精品一区二区你懂的| 国产精品传媒入口麻豆| 91视视频在线观看入口直接观看www| 国产精品国模大尺度视频| 大胆亚洲人体视频| 欧美v亚洲v综合ⅴ国产v| 99久久免费视频.com| 亚洲与欧洲av电影| 久久精品视频一区二区三区| 色欧美乱欧美15图片| 国产精品久久看| 欧美日韩你懂的| 91美女片黄在线| 成人午夜私人影院| 午夜久久电影网| 亚洲综合一区二区三区| 亚洲欧洲一区二区三区| 蜜桃精品在线观看| 日韩精品乱码免费| 亚洲成a人片在线不卡一二三区| 久久久久久久久久久久久久久99| 成人av电影在线观看| 国产精品一区二区在线观看不卡| 一区二区三区日韩在线观看| 欧美伊人久久大香线蕉综合69| 激情都市一区二区| 精品伊人久久久久7777人| 亚洲色图视频网站| 亚洲日本欧美天堂| 国产三级欧美三级日产三级99| 欧美一区二区在线免费播放| 欧美高清视频不卡网| 成人听书哪个软件好| 国产传媒日韩欧美成人| 日韩成人免费电影| 亚洲精品久久嫩草网站秘色| 久久精品男人天堂av| 国产欧美精品国产国产专区| 国产欧美日韩久久| 欧洲一区二区三区在线| 91国产成人在线| 91精品欧美一区二区三区综合在| 日韩一区二区三区三四区视频在线观看 | 九九视频精品免费| 精品一区二区三区免费| 国产精品一区二区久久不卡| 成人性生交大合| 色婷婷av一区二区三区大白胸| 精品视频在线免费观看| 国产欧美日韩在线看| 972aa.com艺术欧美| 亚洲女同一区二区| 久久久无码精品亚洲日韩按摩| 亚洲一区二区不卡免费| 久久国产欧美日韩精品| 不卡av免费在线观看| 91久久线看在观草草青青| 日韩欧美123| 中文字幕五月欧美| 免费观看91视频大全| 亚洲免费观看高清完整版在线 | 亚洲高清久久久| 亚洲精选免费视频| 久久66热偷产精品| 91麻豆国产香蕉久久精品| 色婷婷亚洲婷婷| 久久午夜国产精品| 一区二区在线观看av| 国产在线精品一区二区| 一本高清dvd不卡在线观看| 91在线观看美女| 色成年激情久久综合| 在线不卡的av| 日本一区二区三区视频视频| 亚洲大片精品永久免费| 成人app下载| 亚洲精品一区二区三区精华液| 亚洲综合视频在线| 99视频精品全部免费在线| 欧美v日韩v国产v| 国产欧美精品国产国产专区 | 日本欧美加勒比视频| 成人a免费在线看| 欧美mv日韩mv国产网站| 亚洲国产成人高清精品| av激情综合网| 久久精品亚洲国产奇米99| 日本午夜一区二区| 久久成人av少妇免费| 盗摄精品av一区二区三区| 国内精品视频666| 天天亚洲美女在线视频| 欧美一区二区三区系列电影| 久久综合五月天婷婷伊人| 中文字幕中文字幕一区| 日韩欧美中文字幕精品| 色噜噜狠狠成人网p站| 午夜欧美视频在线观看| 欧美色视频在线| 在线影院国内精品| 国产成人av影院| 欧美卡1卡2卡| 亚洲国产成人av好男人在线观看| 国产剧情一区二区三区| 不卡一区中文字幕| 国产偷国产偷亚洲高清人白洁| 丰满亚洲少妇av| 亚洲视频免费观看| 91精品国产综合久久小美女| 香蕉久久夜色精品国产使用方法 | 精品国产乱码久久久久久蜜臀 | 欧美午夜精品一区| 七七婷婷婷婷精品国产| 久久久久久**毛片大全| 成人在线视频首页| 亚洲一区二区三区国产| 久久综合久久99| 国产麻豆精品theporn| 欧美三级资源在线| 成人激情文学综合网| 亚洲成人免费看| 久久久www成人免费毛片麻豆| 色综合激情久久| 99久久综合狠狠综合久久| 亚洲欧美日韩电影| 久久综合狠狠综合久久综合88 | 久久九九久精品国产免费直播| 韩国av一区二区| 日韩黄色在线观看| 亚洲国产精品一区二区久久恐怖片 | 亚洲精选视频免费看| 日韩欧美国产高清| 欧美激情一区二区在线| 在线免费一区三区| youjizz国产精品| 六月婷婷色综合| 六月丁香婷婷色狠狠久久| 一区二区三区毛片| 久久精品视频一区二区| 欧美日韩一区不卡| 555www色欧美视频| 国产精品丝袜91| 色偷偷久久一区二区三区| 国产精品国产自产拍高清av| 在线精品亚洲一区二区不卡| 亚洲一区二区三区中文字幕 | 精品在线播放免费| 丰满少妇在线播放bd日韩电影| 91老司机福利 在线| 日韩欧美成人激情| 亚洲一区电影777| 在线视频欧美精品| 日韩欧美色综合网站| 亚洲靠逼com| 成人免费不卡视频| 精品99一区二区| 老司机精品视频线观看86| 3d动漫精品啪啪1区2区免费| 亚洲色图在线播放| 成人激情免费视频| 亚洲精品在线免费播放| 日韩电影在线一区| 91国偷自产一区二区三区成为亚洲经典| 伊人一区二区三区| 石原莉奈在线亚洲三区| 色综合天天综合网天天狠天天| 91精品国产色综合久久ai换脸| 欧美精品一区二| 亚洲成人av福利| 丁香亚洲综合激情啪啪综合| 在线播放视频一区| 国产一区二区中文字幕| 国产精品久久免费看| 91蜜桃视频在线| 国产精品毛片久久久久久| 成人一级视频在线观看| 国产精品毛片久久久久久| 国产福利一区在线| √…a在线天堂一区|