俄羅斯方塊是一款十分經典的遊戲,曾風靡全球,小時候玩得第一款電子遊戲就是掌機俄羅斯方塊。
現在我們基於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...