以前從沒寫過游戲,甚至連大程序都沒嘗試寫過,這一次可謂要突破一下了。昨天晚上一夜都沒睡好,一直都在想著這個(gè)游戲。參考了一下俄羅斯方塊,羅列了一些函數(shù),由于能力有限函數(shù)的具體功能都沒實(shí)現(xiàn),但是我會(huì)盡快補(bǔ)全這些功能的,請(qǐng)大家監(jiān)督。第一次分析的難免會(huì)有很多漏洞與不全,請(qǐng)大家多多指教。
首先是導(dǎo)入各函數(shù)庫
#include <.h>
各個(gè)全局變量
Static const int Bottle_width 瓶子的寬和高度
Static const int Bottle_height
Static const int Pill_Szie 藥丸的尺寸
Static const int bug_rate 蟲子的幾率
static const int WindowPositionX 窗口位置
static const int WindowPositionY
。
。
。
定義枚舉類型的顏色

Enmu color
{………};
定義瓶子網(wǎng)格的類型
enmu BottleGridType


{
BGT_EMPTY, //空的
BGT_BUG, //蟲子
BGT,MEDICINE //藥片
};

定義瓶子類
class Bottle


{
private :
BottleGrifTYpe **b_ptr;
int b_Width;
int b_Height;
public:
Bottle(int width,int height,intbug_rate)

{
B_Width=width;
B_Height=height;
b_ptr=new BottleGridTYpe*[height];
for(int i=0;i<k;i++)

{
For(int j=0;j<width;j++)

{
對(duì)從第0行到第k行進(jìn)行初始化, 全 部設(shè)置成空的,即不包含蟲子。K 根據(jù)關(guān)數(shù)自定義
}
}
For(int i=k;i<height;i++)

{
for(int j=0;j<width;j++)
if(bug_rate>0)

{
如果蟲子出現(xiàn)的幾率>0則根據(jù)rate 設(shè)置某些網(wǎng)格成蟲子
}
Else

{
設(shè)置網(wǎng)格為空
}
}
}
~Bottle() 析構(gòu)函數(shù)

{
for(int i=0; i<m_Height; ++i)
delete[] b_ptr[i];
delete[] b_ptr;
}
Void display()

{
For(int i=0;i<b_Width;i++)

{
For(int j=0;j<b_Height;j++)
Switch(b_ptr[j][i] )

{
Case BGT_EMPTY:

{
}
Case BGT_BUG:

{
}
Case BGT_EMPTY:

{
}
}
}
}
}
}
定義Medicine 類型
enmu Medicine


{
char c[2][2];
int x;
int y;
char color;
char size;
char name;
}
drawBug()


{
畫蟲子
}
drawMedicine()


{
畫藥片
}
canRotate(Medicine mc)


{
判斷藥片是否可以旋轉(zhuǎn)
Can
Return true;
Not
Return false;
}
Int canMove(Medicine mc)


{
判斷藥片是否可以向左右移動(dòng)
If(can move to left )
Return 1;
If(can move to right)
Return 2
}
Void display() 顯示函數(shù),


{
glClear(GL_COLOR_BUFFER_BIT);
(Bottle)->display(); //Bottle的一個(gè)對(duì)象
glutSwapBuffers();
}
Void clearMedicineAndBug()


{
如果垂直或水平相鄰顏色的蟲子或藥丸大于或等于四個(gè),消除。。。。
}
Void keyboard(unsigned char key,int x,int y)


{
Switch(key)


{
Case ‘a’:
Case ‘A’:
If(canMove(Mecidine mc)==1 )
藥片向左移動(dòng)
Break;
Case ‘d’:
Case ‘D’:
If(canMove(Mecidine mc)==2 )
藥片向右移動(dòng)
Break;
Case ‘s’:
Case ‘S’:
藥片加速下移
Break;
Case ‘w’:
Case ‘W’:
If(canRotate(Mecidine mc))
藥片旋轉(zhuǎn)
Break;
Case ‘p’:
Case ‘P’:
暫停,按任意鍵繼續(xù)
Break;
}
}
Void init()


{
glClearColor(, , , ,);
。
。
。
}
Int main(int argc,char*argv[])


{
初始化一個(gè)瓶子
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_|GLUT_);
glutInitInitWindowSize();
glutInitWindowPosition();
glutCreateWindow(argv);
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
