⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pushbox.c

📁 本人用C写的一个57关版本的小游戏原程序
💻 C
📖 第 1 页 / 共 5 页
字号:
#include"stdio.h"
#include"graphics.h"
struct box
{
  int x0,y0;
  int flag;
  struct box *next,*prior,*left,*right;
};
struct box a[12][15],*head;
int stage,total,steps,*buffer,b[12][15],c[12][15],d[12][15];
char str1[3],str2[3],str3[3]="000";

main()
{
  char ch;
  int  i,j,k;
  void calculate(int n,char *p);
  void init1();
  void init2();
  void init3();
  void init4();
  void init5();
  void init6();
  void init7();
  void init8();
  void init9();
  void init10();
  void init11();
  void init12();
  void init13();
  void init14();
  void init15();
  void init16();
  void init17();
  void init18();
  void init19();
  void init20();
  void init21();
  void init22();
  void init23();
  void init24();
  void init25();
  void init26();
  void init27();
  void init28();
  void init29();
  void init30();
  void init31();
  void init32();
  void init33();
  void init34();
  void init35();
  void init36();
  void init37();
  void init38();
  void init39();
  void init40();
  void init41();
  void init42();
  void init43();
  void init44();
  void init45();
  void init46();
  void init47();
  void init48();
  void init49();
  void init50();
  void init51();
  void init52();
  void init53();
  void init54();
  void init55();
  void init56();
  void init57();
  void init();
  void print(struct box *p);
  void printall();
  void up();
  void down();
  void left();
  void right();
  void recover();
  void restart();
  void check();
  int driver=VGA,mode=VGAHI;
  initgraph(&driver,&mode,"");
   for(i=0;i<12;i++)
   {for(j=0;j<14;j++)
    a[i][j].next=&a[i][j+1];
    a[i][14].next=NULL;}
  for(i=0;i<12;i++)
  {for(j=14;j>0;j--)
   a[i][j].prior=&a[i][j-1];
   a[i][0].prior=NULL;}
  for(j=0;j<15;j++)
  {for(i=0;i<11;i++)
   a[i][j].right=&a[i+1][j];
   a[11][j].right=NULL;}
  for(j=0;j<15;j++)
  {for(i=11;i>0;i--)
   a[i][j].left=&a[i-1][j];
   a[0][j].left=NULL;}
  setbkcolor(7);
  setcolor(1);
  settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
  rectangle(120,90,520,380);
  outtextxy(220,130,"Welcome   to   PushBox !");
  outtextxy(220,160,"'w' to up,'s' to down");
  outtextxy(220,190,"'a' to left,'d' to right");
  outtextxy(220,220,"'r' to back ,'q' to restart");
  outtextxy(220,260,"Please choose stage:");
  gets(str2);
  stage=atoi(str2);
  outtextxy(220,290,"The stage is :");
  outtextxy(322,290,str2);
  outtextxy(220,320,"press an key to enter game !");
  getch();
  clrscr();
  rectangle(169,40,510,440);
  rectangle(169,40,510,89);
  outtextxy(270,60,"PUSH BOX");
  rectangle(169,391,510,440);
  outtextxy(270,410,"Welcome...");
  setviewport(170,90,510,390,0);
  rectangle(240,0,340,49);
  setfillstyle(7,1);
  bar(241,2,339,47);
  setcolor(15);
  outtextxy(250,15,"stage");
  setcolor(1);
  rectangle(240,50,340,99); /*stage输出区*/
  outtextxy(265,70,"00");
  rectangle(240,100,340,149);
  bar(241,102,339,147);
  setcolor(15);
  outtextxy(250,115,"total");
  setcolor(1);
  rectangle(240,150,340,199); /*total输出区*/
  outtextxy(265,170,"000");
  setcolor(1);
  rectangle(240,200,340,249);
  bar(241,201,339,248);
  setcolor(15);
  outtextxy(250,215,"steps");
  setcolor(1);
  rectangle(240,250,340,300); /*steps输出区*/
  outtextxy(265,270,str3);
  setcolor(1);
  init();
  while(ch!=27)
  {
    ch=getch();
    switch(ch)
    {
      case 'w':
        up();
        break;
      case 's':
        down();
        break;
      case 'a':
        left();
        break;
      case 'd':
        right();
        break;
      case 'r':
        recover();
        break;
      case 'q':
        restart();
        break;
      default:
       break;
     }
   check();
  }
}


void init()
{ int i,j;
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
  {a[i][j].x0=i*20;
   a[i][j].y0=j*20;}
  switch(stage)             /* 选关并且地图的详细信息初始化*/
  {
    case  1: init1();break;
    case  2: init2();break;
    case  3: init3();break;
    case  4: init4();break;
    case  5: init5();break;
    case  6: init6();break;
    case  7: init7();break;
    case  8: init8();break;
    case  9: init9();break;
    case 10: init10();break;
    case 11: init11();break;
    case 12: init12();break;
    case 13: init13();break;
    case 14: init14();break;
    case 15: init15();break;
    case 16: init16();break;
    case 17: init17();break;
    case 18: init18();break;
    case 19: init19();break;
    case 20: init20();break;
    case 21: init21();break;
    case 22: init22();break;
    case 23: init23();break;
    case 24: init24();break;
    case 25: init25();break;
    case 26: init26();break;
    case 27: init27();break;
    case 28: init28();break;
    case 29: init29();break;
    case 30: init30();break;
    case 31: init31();break;
    case 32: init32();break;
    case 33: init33();break;
    case 34: init34();break;
    case 35: init35();break;
    case 36: init36();break;
    case 37: init37();break;
    case 38: init38();break;
    case 39: init39();break;
    case 40: init40();break;
    case 41: init41();break;
    case 42: init42();break;
    case 43: init43();break;
    case 44: init44();break;
    case 45: init45();break;
    case 46: init46();break;
    case 47: init47();break;
    case 48: init48();break;
    case 49: init49();break;
    case 50: init50();break;
    case 51: init51();break;
    case 52: init52();break;
    case 53: init53();break;
    case 54: init54();break;
    case 55: init55();break;
    case 56: init56();break;
    case 57: init57();break;
    default: init1();break;
  }
  a[11][14].flag=2;
  print(&a[11][14]);
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
  {b[i][j]=a[i][j].flag;
   d[i][j]=a[i][j].flag;}
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
  print(&a[i][j]);
}


void print(struct box *p)
{ int x,y;
  x=p->x0;
  y=p->y0;
  switch(p->flag)
  { case 0:  /*空位*/
      setfillstyle(0,1);
      bar(x,y,x+18,y+18);
      break;
    case 1:  /* 固定的实体位置*/
      rectangle(x,y,x+18,y+18);
      setfillstyle(7,1);
      bar(x+1,y+1,x+17,y+17);
      break;
    case 2: /*箱子*/
      rectangle(x,y,x+18,y+18);
      setfillstyle(11,1);
      bar(x+1,y+1,x+17,y+17);
      break;
    case 3: /*目标位置*/
      setcolor(7);
      rectangle(x,y,x+18,y+18);
      setcolor(1);
      setfillstyle(8,1);
      bar(x+1,y+1,x+17,y+17);
      break;
    case 4:/*重叠现象,箱子到了目标位置*/
      rectangle(x,y,x+18,y+18);
      setfillstyle(8,1);
      bar(x+1,y+1,x+17,y+17);
      getimage(a[11][14].x0,a[11][14].y0,a[11][14].x0+18,a[11][14].y0+18,buffer);
      putimage(x,y,buffer,2);
      break;
    case 5:
    case 6: /*小人头 小人头到了阴影目标区域*/
      setfillstyle(0,1);
      bar(x,y,x+18,y+18);
      circle(x+9,y+9,7);
      putpixel(x+5,y+8,1);
      putpixel(x+13,y+8,1);
      putpixel(x+9,y+12,1);
      break;
   default:
      break;
  }
}
void printall()
{ int i,j;
  calculate(steps,str3);
  rectangle(240,250,340,300);
  setfillstyle(0,1);
  bar(241,251,339,299);
  outtextxy(265,270,str3);
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
  print(&a[i][j]);
}
void up()
{ int i,j;
  switch(head->prior->flag)
  {  case 0:
       if(head->flag==6)
       head->flag=3;
       else   head->flag=0;
       head=head->prior;
       head->flag=5;
       steps++;
       break;
     case 1:
       break;
     case 2:
       if(head->prior->prior==NULL||head->prior->prior->flag==1
       ||head->prior->prior->flag==2||head->prior->prior->flag==4)
         break;
       else if(head->prior->prior->flag==0)
       {
         if(head->flag==6)
           head->flag=3;
         else head->flag=0;
         head->prior->prior->flag=2;
         head=head->prior;
         head->flag=5;
         steps++;
       }
       else if(head->prior->prior->flag==3)
       {
          if(head->flag==6)
            head->flag=3;
          else
            head->flag=0;
          head->prior->prior->flag=4;
          head=head->prior;
          head->flag=5;
          steps++;
        }
       break;
     case 3:
       if(head->flag==6)
         head->flag=3;
       else
         head->flag=0;
       head->prior->flag=6;
       head=head->prior;
       steps++;
       break;
     case 4:
       if(head->prior->prior==NULL||head->prior->prior->flag==1
       ||head->prior->prior->flag==2||head->prior->prior->flag==4)
       break;
       else if(head->prior->prior->flag==0)
       {
         if(head->flag==6)
           head->flag=3;
         else head->flag=0;
         head->prior->prior->flag=2;
         head=head->prior;
         head->flag=6;
         steps++;
       }
       else if(head->prior->prior->flag==3)
       {
          if(head->flag==6)
            head->flag=3;
          else head->flag=0;
          head->prior->prior->flag=4;
          head=head->prior;
          head->flag=6;
          steps++;
        }
       break;
     default:
       break;
  }

  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
    c[i][j]=b[i][j];
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
    b[i][j]=a[i][j].flag;

  printall();
}
void down()
{ int i,j;
  switch(head->next->flag)
  {
    case 0:
      if(head->flag==6)
       head->flag=3;
      else head->flag=0;
      head=head->next;
      head->flag=5;
      steps++;
      break;
    case 1:
     break;
    case 2:
      if(head->next->next==NULL||head->next->next->flag==1
      ||head->next->next->flag==2||head->next->next->flag==4)
      break;
      else if(head->next->next->flag==0)
      {
        if(head->flag==6)
        head->flag=3;
        else head->flag=0;
        head->next->next->flag=2;
        head=head->next;
        head->flag=5;
        steps++;
      }
      else if(head->next->next->flag=3)
      {
        if(head->flag==6)
        head->flag=3;
        else head->flag=0;
        head->next->next->flag=4;
        head=head->next;
        head->flag=5;
        steps++;
       }
       break;
     case 3:
       if(head->flag==6)
       head->flag=3;
       else head->flag=0;
       head->next->flag=6;
       head=head->next;
       steps++;
       break;
     case 4:
       if(head->next->next==NULL||head->next->next->flag==1
       ||head->next->next->flag==2||head->next->next->flag==4)
       break;
       else if(head->next->next->flag==0)
       {
         if(head->flag==6)
         head->flag=3;
         else head->flag=0;
         head->next->next->flag=2;
         head=head->next;
         head->flag=6;
         steps++;
       }
       else if(head->next->next->flag=3)
       {
         if(head->flag==6)
         head->flag=3;
         else head->flag=0;
         head->next->next->flag=4;
         head=head->next;
         head->flag=6;
         steps++;
        }
       break;
     default:
       break;
  }
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
    c[i][j]=b[i][j];
  for(i=0;i<12;i++)
  for(j=0;j<15;j++)
    b[i][j]=a[i][j].flag;
  printall();

}
void left()
{ int i,j;
  switch(head->left->flag)
  {
    case 0:
      if(head->flag==6)
      head->flag=3;
      else head->flag=0;
      head=head->left;
      head->flag=5;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -