基於SDL2自製俄羅斯方塊

2021-10-08 12:26:51 字數 2214 閱讀 4910

俄羅斯方塊是一款十分經典的遊戲,曾風靡全球,小時候玩得第一款電子遊戲就是掌機俄羅斯方塊。

現在我們基於sdl2自製俄羅斯方塊。

首先我們通過3維陣列定義不同種類的方塊,方塊矩陣為4x4的二維陣列,第三維為每種方塊的變形種類。

const int tt_blocks[tt_block_type_num][tt_block_trans_num][tt_block_num_area_height][tt_block_num_area_width] = ,,,

},,,,

},,,,

},,,,

}},,,

,},,,

,},,,

,},,,

,}},,

,,},,

,,},,

,,},,

,,}},

,,,},

,,,},

,,,},

,,,}

},,,,

},,,,

},,,,

},,,,

}},,,

,},,,

,},,,

,},,,

,}}};

有了方塊之後,我們使用sdl2庫對陣列對應方塊就行渲染,即值不為0的位置渲染出方塊粒,值為0的位置不渲染。同時,我們使用顏色型別這個變數代表紅、綠、藍、黃色的方塊,不同顏色使用不同的紋理。

void drawblocks(tt_window *win, tt_block *block)

int i, j;

int x = block->x;

int y = block->y;

for(i = 0; i < tt_block_num_area_height; i++)

x += tt_block_width;

}y += tt_block_height;}}

我們利用sdl2把不同載入成相應的的紋理(texture),如紅、黃、綠、藍色方塊粒的以及背景。

tt_texture loadimagetexture(tt_window *win, const char *imgpath);

sdl_su***ce *su***ce = img_load(imgpath);

if(!su***ce)else

texture.width = su***ce->w;

texture.height = su***ce->h;

sdl_freesu***ce(su***ce);

}return texture;

}

再新增一些俄羅斯方塊的遊戲邏輯,如消除完成的層,統計得分等。

void deletecompletedblocks(tt_block *block)

int width = 0;

int height = 0;

int rowflag = 0;

int tmp[tt_block_num_background_height][tt_block_num_background_width];

sdl_memset(tmp, 0, sizeof (tmp));

for(int i = 0; i < tt_block_num_background_height; i++)

block->score++;

if(block->score > block->maxscore)

playsound(block->completesound);}}

}}height = tt_block_num_background_height - 1;

for(int i = tt_block_num_background_height - 1; i > 0; i--)

}if(rowflag == 1)

}sdl_memcpy(tt_remainblocks, tmp, sizeof (tt_remainblocks));

calremainblockssize(block);

}

我們來看看執行效果吧:

俄羅斯方塊高階 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...