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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? digger.c

?? 經(jīng)典的老游戲digger的源代碼.提起digger相信很多人會(huì)回憶起曾經(jīng)為了它挑燈夜戰(zhàn)的時(shí)光
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* Digger Remastered
   Copyright (c) Andrew Jenner 1998-2004 */

#include "def.h"
#include "sprite.h"
#include "input.h"
#include "hardware.h"
#include "digger.h"
#include "drawing.h"
#include "main.h"
#include "sound.h"
#include "monster.h"
#include "scores.h"
#include "bags.h"

#ifdef _WINDOWS
#include "win_dig.h"
#endif

struct digger
{
  Sint4 x,y,h,v,rx,ry,mdir,dir,bagtime,rechargetime,fx,fy,fdir,expsn,
        deathstage,deathbag,deathani,deathtime,emocttime,emn,msc,lives,ivt;
  bool notfiring,alive,firepressed,dead,levdone,invin;
} digdat[DIGGERS];

Sint4 startbonustimeleft=0,bonustimeleft;

Sint4 emmask=0;

Sint3 emfield[MSIZE];

bool bonusvisible=FALSE,bonusmode=FALSE,digvisible;

void updatedigger(int n);
void diggerdie(int n);
void initbonusmode(void);
void endbonusmode(void);
bool getfirepflag(int n);
void drawdig(int n,int d,int x,int y,bool f);

void initdigger(void)
{
  int dig;
  for (dig=curplayer;dig<diggers+curplayer;dig++) {
    if (digdat[dig].lives==0)
      continue;
    digdat[dig].v=9;
    digdat[dig].mdir=4;
    digdat[dig].h=(diggers==1) ? 7 : (8-dig*2);
    digdat[dig].x=digdat[dig].h*20+12;
    digdat[dig].dir=(dig==0) ? DIR_RIGHT : DIR_LEFT;
    digdat[dig].rx=0;
    digdat[dig].ry=0;
    digdat[dig].bagtime=0;
    digdat[dig].alive=TRUE;
    digdat[dig].dead=FALSE; /* alive !=> !dead but dead => !alive */
    digdat[dig].invin=FALSE;
    digdat[dig].ivt=0;
    digdat[dig].deathstage=1;
    digdat[dig].y=digdat[dig].v*18+18;
    movedrawspr(dig+FIRSTDIGGER-curplayer,digdat[dig].x,digdat[dig].y);
    digdat[dig].notfiring=TRUE;
    digdat[dig].emocttime=0;
    digdat[dig].firepressed=FALSE;
    digdat[dig].expsn=0;
    digdat[dig].rechargetime=0;
    digdat[dig].emn=0;
    digdat[dig].msc=1;
  }
  digvisible=TRUE;
  bonusvisible=bonusmode=FALSE;
}

Uint5 curtime,ftime;

#ifdef INTDRF
Uint5 frame;
#endif

void newframe(void)
{

#ifndef ARM

  Uint5 t;
  if (synchvid) {
    for (;curtime<ftime;curtime+=17094) { /* 17094 = ticks in a refresh */
      do_windows_events();
      fillbuffer();
      gretrace();
      checkkeyb();
    }
    curtime-=ftime;
    fillbuffer();
  }
  else {
    do {
#ifdef _WINDOWS
      do_windows_events();
#endif
      fillbuffer();             /* Idle time */
      t=gethrt();
      checkkeyb();
#ifdef _WINDOWS
      if (suspend_game)
        continue;
      if ( ( (unsigned long double)curtime + (unsigned long double)ftime ) <= (unsigned long double)t )
        break;
      if ((unsigned long double)t < (unsigned long double) curtime)
        break;

    } while (TRUE);
//    } while ((((unsigned long double)t<((unsigned long double)curtime+(unsigned long double)ftime)) && ((unsigned long double)t>=(unsigned long double) curtime)) || suspend_game);
#else
    } while (curtime+ftime>t && t>curtime);
#endif
    curtime=t;
  }

#else

  for (;curtime<ftime;curtime+=15000) {
    fillbuffer();
    gretrace();
    soundint();
    checkkeyb();
  }
  curtime-=ftime;

#endif

#ifdef INTDRF
  frame++;
#endif

}

Uint5 cgtime;

void drawdig(int n,int d,int x,int y,bool f)
{
  drawdigger(n-curplayer,d,x,y,f);
  if (digdat[n].invin) {
    digdat[n].ivt--;
    if (digdat[n].ivt==0)
      digdat[n].invin=FALSE;
    else
      if (digdat[n].ivt%10<5)
        erasespr(FIRSTDIGGER+n-curplayer);
  }
}

void dodigger(void)
{
  int n;
  newframe();
  if (gauntlet) {
    drawlives();
    if (cgtime<ftime)
      timeout=TRUE;
    cgtime-=ftime;
  }
  for (n=curplayer;n<diggers+curplayer;n++) {
    if (digdat[n].expsn!=0)
      drawexplosion(n);
    else
      updatefire(n);
    if (digvisible)
      if (digdat[n].alive)
        if (digdat[n].bagtime!=0) {
          drawdig(n,digdat[n].mdir,digdat[n].x,digdat[n].y,
                  digdat[n].notfiring && digdat[n].rechargetime==0);
          incpenalty();
          digdat[n].bagtime--;
        }
        else
          updatedigger(n);
      else
        diggerdie(n);
    if (digdat[n].emocttime>0)
      digdat[n].emocttime--;
  }
  if (bonusmode && isalive()) {
    if (bonustimeleft!=0) {
      bonustimeleft--;
      if (startbonustimeleft!=0 || bonustimeleft<20) {
        startbonustimeleft--;
        if (bonustimeleft&1) {
          ginten(0);
          soundbonus();
        }
        else {
          ginten(1);
          soundbonus();
        }
        if (startbonustimeleft==0) {
          music(0);
          soundbonusoff();
          ginten(1);
        }
      }
    }
    else {
      endbonusmode();
      soundbonusoff();
      music(1);
    }
  }
  if (bonusmode && !isalive()) {
    endbonusmode();
    soundbonusoff();
    music(1);
  }
}

void updatefire(int n)
{
  Sint4 pix;
  int clfirst[TYPES],clcoll[SPRITES],i;
  bool clflag;
  if (digdat[n].notfiring) {
    if (digdat[n].rechargetime!=0)
      digdat[n].rechargetime--;
    else
      if (getfirepflag(n-curplayer))
        if (digdat[n].alive) {
          digdat[n].rechargetime=levof10()*3+60;
          digdat[n].notfiring=FALSE;
          switch (digdat[n].dir) {
            case DIR_RIGHT:
              digdat[n].fx=digdat[n].x+8;
              digdat[n].fy=digdat[n].y+4;
              break;
            case DIR_UP:
              digdat[n].fx=digdat[n].x+4;
              digdat[n].fy=digdat[n].y;
              break;
            case DIR_LEFT:
              digdat[n].fx=digdat[n].x;
              digdat[n].fy=digdat[n].y+4;
              break;
            case DIR_DOWN:
              digdat[n].fx=digdat[n].x+4;
              digdat[n].fy=digdat[n].y+8;
          }
          digdat[n].fdir=digdat[n].dir;
          movedrawspr(FIRSTFIREBALL+n-curplayer,digdat[n].fx,digdat[n].fy);
          soundfire(n);
        }
  }
  else {
    switch (digdat[n].fdir) {
      case DIR_RIGHT:
        digdat[n].fx+=8;
        pix=ggetpix(digdat[n].fx,digdat[n].fy+4)|
            ggetpix(digdat[n].fx+4,digdat[n].fy+4);
        break;
      case DIR_UP:
        digdat[n].fy-=7;
        pix=0;
        for (i=0;i<7;i++)
          pix|=ggetpix(digdat[n].fx+4,digdat[n].fy+i);
        pix&=0xc0;
        break;
      case DIR_LEFT:
        digdat[n].fx-=8;
        pix=ggetpix(digdat[n].fx,digdat[n].fy+4)|
            ggetpix(digdat[n].fx+4,digdat[n].fy+4);
        break;
      case DIR_DOWN:
        digdat[n].fy+=7;
        pix=0;
        for (i=0;i<7;i++)
          pix|=ggetpix(digdat[n].fx,digdat[n].fy+i);
        pix&=0x3;
        break;
    }
    drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0);
    for (i=0;i<TYPES;i++)
      clfirst[i]=first[i];
    for (i=0;i<SPRITES;i++)
      clcoll[i]=coll[i];
    incpenalty();
    i=clfirst[2];
    while (i!=-1) {
      killmon(i-FIRSTMONSTER);
      scorekill(n);
      digdat[n].expsn=1;
      i=clcoll[i];
    }
    i=clfirst[4];
    while (i!=-1) {
      if (i-FIRSTDIGGER+curplayer!=n && !digdat[i-FIRSTDIGGER+curplayer].invin
          && digdat[i-FIRSTDIGGER+curplayer].alive) {
        killdigger(i-FIRSTDIGGER+curplayer,3,0);
        digdat[n].expsn=1;
      }
      i=clcoll[i];
    }
    if (clfirst[0]!=-1 || clfirst[1]!=-1 || clfirst[2]!=-1 || clfirst[3]!=-1 ||
        clfirst[4]!=-1)
      clflag=TRUE;
    else
      clflag=FALSE;
    if (clfirst[0]!=-1 || clfirst[1]!=-1 || clfirst[3]!=-1) {
      digdat[n].expsn=1;
      i=clfirst[3];
      while (i!=-1) {
        if (digdat[i-FIRSTFIREBALL+curplayer].expsn==0)
          digdat[i-FIRSTFIREBALL+curplayer].expsn=1;
        i=clcoll[i];
      }
    }
    switch (digdat[n].fdir) {
      case DIR_RIGHT:
        if (digdat[n].fx>296)
          digdat[n].expsn=1;
        else
          if (pix!=0 && !clflag) {
            digdat[n].expsn=1;
            digdat[n].fx-=8;
            drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0);
          }
        break;
      case DIR_UP:
        if (digdat[n].fy<15)
          digdat[n].expsn=1;
        else
          if (pix!=0 && !clflag) {
            digdat[n].expsn=1;
            digdat[n].fy+=7;
            drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0);
          }
        break;
      case DIR_LEFT:
        if (digdat[n].fx<16)
          digdat[n].expsn=1;
        else
          if (pix!=0 && !clflag) {
            digdat[n].expsn=1;
            digdat[n].fx+=8;
            drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0);
          }
        break;
      case DIR_DOWN:
        if (digdat[n].fy>183)
          digdat[n].expsn=1;
        else
          if (pix!=0 && !clflag) {
            digdat[n].expsn=1;
            digdat[n].fy-=7;
            drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,0);
          }
    }
  }
}

void erasediggers(void)
{
  int i;
  for (i=0;i<diggers;i++)
    erasespr(FIRSTDIGGER+i);
  digvisible=FALSE;
}

void drawexplosion(int n)
{
  switch (digdat[n].expsn) {
    case 1:
      soundexplode(n);
    case 2:
    case 3:
      drawfire(n-curplayer,digdat[n].fx,digdat[n].fy,digdat[n].expsn);
      incpenalty();
      digdat[n].expsn++;
      break;
    default:
      killfire(n);
      digdat[n].expsn=0;
  }
}

void killfire(int n)
{
  if (!digdat[n].notfiring) {
    digdat[n].notfiring=TRUE;
    erasespr(FIRSTFIREBALL+n-curplayer);
    soundfireoff(n);
  }
}

void updatedigger(int n)
{
  Sint4 dir,ddir,diggerox,diggeroy,nmon;
  bool push=TRUE,bagf;
  int clfirst[TYPES],clcoll[SPRITES],i;
  readdir(n-curplayer);
  dir=getdir(n-curplayer);
  if (dir==DIR_RIGHT || dir==DIR_UP || dir==DIR_LEFT || dir==DIR_DOWN)
    ddir=dir;
  else
    ddir=DIR_NONE;
  if (digdat[n].rx==0 && (ddir==DIR_UP || ddir==DIR_DOWN))
    digdat[n].dir=digdat[n].mdir=ddir;
  if (digdat[n].ry==0 && (ddir==DIR_RIGHT || ddir==DIR_LEFT))
    digdat[n].dir=digdat[n].mdir=ddir;
  if (dir==DIR_NONE)
    digdat[n].mdir=DIR_NONE;
  else
    digdat[n].mdir=digdat[n].dir;
  if ((digdat[n].x==292 && digdat[n].mdir==DIR_RIGHT) ||
      (digdat[n].x==12 && digdat[n].mdir==DIR_LEFT) ||
      (digdat[n].y==180 && digdat[n].mdir==DIR_DOWN) ||
      (digdat[n].y==18 && digdat[n].mdir==DIR_UP))

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
高清在线观看日韩| 欧美私人免费视频| 最新中文字幕一区二区三区| 99精品视频在线播放观看| 亚洲精品视频一区二区| 在线看不卡av| 奇米影视在线99精品| 久久夜色精品一区| heyzo一本久久综合| 夜色激情一区二区| 日韩一区国产二区欧美三区| 国产综合色在线视频区| 成人欧美一区二区三区小说| 欧美日韩一区二区三区四区| 美女视频黄 久久| 中文久久乱码一区二区| 在线精品视频免费观看| 久久精品国产网站| 国产精品国产精品国产专区不蜜| 欧美日韩精品三区| 国产主播一区二区| 亚洲免费观看高清完整版在线观看| 欧美日韩国产高清一区二区三区| 国产一区在线观看视频| 亚洲精品久久7777| 精品美女在线播放| 99精品久久99久久久久| 日本亚洲三级在线| 欧美高清在线视频| 欧美日韩1234| 丁香六月综合激情| 天堂av在线一区| 欧美激情一区二区三区不卡| 欧美三级午夜理伦三级中视频| 黄色小说综合网站| 亚洲综合激情另类小说区| 精品国产1区二区| 91国产免费看| 国产精品影视网| 亚洲成人动漫av| 欧美极品另类videosde| 欧美日韩精品电影| 成人av网在线| 欧美aaa在线| 亚洲欧美一区二区三区国产精品 | 欧美三级电影在线观看| 国产毛片精品国产一区二区三区| 亚洲综合激情网| 日本一区二区三区四区| 91精品国产91热久久久做人人| www.色综合.com| 精品在线播放免费| 亚洲成人资源在线| 中文字幕人成不卡一区| 欧美va亚洲va在线观看蝴蝶网| 91精品福利视频| 成人一区二区在线观看| 青青草视频一区| 一区二区不卡在线视频 午夜欧美不卡在| 精品乱人伦小说| 欧美日韩精品二区第二页| av激情成人网| 国产精品一区二区久久不卡| 日韩成人免费电影| 亚洲综合小说图片| 国产精品三级久久久久三级| 精品国偷自产国产一区| 欧美精品日日鲁夜夜添| 色综合天天综合网天天狠天天 | 欧美经典三级视频一区二区三区| 日韩一区二区免费高清| 欧美色欧美亚洲另类二区| aa级大片欧美| 国产91色综合久久免费分享| 精彩视频一区二区| 青青草原综合久久大伊人精品优势| 一区二区三区自拍| 自拍偷拍国产精品| 日本一区二区动态图| 久久毛片高清国产| 日韩免费一区二区| 这里只有精品免费| 欧美日韩一二三| 欧美中文字幕一区| 色天天综合色天天久久| av在线一区二区三区| 国产成人自拍网| 国产精品99久久久| 激情综合网最新| 老汉av免费一区二区三区| 日韩av一区二区三区四区| 午夜精品久久久久| 偷拍自拍另类欧美| 亚洲超碰精品一区二区| 亚洲高清三级视频| 亚洲国产欧美在线人成| 亚洲一区二区三区四区中文字幕| 亚洲精品成人a在线观看| 亚洲免费看黄网站| 一区二区三区在线播| 一区二区高清在线| 亚洲一区二区在线播放相泽 | 国产一区二区0| 久久9热精品视频| 精品中文字幕一区二区小辣椒| 麻豆国产一区二区| 精品一区二区三区免费视频| 精品一区二区三区欧美| 国产精品一区二区久久精品爱涩| 国产成人综合亚洲网站| 成人av第一页| 91同城在线观看| 色婷婷一区二区| 欧美影院精品一区| 欧美日韩免费观看一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 99久久国产综合色|国产精品| 91亚洲国产成人精品一区二三| 91毛片在线观看| 欧美性受xxxx| 欧美一区二区三区免费| 日韩精品一区在线观看| 久久久久久久久久久黄色| 欧美va日韩va| 国产亚洲女人久久久久毛片| 国产偷国产偷精品高清尤物| 国产精品乱码一区二三区小蝌蚪| 亚洲欧美日韩国产综合| 亚洲成人免费影院| 麻豆精品视频在线观看视频| 国产自产v一区二区三区c| 粉嫩av亚洲一区二区图片| 91亚洲精品久久久蜜桃| 精品视频999| 日韩女优视频免费观看| 中文字幕欧美三区| 欧美日韩mp4| www亚洲一区| 自拍偷拍亚洲欧美日韩| 天天综合色天天| 国产在线看一区| 99在线热播精品免费| 欧美日韩一区二区三区免费看| 日韩亚洲欧美中文三级| 国产欧美一区二区三区在线看蜜臀| 亚洲色欲色欲www在线观看| 亚洲aⅴ怡春院| 国产一区二区毛片| 一本久道久久综合中文字幕| 欧美肥妇毛茸茸| 国产日韩欧美精品电影三级在线| 国产精品伦理在线| 夜夜爽夜夜爽精品视频| 一区二区三区精密机械公司| 免费观看久久久4p| 波波电影院一区二区三区| 欧美日韩国产一区| 欧美v亚洲v综合ⅴ国产v| 中文字幕在线一区| 天堂成人免费av电影一区| 国产精品996| 欧美日韩一级视频| 中文字幕第一页久久| 婷婷亚洲久悠悠色悠在线播放| 国产一区不卡在线| 欧美性大战xxxxx久久久| 久久精品亚洲精品国产欧美kt∨ | 欧美极品aⅴ影院| 婷婷久久综合九色综合绿巨人| 国产成人综合精品三级| 欧美日韩国产高清一区二区| 日本一区二区免费在线观看视频| 性做久久久久久久久| 成人午夜视频免费看| 91精品国产丝袜白色高跟鞋| 国产精品电影院| 久久av中文字幕片| 91丨porny丨在线| 久久先锋影音av| 午夜婷婷国产麻豆精品| 成人综合婷婷国产精品久久| 91精品欧美福利在线观看| 亚洲少妇30p| 国产福利91精品一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 日韩一区二区三区电影| 国产精品国产自产拍高清av| 九色综合狠狠综合久久| 欧美视频一区二区三区在线观看 | 欧美午夜精品免费| 国产欧美日韩中文久久| 免费观看成人av| 欧美视频一区二| 1024成人网| 国产成人在线观看免费网站| 欧美一区二区视频观看视频| 亚洲一区二区三区四区在线| www.亚洲色图| 久久精品欧美一区二区三区麻豆| 奇米影视一区二区三区|