通過Acllib實現的俄羅斯方塊小遊戲

2021-08-14 15:06:23 字數 2923 閱讀 4945

acllib俄羅斯方塊小遊戲,第二次使用acllib寫圖形,第一次是參考不明真相的板藍根實現的乙個桌面時鐘,寫的很詳細,鏈結見底

對於acllib感興趣的同學可以參考一下。

下面說下俄羅斯方塊遊戲的設計的關鍵:

#為方便起見,下文中所有 l,l, z 等等(包括旋轉後)的圖形都用「俄羅斯方塊」來替代

1.通過陣列儲存所有俄羅斯方塊的圖形位置資訊(包括旋轉後的),ps.本來想通過對位置做旋轉演算法來實現,後來網上參考了一下,因為做運算的時間遠超重畫圖形的時間,網上俄羅斯方塊的實現似乎都是儲存所有圖形的,便作罷,感興趣的同學可以討論一下

2.利用全域性二維陣列winodw來儲存已經存在的俄羅斯方塊的資訊。

//黑色 rgb值

#define black rgb(0,0,0)

//定義單位畫素的邊長

#define step 10

//遊戲窗體高度

#define boundaryh 28

//遊戲窗體寬體

#define boundaryw 14

//俄羅斯方塊形狀的總數目(包括旋轉後的)

#define max_shape 19

//窗體內已經存在的內容(重要,用於存放已經落下的俄羅斯方塊的資訊)

int window[boundaryh][boundaryw] = ;

//旋轉,向左/右移動的標誌

bool istransform = false;

bool istoleft = false;

bool istoright = false;

//俄羅斯方塊形狀編號num(重要全域性變數,用於控制記錄移動,形變以及邊界是否碰撞) , 用於記錄定時器次數cnt

int num = 0,cnt=0;

//位置資訊結構體

struct pstruct ;

//形狀資訊結構體

struct sstruct ;

//每個形狀的標準方向的編號,用於初始化生成隨機俄羅斯方塊使用

int seq[7] = ;

//每個俄羅斯方塊形狀的圖形資料(包括旋轉後的),用4*4二維陣列表示,心中有數即可,請直接略過struct sstruct shape[19] =

,//一

//l,,,

,//rl,,

,,//z,,,

//rz,,

//田,

//t,,,

};//當前正在運動的俄羅斯方塊的位置變數posi,(重要全域性變數,用於控制記錄方塊移動,是否碰撞,4*4陣列最左上角的位置)

struct pstruct posi;

//俄羅斯方塊生成函式

void initcube();

//定時器中斷

void timeevent(int tid);

//鍵盤中斷

void keyevent(int key, int event);

/*//獲取俄羅斯方塊的右邊源

int getrightedge(int num);

//獲取俄羅斯方塊的底邊源

int getbottomedge(int num);

*/int setup()

void initcube() ;

//srand生成隨機因子,rand生成隨機數

srand((unsigned)time(null));

num = seq[rand() % 7];

}//定時器每中斷一次重畫一次遊戲窗體,即每50ms重畫一次

void picture_a_cube() }

//旋轉

if (istransform) }}

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

for (int j = 0; j < 4; j++) }}

//撤銷

if (isreach) num = temp;

} //左移

if (istoleft) }}

if(!isreach) posi.x--;

} //右移

if (istoright) }}

if (!isreach) posi.x++;

} //畫出俄羅斯方塊圖形

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

} }//判斷window陣列是否存在某一行都存在方塊,如果是則消除該行,並將之上的資料下移一行

for(int i=0;i= 0; k--)

}for (int j = 0; j < boundaryw; j++) window[0][j] = 0;

} }endpaint();

}void timeevent(int tid) }}

if(!isreach) posi.y++;

else

}initcube();

} }//重繪遊戲窗體

picture_a_cube();

}void keyevent(int key, int event)

} //左移

if (key == vk_left)

} //右移

if (key == vk_right)

} //加速下降,50ms改為10ms

if (key == vk_down)

else if (event == key_up)

}}《利用acllib寫的乙個桌面時鐘》:

俄羅斯方塊的簡單實現

也是很早很早的東西了 p 這是我幾年以前寫的 seven puzzles 該遊戲為dos版,可在鄙人主頁http sss ic.yeah.內找到 裡的俄羅斯方塊的實現方法,當時接觸程式設計僅半年而已,希望可以給初學者一點幫助。幾乎沒有寫什麼 而且後階段方塊旋轉 消去方面更是只大致介紹了一點方法,不過...

C 實現俄羅斯方塊

c 實現俄羅斯方塊 一 實驗介紹 1.1 實驗內容 本節實驗我們進行設計俄羅斯方塊前的思路分析,以及介紹ncurses 庫的使用方法。1.2 實驗知識點 c 程式設計基礎 ncurses 庫的使用 俄羅斯方塊邏輯設計 1.3 實驗環境 xfce 終端 g 編譯器 ncurses 庫 1.4 適合人群...

原創 MFC實現的俄羅斯方塊

用mfc 實現的俄羅斯方塊 上學期期末複習著無聊的時候做出來的 每天做一點 最後居然順利做出來 做了之後才發現 要做成這個小遊戲 值得考慮的地方還是很多的 想了想就有以下的一些細節 總結起來有以下幾點 1.關於方塊結構的確定 最初考慮的是用 4 4的陣列來表示乙個方塊 但這就意味著每個方塊會造成遠大...