人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

python游戲?qū)崙?zhàn)項目之俄羅斯方塊的魅力

發(fā)布日期:2022-01-02 21:34 | 文章來源:站長之家

導(dǎo)語

為什么有這么一個簡單的游戲?這個游戲如此受歡迎?

僅僅是因?yàn)樗谟螒蛐袠I(yè)異常匱乏的年代出現(xiàn),從而成為了一代人的記憶嗎?恐怕并不是。

玩過俄羅斯方塊的人都明白,它給人的感覺就像是嗑瓜子一樣,一旦開始就會像上癮一樣難以停下來,絞盡腦汁只想填滿空缺的地方。

哈哈哈!小編每周的話基本上都會整理一些游戲代碼的哈!

這一期文章就帶大家來開發(fā)一款俄羅斯方塊小游戲!

正文

游戲規(guī)則:由小方塊組成的不同形狀的板塊陸續(xù)從屏幕上方落下來,玩家通過調(diào)整板塊的位置和方向,使它們在屏幕底部拼出完整的一條或幾條。

這些完整的橫條會隨即消失,給新落下來的板塊騰出空間,與此同時,玩家得到分?jǐn)?shù)獎勵。沒有被消除掉的方塊不斷堆積起來,一旦堆到屏幕頂端,玩家便告輸,游戲結(jié)束。

(1)游戲定義,俄羅斯方塊兒的不同的類型:

class tetrisShape():
 def __init__(self, shape=0):
  # 空塊
  self.shape_empty = 0
  # 一字型塊
  self.shape_I = 1
  # L型塊
  self.shape_L = 2
  # 向左的L型塊
  self.shape_J = 3
  # T型塊
  self.shape_T = 4
  # 田字型塊
  self.shape_O = 5
  # 反向Z型塊
  self.shape_S = 6
  # Z型塊
  self.shape_Z = 7

(2)​獲得該形狀當(dāng)前旋轉(zhuǎn)狀態(tài)的四個小方塊的相對坐標(biāo)分布:

def getRotatedRelativeCoords(self, direction):
  # 初始分布
  if direction == 0 or self.shape == self.shape_O:
return self.relative_coords
  # 逆時針旋轉(zhuǎn)90度
  if direction == 1:
return [[-y, x] for x, y in self.relative_coords]
  # 逆時針旋轉(zhuǎn)180度
  if direction == 2:
if self.shape in [self.shape_I, self.shape_Z, self.shape_S]:
 return self.relative_coords
else:
 return [[-x, -y] for x, y in self.relative_coords]
  # 逆時針旋轉(zhuǎn)270度
  if direction == 3:
if self.shape in [self.shape_I, self.shape_Z, self.shape_S]:
 return [[-y, x] for x, y in self.relative_coords]
else:
 return [[y, -x] for x, y in self.relative_coords]

(3)游戲的方塊兒可以向不同方向移動:​

'''向右移動'''
 def moveRight(self):
  if self.ableMove([self.current_coord[0] + 1, self.current_coord[1]]):
self.current_coord[0] += 1
 '''向左移動'''
 def moveLeft(self):
  if self.ableMove([self.current_coord[0] - 1, self.current_coord[1]]):
self.current_coord[0] -= 1
 '''順時針轉(zhuǎn)'''
 def rotateClockwise(self):
  if self.ableMove(self.current_coord, (self.current_direction - 1) % 4):
self.current_direction = (self.current_direction-1) % 4
 '''逆時針轉(zhuǎn)'''
 def rotateAnticlockwise(self):
  if self.ableMove(self.current_coord, (self.current_direction + 1) % 4):
self.current_direction = (self.current_direction+1) % 4
 '''向下移動'''
 def moveDown(self):
  removed_lines = 0
  if self.ableMove([self.current_coord[0], self.current_coord[1] + 1]):
self.current_coord[1] += 1
  else:
x_min, x_max, y_min, y_max = self.current_tetris.getRelativeBoundary(self.current_direction)
# 簡單起見, 有超出屏幕就判定游戲結(jié)束
if self.current_coord[1] + y_min < 0:
 self.is_gameover = True
 return removed_lines
self.mergeTetris()
removed_lines = self.removeFullLines()
self.createNewTetris()
  return removed_lines
 '''墜落'''
 def dropDown(self):
  removed_lines = 0
  while self.ableMove([self.current_coord[0], self.current_coord[1] + 1]):
self.current_coord[1] += 1
  x_min, x_max, y_min, y_max = self.current_tetris.getRelativeBoundary(self.current_direction)
  # 簡單起見, 有超出屏幕就判定游戲結(jié)束
  if self.current_coord[1] + y_min < 0:
self.is_gameover = True
return removed_lines
  self.mergeTetris()
  removed_lines = self.removeFullLines()
  self.createNewTetris()
  return removed_lines

(4)合并俄羅斯方塊(最下面定型不能再動的那些):

 def mergeTetris(self):
  for x, y in self.current_tetris.getAbsoluteCoords(self.current_direction, self.current_coord[0], self.current_coord[1]):
self.board_data[x + y * self.width] = self.current_tetris.shape
  self.current_coord = [-1, -1]
  self.current_direction = 0
  self.current_tetris = tetrisShape()

(5)當(dāng)每行鋪滿之后會得分,相應(yīng)的消失一行:

'''移出整行都有小方塊的'''
 def removeFullLines(self):
  new_board_data = [0] * self.width * self.height
  new_y = self.height - 1
  removed_lines = 0
  for y in range(self.height - 1, -1, -1):
cell_count = sum([1 if self.board_data[x + y * self.width] > 0 else 0 for x in range(self.width)])
if cell_count < self.width:
 for x in range(self.width):
  new_board_data[x + new_y * self.width] = self.board_data[x + y * self.width]
 new_y -= 1
else:
 removed_lines += 1
  self.board_data = new_board_data
  return removed_lines

效果圖:

​​​

​總結(jié)

哈哈哈!好啦!按住方向鍵也可以變形的哈!趕快試試~

到此這篇關(guān)于python游戲?qū)崙?zhàn)項目之俄羅斯方塊的魅力的文章就介紹到這了,更多相關(guān)python 俄羅斯方塊內(nèi)容請搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部