C语言实现宾果消消乐分享!

本文实例为大家分享了C语言宾果消消乐的具体代码,供大家参考,具体内容如下

  ```c  #include<graphics.h>  #include<stdio.h>  #include<windows.h>  #include <conio.h>  #include<time.h>  #include<mmsystem.h>  #define MAPSIZE 10    int map[MAPSIZE][MAPSIZE];  int map2[MAPSIZE][MAPSIZE];  bool state[MAPSIZE][MAPSIZE];  bool state1[MAPSIZE][MAPSIZE];  typedef struct game  {    int game_state;    int counts;    int score;    int targets;    int level;    int state;    int level_state;    int tool_number;    int tool_state;    int start_state;    PIMAGE img[21];  } Game;  Game game;  int high=0;    void init_img()  {    int i;    for(i=0; i<21; i++)      game.img[i]=newimage();    getimage(game.img[0],"game\underground.jpg");    getimage(game.img[1],"game\red.jpg");    getimage(game.img[2],"game\green.jpg");    getimage(game.img[3],"game\blue.jpg");    getimage(game.img[4],"game\orange.jpg");    getimage(game.img[5],"game\purple.jpg");    getimage(game.img[6],"game\brown.jpg");    getimage(game.img[7],"game\123.jpg");    getimage(game.img[8],"game\end.jpg");    getimage(game.img[9],"game\bomb.jpg");    getimage(game.img[10],"game\win.png");      getimage(game.img[11],"game\hon.jpg");    getimage(game.img[12],"game\lu.jpg");    getimage(game.img[13],"game\lan.jpg");    getimage(game.img[14],"game\cheng.jpg");    getimage(game.img[15],"game\zi.jpg");    getimage(game.img[16],"game\hui.jpg");      getimage(game.img[17],"game\receive.png");    getimage(game.img[18],"game\in.jpg");    getimage(game.img[19],"game\black.jpg");    getimage(game.img[20],"game\start.jpg");  }  void init_map()  {    int i,j;    srand(time(0));    for (i=0; i<MAPSIZE; i++)      for (j=0; j<MAPSIZE; j++)      {        state[i][j]=false;        map[i][j]=rand()%6+1;        map2[i][j]=map[i][j];//备份图形      }  }    void read(int *high)  {    FILE *fp;    fp=fopen("bag.b","rb");    if(fp==NULL)      return;    fread(high,sizeof(int),1,fp);    fclose(fp);  }  void save(int *high)  {    FILE *fp;    fp=fopen("bag.b","wb");    if(fp==NULL)      return;    fwrite(high,sizeof(int),1,fp);    fclose(fp);  }    //显示关卡  void show_level()  {    char str[4],str2[8];    putimage(0,0,game.img[0]);    sprintf(str, "%4d ", game.level);    sprintf(str2, "%4d ", game.targets);    setfont(40,0,"隶书");    setcolor(EGERGB(255,255,255));    setbkmode(TRANSPARENT);    outtextxy(160,330,"第  关");    outtextxy(160,330,str);    setfont(30,0,"隶书");    outtextxy(150,400,"目标分:");    outtextxy(270,400,str2);      Sleep(1000);    cleardevice();    }  //显示分数  void show_word()  {    char str[4],str1[8],str2[8],scores[8],str3[4];    if(game.score>high)    {      high=game.score;      save(&high);    }    putimage(0,0,game.img[0]);    setfont(30,0,"隶书");    setcolor(EGERGB(250, 210, 0));    setbkmode(TRANSPARENT);    outtextxy(10,15, "最高记录: ");    outtextxy(10,55, "关卡: ");    outtextxy(150,55, "目标分: ");      sprintf(str, "%4d ", game.level);    sprintf(str1, "%4d ", high);    sprintf(str2, "%4d ", game.targets);    sprintf(scores, "%4d ", game.score);    sprintf(str3, "%d", game.tool_number);    setcolor(EGERGB(255, 255, 255));    outtextxy(60, 55, str);    outtextxy(150, 15, str1);    outtextxy(260, 55, str2);    outtextxy(205, 102, scores);      setfont(25,0,"隶书");    outtextxy(410,1,str3);    }  void show_map()  {    if(game.level_state==1)      show_level();    show_word();    int i,j;    for (i=0; i<MAPSIZE; i++)    {      for (j=0; j<MAPSIZE; j++)        if(!state[i][j])        {          if(map[i][j]==1)            putimage(j*45,i*45+250,game.img[j]]);          else if(map[i][j]==2)            putimage(j*45,i*45+250,game.img[j]]);          else if(map[i][j]==3)            putimage(j*45,i*45+250,game.img[j]]);          else if(map[i][j]==4)            putimage(j*45,i*45+250,game.img[j]]);          else if(map[i][j]==5)            putimage(j*45,i*45+250,game.img[j]]);          else if(map[i][j]==6)            putimage(j*45,i*45+250,game.img[j]]);        }    }  }  //音频  void musicu()  {    mciSendString("close mymusicu",NULL,0,NULL);    mciSendString("open game\unbelievable.mp3 alias mymusicu",NULL,0,NULL);    mciSendString("play mymusicu",NULL,0,NULL);  }  void musicc()  {    mciSendString("close mymusicc",NULL,0,NULL);    mciSendString("open game\click.mp3 alias mymusicc",NULL,0,NULL);    mciSendString("play mymusicc",NULL,0,NULL);  }  void musicf()  {    mciSendString("close mymusicf",NULL,0,NULL);    mciSendString("open game\fail.mp3 alias mymusicf",NULL,0,NULL);    mciSendString("play mymusicf",NULL,0,NULL);  }  void musicd()  {    mciSendString("close mymusicd",NULL,0,NULL);    mciSendString("open game\delt.mp3 alias mymusicd",NULL,0,NULL);    mciSendString("play mymusicd",NULL,0,NULL);  }  void musicb()  {    mciSendString("close mymusicb",NULL,0,NULL);    mciSendString("open game\bomb.mp3 alias mymusicb",NULL,0,NULL);    mciSendString("play mymusicb",NULL,0,NULL);  }  void musicp()  {    mciSendString("close mymusicp",NULL,0,NULL);    mciSendString("open game\popwindows.mp3 alias mymusicp",NULL,0,NULL);    mciSendString("play mymusicp",NULL,0,NULL);  }  void musicsheng()  {    mciSendString("close mymusicsheng",NULL,0,NULL);    mciSendString("open game\成功.mp3 alias mymusicsheng",NULL,0,NULL);    mciSendString("play mymusicsheng",NULL,0,NULL);  }    //判断此位置是否符合  int avaliable(int x,int y)  {    if(x<0||x>=MAPSIZE||y<0||y>=MAPSIZE||state[y][x])      return 0;    else      return 1;  }  //搜索周围相同颜色  void search_map(int x,int y,int target)  {    if((!avaliable(x,y))||map[y][x]!=target)      return;    state[y][x]=true;    state1[y][x]=true;    game.counts++;    search_map(x-1,y,target);    search_map(x+1,y,target);    search_map(x,y-1,target);    search_map(x,y+1,target);    }  //搜索到相同颜色后调整位置  void adjust_map()  {    int i,j,r,k;    int temp[10][10];    for(j=MAPSIZE-1; j>=0; j--)    {      int m=0;      int flag=1;      k=j;      for(i=MAPSIZE-1; i>=0; i--)        if(state[i][j]==false)          flag=0;      if(flag==1)      {        if(k==MAPSIZE-1)          continue;        while(1)        {          if(k==MAPSIZE-1)            break;          for(i=MAPSIZE-1; i>=0; i--)          {            map[i][k]=map[i][k+1];            state[i][k]=state[i][k+1];            state[i][k+1]=true;          }          k++;        }      }      for(i=MAPSIZE-1; i>=0; i--)        if(!state[i][j])        {          temp[m][j]=map[i][j];          m++;        }      r=MAPSIZE-1;      for(i=0; i<m; i++)      {        map[r][j]=temp[i][j];        state[r][j]=false;        r--;      }      for(; r>=0; r--)      {        state[r][j]=true;      }      }  }    //判断是否通过本关  int end_map()  {    int i,j,target;    int x;    int y;    int flag=1;    for(i=0; i<MAPSIZE; i++)      for(j=0; j<MAPSIZE; j++)        if(!state[i][j])        {          x=j;          y=i;          target=map[y][x];          if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target)              ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target))          {            flag=0;            break;          }        }    return flag;  }    //弹出炸弹窗口,选择是否使用道具  int bomb_pop()  {    mouse_msg ms;    while(1)    {      show_map();      putimage(88, 280, game.img[9]);      while(mousemsg())      {        ms=getmouse();        if(ms.is_left()&&ms.is_down())        {          if(ms.x>105&&ms.x<230&&ms.y>380&&ms.y<425)          {            musicc();            return 0;          }          if(ms.x>240&&ms.x<370&&ms.y>380&&ms.y<420)          {            musicc();            return 1;          }        }      }      Sleep(500);    }    }    //点击要炸裂的某一列  void bomb_map()  {    int i;    int x,y;    mouse_msg msg;    while(1)    {      show_map();      while(mousemsg())      {        msg=getmouse();        if(msg.is_left()&&msg.is_down())        {          musicc();          x=msg.x/45;          y=(msg.y-250)/45;          if(!avaliable(x,y))            continue;          for(i=0; i<MAPSIZE; i++)            if(state[i][x]==false)            {              state[i][x]=true;              game.counts++;            }          return;        }      }      Sleep(500);    }  }  //打印出要消除图形的碎片  void flash_map(int target)  {    int i,j;    show_map();    for(i=0; i<MAPSIZE; i++)      for(j=0; j<MAPSIZE; j++)        if(state1[i][j]==true)        {          musicd();          if(target==1)            putimage(j*45,i*45+250,game.img[11]);          else if(target==2)            putimage(j*45,i*45+250,game.img[12]);          else if(target==3)            putimage(j*45,i*45+250,game.img[13]);          else if(target==4)            putimage(j*45,i*45+250,game.img[14]);          else if(target==5)            putimage(j*45,i*45+250,game.img[15]);          else if(target==6)            putimage(j*45,i*45+250,game.img[16]);          }    Sleep(200);  }    //碎片消除后,恢复以前状态  void state1_back()  {    int i,j;    for(i=0; i<MAPSIZE; i++)      for(j=0; j<MAPSIZE; j++)        state1[i][j]=false;  }  void play_game()  {    init_map();    int target;    int x,y;    int i,j;    mouse_msg msg;    if(game.state==0)//重新开始游戏时将现有分数置为0      game.score=0;    else      game.score=game.score;      while(1)    {      show_map();      game.level_state=0;      while(mousemsg())      {        msg=getmouse();        if(msg.is_left()&&msg.is_down())        {            musicc();          if(msg.x>400&&msg.x<450&&msg.y>=40&&msg.y<100&&game.tool_number>=5)//使用炸弹          {            musicp();            if(bomb_pop())            {              bomb_map();              musicb();              adjust_map();              game.score=game.score+game.counts*20;              game.tool_number=game.tool_number-5;              show_map();              game.counts=0;            }            }          else          {            x=msg.x/45;            y=(msg.y-250)/45;            if(!avaliable(x,y))              continue;            target=map[y][x];              if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target)                ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target))            {              search_map(x,y,target);              game.score=game.score+game.counts*20;              if(game.counts>=6)              {                game.tool_number=game.tool_number+3;                musicu();              }              flash_map(target);              adjust_map();            }            game.counts=0;            show_map();            Sleep(100);            state1_back();            if(end_map())            {              if(game.score>=game.targets)              {                musicsheng();                game.game_state=2;                return;              }              else if(game.score<game.targets)              {                musicf();                game.game_state=-1;                  return ;              }            }          }        }      }    }  }    //领取魔法鱼  void get_tool()  {    mouse_msg ms;    while(1)    {        putimage(0,0,game.img[7]);      putimage_transparent(NULL,game.img[17],88,280,0);      while(mousemsg())      {        ms=getmouse();        if(ms.is_left()&&ms.is_down())        {          if(ms.x>170&&ms.x<300&&ms.y>380&&ms.y<420)          {            musicc();            game.tool_number=10;            game.tool_state=0;            return ;          }          }      }      Sleep(500);    }  }  //游戏指南界面  void inter_game()  {    mouse_msg ms;    while(1)    {      putimage(0,0,game.img[18]);      while(mousemsg())      {        ms=getmouse();        if(ms.is_left()&&ms.is_down())        {          musicc();          game.game_state=0;          return;        }      }      Sleep(500);    }    }    void start_game()  {    mouse_msg ms;    if(game.start_state==1)    {      putimage(0,0,game.img[19]);      Sleep(500);      putimage(0,0,game.img[20]);      Sleep(500);      game.start_state=0;    }    while(1)    {      putimage(0,0,game.img[7]);      while(mousemsg())      {        ms=getmouse();        if(ms.is_left()&&ms.is_down())        {            musicc();          if(ms.x>140&&ms.x<310&&ms.y>370&&ms.y<410)          {            if(game.tool_state==1)            {              musicp();              get_tool();            }            game.game_state=1;            game.level_state=1;            return;          }          if(ms.x>140&&ms.x<310&&ms.y>420&&ms.y<460)          {              game.game_state=3;            return;          }          if(ms.x>140&&ms.x<310&&ms.y>470&&ms.y<500)          {            game.game_state=5;            return;          }        }      }      Sleep(500);    }  }  void fail_again()  {    int i,j;    int target;    int x,y;    int flag=0;    mouse_msg msg;      for(i=0; i<MAPSIZE; i++)      for(j=0; j<MAPSIZE; j++)      {        state[i][j]=false;        map[i][j]=map2[i][j];      }      while(1)    {      show_map();      while(mousemsg())      {        msg=getmouse();        if(msg.is_left()&&msg.is_down())        {          musicc();          if(msg.x>400&&msg.x<450&&msg.y>=40&&msg.y<100&&game.tool_number>=5)          {            musicp();            if(bomb_pop())            {              bomb_map();              musicb();              adjust_map();              game.score=game.score+game.counts*20;              game.tool_number=game.tool_number-5;                show_map();              game.counts=0;            }          }          else          {            x=msg.x/45;            y=(msg.y-250)/45;            if(!avaliable(x,y))              continue;            target=map[y][x];              if((avaliable(x+1,y)&&map[y][x+1]==target)||(avaliable(x-1,y)&&map[y][x-1]==target)                ||(avaliable(x,y-1)&&map[y-1][x]==target)||(avaliable(x,y+1)&&map[y+1][x]==target))            {              search_map(x,y,target);              game.score=game.score+game.counts*20;              if(game.counts>=6)              {                game.tool_number=game.tool_number+3;                musicu();              }              flash_map(target);              adjust_map();            }            game.counts=0;            show_map();            Sleep(100);            state1_back();            if(end_map())            {              if(game.score>=game.targets)              {                musicsheng();                game.game_state=2;                return;              }              else if(game.score<game.targets)              {                musicf();                game.game_state=-1;                return ;              }            }          }        }      }    }  }  void end_game()  {    mouse_msg msg;    while(1)    {      show_map();      putimage(100, 320, game.img[8]);      setfont(30,0,"隶书");      setcolor(EGERGB(255,255,255));      setbkmode(TRANSPARENT);      outtextrect(120,330, 180,450,"闯关失败,是否重闯本关?");      while (mousemsg())      {        msg = getmouse();        if(msg.is_left()&&msg.is_down())        {          if(msg.x>115&&msg.x<222&&msg.y>400&&msg.y<430)          {            musicc();            game.game_state=0;            game.state=0;            game.level=1;            game.targets=1500;            game.score=0;            return ;          }          if(msg.x>230&&msg.x<336&&msg.y>400&&msg.y<430)          {            musicc();            if(game.level>1)              game.score=game.score-1500;            else if(game.level==1)              game.score=0;            game.game_state=4;            return ;          }        }      }      Sleep(500);    }  }  void win_game()  {    mouse_msg msg;    while(1)    {      show_map();      putimage_transparent(NULL,game.img[10],130,300,0);      while (mousemsg())      {        msg = getmouse();        if(msg.is_left()&&msg.is_down())        {          musicc();          game.level++;          game.targets=game.targets+1600;          game.state=1;          game.game_state=1;          game.level_state=1;          game.tool_number=game.tool_number+2;          return ;        }      }      Sleep(500);    }  }  void play()  {    while(1)    {      if(game.game_state==0)        start_game();      else if(game.game_state==1)        play_game();      else if(game.game_state==-1)        end_game();      else if(game.game_state==2)        win_game();      else if(game.game_state==4)        fail_again();      else if(game.game_state==5)        inter_game();      else if(game.game_state==3)        return ;    }  }      int main()  {    initgraph(450,700);    game.game_state=0;    game.counts=0;    game.score=0;    game.targets=1500;    game.level=1;    game.tool_number=0;    game.tool_state=1;    game.start_state=1;    init_img();    mciSendString("open game\under.mp3 alias mymusicg",NULL,0,NULL);    mciSendString("play mymusicg repeat",NULL,0,NULL);    read(&high);      play();      closegraph();    mciSendString("close mymusicg repeat",NULL,0,NULL);    return 0;  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言实现宾果消消乐分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483522.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐