?? bb010.c
字號:
/*打星星游戲 作者SZK8888 制作日期:03-10-26 */
/*鼠標控制方向 鼠標左鍵和空格鍵開火 (純屬無聊的射擊游戲)*/
#include <stdlib.h>
#include <stdio.h>
#include <graphics.h>
#include <dos.h>
#include <math.h>
#include <time.h>
#include "KEY.c"
#include "mouse3.c"
#define PI 3.1415927
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void VGA_RESET();
void set_color(int color,int R,int G,int B);
void GB_PERSON(int X1,int Y1,int a,int COLOR); /*繪制角色*/
int Round(float x); /*四舍五入*/
void TimeDelay(unsigned long microsec); /*延時函數 傳入微秒數*/
void MOVE_TO3(int oa,float *PX,float *PY,int D); /*移動到*/
void TRANSFORM(char filename[],int *NAME); /*把圖象文件置入數組*/
void GB_TBF(int x,int y,int *NAME); /*顯示*/
int TimeDelayUnit(float t);
int Xrand(int A,int B); /*隨機數發生器A—B*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
main()
{
int END=0; /*游戲結束*/
int E_FIRE_ATTACK=90;
int n,i,j;
/*定義角色結構*/
struct PERSON {
int LIVE;
float X1; /*屏幕坐標*/
float Y1;
float X0;
float Y0;
int a; /*角度*/
int a0;
int COLOR;
int reload;
int move;
int fire;
};
struct PERSON MAN; /*定義玩家*/
/*定義子彈結構*/
struct BB{
int RUN; /*是否運行 */
float PX; /*當前坐標X*/
float PY; /*當前坐標Y*/
int oa; /*目標角度 */
int LB; /*運行周期 */
int MAX_LB;
};
struct BB MB[30]; /*玩家子彈*/
struct BB SB[30];
struct blast{
int RUN; /*是否運行 */
float PX; /*當前坐標X*/
float PY; /*當前坐標Y*/
int D_time;
/*運行周期 */
int MAX_D_time;
};
struct blast BBB[30];
int STAR[30][30];
int BLAST[30][30];
int mx0; /* 鼠標原來的位置 */
struct time t; /*系統時間*/
int R;
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
VGA_RESET(); /*圖形初始化*/
InstallKeyboard(); /*鍵盤中斷初始化*/
initmouse(); /* 鼠標初始化 */
setmousexy(320,240); /* 設置鼠標位置 */
srand(Xrand(31,72456));
gettime(&t); /*取系統時間*/
R=t.ti_hund; /*R=毫秒*/
srand(R); /*產生真正的隨機數種子*/
/*+++++++++++++++++++++GAME 開始+++++++++++++++++++++++++++++*/
/*+++++++++++++++++++++初始化玩家++++++++++++++++++++++++++++*/
MAN.LIVE=1;
MAN.X1=320;
MAN.Y1=460;
MAN.X0=MAN.X1;
MAN.Y0=MAN.Y1;
MAN.a=270;
MAN.a0=MAN.a;
MAN.COLOR=9;
MAN.reload=0;
MAN.move=0;
MAN.fire=0;
/*+++++++++++++++++++++初始化子彈++++++++++++++++++++++++++++*/
for(n=0;n<30;n++) /*玩家子彈初始化*/
{
MB[n].RUN=0;
MB[n].MAX_LB=2;
MB[n].LB=MB[n].MAX_LB;
}
for(n=0;n<30;n++) /*子彈初始化*/
{
SB[n].RUN=0;
SB[n].MAX_LB=10;
SB[n].LB=SB[n].MAX_LB;
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
for(n=0;n<30;n++) /*初始化*/
{
BBB[n].RUN=0;
BBB[n].MAX_D_time=20;
BBB[n].D_time=BBB[n].MAX_D_time;
}
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
TRANSFORM("STAR.TBF",&STAR[0][0]);
TRANSFORM("BZ.TBF",&BLAST[0][0]);
GB_PERSON(MAN.X1,MAN.Y1,MAN.a,9);
/*大循環開始*/
while(END!=1)
{
/*++++++++++++++++++++++++子彈飛行++++++++++++++++++++++++++++*/
/*玩家的子彈*/
for(n=0;n<30;n++)
{
if(MB[n].RUN==1)
{
if(MB[n].LB<=0)
{
setfillstyle(1,0);
bar(MB[n].PX,MB[n].PY,MB[n].PX+1,MB[n].PY+1);
MOVE_TO3(MB[n].oa,&MB[n].PX,&MB[n].PY,10);
setfillstyle(1,14);
bar(MB[n].PX,MB[n].PY,MB[n].PX+1,MB[n].PY+1);
MB[n].LB=MB[n].MAX_LB;
}
if(MB[n].PX<=40||MB[n].PX>=600||MB[n].PY<=40)
{ /*子彈碰墻 消失*/
setfillstyle(1,0);
bar(MB[n].PX,MB[n].PY,MB[n].PX+1,MB[n].PY+1);
MB[n].RUN=0;
}
MB[n].LB--; /*延時*/
}
}
/*子彈*/
for(n=0;n<30;n++)
{
if(SB[n].RUN==1)
{
if(SB[n].LB<=0)
{
setfillstyle(1,0);
bar(SB[n].PX,SB[n].PY,SB[n].PX+29,SB[n].PY+29);
MOVE_TO3(SB[n].oa,&SB[n].PX,&SB[n].PY,10);
GB_TBF(SB[n].PX,SB[n].PY,&STAR[0][0]);
SB[n].LB=SB[n].MAX_LB;
}
if(SB[n].PY>=400)
{ /*子彈碰墻 消失*/
setfillstyle(1,0);
bar(SB[n].PX,SB[n].PY,SB[n].PX+29,SB[n].PY+29);
SB[n].RUN=0;
}
SB[n].LB--; /*延時*/
}
}
/*++++++++++++++++++++++++接觸TOUCH++++++++++++++++++++++++++++*/
/*玩家的子彈與敵人接觸*/
for(n=0;n<30;n++)
{
if(MB[n].RUN==1){
for(i=0;i<30;i++)
{
if(SB[i].RUN==1){
if(SB[i].PX<=MB[n].PX /*接觸的范圍*/
&&
SB[i].PX+29>=MB[n].PX
&&
SB[i].PY<=MB[n].PY
&&
SB[i].PY+29>=MB[n].PY
)
{
MB[n].RUN=0;
setfillstyle(1,0);
bar(MB[n].PX,MB[n].PY,MB[n].PX+1,MB[n].PY+1);
SB[i].RUN=0;
setfillstyle(1,0);
bar(SB[i].PX,SB[i].PY,SB[i].PX+29,SB[i].PY+29);
for(j=0;j<30;j++)
{
if(BBB[j].RUN==0)
{
BBB[j].D_time=BBB[j].MAX_D_time;
BBB[j].PX=SB[i].PX;
BBB[j].PY=SB[i].PY;
BBB[j].RUN=1;
break;
}
}
i=30;
}
}
}/*for i*/
}
}
/*++++++++++++++*/
/*爆炸*/
for(n=0;n<30;n++)
{
if(BBB[n].RUN==1)
{
GB_TBF(BBB[n].PX,BBB[n].PY,&BLAST[0][0]);
BBB[n].D_time--;
if(BBB[n].D_time<=0)
{ /*消失*/
setfillstyle(1,0);
bar(BBB[n].PX,BBB[n].PY,BBB[n].PX+29,BBB[n].PY+29);
BBB[n].RUN=0;
}
}
}
if(TimeDelayUnit(0.5))
{
/*電腦開火*/
E_FIRE_ATTACK=random(100);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -