亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pygame庫實現俄羅斯方塊小游戲

發布時間:2020-09-02 19:50:10 來源:腳本之家 閱讀:113 作者:驕陽似我心 欄目:開發技術

本文實例為大家分享了pygame庫實現俄羅斯方塊小游戲的具體代碼,供大家參考,具體內容如下

import random,time,pygame,sys
from pygame.locals import *#導pygame內定義的一些常量
FPS=25#每秒傳輸幀數(刷新率),此處一秒內在屏幕上連續投射出24張靜止畫面
WINDOWWIDTH=640#窗口寬
WINDOWHEIGHT=480#窗口高
BOXSIZE=20#游戲框大小
BOARDWIDTH=10#游戲框寬度
BOARDHEIGHT=20#游戲框高度
BLANK='.'#定義方塊形狀模板時,填補空白處的字符

MOVESIDEWAYSFREQ=0.15#玩家一直按下左或右方向鍵,方塊仍是每0.15s才會移動一次
MOVEDOWNFREQ=0.1#玩家一直按下下方向鍵,方塊仍是每0.1s移動一次

XMARGIN=(WINDOWWIDTH-BOARDWIDTH*BOXSIZE)/2#游戲界面的寬度
TOPMARGIN=WINDOWHEIGHT-(BOARDHEIGHT*BOXSIZE)-5#游戲界面的高度

#定義RGB顏色變量
WHITE=(255,255,255)#設置字體顏色
BLACK=(0,0,0)#整個窗口背景為黑色
GRAY=(185,185,185)#字體陰影灰色
#以下的顏色分別被COLORS和LIGHTCOLORS所引用
RED=(155,0,0)
LIGHTRED=(175, 20, 20)#淺紅
GREEN=(0,155,0)
LIGHTGREEN=(20,175,20)#淺綠
BLUE=(0,0,155)
LIGHTBLUE=(20,20,175)#淺藍
YELLOW=(155,155,0)
LIGHTYELLOW=(175,175,20)#淺黃

BORDERCOLOR=BLUE#游戲邊框顏色為藍色
BGCOLOR=BLACK#背景顏色為黑色
TEXTCOLOR=WHITE#字體為白色,被showTextScreen()引用,用來設置暫停時的"Pause"文本字體顏色
TEXTSHADOWCOLOR=GRAY#字體陰影為灰色,被showTextScreen()引用,用來設置暫停時的"Pause"文本陰影字體顏色
COLORS=(BLUE,GREEN,RED,YELLOW)#組成方塊的小方塊顏色
LIGHTCOLORS=(LIGHTBLUE,LIGHTGREEN,LIGHTRED,LIGHTYELLOW)#圍繞在小方塊周邊顏色,強調輪廓

assert len(COLORS)==len(LIGHTCOLORS)#每個顏色對應其淺色

TEMPLATEWIDTH=5#模板寬
TEMPLATEHEIGHT=5#模板高

#定義方塊形狀模板(順時針旋轉變換),在列表中嵌入了含有字符串的列表來構成這個模板,模板包含了這個方塊可能變換的所有形狀
S_SHAPE_TEMPLATE=[['.....',
     '.....',
     '..00.',
     '.00..',
     '.....'],
     ['.....',
     '..0..',
     '..00.',
     '...0.',
     '.....']]
Z_SHAPE_TEMPLATE=[['.....',
     '.....',
     '.00..',
     '..00.',
     '.....'],
     ['.....',
     '..0..',
     '.00..',
     '.0...',
     '.....']]
I_SHAPE_TEMPLATE=[['..0..',
     '..0..',
     '..0..',
     '..0..',
     '.....'],
     ['.....',
     '.....',
     '0000.',
     '.....',
     '.....']]
O_SHAPE_TEMPLATE=[['.....',
     '.....',
     '.00..',
     '.00..',
     '.....']]
J_SHAPE_TEMPLATE=[['.....',
     '.0...',
     '.000.',
     '.....',
     '.....'],
     ['.....',
     '..00.',
     '..0..',
     '..0..',
     '.....'],
     ['.....',
     '.....',
     '.000.',
     '...0.',
     '.....'],
     ['.....',
     '..0..',
     '..0..',
     '.00..',
     '.....']]
L_SHAPE_TEMPLATE=[['.....',
     '...0.',
     '.000.',
     '.....',
     '.....'],
     ['.....',
     '..0..',
     '..0..',
     '..00.',
     '.....'],
     ['.....',
     '.....',
     '.000.',
     '.0...',
     '.....'],
     ['.....',
     '.00..',
     '..0..',
     '..0..',
     '.....']]
T_SHAPE_TEMPLATE=[['.....',
     '..0..',
     '.000.',
     '.....',
     '.....'],
     ['.....',
     '..0..',
     '..00.',
     '..0..',
     '.....'],
     ['.....',
     '.....',
     '.000.',
     '..0..',
     '.....'],
     ['.....',
     '..0..',
     '.00..',
     '..0..',
     '.....']]
#定義字典變量PIECES來存儲所有的不同形狀模板(重點是所有),即字典變量PIECES包含了每個類型的方塊和所有的變換形狀
PIECES={'S':S_SHAPE_TEMPLATE,
  'Z':Z_SHAPE_TEMPLATE,
  'I':I_SHAPE_TEMPLATE,
  'O':O_SHAPE_TEMPLATE,
  'J':J_SHAPE_TEMPLATE,
  'L':L_SHAPE_TEMPLATE,
  'T':T_SHAPE_TEMPLATE}
#主函數用于創建一些全局變量并在游戲開始之前顯示一個初始畫面
def main():
 global FPSCLOCK,DISPLAYSURF,BASICFONT,BIGFONT
 pygame.init()#初始化pygame相關模塊,為使用硬件做準備
 FPSCLOCK=pygame.time.Clock()#創建一個新對象,可以使用時鐘跟蹤的時間量。該時鐘還提供多種功能以幫助控制游戲的幀率。返回一個Clock對象
 DISPLAYSURF=pygame.display.set_mode((WINDOWWIDTH,WINDOWHEIGHT))#顯示窗口(返回一個Surface對象)
 BASICFONT=pygame.font.Font('freesansbold.ttf',18)#用來設置暫停時"Press a key to play."字體顏色,被showTextScreen()引用
 BIGFONT=pygame.font.Font('freesansbold.ttf',100)#用來設置暫停時"Pause"文本及其陰影文本字體大小,被showTextScreen()引用     
 pygame.display.set_caption('俄羅斯方塊')
 while True:
  #隨機播放背景音樂,mid音樂格式由MIDI繼承而來。MID文件并不是一段錄制好的音樂,而是記錄
  #聲音的信息,然后告訴聲卡如何再現音樂的一組指令,所以音樂播放的好壞因不同機器的聲卡而不同
  if random.randint(0,1)==0:#加入異常語句,沒有mid音樂也可直接運行
   try:
    pygame.mixer.music.load('QQ火拼泡泡龍復原BGM---無損[游戲中].mid')
   except:
    pass
  else:
   try:
    pygame.mixer.music.load('蛇蛇爭霸.mid')
   except:
    pass
  try:
   pygame.mixer.music.play(-1,0.0)#參數依次為無限循環播放,從音樂開頭播放
  except:
   pass
  runGame()
  try:
   pygame.mixer.music.stop()
  except:
   pass
  showTextScreen('Game Over')

def runGame():
 """啟動運行游戲函數"""
 board=getBlankBoard()#返回一個新的空白板數據結構
 lastMoveDownTime=time.time()
 lastMoveSidewaysTime=time.time()
 lastFallTime=time.time()
 #按下方向鍵會將以下三個變量設置為None,上移變量用于翻轉方塊,故沒有上移變量
 movingDown=False
 movingLeft=False
 movingRight=False
 score=0
 level,fallFreq=calculateLevelAndFallFreq(score)
 fallingPiece=getNewPiece()#當前掉落的方塊
 nextPiece=getNewPiece()#游戲玩家可以在屏幕的NEXT區域看見的下一個方塊

 while True:#開始游戲循環
  if fallingPiece==None:
   fallingPiece=nextPiece#沒有下降的一塊在運動,所以開始一個新的一塊在頂部,把nextPiece變量中的下一個方塊賦值給fallingPiece變量
   nextPiece=getNewPiece()
   lastFallTime=time.time()#重置lastFallTime變量,賦值為當前時間,這樣就可以通過變量fallFreq控制方塊下落頻率
   if not isValidPosition(board, fallingPiece):#不能在游戲框中放下新的方塊,游戲結束,Valid:有效的,Position:位置
    return#返回runGame函數調用處
  checkForQuit()#不斷檢查是否要退出
  for event in pygame.event.get():#事件處理循環
   if event.type==KEYUP:
    if event.key==K_p:#暫停游戲
     DISPLAYSURF.fill(BGCOLOR)#將DISPLAYSURF(窗口Surface對象)重新填充為黑色
     showTextScreen('Paused')#DISPLAYSURF(窗口Surface對象)顯示暫停字樣
     lastMoveDownTime = time.time() 
     lastMoveSidewaysTime = time.time() 
     lastFallTime = time.time()
    elif event.key==K_LEFT or event.key==K_a:
     movingLeft=False
    elif event.key==K_RIGHT or event.key==K_d:
     movingRight=False
    elif event.key==K_DOWN or event.key==K_s:
     movingDown=False
   elif event.type==KEYDOWN:#將方塊側向移動
    if event.key==K_LEFT or event.key==K_a and isValidPosition(board,fallingPiece,adjX=-1):
     fallingPiece['x']-=1
     movingLeft=True
     movingRight=False
     lastMoveSidewaysTime=time.time()
    elif event.key==K_RIGHT or event.key==K_d and isValidPosition(board,fallingPiece,adjX=1):
     fallingPiece['x']+=1
     movingRight=True
     movingLeft=False
     lastMoveSidewaysTime=time.time()
    elif event.key==K_UP or event.key==K_w:#按向上鍵,旋轉方塊(如果有空間的話)
     fallingPiece['rotation']=(fallingPiece['rotation']+1)%len(PIECES[fallingPiece['shape']])
     if not isValidPosition(board,fallingPiece):
      fallingPiece['rotation']=(fallingPiece['rotation']-1)%len(PIECES[fallingPiece['shape']])
    elif event.key==K_q:#按q鍵,按相反方向旋轉
     fallingPiece['rotation']=(fallingPiece['rotation']-1)%len(PIECES[fallingPiece['shape']])
     if not isValidPosition(board,fallingPiece):
      fallingPiece['rotation'] = (fallingPiece['rotation'] + 1) % len(PIECES[fallingPiece['shape']])
    elif event.key==K_DOWN or event.key==K_s:#按下向下鍵,使得方塊下落得更快,fallingPiece['y']+=1使方塊下落一個格子,
               #前提是這是一個有效下落,把movingDown設置為True,把lastMoveDownTime變量
               #設置為當前時間.當向下方向鍵一直pp按下時,以后將會檢查這個變量保證方塊以一個較快速率下降
     movingDown=True
     if isValidPosition(board,fallingPiece,adjY=1):
      fallingPiece['y']+=1
     lastMoveDownTime=time.time()
    elif event.key==K_SPACE:#如果按下的是空格,則將方塊一步到底部。程序首先需要找出它著落需要下降多少個格子,有關moving的3個變量都要
          #設置為False,用以保證程序后面部分代碼知道游戲玩家已經按下所有方向鍵。
     movingDown=False
     movingLeft=False
     movingRight=False
     for i in range(1,BOARDHEIGHT):
      if not isValidPosition(board,fallingPiece,adjY=i):
       break
     fallingPiece['y']+=i-1
  if (movingLeft or movingRight) and (time.time()-lastMoveSidewaysTime) > MOVESIDEWAYSFREQ:#如果用戶按住按鍵超過0.15s,那么該表達式返回True,便可使得方塊左或右移一個格子
                        #因為如果用戶重復按下方向鍵讓方塊移動多個格子是很煩人的。好的做法便是用戶按下
                        #方向鍵讓方塊保持移動,直到松開鍵為止
   if movingLeft and isValidPosition(board,fallingPiece,adjX=-1):
    fallingPiece['x']-=1
   elif movingRight and isValidPosition(board,fallingPiece,adjX=1):
    fallingPiece['x']+=1
   lastMoveSidewaysTime=time.time()
  if movingDown and time.time()-lastMoveDownTime>MOVEDOWNFREQ and isValidPosition(board,fallingPiece,adjY=1):
   fallingPiece['y']+=1
   lastMoveDownTime=time.time()

  if time.time()-lastFallTime>fallFreq:#讓方塊自動落下如果它到了下落的時候
   #判斷方塊是否落地
   if not isValidPosition(board,fallingPiece,adjY=1):#方塊已落地
    addToBoard(board,fallingPiece)#將落地的方塊添加到游戲框中
    score+=removeCompleteLines(board)#判斷游戲框中的每一行是否填滿,刪除填滿的一行,返回填滿數
    level,fallFreq=calculateLevelAndFallFreq(score)#計算游戲等級以及下落頻率
    fallingPiece=None#將當前下落的方塊設置為空對象,然后在函數開頭重新賦值nextPiece
   else:#方塊沒有落地,只是把方塊移下來
    fallingPiece['y']+=1
    lastFallTime=time.time()
  #把所有東西畫在屏幕上
  DISPLAYSURF.fill(BGCOLOR)#設置窗口背景顏色
  drawBoard(board)#將空白數據模板繪畫到窗口
  drawStatus(score,level)#將狀態欄繪畫到窗口
  drawNextPiece(nextPiece)#將下一個方塊顯示欄畫到窗口
  if fallingPiece != None:
   drawPiece(fallingPiece)
  pygame.display.update()
  FPSCLOCK.tick(FPS) 
    
      
    
    
def getBlankBoard():
 """創建并返回一個新的空白板數據結構,board列表為如下形式:
 [['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']
 ,['.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.']]
 
 與BOARDWIDTH=10#游戲框寬度,BOARDHEIGHT=20#游戲框高度對應
 """
 board=[]
 for i in range(BOARDWIDTH):
  board.append([BLANK]*BOARDHEIGHT)
 return board
def calculateLevelAndFallFreq(score):
 """根據分數,返回玩家所處的關卡,以及掉落的棋子掉落到一個空格前的時間間隔。"""
 level=int(score/10)+1#等級
 fallFreq=0.27-(level*0.02)#下落頻率(frequence)
 return level,fallFreq
def getNewPiece():
 """以隨機旋轉和顏色返回隨機的新塊"""
 shape=random.choice(list(PIECES.keys()))#shape為S,Z,I....
 newPiece={'shape':shape,
    'rotation':random.randint(0,len(PIECES[shape])-1),#PIECES[shape]為S_SHAPE_TEMPLATE,Z_SHAPE_TEMPLATE,I_SHAPE_TEMPLATE.此處指一類方塊的可旋轉次數
    'x':int(BOARDWIDTH/2)-int(TEMPLATEWIDTH/2),
    'y':-2,
    'color':random.randint(0,len(COLORS)-1)}
 return newPiece
def checkForQuit():
 """檢查退出事件"""
 for event in pygame.event.get(QUIT):#獲取所有退出事件
  terminate()#如果存在任何退出事件,則調用終止函數
 for event in pygame.event.get(KEYUP):#獲取所有的放開鍵事件
  if event.key==K_ESCAPE:#如果KEYUP事件是針對Esc鍵的
   terminate()#終止
  pygame.event.post(event)#將其他KEYUP(非Esc鍵放開)事件對象放回事件隊列
  
def terminate():
 """退出函數"""
 pygame.quit()
 sys.exit()
def showTextScreen(text):
 """在窗口Surface對象的中央顯示大文本,直到按下一個鍵。用于繪制文本投影,注意:pygame沒有提供直接在現有
 表面繪制文本的方法:相反,您必須使用Font.render()來創建文本的圖像(表面),然后將此圖像blit到另一個表面。

 """
 #做出陰影效果
 titleSurf,titleRect=makeTextObjs(text,BIGFONT,TEXTSHADOWCOLOR)#BIGFONT為main函數中定義,TEXTSHADOWCOLOR為模塊中定義,此處文本顏色TEXTSHADOWCOLOR(灰色),下面是TEXTCOLOR(白色)
 titleRect.center=(int(WINDOWWIDTH/2),int(WINDOWHEIGHT / 2))#設置矩形容器的位置,此處需要注意titleRect指的是每個文本Surface對象與其對應的全覆蓋矩形容器,此容器在這里不可見
 DISPLAYSURF.blit(titleSurf,titleRect)#在窗口Surface對象畫文本Surface對象和與其對應的矩形Surface對象,做出blit這個動作的人是一個Surface類的實例
 #實體文本整體向左上移動3個單位,與上面的陰影效果唯一不同的就是傳入的顏色參數
 titleSurf,titleRect=makeTextObjs(text,BIGFONT,TEXTCOLOR)
 titleRect.center=(int(WINDOWWIDTH/2)-3,int(WINDOWHEIGHT/2)-3)
 DISPLAYSURF.blit(titleSurf,titleRect)
 #繪制"Paused"文本下附加的"Press a key to play."文本
 pressKeySurf,pressKeyRect=makeTextObjs('Press a key to play.',BASICFONT,TEXTCOLOR)
 pressKeyRect.center=(int(WINDOWWIDTH/2),int(WINDOWHEIGHT/2)+100)
 DISPLAYSURF.blit(pressKeySurf,pressKeyRect)
 while checkForKeyPress()==None:
  pygame.display.update()
  FPSCLOCK.tick()#這種方法應該被調用一次。它將計算多少毫秒被調用。如果可選的幀率參數的函數以將延遲保持在低于給
      #定游戲運行時每秒滴答。這有助于限制運行游戲的速度。通過調用clock.tick每幀一次地(40),該程序不會運行超過40幀/秒。
def makeTextObjs(text,font,color):
 """這將創建一個新Surface對象,并在其上呈現指定的文本。"""
 surf=font.render(text,True,color)#參數依次為:要寫的文本,布爾值(是否開啟抗鋸齒功能,True字體較為平滑,),字體顏色,背景色
 return surf,surf.get_rect()#返回一個覆蓋整個表面的新矩形(Rect對象,一個矩形的靈活容器)
def isValidPosition(board,piece,adjX=0,adjY=0):
 """如果塊在板內且沒有碰撞,則返回True,該函數我暫時不理解"""
 for x in range(TEMPLATEWIDTH):
  for y in range(TEMPLATEHEIGHT):
   isAboveBoard=y+piece['y']+adjY<0
   if isAboveBoard or PIECES[piece['shape']][piece['rotation']][y][x]==BLANK:
    continue
   if not isOnBoard(x+piece['x']+adjX,y+piece['y']+adjY):
    return False
   if board[x+piece['x']+adjX][y+piece['y']+adjY]!=BLANK:
    return False
 return True
def isOnBoard(x,y):
 return x>=0 and x<BOARDWIDTH and y<BOARDHEIGHT
def addToBoard(board,piece):
 """根據方塊的位置,形狀,旋轉填充的游戲框中"""
 for x in range(TEMPLATEWIDTH):
  for y in range(TEMPLATEHEIGHT):
   if PIECES[piece['shape']][piece['rotation']][y][x]!=BLANK:
    board[x+piece['x']][y+piece['y']]=piece['color']
def removeCompleteLines(board):
 """刪除游戲框中所有已完成(Completed)的行,將上面的所有內容向下移動,并返回完整行數。"""
 numLinesRemoved=0#記錄刪除的行數
 y=BOARDHEIGHT-1#從游戲框底部開始
 while y>=0:
  if isCompleteLine(board,y):#如果填充了這一行,則移開這條線,把所有方塊往下一拉
   for pullDownY in range(y,0,-1):
    for x in range(BOARDWIDTH):
     board[x][pullDownY]=board[x][pullDownY-1]
   for x in range(BOARDWIDTH):#將最上面一行設置為空白
    board[x][0]=BLANK
   numLinesRemoved+=1
  else:
   y-=1#繼續查看下一行
 return numLinesRemoved
   
   
def isCompleteLine(board,y):
 """如果行中填充了沒有空格的框,則返回True"""
 for x in range(BOARDWIDTH):
  if board[x][y]==BLANK:
   return False
 return True
def calculateLevelAndFallFreq(score):
 """基于分數,返回玩家所在的關卡。"""
 level=int(score/10)+1
 fallFreq=0.27-(level*0.02)#根據level變量計算方塊每下落一個空間所需要的秒數
 return level,fallFreq

def drawBoard(board): 
 """將空白數據模板畫到窗口Surface對象上"""
 pygame.draw.rect(DISPLAYSURF, BORDERCOLOR, (XMARGIN - 3, TOPMARGIN - 7, (BOARDWIDTH * BOXSIZE) + 8, (BOARDHEIGHT * BOXSIZE) + 8), 5) 
 
 # fill the background of the board #填充空白數據模板背景顏色
 pygame.draw.rect(DISPLAYSURF, BGCOLOR, (XMARGIN, TOPMARGIN, BOXSIZE * BOARDWIDTH, BOXSIZE * BOARDHEIGHT)) 
 # draw the individual boxes on the board #在空白數據模板上畫出各個盒子
 for x in range(BOARDWIDTH): 
 for y in range(BOARDHEIGHT): 
 drawBox(x, y, board[x][y]) 


def drawStatus(score,level):
 """在Surface窗口對象上畫在游戲框旁邊的狀態欄"""
 #繪制分數文本
 scoreSurf=BASICFONT.render("Score:%s"%score,True,TEXTCOLOR)#TEXTCOLOR為白色
 scoreRect=scoreSurf.get_rect()
 scoreRect.topleft = (WINDOWWIDTH - 150, 20)
 DISPLAYSURF.blit(scoreSurf, scoreRect) 
 #繪制等級文本
 levelSurf = BASICFONT.render('Level: %s' % level, True, TEXTCOLOR)
 levelRect = levelSurf.get_rect()
 levelRect.topleft = (WINDOWWIDTH - 150, 50)
 DISPLAYSURF.blit(levelSurf, levelRect)
def drawNextPiece(piece):
 #繪制"下一個"文本
 nextSurf=BASICFONT.render("Next:",True,TEXTCOLOR)
 nextRect=nextSurf.get_rect()
 nextRect.topleft=(WINDOWWIDTH-120,80)
 DISPLAYSURF.blit(nextSurf, nextRect)
 #繪制下一個"方塊",pixel中文為像素
 drawPiece(piece,pixelx=WINDOWWIDTH-120, pixely=100)
def drawPiece(piece,pixelx=None, pixely=None):
 shapeToDraw=PIECES[piece['shape']][piece['rotation']]
 if pixelx==None and pixely==None:
  pixelx,pixely=convertToPixelCoords(piece['x'], piece['y'])#如果沒有指定pixelx & pixely,則使用存儲在片段數據結構中的位置
 #畫出組成這個方塊的每一個小方塊
 for x in range(TEMPLATEWIDTH):
  for y in range(TEMPLATEHEIGHT):
   if shapeToDraw[y][x] != BLANK:
    drawBox(None,None,piece['color'],pixelx + (x * BOXSIZE), pixely + (y * BOXSIZE))
 
def convertToPixelCoords(boxx,boxy):
 """將board上給定的xy坐標轉換為屏幕上位置的xy坐標,convert:轉換,pixel:像素,coords:坐標"""
 return (XMARGIN+(boxx*BOXSIZE)),(TOPMARGIN+(boxy * BOXSIZE))

def drawBox(boxx,boxy,color,pixelx=None,pixely=None):
 """在黑板上的xy坐標處畫一個盒子(每個四重奏有四個盒子)。或者,如果指定了pixelx & pixely,則繪制到存儲在pixelx & pixely中的像素坐標(這用于“下一個”塊)"""
 if color==BLANK:
  return
 if pixelx==None and pixely==None:
  pixelx, pixely = convertToPixelCoords(boxx, boxy)
 pygame.draw.rect(DISPLAYSURF, COLORS[color], (pixelx + 1, pixely + 1, BOXSIZE - 1, BOXSIZE - 1)) 
 pygame.draw.rect(DISPLAYSURF, LIGHTCOLORS[color], (pixelx + 1, pixely + 1, BOXSIZE - 4, BOXSIZE - 4))

def checkForKeyPress():
 """遍歷事件隊列,尋找KEYUP事件,獲取KEYDOWN事件,將它們從事件隊列中刪除"""
 checkForQuit()
 for event in pygame.event.get([KEYDOWN, KEYUP]):
  if event.type!=KEYDOWN:
   continue
  return event.key
 return None
if __name__=='__main__':
 main()

運行結果:

pygame庫實現俄羅斯方塊小游戲

更多關于俄羅斯方塊的文章,請點擊查看專題:《俄羅斯方塊》

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山丹县| 浙江省| 金寨县| 南华县| 北票市| 砀山县| 张家川| 壤塘县| 岐山县| 博野县| 呈贡县| 北海市| 当阳市| 唐山市| 甘谷县| 齐河县| 离岛区| 扎囊县| 平遥县| 商南县| 分宜县| 台东县| 铜鼓县| 新乡县| 盈江县| 六枝特区| 松阳县| 孝感市| 武山县| 垣曲县| 抚宁县| 漳浦县| 静安区| 浙江省| 武强县| 紫云| 马尔康县| 策勒县| 梅州市| 桐城市| 昂仁县|