以下是基于 Python + Pygame 實(shí)現(xiàn)的完整俄羅斯方塊游戲代碼,包含核心功能(方塊生成、移動(dòng)、旋轉(zhuǎn)、消除、計(jì)分),注釋詳細(xì)可直接運(yùn)行:
第一步:安裝依賴
先安裝 Pygame 庫(kù):
pip install pygame
第二步:完整代碼
import pygame
import random
初始化Pygame
pygame.init()
游戲常量
SCREEN_WIDTH = 300# 屏幕寬度
SCREEN_HEIGHT = 600# 屏幕高度
BLOCK_SIZE = 30# 方塊大?。ㄏ袼兀?GRID_WIDTH = SCREEN_WIDTH // BLOCK_SIZE# 網(wǎng)格列數(shù)(10列)
GRID_HEIGHT = SCREEN_HEIGHT // BLOCK_SIZE# 網(wǎng)格行數(shù)(20行)
顏色定義(RGB)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (128, 128, 128)
COLORS = [
(0, 255, 255), # 青色(I型)
(0, 0, 255),# 藍(lán)色(J型)
(255, 165, 0), # 橙色(L型)
(255, 255, 0), # 黃色(O型)
(0, 255, 0),# 綠色(S型)
(128, 0, 128), # 紫色(T型)
(255, 0, 0) # 紅色(Z型)
]
俄羅斯方塊7種形狀(0=空,1=方塊)
SHAPES = [
[[1, 1, 1, 1]],# I型(橫)
[[1, 0, 0], [1, 1, 1]],# J型
[[0, 0, 1], [1, 1, 1]],# L型
[[1, 1], [1, 1]],# O型(正方形)
[[0, 1, 1], [1, 1, 0]],# S型
[[0, 1, 0], [1, 1, 1]],# T型
[[1, 1, 0], [0, 1, 1]]# Z型
]
屏幕設(shè)置
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption(\"俄羅斯方塊\")
時(shí)鐘(控制游戲幀率)
clock = pygame.time.Clock()
FPS = 10
字體設(shè)置(計(jì)分板)
font = pygame.font.Font(None, 36)
class Tetromino:
\"\"\"方塊類:管理單個(gè)下落的俄羅斯方塊\"\"\"
def init(self):
self.shape = random.choice(SHAPES)# 隨機(jī)選擇形狀
self.color = random.choice(COLORS)# 隨機(jī)選擇顏色
self.x = GRID_WIDTH // 2 - len(self.shape[0]) // 2# 初始X位置(居中)
self.y = 0# 初始Y位置(頂部)
def rotate(self):
\"\"\"旋轉(zhuǎn)方塊(矩陣轉(zhuǎn)置+逆序)\"\"\"
# 轉(zhuǎn)置矩陣
rotated = list(zip(*self.shape[::-1]))
# 轉(zhuǎn)換為列表格式
self.shape = [list(row) for row in rotated]
def draw(self):
\"\"\"繪制方塊到屏幕\"\"\"
for y, row in enumerate(self.shape):
for x, cell in enumerate(row):
if cell:
# 計(jì)算方塊在屏幕上的實(shí)際坐標(biāo)
screen_x = (self.x + x) * BLOCK_SIZE
screen_y = (self.y + y) * BLOCK_SIZE
# 繪制方塊(帶邊框)
pygame.draw.rect(screen, self.color, (screen_x, screen_y, BLOCK_SIZE - 1, BLOCK_SIZE - 1))
class Game:
\"\"\"游戲主類:管理網(wǎng)格、碰撞檢測(cè)、計(jì)分\"\"\"
def init(self):
self.grid = [[BLACK for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]# 游戲網(wǎng)格(初始全黑)
self.current_tetromino = Tetromino()# 當(dāng)前下落的方塊
self.score = 0# 分?jǐn)?shù)
self.game_over = False# 游戲結(jié)束標(biāo)志
def draw_grid(self):
\"\"\"繪制游戲網(wǎng)格(已落地的方塊)\"\"\"
for y in range(GRID_HEIGHT):
for x in range(GRID_WIDTH):
pygame.draw.rect(screen, self.grid[y][x], (x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE - 1, BLOCK_SIZE - 1))
def check_collision(self, tetromino, dx=0, dy=0, rotated=False):
\"\"\"檢測(cè)碰撞:dx=X偏移,dy=Y偏移,rotated=是否旋轉(zhuǎn)后的形狀\"\"\"
shape = tetromino.shape
if rotated:
# 臨時(shí)計(jì)算旋轉(zhuǎn)后的形狀
shape = [list(row) for row in zip(*shape[::-1])]
for y, row in enumerate(shape):
for x, cell in enumerate(row):
if cell:
# 計(jì)算偏移后的坐標(biāo)
new_x = tetromino.x + x + dx
new_y = tetromino.y + y + dy
# 碰撞條件:超出左右邊界、超出下邊界、碰到已落地的方塊
if (new_x < 0 or new_x >= GRID_WIDTH or
new_y >= GRID_HEIGHT or
(new_y >= 0 and self.grid[new_y][new_x] != BLACK)):
return True
return False
def lock_tetromino(self):
\"\"\"將落地的方塊鎖定到網(wǎng)格中\(zhòng)"\"\"
for y, row in enumerate(self.current_tetromino.shape):
for x, cell in enumerate(row):
if cell:
grid_y = self.current_te
本文來源于汽車之家:club.autohome.com.cn/bbs/thread/e3a41d80912f349d/114994572-1.html
club.autohome.com.cn/bbs/thread/027bf905d3104835/114994556-1.html
club.autohome.com.cn/bbs/thread/b41d7118c64402be/114994528-1.html
如有侵權(quán)請(qǐng)告知?jiǎng)h除
發(fā)表于 04-29 12:34
隨著5G、物聯(lián)網(wǎng)、云計(jì)算等技術(shù)的快速發(fā)展,未來網(wǎng)絡(luò)通信正朝著更高速度、更大容量、更低延遲的方向邁進(jìn)。在這一背景下,配線架作為網(wǎng)絡(luò)通信的基礎(chǔ)設(shè)施之一,也面臨著智能化升級(jí)的挑戰(zhàn)與機(jī)遇。本文將探討配線架
發(fā)表于 04-09 10:41
?248次閱讀
在當(dāng)今這個(gè)信息爆炸的時(shí)代,網(wǎng)絡(luò)通信如同城市的血脈,連接著每一個(gè)角落,讓數(shù)據(jù)與信息得以高效流通。而在這一復(fù)雜而精密的網(wǎng)絡(luò)體系中,配線架作為不可或缺的組成部分,扮演著至關(guān)重要的角色。它雖不常被直接提及
發(fā)表于 04-09 10:31
?208次閱讀
從OSI七層到WiMi-net五層,經(jīng)典理論如何落地?本文深度拆解WiMi-net有中心自組網(wǎng)協(xié)議棧的五層架構(gòu):物理層(Sub-GHz射頻)
發(fā)表于 04-02 17:40
?1815次閱讀
,帶你快速理解OSI七層的核心思想——分層。從物理層到應(yīng)用層,每一層負(fù)責(zé)什么?為什么說它是網(wǎng)絡(luò)通信
發(fā)表于 03-16 09:41
?451次閱讀
在當(dāng)今數(shù)字化時(shí)代,網(wǎng)絡(luò)通信已成為人們?nèi)粘I詈凸ぷ髦胁豢苫蛉钡囊徊糠?。無論是家庭寬帶接入、企業(yè)辦公網(wǎng)絡(luò),還是數(shù)據(jù)中心的高速互聯(lián),都離不開穩(wěn)定可靠的網(wǎng)絡(luò)傳輸介質(zhì)。UTP CAT5e網(wǎng)線,作為一種
發(fā)表于 03-11 10:16
?565次閱讀
近日,一站式IP和芯片定制賦能型領(lǐng)軍企業(yè)——芯動(dòng)科技宣布,與國(guó)內(nèi)全棧網(wǎng)絡(luò)通信芯片和解決方案提供商——雄立科技攜手合作的高性能100G網(wǎng)絡(luò)通信芯片,一次流片成功,實(shí)現(xiàn)規(guī)?;慨a(chǎn)商用。
發(fā)表于 02-05 09:46
?979次閱讀
全雙工網(wǎng)狀網(wǎng)絡(luò)通信實(shí)現(xiàn)真正的同步雙向語(yǔ)音、八路并發(fā)傳輸、長(zhǎng)達(dá)7公里 LoRa 鏈路、動(dòng)態(tài)路由與自組織 SON 架構(gòu),提供低延遲、高可靠性與強(qiáng)覆蓋的專業(yè)無線通信解決方案。
發(fā)表于 12-04 10:30
?1767次閱讀
,這些技術(shù)使得5G網(wǎng)絡(luò)能夠滿足未來物聯(lián)網(wǎng)、智能制造、自動(dòng)駕駛等領(lǐng)域?qū)Ω咚?、低時(shí)延、高可靠性的通信需求。
5G網(wǎng)絡(luò)通信有哪些技術(shù)痛點(diǎn)?
5G網(wǎng)絡(luò)通信經(jīng)過多年的高速發(fā)展,仍有一些技術(shù)痛點(diǎn)
發(fā)表于 12-02 06:05
通過實(shí)踐,本文總結(jié)了構(gòu)建CNN網(wǎng)絡(luò)模型并優(yōu)化的一般化建議,這些建議將會(huì)在構(gòu)建高準(zhǔn)確率輕量級(jí)CNN神經(jīng)網(wǎng)絡(luò)模型方面提供幫助。
1)避免單層神
發(fā)表于 10-28 08:02
(電子控制單元)進(jìn)行深度交互。在車輛全生命周期中,UDS支撐著故障排查、軟件刷寫、傳感器校準(zhǔn)等核心操作,其分層架構(gòu)將復(fù)雜功能拆解到OSI模型的各層協(xié)作實(shí)現(xiàn)。偌大的城市車流不息,面對(duì)繁
發(fā)表于 09-10 10:03
?7258次閱讀
了一套常見問題匯總。 一、OSI參考模型與TCP/IP參考模型 基于TCP/IP的參考模型將協(xié)議分成四個(gè)層次,它們分別是鏈路層、網(wǎng)絡(luò)
發(fā)表于 08-13 13:40
?1156次閱讀
MAC(以太網(wǎng)媒體接入控制器)在OSI七層模型中屬于數(shù)據(jù)鏈路層,提供尋址機(jī)構(gòu)、數(shù)據(jù)幀的構(gòu)建、數(shù)據(jù)差錯(cuò)檢查、傳送控制、向網(wǎng)絡(luò)層提供標(biāo)準(zhǔn)的數(shù)據(jù)接
發(fā)表于 06-16 09:37
在現(xiàn)代分布式系統(tǒng)和云計(jì)算架構(gòu)中,負(fù)載均衡(Load Balancing, LB)是確保高可用性、可擴(kuò)展性和性能優(yōu)化的關(guān)鍵技術(shù)。負(fù)載均衡器根據(jù)不同的OSI模型層級(jí)工作,主要分為四層(L4)和七層
發(fā)表于 05-29 17:42
?1560次閱讀
評(píng)論