座標的儲存方式:
記錄方式有兩種:
1,橫縱座標做乙個二元元組,再用乙個列表裝著一堆二元元組
例如:[(20,1),(20,2),(20,3),(20,4)]代表第20行的1~4列的四個方塊
2,二維陣列,一行是乙個列表,用兩個索引代表橫縱座標,值為1就代表有方塊,0就是沒有方塊
例如:block[20][1] 值為1就表示20行第1列有方塊,block[20][5] 為0表示20行第5列有沒有方塊
鍵盤到影象(本質:鍵盤到核心變數)
下面簡略列出需要的函式
名稱 內容 發生時機
左右移動 修改y軸座標 鍵盤事件
旋轉 複雜的座標轉化 鍵盤事件
下落 修改x軸座標 鍵盤事件,計時器
下落檢查 檢查是否可以繼續下落 下落前後
檢查方塊 逐行檢查是否可以消除, 下落檢察後
消除方塊 檢查方塊後
生成方塊 產生下乙個方塊 消除方塊後
檢查存活
生成的方塊 無法放置<=>堆到頂端<=>game over堆到頂端<=>game over
import pygame, sys, random, time
def new_draw():
screen.fill(white)
for i in range(1, 21):
for j in range(10):
bolck = background[i][j]
if bolck:
pygame.draw.rect(screen, blue, (j * 25 + 1, 500 - i * 25 + 1, 23, 23))
x, y = centre
for i, j in active:
i += x
j += y
pygame.draw.rect(screen, blue, (j * 25 + 1, 500 - i * 25 + 1, 23, 23))
pygame.display.update()
def move_lr(n):
"""n=-1代表向左,n=1代表向右"""
x, y = centre
y += n
for i, j in active:
i += x
j += y
if j < 0 or j > 9 or background[i][j]:
break
else:
centre.clear()
centre.extend([x, y])
def direct_down(self):
"手動點選快速下落「
self.drop_speed= 50
def rotate():
x, y = centre
l = [(-j, i) for i, j in active]
for i, j in l:
i += x
j += y
if j < 0 or j > 9 or background[i][j]:
break
else:
active.clear()
active.extend(l)
def move_down():
x, y = centre
x -= 1
for i, j in active:
i += x
j += y
if background[i][j]:
break
else:
centre.clear()
centre.extend([x, y])
return
# 如果新位置未被占用 通過return結束
# 如果新位置被占用則繼續向下執行
x, y = centre
for i, j in active:
background[x + i][y + j] = 1
l =
for i in range(1, 20):
if 0 not in background[i]:
# l裝 行號,鑑於刪去後,部分索引變化,對其降序排列,倒著刪除
l.sort(reverse=true)
for i in l:
background.pop(i)
# 隨刪隨補
score[0] += len(l)
pygame.display.set_caption("分數:%d" % (score[0]))
active.clear()
active.extend(list(random.choice(all_block)))
# all_block儲存7種形狀的資訊
centre.clear()
centre.extend([20, 4])
x, y = centre
for i, j in active:
i += x
j += y
if background[i][j]:
break
else:
return
pygame.init()
screen = pygame.display.set_mode((250, 500))
pygame.display.set_caption("俄羅斯方塊")
fclock = pygame.time.clock()
all_block = (((0, 0), (0, -1), (0, 1), (0, 2)),
((0, 0), (0, 1), (-1, 0), (-1, 1)),
((0, 0), (0, -1), (-1, 0), (-1, 1)),
((0, 0), (0, 1), (-1, -1), (-1, 0)),
((0, 0), (0, 1), (1, 0), (0, -1)),
((0, 0), (1, 0), (-1, 0), (1, -1)),
((0, 0), (1, 0), (-1, 0), (1, 1)))
background = [[0 for i in range(10)] for j in range(24)]
background[0] = [1 for i in range(10)]
active = list(random.choice(all_block))
centre = [20, 4]
score = [0]
black = 0, 0, 0
white = 255, 255, 255
blue = 0, 0, 255
times = 0
alive =
press = false
while true:
for event in pygame.event.get():
if event.type == pygame.quit:
sys.exit()
elif event.type == pygame.keydown:
if event.key == pygame.k_left:
move_lr(-1)
elif event.key == pygame.k_right:
move_lr(1)
elif event.key == pygame.k_up:
rotate()
elif event.key == pygame.k_down:
press = true
elif event.type == pygame.keyup:
if event.key == pygame.k_down:
press = false
if press:
times += 10
if times >= 50:
move_down()
times = 0
else:
times += 1
if alive:
pygame.display.set_caption("over分數:%d" % (score[0]))
time.sleep(3)
break
new_draw()
fclock.tick(100)
俄羅斯方塊高階 AI俄羅斯方塊
前文回顧 致青春 python實現俄羅斯方塊 人工智慧大火的今天,如果還是自己玩俄羅斯方塊未免顯得太low,為什麼不對遊戲公升級,讓機器自己去玩俄羅斯方塊呢?有了這個想法之後利用週六週日兩天的時間去蒐集了大量的資料,在電腦宕機好多次之後終於將ai俄羅斯方塊實現了。所謂讓機器自己去玩俄羅斯方塊,就是讓...
俄羅斯方塊
俄羅斯方塊 tetris,俄文 是一款風靡全球的電視遊戲機 和掌上遊戲機遊戲,它由俄羅斯人阿列克謝 帕基特諾夫 發明,故得此名。俄羅斯方塊的基本規則是移動 旋轉和擺放遊戲自動輸出的各種方塊,使之排列成完整的一行或多行並且消除得分。由於上手簡單 老少皆宜,從而家喻戶曉,風靡世界。俄羅斯方塊的開發者是阿...
俄羅斯方塊
include include include include includeusing namespace std include include define mem a,b memset a,b,sizeof a const int sudu 40 const int dir 4 2 cons...