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

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

?? ship.txt

?? 潛艇大戰大戰 帶源程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
/*   這里把三個文件放在了一起,編譯時需要把本文件分成三   */
/*部分,文件名分別為:13H.H,TIMER.H,SHIP.C。其中13H.H是  */
/*VGA 13H 模式下作圖的一些基本函數。本程序用申請的64000  */
/*字節作為后臺活動頁,作圖完成后一次性拷貝到顯示緩沖區。 */
/*TIMER.H是整個程序的時鐘系統。SHIP.C是主程序。          */

/*********************************************************/
/*                     文件:13H.H                       */
/*********************************************************/
/*********************************************************/

/* 此處定義了一些通用的宏 */
# define  BYTE         unsigned char
# define  BOOL         BYTE
# define  WORD         unsigned int
# define  DWORD        unsigned long

# define  TRUE         1
# define  FALSE        !TRUE

/* BIOS 8*8 西文字庫的段地址和偏移量 */
WORD FONT_SEG;
WORD FONT_OFF;

/* 顯示后臺活動頁地址 */
void far * Video;

/* 獲取BIOS 8*8 西文字庫的段地址和偏移量 */
void GetFontAdd()
{
  struct REGPACK regs;
  regs.r_bx=0x0300;
  regs.r_ax=0x1130;
  intr(0x10,&regs);
  FONT_SEG=regs.r_es;
  FONT_OFF=regs.r_bp;
}

/* 向后臺活動頁寫像素 */
void Pset(int x,int y,BYTE color)
{
  if ((x>=0)&&(x<320)&&(y>=0)&&(y<200))
     *((BYTE far*)Video+y*320+x)=color;
}

/* 等待鍵盤輸入 */
void wait()
{
  _AX=0;
  geninterrupt(0x16);
}

/* 設置VGA 13H模式 */
void setmode()
{
  _AX=0x13;
  geninterrupt(0x10);
  GetFontAdd();
}

/* 設置文本模式 */
void closemode()
{
  _AX=0x3;
  geninterrupt(0x10);
}

/* 設置調色板 */
void setpal(int Color,BYTE r,BYTE g,BYTE b)
{
  outportb(0x3c8,Color);
  outportb(0x3c9,r);
  outportb(0x3c9,g);
  outportb(0x3c9,b);
}

/* 屏幕定位(用于輸出字符)*/
void locate(int Line,int Col)
{
  _DH=Line;
  _DL=Col;
  _AH=2;
  _BX=0;
  geninterrupt(0x10);
}

/* 從鍵盤緩沖區內直接讀出掃描碼 */
BYTE ScanKey(void)
{
  int  start,end;
  WORD key=0;
  start=peek(0,0x41a);
  end=peek(0,0x41c);
  if (start==end) return(0);
  else
  {
    key=peek(0x40,start);
    start+=2;
    if (start==0x3e) start=0x1e;
    poke(0x40,0x1a,start);
    return(key/256);
  }
}

/* 畫背景 */
void ClearScreen()
{
  int x,y;
  for (y=0;y<5;y++) for (x=0;x<320;x++) Pset(x,y,16);
  for (y=5;y<10;y++) for (x=0;x<320;x++) Pset(x,y,104);
  for (y=10;y<15;y++) for (x=0;x<320;x++) Pset(x,y,33);
  for (y=15;y<20;y++) for (x=0;x<320;x++) Pset(x,y,103);
  for (y=20;y<25;y++) for (x=0;x<320;x++) Pset(x,y,32);
  for (y=25;y<30;y++) for (x=0;x<320;x++) Pset(x,y,64);
  for (y=30;y<40;y++) for (x=0;x<320;x++) Pset(x,y,99);
  for (y=40;y<60;y++) for (x=0;x<320;x++) Pset(x,y,97);
  for (y=60;y<100;y++) for (x=0;x<320;x++) Pset(x,y,53);
  for (y=100;y<200;y++) for (x=0;x<320;x++) Pset(x,y,2);
}

/* 刷新屏幕 */
void ReFresh(void)
{
  movedata(FP_SEG(Video),FP_OFF(Video),0xa000,0,64000);
}

/* 輸出字符到顯示后臺活動頁 */
void OutChar(int x0,int y0,int ch,BYTE Color)
{
  int  x,y;
  BYTE c;
  for (y=0;y<8;y++)
  {
      c=peekb(FONT_SEG,FONT_OFF+ch*8+y);
      for (x=0;x<8;x++)
      {
          if (c&(1<<(7-x))) Pset(x+x0*8,y+y0*8,Color);
      }
  }
}

/* 輸出字符串到顯示后臺活動頁 */
void OutString(int x,int y,char *p,BYTE Color)
{
  while (*p)
  {
    OutChar(x++,y,*p++,Color);
    if (x==40)
    {
       x=0;
       y++;
    }
  }
}


/*********************************************************/
/*                     文件:TIMER.H                     */
/*********************************************************/
/*********************************************************/

/* 系統可用計時器的最大數目 */
# define  MAXTIMER     10

/* 計時器結構 */
struct TM
{
  DWORD Interval;              /*      間隔       */
  DWORD LastTimer;             /* 上次時間發生時間*/
  BOOL  Enable;                /*      活動       */
  BOOL  Used;                  /*      可用       */
  void  (*Pointer)();          /*   事件遠指針    */
};

struct TM tmTM[MAXTIMER+1];
int    TimerUsed=0;

/* 獲取BIOS計數器數值 */
DWORD BiosTimer(void)
{
  DWORD BIOSTIMER=0;
  BIOSTIMER=peek(0x0,0x46e);
  BIOSTIMER<<=8;
  BIOSTIMER+=peek(0x0,0x46c);
  return (BIOSTIMER);
}

/* 時間事件(時鐘系統核心) */
void TimerEvent()
{
  int   i;
  DWORD TimerDiff;

  for (i=1;i<=MAXTIMER;i++)
  {
      if (tmTM[i].Used&&tmTM[i].Enable)
      {
         TimerDiff=BiosTimer()-tmTM[i].LastTimer;
	 if (tmTM[i].Interval<=TimerDiff)
         {
            tmTM[i].Pointer();
            tmTM[i].LastTimer=BiosTimer();
         }
      }
  }
}

/* 創建一個時鐘(成功返回時鐘的句柄,否則返回NULL) */
int CreateTimer(DWORD Interval,void (*Pointer)())
{
  int i=0;
  if (TimerUsed==MAXTIMER) return NULL;

  while (tmTM[++i].Used);

  tmTM[i].Pointer=Pointer;
  tmTM[i].Interval=Interval;
  tmTM[i].Enable=TRUE;
  tmTM[i].Used=TRUE;
  tmTM[i].LastTimer=BiosTimer();

  TimerUsed++;
  return i;
}

/* 刪除一個時鐘 */
void KillTimer(int *TimerID)
{
  if (tmTM[*TimerID].Used)
  {
     TimerUsed--;
     tmTM[*TimerID].Used=FALSE;
  }
  *TimerID=0;
}

/* 刪除所有時鐘 */
void KillAllTimer()
{
  int i;
  for (i=0;i<=MAXTIMER;i++) tmTM[i].Used=FALSE;
  TimerUsed=0;
}

/*********************************************************/
/*                     文件:SHIP.C                      */
/*********************************************************/
/*********************************************************/

# include <dos.h>
# include "13h.h"
# include <time.h>
# include <stdio.h>
# include "timer.h"
# include <alloc.h>
# include <stdlib.h>

struct stBOMB
{
  int  x;
  int  y;
  BOOL Used;
};

struct stEXPL
{
  int  x;
  int  y;
  BYTE Num;
  BOOL Used;
};

struct stSHIP
{
  int  x;
  int  y;
  BOOL Used;
  BYTE Dir;
  BYTE Type;
};

struct stTORP
{
  int  x;
  int  y;
  BOOL Used;
};

struct stBOMB bbBomb[21];
struct stSHIP spShip[21];
struct stTORP tpTorp[21];
struct stEXPL elExpl[21];

int BombUsed=0;
int ShipUsed=0;
int TorpUsed=0;
int ExplUsed=0;

int MAXBOMB=5;
int MAXSHIP=3;
int MAXTORP=5;
int MAXEXPL=5;

int ID_Timer[MAXTIMER+1];
int ID_Bomb[21];
int ID_Ship[21];
int ID_Torp[21];
int ID_Expl[21];

BOOL DISP=TRUE;
BOOL CLS=FALSE;
BOOL bPaint=FALSE;
BOOL ALIVE=TRUE;
BOOL SOUND=TRUE;
BOOL Flash=FALSE;
BOOL DONE=FALSE;
BYTE SHIP[2][32][64];
BYTE BOMB[32][32];
BYTE TORP[16][16];
BYTE PAL[256][3];
BYTE STR[80];
BYTE far * PIC_EXPL;
BYTE far * PIC_SHIP;
void far * Back1;
void far * Back2;

int  MyX=0;
int  MyY=0;
int  Life=3;
int  Score=25;
int  LevelScore=25;
int  Level=0;
int  Step=0;

char *Info="\
\
\
Welcome to play this game!\
\n\
\n\
\n\
	  In this game,you will drive a warship to fight with\n\
	the submarines.\n\n\
	     KEYS:\n\
	     'Left' and 'Right' keys to move your warship.\n\
	     'Space bar' or 'Ctrl' key to send bombs.\n\
	     'S' key is a sound switch.\n\
	     'D' key is a state switch.\n\n\
							      \n\
					 \n\n\
			       GOOD LUCK!\0";

/* 調色板漸入 */
void StepIn()
{
  int i;
  for (i=0;i<256;i++) setpal(i,PAL[i][0]*Step/64,PAL[i][1]*Step/64,PAL[i][2]*Step/64);
  Step++;
  if (Step>64) KillAllTimer();
}

/* 調色板漸出 */
void StepOut()
{
  int i;
  for (i=0;i<256;i++) setpal(i,PAL[i][0]*Step/64,PAL[i][1]*Step/64,PAL[i][2]*Step/64);
  Step--;
  if (Step<1) KillAllTimer();
}
void OutInfo()
{
 if (*Info++)
 {
    sound(1000);
    printf("%c",*(Info-1));
    nosound();
 }
 else
   KillAllTimer();
}

/* 顯示開始畫面 */
void Logo()
{
  FILE *bmp;
  int  i,r,g,b,x,y;

  setmode();
  bmp=fopen("logo.bmp","rb");
  fseek(bmp,54,SEEK_SET);
  for (i=0;i<256;i++)
  {
      PAL[i][2]=fgetc(bmp)>>2;
      PAL[i][1]=fgetc(bmp)>>2;
      PAL[i][0]=fgetc(bmp)>>2;
      fgetc(bmp);
      setpal(i,0,0,0);
  }

  for (y=0;y<200;y++)
      for (x=0;x<320;x++) pokeb(0xa000,y*320+x,fgetc(bmp));

  fclose(bmp);
  CreateTimer(1,StepIn);
  while (ScanKey()!=57&&TimerUsed) TimerEvent();
  Step=64;
  StepIn();
  wait();
  CreateTimer(1,StepOut);
  while (ScanKey()!=57&&TimerUsed) TimerEvent();
  Step=0;
  StepOut();
  closemode();
  CreateTimer(2,OutInfo);
  locate(6,26);
  while (ScanKey()!=57&&TimerUsed) TimerEvent();
  while (*Info++) printf("%c",*(Info-1));
  wait();
}
void KillSelf()
{
  if (SOUND)
  {
     sound(1000);
     delay(1000);
     nosound();
  }
  Life--;
  if (Life<0) ALIVE=FALSE;
}

/* 設置系統所有調色板 */
void SetAllPal()
{
  FILE *act;
  int  i,r,g,b;

  act=fopen("comm.act","rb");
  for (i=0;i<256;i++)
  {
      r=fgetc(act)>>2;
      g=fgetc(act)>>2;
      b=fgetc(act)>>2;
      setpal(i,r,g,b);
  }
  fclose(act);
}

/* 從位圖中讀出各個物體的形狀 */
void readboat()
{
  FILE *bmp;
  int  x,y;

  bmp=fopen("boat.bmp","rb");
  fseek(bmp,1078,SEEK_SET);
  for (y=0;y<32;y++)
  {
      for (x=0;x<64;x++) SHIP[0][31-y][x]=fgetc(bmp);
      for (x=0;x<64;x++) SHIP[1][31-y][x]=fgetc(bmp);
  }
  fclose(bmp);
}
void readbomb()
{
  FILE *bmp;
  int  x,y;

  bmp=fopen("bomb.bmp","rb");
  fseek(bmp,516,SEEK_SET);
  for (y=0;y<32;y++)
      for (x=0;x<32;x++) BOMB[31-y][x]=fgetc(bmp);
  fclose(bmp);
}
void readtorp()
{
  FILE *bmp;
  int  x,y;

  bmp=fopen("torp.bmp","rb");
  fseek(bmp,516,SEEK_SET);
  for (y=0;y<16;y++)
      for (x=0;x<16;x++) TORP[15-y][x]=fgetc(bmp);
  fclose(bmp);
}
void readship()
{
  FILE *bmp;
  long i;

  PIC_SHIP=Back2;
  bmp=fopen("ship.bmp","rb");
  fseek(bmp,1078,SEEK_SET);
  for (i=0;i<10080;i++)
          *PIC_SHIP++=fgetc(bmp);
  fclose(bmp);
}
void readexpl()
{
  FILE *bmp;
  long i;

  PIC_EXPL=Back1;
  bmp=fopen("expl.bmp","rb");
  fseek(bmp,1078,SEEK_SET);
  for (i=0;i<59520;i++)
	  *PIC_EXPL++=fgetc(bmp);
  fclose(bmp);
}
void bomb(int xx,int yy)
{
  int y,x;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久综合| 久久99精品视频| 亚洲柠檬福利资源导航| 久久这里只有精品6| 中文字幕精品一区| 一区二区三区国产| 奇米四色…亚洲| 日韩中文字幕麻豆| 视频一区二区不卡| 国产精品自拍一区| 国产一区二区福利视频| 久久99精品国产麻豆婷婷| 日韩 欧美一区二区三区| 国产成人免费9x9x人网站视频| 一本色道久久综合亚洲精品按摩| 8x8x8国产精品| 国产精品丝袜久久久久久app| 亚洲一区二区成人在线观看| 看国产成人h片视频| 99久久久久久99| 91美女在线看| 欧美精品一区二区久久婷婷| 亚洲女性喷水在线观看一区| 亚洲激情图片一区| 一区二区三区日韩精品视频| 激情成人午夜视频| 欧美三级日韩三级国产三级| 国产亚洲成年网址在线观看| 国产女人水真多18毛片18精品视频| 亚洲最色的网站| 国产精品一区二区在线播放 | 久久久午夜精品理论片中文字幕| 中文字幕亚洲成人| 一区二区高清视频在线观看| 国产在线观看一区二区| 欧美色图免费看| 欧美电影精品一区二区| 亚洲精品五月天| 国产毛片一区二区| av亚洲产国偷v产偷v自拍| 99久久精品免费| 久久综合九色综合欧美98| 亚洲中国最大av网站| 日韩av中文在线观看| 91在线视频官网| 久久精品夜色噜噜亚洲aⅴ| 日韩制服丝袜先锋影音| 国产在线精品视频| av在线不卡电影| 精品久久久久香蕉网| 日韩黄色小视频| 高清日韩电视剧大全免费| 91精品国产一区二区| 一区二区三区精品视频| 91视视频在线观看入口直接观看www | 一区二区三区不卡视频 | 精品久久人人做人人爽| 风间由美中文字幕在线看视频国产欧美| 国产麻豆日韩欧美久久| 91精品国产综合久久久久久漫画| 亚洲精品国产品国语在线app| 亚洲图片自拍偷拍| 国产综合成人久久大片91| 91精品黄色片免费大全| 亚洲午夜激情网站| 精品一区二区日韩| 日韩精品一区二区三区视频在线观看| 国产精品拍天天在线| 国产乱码精品1区2区3区| 欧美大黄免费观看| 麻豆视频观看网址久久| 972aa.com艺术欧美| 国产欧美日本一区视频| 婷婷综合久久一区二区三区| 欧美性视频一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 精品无人区卡一卡二卡三乱码免费卡 | 欧美日韩一区二区在线观看| 国产目拍亚洲精品99久久精品| 亚洲永久免费视频| 国产一区二区三区美女| 欧美精品一区二区久久婷婷| 夜夜操天天操亚洲| 波多野结衣中文字幕一区二区三区| 久久久.com| 国产iv一区二区三区| 国产精品免费人成网站| 91丨porny丨国产入口| 久久嫩草精品久久久精品| 国产精品一区二区黑丝| 国产欧美一区二区精品婷婷| 白白色 亚洲乱淫| 中文字幕在线一区免费| 91看片淫黄大片一级在线观看| 亚洲欧洲综合另类在线| 欧美日韩一区 二区 三区 久久精品| 亚洲国产日韩av| 成人一二三区视频| 亚洲欧美日韩小说| 成人丝袜视频网| 中文字幕在线视频一区| 一本到一区二区三区| 一二三四社区欧美黄| 欧美福利一区二区| 亚洲狠狠丁香婷婷综合久久久| 国产精品1区2区| 亚洲日本丝袜连裤袜办公室| 欧美日韩精品一区二区| 久久国产精品99精品国产| 久久精品欧美一区二区三区麻豆| 成人av集中营| 国产精品美女久久久久aⅴ | 亚洲国产精品久久人人爱| 成人av综合一区| 久久久久久久一区| 老司机精品视频导航| 国产欧美一区二区三区在线看蜜臀 | 日韩欧美一区二区视频| 一区二区三区日韩在线观看| 99精品在线观看视频| 日韩精品三区四区| 欧美天天综合网| 一区二区三区中文字幕| 欧美r级电影在线观看| 青青青伊人色综合久久| 国产精品污污网站在线观看| 欧美亚洲图片小说| 国产酒店精品激情| www亚洲一区| 国产传媒日韩欧美成人| 午夜久久福利影院| 欧美一区二区三区免费在线看 | 国产精品视频一区二区三区不卡| 91天堂素人约啪| 亚洲另类色综合网站| 91在线观看高清| 亚洲精品视频在线看| 精品国产精品网麻豆系列 | 一区二区三区四区高清精品免费观看| 91精品国产综合久久久久久久| 成人黄色电影在线 | 精品国产伦一区二区三区免费| 99精品视频免费在线观看| 成人欧美一区二区三区视频网页| 欧美一级淫片007| 蜜乳av一区二区三区| xf在线a精品一区二区视频网站| 国产一区二区不卡老阿姨| 国产亚洲欧美日韩在线一区| 国产不卡视频在线播放| 天天色图综合网| 亚洲天堂成人网| 国产欧美一区二区在线| 日韩欧美不卡在线观看视频| 久久99国内精品| 亚洲成人在线网站| 亚洲欧美一区二区不卡| 欧美挠脚心视频网站| 99精品国产99久久久久久白柏 | 国产精品精品国产色婷婷| 日本精品视频一区二区| 亚洲成av人**亚洲成av**| 国产精品成人免费精品自在线观看 | 一区二区不卡在线播放| 欧美高清一级片在线观看| 日本伦理一区二区| 日韩精品一级二级 | 欧美日韩中文国产| 91在线播放网址| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 国产一区福利在线| 日韩高清一区在线| 国产日韩三级在线| 精品国产一区二区在线观看| 91麻豆精品国产91久久久使用方法 | 欧美一区二区网站| 欧美日韩国产综合一区二区 | 亚洲永久免费av| 亚洲另类在线制服丝袜| 亚洲欧洲综合另类在线| 欧美一区二区三区视频在线观看 | 日韩在线一区二区三区| 国产喂奶挤奶一区二区三区| 精品99久久久久久| 在线观看免费亚洲| 国产精品 欧美精品| 国产一区二区三区不卡在线观看| 亚洲精品亚洲人成人网| 亚洲女同ⅹxx女同tv| 精品成人一区二区三区| 色噜噜狠狠成人网p站| 色偷偷成人一区二区三区91| 捆绑调教美女网站视频一区| 亚洲精品水蜜桃| 亚洲国产日产av| 视频一区免费在线观看| 麻豆91精品91久久久的内涵| 亚洲综合网站在线观看| 中文字幕免费在线观看视频一区| 国产精品免费人成网站|