python俄罗斯方块代码34行_少儿编程分享:码趣君教你用Python编写俄罗斯方块(四)...
接下來要進入操作部分了
堅持才能獲得最后的成就感噢
用移動變量處理用戶輸入
216. elif (event.key == K_LEFT or event.key == K_a):
217. movingLeft = False
218. elif (event.key == K_RIGHT or event.key == K_d):
219. movingRight = False
220. elif (event.key == K_DOWN or event.key == K_s):
221. movingDown = False
按下一個方向鍵(或是WASD鍵)設置 movingLeft, movingRight, or movingDown 變量反饋為錯誤,表示玩家不再想沿著這條道路移動積木。代碼稍后會根據Boolean值中的移動變量處理要做什么。請注意,向上箭頭和W鍵用于旋轉積木,而不是移動積木。 這就是為什么沒有moveUp變量。
檢驗滑動或旋轉是否是變量
223. elif event.type == KEYDOWN:
224. # moving the block sideways
225. if (event.key == K_LEFT or event.key == K_a) and isValidPosition(board, fallingPiece, adjX=-1):
226. fallingPiece['x'] -= 1
227. movingLeft = True
228. movingRight = False
229. lastMoveSidewaysTime = time.time()
當按下向左鍵(向左移動是一個變量,移動著積木,所以決定稱為isValidPosition()),那么我們應該通過將dropsPiece ['x']的值減去1來將位置更改為左邊的一個空格。isValidPosition()函數具有可選參數,稱為adjX和adjY。但有時我們不想檢查積木當前的位置,但是寧愿檢查一些小空格的位置。
如果我們將-1賦值給adjX(“adjusted X”的縮寫),那么就不會檢查積木數據結構位置的有效性,而是會檢查如果左邊有一個空格,積木的位置將會放在那里。1賦值給adjX會檢查右邊的空間。還有adjY作為可選參數。-1賦值給 adjY 檢查積木現在所處位置上面一格,將數值如3賦值給adjY會檢查積木所處位置下面3格。
movingLeft變量設置為True,僅是確認掉落的積木既不會向左也不會向右移動,在228行的movingRight變量被設定為False。在229行的lastMoveSidewaysTime 變量會下載當前的時間。
這些變量的設置是為了玩家按下方向鍵使積木繼續移動。如果movingLeft變量設置為 True,程序知道向左鍵(或A鍵)按下還未松開。如果時間被存入lastMoveSidewaysTime變量后的0.15秒(數據被存儲在MOVESIDEWAYSFREQ中),就在這時程序會再次將積木移到左邊。
231. elif (event.key == K_RIGHT or event.key == K_d) and isValidPosition(board, fallingPiece, adjX=1):
232. fallingPiece['x'] += 1
233. movingRight = True
234. movingLeft = False
235. lastMoveSidewaysTime = time.time()
線231至235上的代碼幾乎與第225至229行完全相同,只是當按下右箭頭鍵(或D鍵)時,它處理向下移動下降的部分。
237. # rotating the block (if there is room to rotate)
238. elif (event.key == K_UP or event.key == K_w):
239. fallingPiece['rotation'] = (fallingPiece['rotation'] + 1) % len(SHAPES[fallingPiece['shape']])
向上鍵(或w鍵)可以多次翻轉下落的積木。這里所有代碼要做的是將fallingPiece的數據庫中翻轉鍵的值加1。然而,如果增加的翻轉鍵的值比翻轉總數大,然后通過“修改“形狀可能旋轉的總數(這就是len(SHAPES[fallingPiece['shape']]),則數值將會變為0,現在舉一個J形狀的例子,它擁有四種翻轉方向組合:
>>> 0 % 4
0
>>> 1 % 4
1
>>> 2 % 4
2
>>> 3 % 4
3
>>> 5 % 4
1
>>> 6 % 4
2
>>> 7 % 4
3
>>> 8 % 4
0
>>>
240. if not isValidPosition(board, fallingPiece):
241. fallingPiece['rotation'] = (fallingPiece['rotation'] - 1) % len(SHAPES[fallingPiece['shape']])
如果新的旋轉方向是無效的,那是因為它與底板上的一些方塊重疊在一起,那么我們想通過從dropsPiece ['rotation']減去1來將其切換回原來的旋轉。我們可以通過len(SHAPES[fallingPiece['shape']])來修改旋轉方向,如果新的數值是-1,該修改將會更改為列表中的最后一個旋轉。 以下是修改負數的示例:
>>> -1 % 4
3
242. elif (event.key == K_q): # rotate the other direction
243. fallingPiece['rotation'] = (fallingPiece['rotation'] - 1) % len(SHAPES[fallingPiece['shape']])
244. if not isValidPosition(board, fallingPiece):
245. fallingPiece['rotation'] = (fallingPiece['rotation'] + 1) % len(SHAPES[fallingPiece['shape']])
242行到245行與238行到241行做著相同的事,除了處理玩家按下控制相反方向翻轉的積木的Q鍵的情況。在這種情況下,我們從dropsPiece ['rotation']中減去1(在第243行完成),而不是加1。
247. # making the block fall faster with the down key
248. elif (event.key == K_DOWN or event.key == K_s):
249. movingDown = True
250. if isValidPosition(board, fallingPiece, adjY=1):
251. fallingPiece['y'] += 1
252. lastMoveDownTime = time.time()
如果按向下鍵或S鍵,那么積木下降的速度比正常的要快。251行是在底板向下移動積木一格(僅僅是有效的空格)。movingDown變量設置為True, lastMoveDownTime重置當前時間。稍后將會檢查這些變量,為了按下向下鍵或S鍵移動的積木將以更快的速度持續下降。
(未完待續)
總結
以上是生活随笔為你收集整理的python俄罗斯方块代码34行_少儿编程分享:码趣君教你用Python编写俄罗斯方块(四)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言pow函数用法_C语言基础的不能再
- 下一篇: python线性回归算法简介_Pytho