怎么用C语言实现消消乐游戏
创始人
2024-12-24 17:42:07
0次

```c#include#include#include#include #include#include#define MAPSIZE 10int 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; ihigh)  {    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||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=0; r--)    {      state[r][j]=true;    }  }}//判断是否通过本关int end_map(){  int i,j,target;  int x;  int y;  int flag=1;  for(i=0; i105&&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; i400&&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.score170&&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; i400&&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.score115&&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;}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...