正文

泡泡堂2005-09-18 01:41:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wojiele/4875.html

分享到:

/*               (单机两人对站版,编译器:TC 2.0)        双击PAOPAO.EXE运行,如果不是全屏的话,请按Alt+Enter键使它变成全屏。             玩家一:黄色的笑脸        向上: w        向下: s        向左: a        向右: d        放泡泡:空格         玩家二:红色的笑脸        向上: UP(方向键)        向下: DOWN        向左: LEFT        向右: RIGHT        放泡泡:回车         退出:                ESC         o: 增加泡泡个数        上下方向的箭头: 增加泡泡的威力。         人物被泡泡炸后就不能动了,过一段时间才能恢复,如果在这段时间被另外一个玩家碰了的话,就输了。 编程思想:             在游戏循环中不端检查按键,对控制键执行相关操作,对其他键则忽略处理。        对于还没有爆炸的泡泡(或刚爆炸还没有擦除的泡泡)用“队列”存储。每        循环一次就检查“队头”元素的时间到了没有,时间到了就让它爆炸(或擦除爆炸        痕迹)。爆炸时还要检查其爆炸范围内有没有其他的泡泡,有的话就引爆它。                                                                                                *//*-------------------------------------------------   paopaodang.c -- a demo of paopaotang game              (c) wonderful,wangchengbo 2004-------------------------------------------------*/ /**********************************************************//* 程序中用到的库函数所在头文件应用 #include 命令包含进来 */ #include <stdio.h>#include <stdlib.h>#include <bios.h>#include <ctype.h>#include <conio.h>#include <dos.h>#include <time.h>#include <alloc.h> /**********************************************************/ #define TIME_DELAY 3#define WIN_DELAY 18#define MAXQSIZE   100#define PAO_TIME   50#define BLAST_TIME 10#define PAOMAN_DELAY 60 /* 人被炸后恢复需要的时间 */ /*                    键盘中断函数(借用一个TC做的CS游戏中的)          */#define KEY_Y 0x15#define KEY_N 0x31 #define KEY_A 0x1E#define KEY_D 0x20#define KEY_S 0x1f#define KEY_W 0x11#define KEY_ESC 0x01#define KEY_ENTER 0x1c#define KEY_SPACE 0x39#define KEY_UP 0x48#define KEY_LEFT 0x4b#define KEY_RIGHT 0x4d#define KEY_DOWN 0x50 #define PLAY1UP KEY_W#define PLAY1LEFT KEY_A#define PLAY1DOWN KEY_S#define PLAY1RIGHT KEY_D#define PLAY1FIRE KEY_SPACE #define PLAY2UP KEY_UP#define PLAY2DOWN KEY_DOWN#define PLAY2LEFT KEY_LEFT#define PLAY2RIGHT KEY_RIGHT#define PLAY2FIRE KEY_ENTER   void InstallKeyboard(void);void ShutDownKeyboard(void);void far interrupt NewInt9(void);int GetKey(int ScanCode); char key_state[128],key_pressed[128];void interrupt far (*OldInt9Handler)();     void InstallKeyboard(void)          /*键盘中断程序*/{ int i; for(i=0;i<128;i++) key_state[i]=key_pressed[i]=0; OldInt9Handler = getvect(9);         /*中断向量值*/ setvect(9,NewInt9);                /*中断程序NewInt9地址存入指定的中断向量表中INT 09H*/} void ShutDownKeyboard(void){ setvect(9,OldInt9Handler);} void far interrupt NewInt9(void){ unsigned char ScanCode,temp; ScanCode=inportb(0x60); temp=inportb(0x61); outportb(0x61,temp | 0x80); outportb(0x61,temp & 0x7f); if(ScanCode&0x80)   {    ScanCode&=0x7f;    key_state[ScanCode]=0;   }else   {    key_state[ScanCode]=1;    key_pressed[ScanCode]=1;   } outportb(0x20,0x20);} int GetKey(int ScanCode){ int res; res=key_state[ScanCode]|key_pressed[ScanCode]; key_pressed[ScanCode]=0; return res;}   /*>>>>>>>>>>>> Man function -- copyright Wonderful and WangChengBo <<<<<<<<<<<<<*/typedef enum{ PLAY1=1, PLAY2=2}which_play; typedef enum{ CAN, CANNOT}MOVE; typedef struct{ int x, y;           /*the position of the man */ which_play which;    /* play1 or play2?*/ MOVE can_move;      /* can man move? */ int len;           /*paopao's length*/ int pao_num;           /* how many pao can the man fire?*/ int old_time;      /* 人被泡泡炸后,恢复的时间 */}man; DrawMan(man m){ gotoxy(m.x+15, m.y+6); if (m.which == PLAY1) {  textcolor(YELLOW); } else {  textcolor(LIGHTRED); } putch(2);} DrawPaoMan(man m){ gotoxy(m.x+15, m.y+6); if (m.which == PLAY1) {  textcolor(YELLOW); } else {  textcolor(LIGHTRED); } putch(1);} EraseMan(man m){ gotoxy(m.x+15, m.y+6); textcolor(BLACK); putch(' ');} DrawPao(int x, int y){ gotoxy(x+15, y+6); textcolor(LIGHTBLUE); putch('O');} DrawBlast1(int x, int y){ gotoxy(x+15, y+6); textcolor(LIGHTBLUE); putch('#');}    char name[12][48] ={"  #    #                  #    #               ","###### ######     #     ###### ######     #    ","    #  #    #     #         #  #    #     #    ","    #  ######     #         #  ######     #    ","    #  #    # #########     #  #    # #########","    #  ######     #         #  ######     #    ","    #  #    ##    #         #  #    ##    #    ","    # #######  #  #         # #######  #  #    ","    #    #  #    ##         #    #  #    ##    ","    ##  #   #     #         ##  #   #     #    ","   ##     # #   ###        ##     # #   ###    ","            #                      #           "};int Name_X = 48;int Name_Y = 12; void DrawBegin(){ int x, y; for (y=0; y<Name_Y; ++y) {  for(x=0; x<Name_X; ++x)  {   gotoxy(x+21, y+5);   textcolor(LIGHTBLUE);   putch(name[y][x]);  } }  gotoxy(19, 20); printf("Press any key to Enter the game!");} char map1[8][17] ={"#################", "# @@@@   @ #@# ##", "# #@#@#@  @@@   #", "#  @@@  @@ #@#@##", "#@#@#@#@  @@@@@@#", "#@@@@@   @@#@#@##", "#@#@#@#@@  @@@@@#", "#################"};int Map_X = 17;int Map_Y = 8; char map[8][17]; void DrawMap(){         int x, y; for (y=0; y<Map_Y; ++y) {  for(x=0; x<Map_X; ++x)  {      gotoxy(x+15, y+6);                   if(map[y][x] == '#')                   {        textcolor(GREEN);        putch(219);                   }     else if(map[y][x] == '@')     {        textcolor(BROWN);        putch(178);                   }                   else                      putch(' ');   } } textcolor(BLUE); gotoxy(48, 4); printf("Player1 key:");     gotoxy(48, 5); printf("  UP----w");     gotoxy(48, 6); printf("  DOWN--s");     gotoxy(48, 7); printf("  LEFT--a");     gotoxy(48, 8); printf("  RIGHT-d");     gotoxy(48, 9); printf("  FIRE--space"); gotoxy(48, 11);     printf("Player2 key:");     gotoxy(48, 12); printf("  UP----up"); gotoxy(48, 13);     printf("  DOWN--down"); gotoxy(48, 14);     printf("  LEFT--left"); gotoxy(48, 15);     printf("  RIGHT-right"); gotoxy(48, 16);     printf("  FIRE--ENTER");    gotoxy(48, 18);     printf("exit game:");     gotoxy(48, 19); printf("  ESC");  gotoxy(38, 2); textcolor(LIGHTRED); putch('P'); putch('A'); putch('O'); putch('P'); putch('A'); putch('O'); } Treasure(int x, int y){ int i;  i = random(15);  if (i > 10) {  switch (i)  {  case 11:  case 12:    map[y][x] = 'O';   gotoxy(x+15, y+6);   textcolor(YELLOW);   putch('o');   break;  case 13:  case 14:   map[y][x] = '-';   gotoxy(x+15, y+6);   textcolor(YELLOW);   putch(18);   break;  default:   break;  } } else  {  map[y][x] = ' ';  gotoxy(x+15, y+6);  putch(' '); } } int MoveUp(man *m, man *p){ if (map[m->y - 1][m->x] == '#' || map[m->y - 1][m->x] == '@'  || map[m->y - 1][m->x] == 'o' || m->can_move == CANNOT) {  return 1; }  EraseMan(*m);  if (map[m->y][m->x] == 'o') {  DrawPao(m->x, m->y); }  --(m->y); DrawMan(*m);  switch (map[m->y][m->x]) { case 'a': case 'b':  m->can_move = CANNOT;  m->old_time = clock();  break; case 'O':  ++(m->pao_num);  map[m->y][m->x] = ' ';  break; case '-':  ++(m->len);  map[m->y][m->x] = ' ';  break; default:  break; }  if (m->x == p->x && m->y == p->y && p->can_move == CANNOT) {  gotoxy(36, 3);  printf("Play%d Win!!", m->which);  return 0; }  return 1; } int MoveDown(man *m, man *p){ if (map[m->y + 1][m->x] == '#' || map[m->y + 1][m->x] == '@'  || map[m->y + 1][m->x] == 'o' || m->can_move == CANNOT) {  return 1; } EraseMan(*m);  if (map[m->y][m->x] == 'o') {  DrawPao(m->x, m->y); }  ++(m->y); DrawMan(*m);  switch (map[m->y][m->x]) { case 'a': case 'b':  m->can_move = CANNOT;  m->old_time = clock();  break; case 'O':  ++(m->pao_num);  map[m->y][m->x] = ' ';  break; case '-':  ++(m->len);  map[m->y][m->x] = ' ';  break; default:  break; }  if (m->x == p->x && m->y == p->y && p->can_move == CANNOT) {  gotoxy(36, 3);  printf("Play%d Win!!", m->which);  return 0; }  return 1;    } int MoveLeft(man *m, man *p){ if (map[m->y][m->x - 1] == '#' || map[m->y][m->x - 1] == '@'  || map[m->y][m->x - 1] == 'o' || m->can_move == CANNOT) {  return 1; } EraseMan(*m);  if (map[m->y][m->x] == 'o') {  DrawPao(m->x, m->y); }  --(m->x); DrawMan(*m);  switch (map[m->y][m->x]) { case 'a': case 'b':  m->can_move = CANNOT;  m->old_time = clock();  break; case 'O':  ++(m->pao_num);  map[m->y][m->x] = ' ';  break; case '-':  ++(m->len);  map[m->y][m->x] = ' ';  break; default:  break; }  if (m->x == p->x && m->y == p->y && p->can_move == CANNOT) {  gotoxy(36, 3);  printf("Play%d Win!!", m->which);  return 0; }  return 1;} int MoveRight(man *m, man *p){ if (map[m->y][m->x + 1] == '#' || map[m->y][m->x + 1] == '@'  || map[m->y][m->x + 1] == 'o' || m->can_move == CANNOT) {  return 1; }  EraseMan(*m);  if (map[m->y][m->x] == 'o') {  DrawPao(m->x, m->y); }  ++(m->x); DrawMan(*m);  switch (map[m->y][m->x]) { case 'a': case 'b':  m->can_move = CANNOT;  m->old_time = clock();  break; case 'O':  ++(m->pao_num);  map[m->y][m->x] = ' ';  break; case '-':  ++(m->len);  map[m->y][m->x] = ' ';  break; default:  break; }  if (m->x == p->x && m->y == p->y && p->can_move == CANNOT) {  gotoxy(36, 3);  printf("Play%d Win!!", m->which);  return 0; }  return 1; } /*>>>>>>>>>>> paopao functions -- copyright wonderful and WangChengBo <<<<<<<<<<<<*/ typedef struct{ int x; int y; int original_time; int len; which_play which;}PAO; /*--------------------------------------------------------------*/typedef PAO QElemType; typedef struct QNode{ QElemType data; struct QNode *next;}QNode, *QueuePtr; typedef struct{ QueuePtr  front; /*队头,最早出队列的一端*/ QueuePtr  rear; /*队尾,允许插入的一端*/}LinkQueue; void InitalQueue(LinkQueue *Q){ Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode)); Q->front->next = NULL;} int EnQueue(LinkQueue *Q, QElemType e){ QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode));  if (p == NULL) {  return 0; }  p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; return 1;} int QueueHead(LinkQueue *Q, QElemType *e){ if (Q->front == Q->rear) {  return 0; }  *e = Q->front->next->data; return 1;} int FindElemDelete(LinkQueue *Q, QElemType *e, int x, int y){ QueuePtr p, q = Q->front;  for (p = Q->front->next; p != 0; p = p->next) {  if (p->data.x == x && p->data.y == y)  {   q->next = p->next;   *e = p->data;      if (p == Q->rear)   {    Q->rear = q;   }    free(p);   return 1;  }  else  {   q = p;  } } return 0;} int DeQueue(LinkQueue *Q){ QueuePtr p;  if (Q->front == Q->rear) {  return 0; }  p = Q->front->next; Q->front->next = p->next;  if (Q->rear == p) {  Q->rear = Q->front; } free(p); return 1;} void DestroyQueue(LinkQueue *Q){ while (Q->front) {  Q->rear = Q->front->next;  free(Q->front);  Q->front = Q->rear; }} void Paopao(man *m, LinkQueue *Q){   PAO pao; if (m->can_move == CANNOT || m->pao_num == 0) {  return; } DrawPaoMan(*m); map[m->y][m->x] = 'o'; pao.x = m->x;  pao.y = m->y; pao.original_time = clock(); pao.len = m->len; pao.which = m->which;  --m->pao_num;  /*入队列 */ EnQueue(Q, pao);} void PaoBlast(PAO pao, man *p1, man *p2, LinkQueue *Q, LinkQueue *B){ int i = 1, end = 0; PAO e;  switch (pao.which) {  case PLAY1:   ++(p1->pao_num);   break;  case PLAY2:   ++(p2->pao_num);   break; }  DrawBlast1(pao.x, pao.y); map[pao.y][pao.x] = 'b';  if (p1->x == pao.x && p1->y == pao.y) {  DrawPaoMan(*p1);  p1->can_move = CANNOT;  p1->old_time = clock(); } else if (p2->x == pao.x && p2->y == pao.y) {  DrawPaoMan(*p2);  p2->can_move = CANNOT;  p2->old_time = clock(); }  /*--------------------Up----------------------*/ for (; i <= pao.len; ++i) {  end = 0;    switch (map[pao.y-i][pao.x])  {  case '#':   end = 1;   break;   case ' ':   DrawBlast1(pao.x, pao.y-i);   map[pao.y-i][pao.x] = 'b';   break;   case '@':   end = 1;   DrawBlast1(pao.x, pao.y-i);   map[pao.y-i][pao.x] = 'a';   break;   case 'o':    if (FindElemDelete(Q, &e, pao.x, pao.y-i) == 1)   {    e.original_time = clock();    EnQueue(B, e);    PaoBlast(e, p1, p2, Q, B);   }   break;    default:   break;  }   if (p1->x == pao.x && p1->y == pao.y-i)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;   p1->old_time = clock();  }  else if (p2->x == pao.x && p2->y == pao.y-i)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;   p2->old_time = clock();  }    if (end == 1)  {   break;  } }  /*----------------------Down------------------------*/ for (i=1; i <= pao.len; ++i) {  end = 0;    switch (map[pao.y+i][pao.x])  {  case '#':   end = 1;   break;   case ' ':   DrawBlast1(pao.x, pao.y+i);   map[pao.y+i][pao.x] = 'b';   break;    case '@':   end = 1;   DrawBlast1(pao.x, pao.y+i);   map[pao.y+i][pao.x] = 'a';   break;   case 'o':   if (FindElemDelete(Q, &e, pao.x, pao.y+i) == 1)   {    e.original_time = clock();    EnQueue(B, e);    PaoBlast(e, p1, p2, Q, B);   }   break;    default:   break;  }   if (p1->x == pao.x && p1->y == pao.y+i)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;   p1->old_time = clock();  }  else if (p2->x == pao.x && p2->y == pao.y+i)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;   p2->old_time = clock();  }   if (end == 1)  {   break;  } }  /*---------------------Left-------------------------*/ for (i=1; i <= pao.len; ++i) {    end = 0;  switch (map[pao.y][pao.x-i])  {  case '#':   end = 1;   break;    case ' ':   DrawBlast1(pao.x-i, pao.y);   map[pao.y][pao.x-i] = 'b';   break;   case '@':   end = 1;   DrawBlast1(pao.x-i, pao.y);   map[pao.y][pao.x-i] = 'a';   break;   case 'o':   if (FindElemDelete(Q, &e, pao.x-i, pao.y) == 1)   {    e.original_time = clock();    EnQueue(B, e);    PaoBlast(e, p1, p2, Q, B);   }   break;   default:   break;  }   if (p1->x == pao.x-i && p1->y == pao.y)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;   p1->old_time = clock();  }  else if (p2->x == pao.x-i && p2->y == pao.y)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;   p2->old_time = clock();  }   if (end == 1)  {   break;  } }  /*----------------------Right-----------------------*/ for (i=1; i <= pao.len; ++i) {    end = 0;  switch (map[pao.y][pao.x+i])  {  case '#':   end = 1;   break;    case ' ':   DrawBlast1(pao.x+i, pao.y);   map[pao.y][pao.x+i] = 'b';   break;   case '@':   end = 1;    DrawBlast1(pao.x+i, pao.y);   map[pao.y][pao.x+i] = 'a';   break;   case 'o':   if (FindElemDelete(Q, &e, pao.x+i, pao.y) == 1)   {    e.original_time = clock();    EnQueue(B, e);    PaoBlast(e, p1, p2, Q, B);   }   break;   default:   break;  }   if (p1->x == pao.x+i && p1->y == pao.y)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;   p1->old_time = clock();  }  else if (p2->x == pao.x+i && p2->y == pao.y)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;   p2->old_time = clock();  }   if (end == 1)  {   break;  } }} void EraseBlast(PAO pao, man *p1, man *p2){ int i = 1, end = 0; gotoxy(pao.x+15, pao.y+6); putch(' '); map[pao.y][pao.x] = ' ';  if (p1->x == pao.x && p1->y == pao.y) {  DrawPaoMan(*p1); } else if (p2->x == pao.x && p2->y == pao.y) {  DrawPaoMan(*p2); }  /*----------------------UP-------------------*/ for (; i <= pao.len; ++i) {  end = 0;   switch (map[pao.y-i][pao.x])  {  case 'b':   map[pao.y-i][pao.x] = ' ';   gotoxy(pao.x+15, pao.y-i+6);   putch(' ');   break;  case 'a':   Treasure(pao.x, pao.y-i);  case '#':   end = 1;   break;  default:   break;  }   if (p1->x == pao.x && p1->y == pao.y-i  && p1->can_move == CANNOT)  {   DrawPaoMan(*p1);  }  else if (p2->x == pao.x && p2->y == pao.y-i && p2->can_move == CANNOT)  {   DrawPaoMan(*p2);  }   if (end == 1)  {   break;  }  }   /*---------------DOWN-----------------*/ for (i=1; i <= pao.len; ++i) {  end = 0;  switch (map[pao.y+i][pao.x])  {  case 'b':   map[pao.y+i][pao.x] = ' ';   gotoxy(pao.x+15, pao.y+i+6);   putch(' ');   break;  case 'a':   Treasure(pao.x, pao.y+i);  case '#':   end = 1;   break;  default:   break;  }   if (p1->x == pao.x && p1->y == pao.y+i && p1->can_move == CANNOT)  {   DrawPaoMan(*p1);  }  else if (p2->x == pao.x && p2->y == pao.y+i && p2->can_move == CANNOT)  {   DrawPaoMan(*p2);  }   if (end == 1)  {   break;  } }  /*---------------LEFT-----------------*/ for (i=1; i <= pao.len; ++i) {  end = 0;  switch (map[pao.y][pao.x-i])  {  case 'b':   map[pao.y][pao.x-i] = ' ';   gotoxy(pao.x+15-i, pao.y+6);   putch(' ');   break;  case 'a':   Treasure(pao.x-i, pao.y);  case '#':   end = 1;   break;  default:   break;  }   if (p1->x == pao.x-i && p1->y == pao.y && p1->can_move == CANNOT)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;  }  else if (p2->x == pao.x-i && p2->y == pao.y && p2->can_move == CANNOT)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;  }   if (end == 1)  {   break;  } }   /*-------------RIGHT------------------*/ for (i=1; i <= pao.len; ++i) {  end = 0;  switch (map[pao.y][pao.x+i])  {  case 'b':   map[pao.y][pao.x+i] = ' ';   gotoxy(pao.x+15+i, pao.y+6);   putch(' ');   break;  case 'a':   Treasure(pao.x+i, pao.y);  case '#':   end = 1;   break;  default:   break;  }   if (p1->x == pao.x+i && p1->y == pao.y && p1->can_move == CANNOT)  {   DrawPaoMan(*p1);   p1->can_move = CANNOT;  }  else if (p2->x == pao.x+i && p2->y == pao.y && p2->can_move == CANNOT)  {   DrawPaoMan(*p2);   p2->can_move = CANNOT;  }   if (end == 1)  {   break;  } }}   int main(){ int END = 0; int x, y; man play1 = {1, 1, PLAY1, CAN, 1, 1}, play2 = {14, 1, PLAY2, CAN, 1, 1}; LinkQueue PaoQueue, BlastQueue; int iCurrentTime, iOldTime; PAO PaoHead, BlastHead;  for (y=0; y<Map_Y; ++y) {  for (x=0; x<Map_X; ++x)  {   map[y][x] = map1[y][x];  } }  clrscr(); randomize(); DrawBegin(); getch(); clrscr(); DrawMap();  DrawMan(play1); DrawMan(play2);  InitalQueue(&PaoQueue); InitalQueue(&BlastQueue);  InstallKeyboard(); iOldTime = clock(); while (END != 1) {      if (GetKey(KEY_ESC))  {    END=1;  }  /*---------Play1--------------*/  if (GetKey(PLAY1UP))  {   if (!MoveUp(&play1, &play2))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY1DOWN))  {   if (!MoveDown(&play1, &play2))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY1LEFT))  {   if (!MoveLeft(&play1, &play2))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY1RIGHT))  {   if (!MoveRight(&play1, &play2))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY1FIRE))  {   Paopao(&play1, &PaoQueue);  }  /*---------Play2--------------*/  if (GetKey(PLAY2UP))  {   if (!MoveUp(&play2, &play1))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY2DOWN))  {   if (!MoveDown(&play2, &play1))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY2LEFT))  {   if (!MoveLeft(&play2, &play1))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY2RIGHT))  {   if (!MoveRight(&play2, &play1))   {    while (clock() - iOldTime <= WIN_DELAY);    END = 1;   }  }  if (GetKey(PLAY2FIRE))  {   Paopao(&play2, &PaoQueue);  }   /*---------Ok! we check if the pao is blast!----------------*/   iCurrentTime = clock();   if (QueueHead(&PaoQueue, &PaoHead))  {   if ((iCurrentTime - PaoHead.original_time) >= PAO_TIME)   {    DeQueue(&PaoQueue);    map[PaoHead.y][PaoHead.x] = ' ';    gotoxy(PaoHead.x+15, PaoHead.y+6);    putch(' ');    /* blast */    PaoBlast(PaoHead, &play1, &play2, &PaoQueue, &BlastQueue);    PaoHead.original_time = iCurrentTime;    EnQueue(&BlastQueue, PaoHead);   }  }   if (QueueHead(&BlastQueue, &BlastHead))  {   if ((iCurrentTime - BlastHead.original_time) >= BLAST_TIME)   {    DeQueue(&BlastQueue);    /*-- Erase the blast --*/    EraseBlast(BlastHead, &play1, &play2);   }  }   if (play1.can_move == CANNOT)   {   if (iCurrentTime - play1.old_time >= PAOMAN_DELAY)   {    play1.can_move = CAN;    DrawMan(play1);   }  }     if (play2.can_move == CANNOT)   {   if (iCurrentTime - play2.old_time >= PAOMAN_DELAY)   {    play2.can_move = CAN;    DrawMan(play2);   }  }   while (clock() - iOldTime < TIME_DELAY);  iOldTime = clock();   if (END == 1)  {   gotoxy(34, 3);   textcolor(WHITE);   printf("Play again?(y/n)");    while (1)   {        if (GetKey(KEY_Y))    {      DestroyQueue(&PaoQueue);     DestroyQueue(&BlastQueue);      InitalQueue(&PaoQueue);     InitalQueue(&BlastQueue);      for (y=0; y<Map_Y; ++y)     {      for (x=0; x<Map_X; ++x)      {       map[y][x] = map1[y][x];      }     }      play1.x = 1;     play1.y = 1;     play1.which = PLAY1;     play1.can_move = CAN;     play1.len = 1;     play1.pao_num = 1;     play2.x = 14;     play2.y = 1;     play2.which = PLAY2;     play2.can_move = CAN;     play2.len = 1;     play2.pao_num = 1;      textcolor(LIGHTBLUE);     clrscr();     DrawMap();      DrawMan(play1);     DrawMan(play2);      END = 0;     break;    }        else if (GetKey(KEY_N))    {     break;    }   }   }  } ShutDownKeyboard(); DestroyQueue(&PaoQueue); DestroyQueue(&BlastQueue);  return 0;}    

阅读(5048) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册