亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 空戰摸擬源程序.c

?? 空戰摸擬源程序 空戰摸擬源程序
?? C
字號:
      #include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <conio.h>
#include <mem.h>
#include <time.h>
#include <math.h>
#include <alloc.h>

#define  MAX_STAR   80                    /* 最多星星數目         */
#define  MAX_OBJ    30                    /* 最多物體(子彈和敵人) */
#define  MAXY      169                  /* y坐標的最大值        */
typedef unsigned long ulong;
char far *VideoBuf=(char far*)0xa0000000L, *MemBuf;     /* MemBuf 圖形二級緩存 */
char  keys[128];                                        /* keys[0..100] 鍵盤上各鍵的狀態   */
const KEY_UP=72,KEY_DOWN=80,KEY_LEFT=75,KEY_RIGHT=77,KEY_ESC=1,KEY_CTRL=29;
                                                /* 鍵盤掃描碼 */
void interrupt far (*OldInt9)(void);                            /* 老的鍵盤中斷程序地址 */
void interrupt NewInt9(void);                                   /* 新的鍵盤中斷服務程序 */
char GameStart(void);
struct TStars { int x,y,v; } Stars[MAX_STAR];   /* 星星的描述 */
struct TObj { int mode,type,index,next,x,y; } Objs[MAX_OBJ]; /* 子彈和敵人的描述 */
long GameScore=0;                               /* 游戲分數 */

unsigned char fly_pic[260]={      /* 飛機的圖形,我是用程序將PCX圖形轉換過來的 */
16,0,16,0,0,0,0,29,25,0,0,0,0,25,29,196,0,0,0,0,0,0,0,25,25,0,0,0,0,25,0,196,0,
0,0,0,112,112,0,25,196,40,40,29,112,112,40,112,0,112,112,112,40,40,112,112,40,40,
25,25,112,40,40,112,112,112,112,112,112,40,112,25,40,40,112,112,112,40,40,25,
40,112,112,0,0,112,112,25,40,40,40,112,40,40,40,25,40,112,0,0,0,0,112,25,40,
112,40,112,112,112,40,25,112,0,0,0,0,0,0,29,112,0,40,0,112,0,112,29,0,0,0,0,
0,0,0,29,112,0,40,54,112,0,112,29,0,0,0,0,0,0,0,29,0,0,40,54,112,0,0,29,0,0,
0,0,0,0,0,0,0,40,112,25,112,112,0,0,0,0,0,0,0,0,0,0,0,40,112,25,112,112,0,0,
0,0,0,0,0,0,0,0,0,40,112,112,112,112,0,0,0,0,0,0,0,0,0,0,0,0,40,112,112,0,0,
0,0,0,0,0,0,0,0,0,0,0,40,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112,0,0,0,0,0,0,0,
0};    /* 數據頭四個字節分別由兩個16位數據表示圖片的長和寬,后面是圖片8bit的顏色數據 */

void copyright(void)
{ printf("Game Over. your score %ld\n",GameScore);
  printf("Thank you for play it, if you have any question please call me\n");
  printf("(0871)7167710 or lwwind@yeah.net, Lin Wei\n");

}

int game_init(void);
int game_restore(void);

void main(void)
{
  if (!game_init()) return;                    /* 游戲初始化 */
  printf("           - STAR WAR -\r");         /*  打印標題  */
  GameStart();                                 /* 游戲主循環 */
  game_restore();                              /* 還原初始化 */
  copyright();                                 /* 顯示說明文 */
}

int game_init(void)
{
  long i;
  union REGS regs;
  MemBuf=(char far*)farmalloc(320L*(MAXY+1));
  if (!MemBuf) {
     printf("not enough memory\n"); return 0;
  }
  memset(MemBuf,0,320L*(MAXY+1));
  randomize();                                          /* 初始化隨機函數 */
  for (i=0;i<128;i++) keys[i]=0;                        /* 鍵盤碼初始化 */
  for (i=0;i<MAX_STAR;i++) {                            /* 星空初始化   */
      Stars[i].x=random(320);
      Stars[i].y=-20+random(250);
      Stars[i].v=1;
      if (i<MAX_STAR/3) Stars[i].v++;
  }
  for (i=0;i<MAX_OBJ;i++) Objs[i].mode=0;    /* 物體初始化 */

  /* 鍵盤中斷初始化:設置新的中斷 */
  OldInt9=getvect(9);
  disable();
  setvect(9,NewInt9);
  enable();

  /* 設置 320x200x256c圖形模式 */
  regs.x.ax=0x13;
  int86(0x10,&regs,&regs);
  return 1;
}

int game_restore(void)
{
  union REGS regs;
  /* 還原設置:還原老的中斷 */
  disable();
  setvect(9,OldInt9);
  enable();

  regs.x.ax=3;
  int86(0x10,&regs,&regs);
  farfree(MemBuf);
  return 0;
}

/* 鍵盤服務程序 */
void interrupt NewInt9(void)
{
  unsigned char key;
  key=inportb(0x60);                                    /* 讀鍵盤掃描碼 */
  if (key<0x80) keys[key]=1;                            /* 如果最高位是0,則為按下 */
    else keys[key&0x7f]=0;                              /* 如果最高位是1,則為放開 */
  key=inportb(0x61); key|=0x80; outportb(0x61,key);     /* 告訴鍵盤已接收 */
  outportb(0x61,key&0x7f);
  outportb(0x20,0x20);                                  /* 發送中斷結束信號 */
}

/*---------------------------- 游戲圖形引擎 ---------------------------------*/
void pixel(unsigned x,unsigned y,char c)                /* 畫點 */
{
  if (x>=320||y>MAXY) return;                           /* 判斷范圍 */
  MemBuf[(y<<8)+(y<<6)+x]=c;                            /* MemBuf[y*320+x]=c */
}

/* 將二級緩存的內容顯示出來 */
void show(void)
{
  int offset=(199-MAXY)*160;
  memcpy(VideoBuf+offset,MemBuf,320L*(MAXY+1));
}

/* 清屏 */
void clear(void)
{
  memset(MemBuf,0,320L*(MAXY+1));
}

/* 就是繪制圖塊,(x,y)是坐標b是內存地址mode表示是否上下顛倒
* 敵人和主人是同樣的圖片做顛倒
*/
void putimage(int x,int y,char *b,int mode)
{
  int len, wid, i, j;
  len = b[0] + (int)b[1] * 256;
  wid = b[2] + (int)b[3] * 256;
  x-=len/2; y-=wid/2;                                   /* 中心對稱 */
  for (j=0,b=b+4;j<wid;j++) for (i=0;i<len;i++,b++)
    { if (*b&&!mode) pixel(x+i,y+j,*b);                 /* 是否鏡面翻轉 */
      if (*b&&mode)  pixel(x+i,y+wid-j-1,*b);
    }
}

void drawfire(int x,int y)                              /* 畫出激光 */
{ int i,j;
  for (i=-6;i<6;i++) { pixel(x-5,y+i,9); pixel(x+3,y+i,9); }
}
/*---------------------------- 游戲控制引擎 ---------------------------------*/
unsigned long timepass;                    /* 游戲進行的時間 */
int  GameOver, Sound=0;
int  fly_x=160,fly_y=MAXY*2/3,fly_flag=1,fire_flag=1;
void drivers(void);                     /* 控制產生敵人的函數 */
void control(void);                     /* 對象控制(事件處理) */

int  AllocObj(void)                     /* 分配空余對象 */
{ int i=0;
  while (i<MAX_OBJ&&Objs[i].mode) i++;
  if (i>=MAX_OBJ) i=MAX_OBJ-1;
  return i;
}

int  CheckHit(int x1,int y1,int x2,int y2,int r)    /* 檢查碰撞 */
{
  if (abs(x1-x2)<=r&&abs(y1-y2)<=r) return 1;
  return 0;
}

ulong fclock(void)                    /* 讀取 1.19MHz的32位系統時鐘 */
{
  ulong t;
  disable(); outportb(0x43,0); t=inportb(0x40);
  t+=(inportb(0x40)<<8); t=0xffff^t; enable();        /* (not t) + (clock()<<16) */
  return (clock()<<16)+t;
}

char GameStart(void)
{
  ulong start=0;
  timepass=0;
  while (!GameOver)
   {
     while (fclock()-start<=45000L); start=fclock();     /* 時間控制 */
     clear();                        /* 1.清屏. 以下5點為游戲的主循環 */
     timepass++;                     /* 2.時間基數++ */
     control();                      /* 3.事件處理   */
     drivers();                      /* 4.事件引擎   */
     show();                         /* 5.顯示       */
     if (--Sound<=0) nosound();             /* 聲音處理 */
     if ((timepass&3)==0) printf("%d\r",GameScore);    /* 到一定的時間更新顯示分數 */
     if (keys[KEY_ESC]) GameOver=1;
   }
  sound(105); delay(700); nosound();                    /* Game Over發音 */
  return 1;
}


/* 游戲的事件處理主程序分別處理星空和物體還有主角控制
* 通過掃描對象數組:Objs[MAX_OBJ]來完成,根據掃描到的對象屬性Objs[i].mode來判斷
* 到底是什么對象:敵機或者子彈。并進入相應的處理程序:分析對象的狀態,然后作出
* 調整,并重新更改狀態,這就是游戲編程同時處理眾多物體的核心思想。
*/
void control(void)
{ 
  int i,j,x,y, ok;
  
  /* 星星處理 */
  for (i=0;i<MAX_STAR;i++) { 
    Stars[i].y+=Stars[i].v;       /* 向下移動 */
    if (Stars[i].y>MAXY) {        /* 如果移出屏幕就讓它重新出現在屏幕上方某位置 */
    Stars[i].x=random(320);
    Stars[i].y=-random(60);
    }
    if (Stars[i].v==1) pixel(Stars[i].x,Stars[i].y,23);    /* 速度不一樣顏色也不一樣 */
      else pixel(Stars[i].x,Stars[i].y,28);
  }

  /* 對象處理 */
  for (i=0;i<MAX_OBJ;i++)                /* 掃描對象數組 */
   { x=Objs[i].x; y=Objs[i].y; ok=1;
     switch (Objs[i].mode)                /* mode表示敵人,子彈等 */
      {
    /* 敵人處理 */
    case 1: if (Objs[i].index==0) {
         switch (Objs[i].type)                  /* 檢測敵人的三種狀態 */
         { case 0: if (!random(30)) Objs[i].type=1; break; /* 3種動作狀態 */
           case 1: if (x<fly_x) x++; if (x>fly_x) x--;
               if (!random(40)) Objs[i].type=2; break;
           case 2:
           default:if (!random(3)) y+=3;
               break;
         }
         if (CheckHit(x,y,fly_x,fly_y,15)) fly_flag=0;    /* 與主角相撞 */
         putimage(x,y,fly_pic,0);
        } else { /* 如果被擊中就閃爍地繪制飛機,然后消失 */
         if ((Objs[i].index&3)==0) putimage(x,y,fly_pic,0);
         if (++Objs[i].index>50) Objs[i].mode=0;
        }
        y++; if (y>MAXY) Objs[i].mode=0;    /* 移出屏幕就清除 */
        break;
    /* 激光處理 */
    case 2: y-=4; if (y<-20) Objs[i].mode=0; drawfire(x,y);
        for (j=0;j<MAX_OBJ;j++)                 /* 檢查與敵機相碰 */
        if (Objs[j].mode==1&&CheckHit(x,y,Objs[j].x,Objs[j].y,15)&&
            !Objs[j].index&&ok)            /* 擊中敵機 */
         {
           Objs[j].index=1; ok=0; Objs[i].mode=0;
           sound(220); Sound=10; GameScore+=10;
         }
        break;
      }
     Objs[i].x=x; Objs[i].y=y;                /* 更新坐標 */
   }

  /* 主角控制 */
  if (keys[KEY_UP])  if (--fly_y<0) fly_y=0;         /* 如果上鍵被按下 */
  if (keys[KEY_DOWN]) if (++fly_y>MAXY) fly_y=MAXY;    /* 如果下鍵被按下 */
  if (keys[KEY_LEFT]) if (--fly_x<0) fly_x=0;        /* 如果左鍵被按下 */
  if (keys[KEY_RIGHT]) if (++fly_x>319) fly_x=319;    /* 如果右鍵被按下 */
  if (keys[KEY_CTRL]&&fire_flag) {             /* 如果按下CTRL */
     i=AllocObj(); Objs[i].x=fly_x,
     Objs[i].y=fly_y-10, Objs[i].mode=2; fire_flag=0;
  }
  if (!keys[KEY_CTRL]) fire_flag=1;            /* 如果放開CTRL */
  putimage(fly_x,fly_y,fly_pic,1);            /* 畫出主角     */
  if (!fly_flag) GameOver=1;                /* 判斷主角狀態 */
}

/* 控制產生敵人的部分 */
void drivers(void)
{
  if (random(30)==0)
  { int i=AllocObj(); Objs[i].x=random(320); Objs[i].y=-random(20);
    Objs[i].mode=1; Objs[i].type=Objs[i].index=0;
    if (!random(20)) Objs[i].type=2;
  }
}
  


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区三区免费看 | 日韩av一区二区三区| 91在线视频免费91| 综合av第一页| 欧美日韩一区 二区 三区 久久精品| 一区二区不卡在线视频 午夜欧美不卡在| 色天使色偷偷av一区二区| 夜夜嗨av一区二区三区中文字幕| 欧美在线视频日韩| 久久精品国产99国产| 精品国产91久久久久久久妲己| 国产麻豆视频精品| 136国产福利精品导航| 欧美色电影在线| 极品少妇一区二区| 国产精品黄色在线观看| 欧美日韩国产影片| 免费在线观看视频一区| 久久夜色精品国产噜噜av| 97se亚洲国产综合在线| 日韩影视精彩在线| 国产精品美女久久久久久久久| 色综合激情五月| 日本不卡一区二区三区| 2024国产精品| 一本色道综合亚洲| 麻豆精品视频在线观看视频| 国产精品久久一卡二卡| 欧美日韩国产一级片| 国产乱码精品1区2区3区| 最新热久久免费视频| 日韩一区二区不卡| 91啪亚洲精品| 国产一区二区不卡在线| 亚洲国产aⅴ天堂久久| 久久久精品免费网站| 欧美色图激情小说| 成人精品国产免费网站| 国产综合色产在线精品| 中文字幕一区二区三区在线不卡 | 日韩一区二区三区免费看| 国产91色综合久久免费分享| 亚洲一区精品在线| 久久精品欧美日韩| 8v天堂国产在线一区二区| 国产成人精品亚洲午夜麻豆| 日韩avvvv在线播放| 中文字幕日本乱码精品影院| 日韩欧美中文字幕公布| 91在线国内视频| 国产九色sp调教91| 久久精品国产99| 亚洲国产精品精华液网站| 国产精品萝li| 精品国产乱码久久久久久久久| 欧美日韩精品一区二区在线播放| 成人小视频在线观看| 捆绑调教一区二区三区| 午夜欧美在线一二页| 亚洲色图19p| 中文字幕欧美区| 欧美成人性战久久| 欧美精品日韩一区| 欧美亚洲国产一卡| 91色.com| 色综合久久中文综合久久牛| 成人免费高清在线| 国产69精品久久久久毛片| 精品一区二区三区视频在线观看| 视频一区国产视频| 同产精品九九九| 亚洲一区二区影院| 亚洲午夜在线电影| 一区二区久久久| 一区二区三区在线视频免费 | 久久电影网站中文字幕| 日韩av高清在线观看| 日本伊人色综合网| 日本午夜精品视频在线观看| 偷拍亚洲欧洲综合| 日本特黄久久久高潮| 日本一道高清亚洲日美韩| 免费成人你懂的| 久久成人精品无人区| 韩国v欧美v亚洲v日本v| 国产乱码一区二区三区| 国产成人亚洲精品狼色在线| 高清国产一区二区| hitomi一区二区三区精品| 成人av集中营| 91麻豆蜜桃一区二区三区| 欧美主播一区二区三区| 美日韩一区二区| 国产精品久久国产精麻豆99网站| 国产精品久久午夜| 亚洲精品一卡二卡| 亚洲午夜av在线| 免费观看一级特黄欧美大片| 久久av老司机精品网站导航| 国产精品中文欧美| 99re6这里只有精品视频在线观看| 色综合久久久久久久| 在线成人av网站| 精品国产伦一区二区三区观看方式 | 亚洲尤物视频在线| 三级不卡在线观看| 国产一区二区免费视频| av一二三不卡影片| 制服丝袜中文字幕亚洲| 久久久久久久综合| 亚洲精品免费视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品一区免费在线观看| 91尤物视频在线观看| 欧美日本乱大交xxxxx| 国产亚洲精品久| 一级中文字幕一区二区| 精品一区二区三区在线播放| av一区二区三区四区| 日韩欧美视频在线| 国产精品久久久久aaaa| 欧美aⅴ一区二区三区视频| 国产aⅴ精品一区二区三区色成熟| 欧美探花视频资源| 日本一区二区视频在线观看| 亚洲成人tv网| 国产成人在线视频免费播放| 欧美日韩免费一区二区三区| 中文成人av在线| 日本91福利区| 色综合一个色综合| 欧美精品一区二区在线播放| 一区二区三区在线免费| 国产精品资源网站| 日韩视频在线永久播放| 亚洲欧美偷拍卡通变态| 国产成人综合视频| 欧美一区二区三区小说| 一区二区三区免费观看| 成人免费看片app下载| 91精品国产综合久久小美女| 亚洲美女一区二区三区| 国产精品99久久久久久久vr| 欧美一区二视频| 性欧美疯狂xxxxbbbb| 波多野结衣一区二区三区 | 日韩欧美电影一区| 亚洲免费在线视频一区 二区| 国产一区二区在线影院| 91精品综合久久久久久| 一区二区三区在线看| 成人av一区二区三区| 久久综合九色综合97婷婷| 奇米色777欧美一区二区| 日本道免费精品一区二区三区| 国产精品全国免费观看高清 | 欧美一区二区在线免费播放| 亚洲男人电影天堂| 91在线观看高清| 亚洲国产高清在线观看视频| 国产成人综合亚洲网站| 精品国产凹凸成av人导航| 日本aⅴ亚洲精品中文乱码| 91精品国产综合久久久蜜臀图片 | 欧美国产综合一区二区| 国产一区二区三区免费看| 精品国产区一区| 激情六月婷婷综合| 精品久久久久99| 青青草精品视频| 777奇米四色成人影色区| 亚洲超碰97人人做人人爱| 在线视频欧美精品| 一区二区三区四区不卡在线| 欧美亚洲禁片免费| 视频在线观看一区| 日韩欧美第一区| 国产精品综合二区| 中文字幕不卡一区| 92精品国产成人观看免费| 亚洲麻豆国产自偷在线| 日本久久精品电影| 亚洲午夜国产一区99re久久| 91超碰这里只有精品国产| 日韩中文字幕一区二区三区| 精品嫩草影院久久| 国产精品不卡一区二区三区| 欧美aaaaa成人免费观看视频| 欧美变态tickle挠乳网站| 国产真实乱偷精品视频免| 国产亚洲一区字幕| 99热这里都是精品| 香蕉加勒比综合久久| 欧美大片拔萝卜| 成人av电影在线| 亚洲电影第三页| 久久日一线二线三线suv| av中文字幕不卡| 天堂一区二区在线| 久久婷婷国产综合国色天香|