超级玛丽C语言

实验内容:大一C语言程序设计-游戏-SuperMario
 实验工具:codeblocks & ege
 代码内容:
 #include<stdio.h>
 #include<graphics.h>
 #include<windows.h>
 #include<time.h>
 #include<pthread.h>
  
 #include<mmsystem.h>
 #pragma comment(lib,"WINMM.LIB")
  
 pthread_t BGM;
 PIMAGE mapimage,mari[8],ar[3],wal[5],ques,water,moguimage,mar[2],map1image[4],map2image[4],mon, goldi[4],bg,di,star[4],prin,love,bad1,ambulen[4],lunyiboy[2],mushroom,monster[2],tor[2];
  
 /****强行标记所用***/
 int gamelevel = 0; // 计算关卡
 int itime, mark = 100 ; // 开始游戏否
 int temp ;
 int conting=1;
 int alpha = 0, da = 1; // 淡入 淡出标记
 int gameState = 0;
 int music_control = 1;
 int music_num=0;
 int music_begin = 1;
 int sign =100; // 标记音效
 int map_sign = 0; //判断第二关摔了没
 int te = 0;
 int am = 0;
  
 /***** 初始值 **********/
 int life_num=3;
 int score_num=0;
 int game_score=0;
 int second;
  
 /***** 金币的转圈 地图的转动 ******/
 int g=0;
 int k = 0;
  
 /***** 地图的的显示****/
 int map[18][30];
 int map2[18][30];
 void init_map()
 {
 int i =0,j=0;
 if(gamelevel == 1)
 {
 int map1[18][30]=
 {
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,
 1,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,1,0,1,
 1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,1,
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  
 };
  
 for(i=0; i<18; i++)
  
 {
 for(j=0; j<30; j++)
 {
 map[i][j] = map1[i][j];
 }
 }
 }
  
 else if(gamelevel == 2)
 {
 int map3[18][30]=
 {
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0,1,
 1,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,2,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,2,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,
 1,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,
 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,2,0,0,0,0,0,0,0,1,1,1,
 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  
 };
  
  
 for(i=0; i<18; i++)
  
 {
 for(j=0; j<30; j++)
 {
 map[i][j] = map3[i][j];
 }
 }
 }
 }
  
 PIMAGE wel[5],starimage[2], marion[2],bgl,mu,img,situa;
 mouse_msg ms;
 void init_wel()
 {
 int i;
 initgraph(1024,768);
 for(i=0; i<5; i++)
 {
 wel[i] = newimage();
 }
 for(i=0; i<2; i++)
 {
 starimage[i] = newimage();
 marion[i] = newimage();
 }
 bgl = newimage();
 bad1 = newimage();
 mu = newimage();
 img = newimage();
 situa=newimage();
  
 getimage(situa,"c\\welcom\\situation2.png");
 getimage(img,"c\\welcom\\1.png");
 getimage(bad1,"c\\bad\\bad1.png");
 getimage(wel[0],"c\\welcom\\wel1.0.jpg");
 getimage(wel[1],"c\\welcom\\wel1.1.jpg");
 getimage(wel[2],"c\\welcom\\wel1.2.jpg");
 getimage(wel[3],"c\\welcom\\wel1.3.jpg");
 getimage(wel[4],"c\\welcom\\wel1.4.jpg");
 getimage(starimage[0],"c\\welcom\\star.png");
 getimage(starimage[1],"c\\welcom\\star1.png");
 getimage(marion[0],"c\\welcom\\mario1.png");
 getimage(marion[1],"c\\welcom\\mario2.png");
 getimage(bgl,"c\\welcom\\bgl.png");
 getimage(mu,"c\\welcom\\music.png");
 }
  
 void* play_clickmusic(void *ret)
 {
 int temp=*(int *)ret;
 if(temp==0)
 {
 mciSendString(TEXT("open music\\jump.mp3 alias jump"), NULL, 0, NULL);
 mciSendString(TEXT("play jump"), NULL, 0, NULL);
 }
 if(temp == 1)
 {
 mciSendString(TEXT("open music\\vic.mp3 alias vic"), NULL, 0, NULL);
 mciSendString(TEXT("play vic"), NULL, 0, NULL);
 }
 if(temp == 2)
 {
 mciSendString(TEXT("open music\\glod.mp3 alias gold"), NULL, 0, NULL);
 mciSendString(TEXT("play gold"), NULL, 0, NULL);
 }
 if(temp == 3)
 {
 mciSendString(TEXT("open music\\die.mp3 alias die"), NULL, 0, NULL);
 mciSendString(TEXT("play die"), NULL, 0, NULL);
 }
 if(temp == 4)
 {
 mciSendString(TEXT("open music\\change.mp3 alias change"), NULL, 0, NULL);
 mciSendString(TEXT("play change"), NULL, 0, NULL);
 }
 if(temp == 7)
 {
 mciSendString(TEXT("open music\\monsfeat.mp3 alias monsfeat"), NULL, 0, NULL);
 mciSendString(TEXT("play monsfeat"), NULL, 0, NULL);
 }
  
 }
  
 void show_situation()
 {
  
 while(1)
 {
 bar(0,0,1024,768);
 putimage_transparent(NULL,marion[1],0,0,BLACK);
 /***介绍游戏玩法****/
 putimage(0,0,situa);
 setfillcolor(BLACK);
 bar(80,700,200,750,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(WHITE);
 outtextxy(100,700,"Back");
 while(mousemsg()) // 检测当时是否有鼠标消息
 {
 ms=getmouse();
 if(ms.x>80 && ms.x<200 && ms.y >700 && ms.y <750)
 {
 setfillcolor(LIGHTGRAY);
 bar(80,700,200,750,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(BLUE);
 outtextxy(100,700,"Back");
 }
 }
 delay_fps(60);
 ms=getmouse();
 if(ms.is_left() && ms.x>80 && ms.x<200 && ms.y >700 && ms.y <750)
 {
 gameState = 0;
 break;
 }
 }
 }
  
 void TIME()
 {
 int time;
 time = clock();
 second = time/1000;
 }
  
 typedef struct Stone
 {
 int x,y;
 int alive;
 } stone;
 stone sto[2], gold[20];
  
 typedef struct Role
 {
 int x,y;
 int arrow;
 int dex;
 int speed;
 int high;
 int alive;
 int victory;
 //int lun;
  
 } role;
  
 role mario, mogu, qu[2], prins,monste;
 enum arrow
 {right, left};
  
 void init_pic()
 {
 initgraph(800,500);
 int i;
 mapimage = newimage();
  
 for(i=0; i<8; i++)
 {
 mari[i] = newimage();
 }
 for(i=0; i<2; i++)
 {
 mar[i] = newimage();
 lunyiboy[i] = newimage();
 monster[i] = newimage();
 tor[i] = newimage();
 }
 for(i=0; i<5; i++)
 {
 wal[i] = newimage();
 }
 for(i=0; i<4; i++)
 {
 goldi[i] = newimage();
 star[i] = newimage();
 map1image[i] = newimage();
 map2image[i] = newimage();
 ambulen[i] = newimage();
 }
 for(i=0;i<3;i++)
 {
 ar[i] = newimage();
 }
 ques = newimage();
 water = newimage();
 moguimage = newimage();
 prin=newimage();
 mon= newimage();
 bg = newimage();
 di = newimage();
 love = newimage();
 mushroom = newimage();
  
 getimage(mushroom,"c\\underground\\mon1.png");
 getimage(monster[0],"c\\ground1\\mons.png");
 getimage(monster[1],"c\\ground1\\mons2.png");
 getimage(tor[0],"c\\ground1\\torr.png");
 getimage(tor[1],"c\\ground1\\torl.png");
 getimage(ar[0],"c\\ground1\\al.png");
 getimage(ar[1],"c\\ground1\\au.png");
 getimage(ar[2],"c\\ground1\\ad.png");
 getimage(mapimage,"c\\ground1\\map1.jpg");
 /* getimage(lunyiboy[0],"c\\underground\\lunyi.png");
 getimage(lunyiboy[1],"c\\underground\\lunyi2.png");*/
 getimage(lunyiboy[0],"c\\underground\\lunyi6.png");
 getimage(lunyiboy[1],"c\\underground\\lunyi61.png");
 getimage(prin,"c\\ground1\\prin.png");
 getimage(love,"c\\ground1\\over.png");
 getimage(map1image[0],"c\\underground\\map1.0.png");
 getimage(map1image[1],"c\\underground\\map1.1.png");
 getimage(map1image[2],"c\\underground\\map1.3.png");
 getimage(map1image[3],"c\\underground\\map1.2.png");
 getimage(map2image[0],"c\\underground\\map2.0.png");
 getimage(map2image[1],"c\\underground\\map2.1.png");
 getimage(map2image[2],"c\\underground\\map2.3.png");
 getimage(map2image[3],"c\\underground\\map2.2.png");
 getimage(ambulen[0],"c\\underground\\m1.0.png");
 getimage(ambulen[1],"c\\underground\\m1.1.png");
 getimage(ambulen[2],"c\\underground\\m1.2.png");
 getimage(ambulen[3],"c\\underground\\m1.3.png");
 getimage(bg,"c\\underground\\bg.png");
 getimage(mari[0],"c\\ground1\\mariol.1.png"); //0 ×óÒ»
 getimage(mari[1],"c\\ground1\\mariol.2.png"); //1 ×ó¶þ
 getimage(mari[2],"c\\ground1\\marior.1.png"); //2 ÓÒÒ»
 getimage(mari[3],"c\\ground1\\marior.2.png"); //3 ÓÒ¶þ
 getimage(mari[4],"c\\ground1\\jump1.png");
 getimage(mari[5],"c\\ground1\\jumpd.png");
 getimage(mari[6],"c\\underground\\jumpdie.png");
 getimage(mari[7],"c\\underground\\jumpdiele.png");
 getimage(wal[0],"c\\ground1\\wal.jpg");
 getimage(wal[1],"c\\underground\\wal.jpg");
 getimage(wal[2],"c\\underground\\walb.png");
 getimage(wal[3],"c\\ground1\\walb.png");
 getimage(wal[4],"c\\ground1\\walo.png");
 getimage(ques,"c\\ground1\\ques.jpg");
 getimage(water,"c\\ground1\\water.png");
 getimage(moguimage,"c\\ground1\\mogu.png");
 getimage(mar[0],"c\\ground1\\mar.png"); // you
 getimage(mar[1],"c\\ground1\\mal.png"); // zuo
 getimage(mon,"c\\underground\\mon2.png");
 getimage(goldi[0],"c\\ground1\\gold.png");
 getimage(goldi[1],"c\\ground1\\goldiif.png");
 getimage(goldi[2],"c\\ground1\\goldif.png");
 getimage(goldi[3],"c\\ground1\\goldf.png");
 getimage(di,"c\\bad\\die.png");
 getimage(star[0],"c\\ground1\\starr.png");
 getimage(star[1],"c\\ground1\\starr1.png");
 getimage(star[2],"c\\ground1\\starr2.png");
 getimage(star[3],"c\\ground1\\starr4.png");
 }
  
 void init()
 {
 int i;
 init_map();
 itime =0;
 init_pic();
 conting = 1;
 mario.alive =1;
 mario.victory = 0;
 if(mario.speed != 2)
 map_sign = 0;
 //lun = 0;
 am = 0;
 if(mark !=1 )
 {
 return;
 }
  
 mario.x=1;
 mario.y=15;
 mario.arrow = right;
 mario.high = 0;
 mario.dex =0;
  
 /**** 一关怪物 二关蘑菇 ***/
 if(gamelevel == 2)
 {
 monste.x = 3;
 monste.y = 3;
 monste.alive = 0;
 }
 if(gamelevel == 1)
 {
 monste.y = 11;
 monste.x = 8;
 monste.alive = 1;
 monste.arrow = right;
 monste.speed = 20;
 monste.dex = 0;
 }
  
 /* if(mark == 0)
 {
 mario.speed =0;
 mark ++;
 }*/
  
 // mario.aim=0;
  
 mogu.arrow = right;
 mogu.dex =0;
 /***** ground、蘑菇 under 怪物*****/
 if(gamelevel == 1)
 {
 mogu.y =6;
 mogu.x =10;
 mogu.speed =3;
 }
  
 if(gamelevel == 2)
 {
 mogu.y =6;
 mogu.x =8;
 mogu.speed =10;
 }
  
 /*** 可以撞碎的砖块 ****/
 if(gamelevel == 2)
 {
 sto[0].x = 3;
 sto[0].y = 13;
 sto[0].alive = 0;
 }
 if(gamelevel == 1)
 {
 sto[0].x = 7;
 sto[0].y = 5;
 sto[0].alive = 0;
 temp = 0;
 }
  
  
 /**** 问号 公主 *****//*** 隐藏的砖块 ***/
 if(gamelevel == 1)
 {
 qu[0].x =10;
 qu[0].y =7; // ground 问号
 qu[0].dex =0;
 prins.x = 2;
 prins.y = 15;
 prins.alive = 1;
 prins.dex = 1;
 prins.arrow = right;
 }
 else if(gamelevel == 2)
 {
 // qu[1].dex=1;
 qu[0].x =15;
 qu[0].y =8; // 墙壁 under ston
 qu[0].dex =0;
 prins.alive = 0;
 }
 sto[1].x=7;
 sto[1].y=4;
 sto[1].alive =0; // 两关均有的隐藏砖块
  
  
 for(i=0; i<5; i++)
 {
 gold[i].y = 6;
 gold[i].x = 8+i;
 gold[i].alive = 1;
 }
 gold[5].y =2;
 gold[5].x =7;
 gold[5].alive =1;
  
 gold[6].x=13;
 gold[6].y=1;
 gold[6].alive =1;
  
 gold[7].x =3;
 gold[7].y=12;
 gold[7].alive =1;
  
 gold[8].x =10;
 gold[8].y =4;
 gold[8].alive =0;
  
  
 // qu[1].x =10;
 // qu[1].y=6;
  
 memccpy(map2,map,sizeof(int),sizeof(map));
 }
 void goback_map()
 {
 memccpy(map,map2,sizeof(int),sizeof(map2));
 }
 void show_menu()
 {
 char s[10],t[10],z[10],i[10];
 sprintf(s,"%d",score_num);
 sprintf(t,"%d",gamelevel);
 sprintf(z,"%.5d",game_score);
 sprintf(i,"%.5d",second);
 setfont(15,0,"黑体");
 if(gamelevel == 1)
 setcolor(RED);
 else if(gamelevel == 2)
 setcolor(WHITE);
 setbkmode(TRANSPARENT);
 if(gold[6].alive ==1)
 putimage_transparent(NULL,goldi[g-1],13*25,1*25,BLACK);
 else
 putimage_transparent(NULL,goldi[0],13*25,1*25,BLACK);
 outtextxy(355,28,"x");
 outtextxy(370,30,s);
  
 setfont(20,15,"黑体");
 outtextxy(450,20,"WORLD");
 outtextxy(150,20,"MARIO");
 outtextxy(625,20,"TIME");
 setfont(15,0,"黑体");
 char t1[] = "1 -";
 outtextxy(468,42,t1);
 outtextxy(495,42,t);
 outtextxy(165,42,z);
 outtextxy(640,42,i);
  
 }
  
 void DrawStart()
 {
 initgraph(800,500);
 putimage_withalpha(NULL, bg, 0, 0);
 }
  
 void DrawClose()
 {
 putimage(0,0,bgl);
 }
 /*
 功能:
 判断游戏是否过关
 返回值:
 1:过关
 2:还未过关
 */
 int PassOrNot()
 {
 if(map[mario.y][mario.x] == 20 ||map[mario.y][mario.x] == 21)
 {
 if(score_num >4 || mario.speed == 1)
 return 1;
 else
 return 5;
 }
 else if(mario.alive == 0)
 {
 if(mario.high == 2)
 return 4;
 else
 return 2;
 }
 else if(map_sign == 1 && mario.victory == 1)
 {
 return 3;
 }
 return 0;
 }
  
 /*
 功能:
 画过关提示
 返回值:
 1:已经画了2秒
 0:还没画够2秒
 */
 int DrawNext()
 {
 static float currentTime = timeGetTime();//当前时间
 static float lastTime = 0.0f;//持续时间
 lastTime = timeGetTime();
 if (lastTime-currentTime> 2000.0f)
 {
 return 1;
 currentTime = timeGetTime();
 lastTime = 0.0f;
 }
 putimage_withalpha(NULL, marion[1], 10, 10);
 putimage_withalpha(NULL, img, 0, 0);
 return 0;
 }
  
 /*
 功能:
 淡出画图(画面渐渐变黑)
 返回值:
 1:淡出完毕
 0:正在淡出
 */
 int DrawFO()
 {
 alpha+=4;
 if (alpha >= 255)
 {
 gameState = 4;
 alpha = 254;
 return 1;
 }
 putimage_alphablend(NULL, bg, 0, 0, alpha);
 return 0;
 }
  
 /*
 功能:
 淡入画图(画面渐渐变透明)
 */
 void DrawFI()
 {
 alpha -= 4;
 if (alpha <=0)
 {
 if(mario.alive == 1)
 {
 if(mario.victory == 0)
 gameState = 1;
 else
 gameState = 9;
  
 }
 else
 {
 if(life_num >0)
 gameState = 5;
 }
  
 alpha = 0;
 }
 putimage_alphablend(NULL, bg, 0, 0, alpha);
 }
  
 int showmap()
 {
 TIME();
 int i,j;
 k=k%4 +1;
  
 if(itime % 4 == 0)
 {
 g=g%4+1;
 }
  
 cleardevice();
 goback_map();
  
 for(i=0; i<8; i++)
 if(gold[i].alive == 1)
 {
 map[gold[i].y][gold[i].x] =8;
 }
  
 if(gamelevel == 1)
 putimage(0,0,mapimage);
 if(gamelevel == 2 && map_sign == 0)
 {
 putimage(0,0,map1image[k-1]);
 map[9][27] = 25;
 map[9][28] = 25;
 map[10][27] = 25;
 map[10][28] = 25;
 map[11][27] = 25;
 map[11][28] = 25;
 map[12][27] = 26;
 map[12][28] = 26;
 map[13][27] = 1;
 map[13][28] = 1;
 }
 else if(gamelevel == 2 && map_sign == 1)
 putimage(0,0,map2image[k-1]);
  
 if(prins.alive)
 {
 if(prins.dex-1 == 0)
 map[prins.y][prins.x] = 13;
 else if(prins.dex-1 == 1)
 prins.y = prins.y -3;
 else if(prins.dex-1 == 2)
 prins.y = prins.y -5;
 while(map[prins.y+1][prins.x] !=1)
 prins.y++;
 map[prins.y][prins.x] = 13;
 }
 for(i=0; i<2; i++)
 {
 if(sto[i].alive == 0)
 map[sto[i].y][sto[i].x] = 7;
 }
 if(sto[0].alive == 1)
 map[sto[0].y][sto[0].x] = 12;
  
 else if(sto[0].alive == 2 && gamelevel == 1)
 {
 map[sto[0].y][sto[0].x] = 14;
 }
 else if(sto[0].alive == 2 || sto[0].alive == 3 )
 {
 map[sto[0].y][sto[0].x] = 11;
 }
 else if(sto[0].alive == 4)
 {
 if(temp == 0)
 {
 gold[8].alive =1;
 temp = 1;
 }
 }
  
 if(monste.alive)
 {
 map[monste.y][monste.x] = 30;
 }
  
 if(gamelevel == 1 &&(!(mario.y >9 && mario.x >26 ||
 mario.y >13 && mario.x > 23)))
 {
 if(mario.speed == 0) // speed 用来标记 他吃了蘑菇没有
 map[mario.y][mario.x] =3;
 else if(mario.speed == 1)
 map[mario.y][mario.x]=6;
 else
 map[mario.y][mario.x] = 99;
 }
  
 else if(gamelevel == 2)
 {
 if(!(mario.y >15 &&((mario.x>15 && mario.x <19)||
 (mario.x>19 && mario.x <27))))
 {
 if(mario.speed == 0)
 map[mario.y][mario.x] =3;
 else if(mario.speed == 1)
 map[mario.y][mario.x]=6;
 else
 map[mario.y][mario.x] = 99;
 }
 else
 {
 mario.alive = 0;
 }
 }
 if(mogu.dex == 1)
 map[mogu.y][mogu.x] =5;
 if(qu[0].dex == 0)
 map[qu[0].y][qu[0].x] = 4;
 if(qu[0].dex == 1)
 {
 map[qu[0].y][qu[0].x] = 12;
 }
 if(gold[8].alive == 1)
 map[gold[8].y][gold[8].x] =11;
 /*** 地图的显示 ***/
 for(i=0; i<18; i++)
 {
 for(j=0; j<30; j++)
 {
 if(map[i][j] == 2 || map[i][j] == 12)
 {
 if(gamelevel == 2)
 putimage(j*25,i*25,wal[1]);
 if(gamelevel == 1)
 putimage(j*25,i*25,wal[0]);
 }
  
 if(map[i][j] == 8)
 {
 putimage_transparent(NULL,goldi[g-1],j*25,i*25,BLACK);
  
 }
 if(map[i][j]== 99)
 {
 if(mario.arrow == right )
 putimage_transparent(NULL,lunyiboy[0],j*25,i*25,BLACK);
 if(mario.arrow == left)
 putimage_transparent(NULL,lunyiboy[1],j*25,i*25,BLACK);
 }
 if(map[i][j] == 30)
 {
 if(gamelevel == 1)
 {
 if(monste.arrow == right)
 {
 if(monste.dex == 0)
 putimage_transparent(NULL,monster[0],j*25,i*25,BLACK); // 怪物
 else
 putimage_transparent(NULL,tor[0],j*25,i*25,BLACK); // 怪物
 }
 else
 {
 if(monste.dex == 0)
 putimage_transparent(NULL,monster[1],j*25,i*25,BLACK);
 else
 putimage_transparent(NULL,tor[1],j*25,i*25,BLACK); // 怪物
 }
  
 }
 else
 putimage_transparent(NULL,mushroom,j*25,i*25,BLACK); //蘑菇
 }
 if(map[i][j] ==11)
 {
 if( i == sto[0].y && j == sto[0].x)
 {
 if(gamelevel == 2)
 putimage_transparent(NULL,wal[2],j*25,i*25,BLACK);
 else if(gamelevel ==1)
 putimage_transparent(NULL,wal[3],j*25,i*25,BLACK);
 }
 if(gold[8].alive == 1)
 {
 putimage_transparent(NULL,star[g-1],j*25,i*25,BLACK);
 map[i][j] = 8;
 }
 }
 if(map[i][j] == 14 )
 {
 putimage_transparent(NULL,wal[4],(j-1)*25,(i-1)*25,BLACK);
 map[i][j] =11;
 }
 if(map[i][j] == 3)
 {
 if(mario.high == 1)
 putimage_transparent(NULL,mari[6],j*25,i*25,BLACK);
 else if(mario.high == 2)
 putimage_transparent(NULL,mari[7],j*25,i*25,BLACK);
 else if(mario.arrow == right && (mario.dex ==0||mario.dex ==2))
 putimage_transparent(NULL,mari[2],j*25,i*25,BLACK);
 else if(mario.dex == 3)
 {
 putimage_transparent(NULL,mari[4],j*25,i*25,BLACK);
 mario.dex =0;
 }
 else if(mario.dex == 4)
 {
 putimage_transparent(NULL,mari[5],j*25,i*25,BLACK);
 mario.dex = 0;
 }
 else if(mario.arrow == right && mario.dex ==1)
 putimage_transparent(NULL,mari[3],j*25,i*25,BLACK);
 else if(mario.arrow == left && (mario.dex ==0||mario.dex ==2))
 putimage_transparent(NULL,mari[0],j*25,i*25,BLACK);
 else if(mario.arrow == left && mario.dex ==1)
 putimage_transparent(NULL,mari[1],j*25,i*25,BLACK);
  
 }
 if(map[i][j] == 4)
 {
 if(gamelevel == 1)
 putimage(j*25,i*25,ques);
 else if(gamelevel == 2)
 map[i][j] =7;
 }
 if(map[i][j] == 5)
 {
 if(gamelevel == 1)
 putimage_transparent(NULL,moguimage,j*25,i*25,BLACK);
 if(gamelevel == 2)
 putimage_transparent(NULL,mon,j*25,i*25,BLACK);
 }
 if(map[i][j] == 6)
 {
 if(mario.arrow == right )
 putimage_transparent(NULL,mar[0],j*25,i*25,BLACK);
 if(mario.arrow == left)
 putimage_transparent(NULL,mar[1],j*25,i*25,BLACK);
  
 }
 if(map[i][j] == 13)
 {
 putimage_transparent(NULL,prin,j*25,i*25,BLACK);
 }
 if(map[i][j] == 9)
 putimage_transparent(NULL,water,j*150,i*150,BLACK);
  
 }
 printf("\n");
 }
 show_menu();
 }
 void monster_move()
 {
  
 // if(monste.dex == 1)
 // mons.speed = 4;
 if(map[monste.y+1][monste.x] ==0 || (monste.y +1 == mario.y && monste.x == mario.x))
 {
 monste.y++;
 return;
 }
 if(monste.dex == 0)
 monste.speed = 10;
 else
 monste.speed = 5;
 if(itime % monste.speed !=0)
 return;
 if(gamelevel == 2)
 return;
 if(monste.alive == 0 )
 return;
  
  
 if(monste.arrow == right)
 {
 /* if(map[monste.y][monste.x+1] != 1)
 monste.x++;*/
 if(monste.x+1!= 24)
 monste.x++;
 else
 monste.arrow = left;
 }
 if(monste.arrow == left)
 {
 if(map[monste.y][monste.x-1] != 1)
 monste.x --;
 if(map[monste.y][monste.x-1] ==1)
 {
 if(monste.dex == 0)
 monste.arrow = right;
 else
 monste.alive = 0;
 }
 }
 }
  
 void mogu_move()
 {
  
 if(gamelevel ==1)
 {
 if(itime % mogu.speed !=0)
 return;
 if(mogu.dex == 0)
 return;
 if(map[mogu.y+1][mogu.x] ==0 || (mogu.y+1 == mario.y &&mogu.x == mario.x))
 {
 mogu.y++;
 return;
 }
 if(mogu.y-1 == mario.y && mogu.x == mario.x ||
 mogu.y+1 == mario.y && mogu.x == mario.x ||
 mogu.y == mario.y && mogu.x+1 == mario.x ||
 mogu.y == mario.y && mogu.x-1 == mario.x)
 {
 mogu.x = mario.x;
 mogu.y = mario.y;
 return;
 }
 if(mogu.arrow == right)
 if(map[mogu.y][mogu.x+1] != 1)
 {
 mogu.x ++;
 if(map[mogu.y][mogu.x+1] ==1 ||
 map[mogu.y][mogu.x+1] == 20)
 mogu.arrow = left;
 }
 if(mogu.arrow == left)
 if(map[mogu.y][mogu.x-1] != 1)
 {
 mogu.x --;
 if(map[mogu.y][mogu.x-1] ==1)
 {
 mogu.x--;
 showmap();
 mogu.dex = 0;
 }
 }
  
 }
 else if(gamelevel ==2)
 {
 if(itime % mogu.speed !=0)
 return;
 if(mogu.dex == 0)
 return;
 if(map[mogu.y+1][mogu.x] ==0 || (mogu.y+1 == mario.y &&mogu.x == mario.x))
 {
 mogu.y++;
 return;
 }
 if(mogu.arrow == right)
 {
 if(map[mogu.y][mogu.x+1] != 2)
 mogu.x++;
 else
 mogu.arrow = left;
 }
 if(mogu.arrow == left)
 {
 if(map[mogu.y][mogu.x-1] != 2)
 mogu.x --;
 if(map[mogu.y][mogu.x-1] ==2)
 mogu.arrow = right;
 }
 }
  
 }
 void show_victo()
 {
 initgraph(1024,640);
 cleardevice();
 PIMAGE vic;
 vic = newimage();
 getimage(vic,"c\\vic\\vic.jpg");
 putimage(0,0,vic);
 // putimage(0,0,mari[0]);
 }
 void Drawvicto()
 {
 // show_victo();
 printf("123456");
 mciSendString(TEXT("stop back"), NULL, 0, NULL);
 sign = 5;
 mciSendString(TEXT("open music\\bg2.mp3 alias back2"), NULL, 0, NULL); //循环播放背景音乐
 mciSendString(TEXT("play back2 repeat"), NULL, 0, NULL);
 setfillcolor(BLACK);
 bar(80,500,200,550,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(WHITE);
 outtextxy(100,500,"EXIT");
  
 while(mousemsg()) // 检测当时是否有鼠标消息
 {
 ms=getmouse();
 if(ms.x>80 && ms.x<200 && ms.y >500 && ms.y <550)
 {
 setfillcolor(LIGHTGRAY);
 bar(80,500,200,550,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(BLUE);
 outtextxy(100,500,"EXIT");
 }
 }
 delay_fps(60);
 ms=getmouse();
 if(ms.is_left() && ms.x>80 && ms.x<200 && ms.y >500 && ms.y <550)
 {
 gameState = 10;
 }
 }
 void show_die()
 {
 cleardevice();
 conting = 0;
 char s[10];
 sprintf(s,"%d",life_num);
 setfont(30,0,"黑体");
 setcolor(WHITE);
 setbkmode(TRANSPARENT);
 // putimage_transparent(NULL,di,0.8*200,0.5*200,BLACK);
 outtextxy(410,200,"x");
 outtextxy(515,200,s);
 putimage_withalpha(NULL, di, 0.8*200, 0.5*200);
  
 }
 /*
 功能:
 画过关提示
 返回值:
 1:已经画了2秒
 0:还没画够2秒
 */
 int DrawDie()
 {
 mciSendString(TEXT("stop back"), NULL, 0, NULL);
 sign = 5;
 static float currentTime = timeGetTime();//当前时间
 static float lastTime = 0.0f;//持续时间
 lastTime = timeGetTime();
 if (lastTime-currentTime> 2000.0f)
 {
 return 1;
 currentTime = timeGetTime();
 lastTime = 0.0f;
 }
 putimage_withalpha(NULL, bad1, 0.8*100, 0.5*100);
  
 return 0;
 }
 int game_control()
 {
 int i;
 int t =0; //跳跃时标记有无障碍
 char arrow;
 if(conting != 0)
 {
 showmap();
 /* 继续添加一个选择:
 重新来还是怎么的*/
 }
 Sleep(30);
 if(map[mario.y+1][mario.x] == 26||
 map[mario.y+1][mario.x] == 25)
 {
 mario.x = 28;
 if(map[mario.y+1][mario.x] == 26)
 {
 mario.y++;
 mario.high = 2;
 showmap();
 Sleep(1000);
 mario.alive = 0;
 }
 else
 {
  
 if(te == 0)
 {
 mario.y++;
 mario.high = 1;
 Sleep(50);
 te++;
 }
 else
 {
 mario.y++;
 mario.high = 1;
 Sleep(500);
 }
  
 }
 }
 else if(map[mario.y+1][mario.x] == 0 ||
 (map[mario.y+1][mario.x]==4 && gamelevel == 2)||
 map[mario.y+1][mario.x] == 7 ||
 map[mario.y+1][mario.x] == 21 ||
 map[mario.y+1][mario.x] == 30 &&gamelevel == 2)
 {
 mario.y++;
 mario.dex = 4;
 }
 else if(map[mario.y+1][mario.x] == 8)
 {
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].x ==mario.x &&gold[i].y == mario.y+1)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 t = 1;
 }
 if(gold[8].x ==mario.x &&gold[8].y == mario.y+1)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[8].alive =0;
 game_score = game_score +80;
 t = 1;
 }
  
 }
 mario.y++;
 game_score = game_score +20;
 mario.dex =4;
 score_num++;
 }
  
 if(gamelevel == 1 && map[mario.y+1][mario.x] == 30)
 {
 t = 1;
 sign = 7;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 monste.dex = 1;
 monste.arrow =right;
 game_score=game_score +20;
 }
  
 if((mario.y == monste.y &&mario.x == monste.x )&&monste.alive == 1 )
 {
 if(gamelevel == 1)
 mario.alive = 0;
 if(gamelevel == 2)
 {
 sign = 4;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 mario.speed = 0;
 monste.alive = 0;
 }
 }
  
 if(gamelevel ==2 && map[mario.y+1][mario.x] == 5)
 {
 t = 1;
 sign = 7;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 mogu.dex =0;
 }
  
 if(mogu.dex ==1 && mario.y == mogu.y && mario.x == mogu.x)
 {
 if(gamelevel == 1)
 {
 sign = 4;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 mogu.dex =0;
 mario.speed =1;
 game_score=game_score + 200;
 }
 else if(gamelevel == 2)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 t = 1;
 mario.alive =0;
 mogu.dex =0;
 }
 }
 if(kbhit())
 {
 // game_control();
 int i;
 arrow = getch();
 if(arrow == VK_LEFT) //¼üÅÌ×ó
 {
 mario.arrow = left;
 if(map[mario.y][mario.x-1] == 0 ||
 map[mario.y][mario.x-1] == 20 ||
 map[mario.y][mario.x-1] == 21 ||
 map[mario.y][mario.x -1] == 7 ||
 map[mario.y][mario.x -1] == 30)
 {
 mario.x--;
 mario.dex = mario.dex%2+1;
 }
 else if(map[mario.y][mario.x-1] == 8)
 {
  
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].x ==mario.x-1 &&gold[i].y == mario.y)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 }
 if(gold[8].y ==mario.y-1 &&gold[8].x == mario.x)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 game_score=game_score + 80;
 }
 }
 mario.x--;
 game_score=game_score + 20;
 mario.dex = mario.dex%2+1;
 score_num++;
 }
 }
 if(arrow == VK_RIGHT) // you
 {
 mario. arrow = right;
 if(map[mario.y][mario.x+1] == 0 ||
 map[mario.y][mario.x+1] == 20 ||
 map[mario.y][mario.x+1] == 21 ||
 map[mario.y][mario.x+1] == 13)
 {
 mario.x++;
 mario.dex = mario.dex%2+1;
 }
 else if(map[mario.y][mario.x+1] == 8)
 {
  
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].x ==mario.x+1 &&gold[i].y == mario.y)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 }
 if(gold[8].y ==mario.y-1 &&gold[8].x == mario.x)
 {
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 game_score=game_score + 80;
 }
 }
 game_score=game_score + 20;
 mario.x++;
 mario.dex = mario.dex%2+1;
 score_num++;
 }
 }
 if(arrow == VK_UP) //shang
 {
 /*** 人****/
 if(mario.speed == 0)
 {
 if(map[mario.y-1][mario.x] == 0)
 {
 for(i=0; i<6; i++)
 {
 mario.y=mario.y-1;
 mario.dex = 3;
 showmap();
 Sleep(20);
 if(map[mario.y-1][mario.x] !=0)
 {
 if(map[mario.y-1][mario.x] == 8)
 {
 mario.y --;
 mario.dex =4;
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].y ==mario.y &&gold[i].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 game_score=game_score + 20;
 }
 if(gold[8].y ==mario.y &&gold[8].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 game_score=game_score + 80;
 }
 }
 score_num++;
 }
  
 else
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 t=1;
 mario.dex =4;
 if(map[mario.y-1][mario.x] == 4)
 {
 mogu.dex =1;
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y-1][mario.x] == 7)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == sto[1].y &&mario.x == sto[1].x)
 sto[1].alive = 1;
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x && gamelevel == 2)
 {
 qu[0].dex ++;
 mogu.dex =1;
 }
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y -1][mario.x ] == 12 || map[mario.y -1][mario.x ] == 11)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x)
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
  
 break;
 }
 // t = 1;
 }
  
 }
 if(t == 0)
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 }
 /* else if(t == 2)
 {
  
 t = 0;
 }*/
 }
 else if(map[mario.y-1][mario.x] == 22)
 {
 mario.y --;
 showmap();
 mario.victory = 1;
 }
 }
 /*****滑板车 ***/
 else if(mario.speed == 1)
 {
 if(map[mario.y-1][mario.x] == 0)
 {
 for(i=0; i<4; i++)
 {
 mario.y=mario.y-1;
 mario.dex = 3;
 showmap();
 Sleep(20);
 if(map[mario.y-1][mario.x] !=0)
 {
 if(map[mario.y-1][mario.x] == 8)
 {
 mario.y --;
 mario.dex =4;
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].y ==mario.y &&gold[i].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 game_score=game_score + 20;
 }
 if(gold[8].y ==mario.y &&gold[8].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 game_score=game_score + 80;
 }
 }
 score_num++;
 }
  
 else
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 t=1;
 mario.dex =4;
 if(map[mario.y-1][mario.x] == 4)
 {
 mogu.dex =1;
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y-1][mario.x] == 7)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == sto[1].y &&mario.x == sto[1].x)
 {
 sto[1].alive = 1;
 monste.alive = 1;
 }
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x && gamelevel == 2)
 {
 qu[0].dex ++;
 mogu.dex =1;
 }
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y -1][mario.x ] == 12 || map[mario.y -1][mario.x ] == 11)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x)
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
  
 break;
 }
 // t = 1;
 }
 }
 if(t == 0)
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 }
 if(t == 0)
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 }
 }
 else if(map[mario.y-1][mario.x] == 22)
 {
 mario.y --;
 showmap();
 mario.victory = 1;
 }
 }
 /**** 轮椅 ***/
 else
 {
 if(map[mario.y-1][mario.x] == 0)
 {
 for(i=0; i<3; i++)
 {
 mario.y=mario.y-1;
 mario.dex = 3;
 showmap();
 Sleep(20);
 if(map[mario.y-1][mario.x] !=0)
 {
 if(map[mario.y-1][mario.x] == 8)
 {
 mario.y --;
 mario.dex =4;
 for(i=0; i<20; i++)
 {
 if(gold[i].alive == 0)
 continue;
 if(gold[i].y ==mario.y &&gold[i].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gold[i].alive =0;
 game_score=game_score + 20;
 }
 if(gold[8].y ==mario.y &&gold[8].x == mario.x)
 {
 t = 1;
 sign = 2;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 game_score=game_score + 80;
 }
 }
 score_num++;
 }
  
 else
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 t=1;
 mario.dex =4;
 if(map[mario.y-1][mario.x] == 4)
 {
 mogu.dex =1;
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y-1][mario.x] == 7)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == sto[1].y &&mario.x == sto[1].x)
 sto[1].alive = 1;
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x && gamelevel == 2)
 {
 qu[0].dex ++;
 mogu.dex =1;
 }
 game_score=game_score + 20;
 showmap();
 }
 else if(map[mario.y -1][mario.x ] == 12 || map[mario.y -1][mario.x ] == 11)
 {
 if(mario.y-1 == sto[0].y &&mario.x == sto[0].x)
 sto[0].alive ++ ;
 else if(mario.y-1 == qu[0].y &&mario.x == qu[0].x)
 qu[0].dex ++;
 game_score=game_score + 20;
 showmap();
 }
  
 break;
 }
 // t = 1;
 }
 }
 if(t == 0)
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 }
 if(t == 0)
 {
 sign = 0;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 }
 }
 else if(map[mario.y-1][mario.x] == 22)
 {
 mario.y --;
 showmap();
 mario.victory = 1;
 }
 }
 }
 }
 if(prins.alive)
 prins.y = 15;
 int tempt =0;
 tempt = PassOrNot();
 if(tempt ==1 )
 {
 sign = 1;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gameState = 2;
 }
 if(tempt == 2 )
 {
  
 sign = 3;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 life_num -- ;
 gameState = 6;
 }
 if(tempt == 3)
 {
 sign = 1;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gameState = 8;
 }
 if(tempt == 4)
 {
 sign = 3;
 pthread_create(&BGM,NULL,play_clickmusic,&sign);
 gameState = 6;
 }
 if(tempt == 5)
 {
 putimage_transparent(NULL,ar[0],8*50,3*50,BLACK);
 putimage_transparent(NULL,ar[1],5*50,4*50,BLACK);
 putimage_transparent(NULL,ar[2],1*50,3*50,BLACK);
 }
 }
 void ai()
 {
 // PlaySound("music\\0.wav", NULL, SND_FILENAME | SND_ASYNC);//播放一个无音效音频文件,作为终止背景音乐
 mciSendString(TEXT("stop back"), NULL, 0, NULL);
 sign = 5;
 mciSendString(TEXT("open music\\end-love.mp3 alias back1"), NULL, 0, NULL); //循环播放背景音乐
 mciSendString(TEXT("play back1 repeat"), NULL, 0, NULL);
 conting = 0;
 cleardevice();
 putimage(1,1,bg);
 ///淡入淡出
 char s[10];
 sprintf(s,"%d",life_num);
 setfont(30,0,"黑体");
 setcolor(WHITE);
 setbkmode(TRANSPARENT);
 putimage_transparent(NULL,love,0.8*200,0.2*200,BLACK);
 outtextxy(510,100,"Love-Line");
 outtextxy(550,100,s);
 gameState = 5;
 /****插入是否重来****/
 }
 void prins_move()
 {
  
 if(prins.alive == 0)
 return;
 if(prins.x == mario.x-1 && prins.y-3 == mario.y && mario.arrow == left && prins . arrow == right && prins.dex-1 == 1)
 {
 if(conting == 1)
 showmap();
 Sleep(500);
 ai();
 return;
 }
 else if(prins.x == mario.x-1 && prins.y-5 == mario.y && mario.arrow == left && prins . arrow == right && prins.dex-1 == 2)
 {
 if(conting == 1)
 showmap();
 Sleep(500);
 ai();
 return;
 }
 else if(prins.x == mario.x-1 && prins.y == mario.y && mario.arrow == left && prins . arrow == right && prins.dex-1 == 0)
 {
 if(conting == 1)
 showmap();
 Sleep(500);
 ai();
 return;
 }
 if(itime%8!=0)
 return;
 /* if(prins.x == mario.x+1 && prins.y == mario.y && mario.arrow == right && prins . arrow == left)
 {
 ai();
 return;
 }*/
 int arrow;
 arrow = rand()%2;
 if(arrow == 0)
 if(map[prins.y][prins.x+1] ==0 )
 prins.x++;
 if(arrow == 1)
 if(map[prins.y][prins.x-1] ==0)
 prins.x--;
  
 if(itime%10 == 0)
 {
 prins.dex = prins.dex %3+1;
 return;
 }
  
  
 }
 void time()
 {
 itime++;
 if(itime%10 ==0)
 game_score++;
 }
 void welcom()
 {
 init_wel();
  
 int i=4,j=1;
 while(1)
 {
 putimage(0,0,wel[i-1]);
 putimage_transparent(NULL,marion[j-1],(12-j-1)*90,4*120,BLACK);
 // putimage_transparent(NULL,mu,0.1*200,0.1*200,BLACK);
 j=j%2+1;
 // i=i%5+1;
 setcolor(EGERGB(0xFF,0x50,0x50));
 setfont(50,50,"新宋体");
  
 setbkmode(TRANSPARENT);
 outtextxy(150,420,"1. one player");
 outtextxy(150,530,"2. situation");
  
 while(mousemsg()) // 检测当时是否有鼠标消息
 {
 ms=getmouse();
 if(ms.x>125 && ms.x<900 && ms.y >380 && ms.y <480)
 {
 /* setbkmode(TRANSPARENT);
 bar(125,380,900,480,NULL);*/
  
 putimage_transparent(NULL,starimage[0],1*80,5*80,BLACK);
 putimage_transparent(NULL,starimage[1],10*80,5*80,BLACK);
 setbkmode(TRANSPARENT);
  
 outtextxy(150,420,"1. one player");
 }
 if(ms.x>125 && ms.x<900 && ms.y >500 && ms.y <600)
 {
 /* setbkmode(TRANSPARENT);
 bar(125,500,900,600,NULL);*/
 putimage_transparent(NULL,starimage[0],1*80,6.5*80,BLACK);
 putimage_transparent(NULL,starimage[1],8*80,6.5*80,BLACK);
 setbkmode(TRANSPARENT);
 outtextxy(150,530,"2. situation");
 }
 /* if((int)ms.is_left() && ms.is_down())
 {
 if(ms.x>125 && ms.x<900 && ms.y >380 && ms.y <480)
 game_star();
 if(ms.x>125 && ms.x<900 && ms.y >500 && ms.y <600)
 / ...;
 }*/
 }
 delay_fps(60);
 ms=getmouse();
 if(ms.is_left() && ms.x>125 && ms.x<900 && ms.y >380 && ms.y <480)
 {
 /* setbkmode(TRANSPARENT);
 bar(125,380,900,480,NULL);*/
 gameState = 3;
 break;
 }
 if(ms.is_left() && ms.x>125 && ms.x<900 && ms.y >500 && ms.y <600)
 {
 gameState = 7;
 break;
 }
 /* if(ms.is_left() && ms.x>27 &&ms.x <42 &&ms.y>71 &&ms.y<107)
 {
 music_control = 1;
 break;
 }
 if(ms.is_left() && ms.x>36 && ms.x<72&& ms.y>125 && ms.y <161)
 {
 music_control = 0;
 break;
 }
 if(ms.is_left() && ms.x>120 && ms.x<165&& ms.y>168 && ms.y <202)
 {
  
 music_num ++;
 break;
 }
 */
 }
 }
 int choice()
 {
 if(mario.alive == 0)
 {
 int Prompt;
 Prompt= MessageBox(NULL,"Wanna try again?","surper mari",MB_YESNO);
 return Prompt;
 }
 else if(mario.alive == 1)
 {
 int Prompt;
 Prompt= MessageBox(NULL,"Happy Ending~ ?","surper mari",MB_YESNO);
 return Prompt;
 }
 }
 void Drawdefeat()
 {
 initgraph(600,600);
 PIMAGE defeat;
 defeat = newimage();
 getimage(defeat,"c\\bad\\die1.jpg");
 putimage(0,0,defeat);
 setfillcolor(BLACK);
 bar(80,500,200,550,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(WHITE);
 outtextxy(100,500,"EXIT");
  
 while(mousemsg()) // 检测当时是否有鼠标消息
 {
 ms=getmouse();
 if(ms.x>80 && ms.x<200 && ms.y >500 && ms.y <550)
 {
 setfillcolor(LIGHTGRAY);
 bar(80,500,200,550,NULL);
 setfont(40, 0,"宋体");
 setbkmode(TRANSPARENT);
 setcolor(BLUE);
 outtextxy(100,500,"EXIT");
 }
 }
 delay_fps(60);
 ms=getmouse();
 if(ms.is_left() && ms.x>80 && ms.x<200 && ms.y >500 && ms.y <550)
 {
 gameState = 10;
 }
 }
 int main()
 {
 setinitmode(0);
 init();
  
 setcaption("super mari");
 int tempt;
 // welcom();
 /****游戏主循环 每秒循环60次****/
  
  
 for (; is_run(); delay_fps(60))
 {
 if(sign !=5)
 {
 mciSendString(TEXT("open music\\open5.mp3 alias back"), NULL, 0, NULL); //循环播放背景音乐
 mciSendString(TEXT("play back repeat"), NULL, 0, NULL);
 }
  
 printf("%d",gameState);
 printf("mario.high=%d\nmario.speed= %d\n",mario.high,mario.speed);
 printf("PassOrNot=%d\n",PassOrNot());
 printf("monste.alive=%d\n ",monste.alive);
 printf("mario.victory=%d\n",mario.victory);
 switch (gameState)
 {
 case 0:
 welcom();
 DrawClose();
 break;
 case 1:
 /*游戏逻辑更新*/
 game_control();
 prins_move();
 /*if(kbhit()) {
 char ch = getch();
 KeyToMove(ch);
 }
 /*游戏画面更新*/
  
 // DrawFO();
 break;
 case 2: //过关提示
 showmap();
 if (DrawNext() == 1)
 gameState = 3;
 break;
 case 3: //淡出
 if (mark == 0)
 DrawStart();
 else
 showmap();
 if (DrawFO() == 1)
 {
 if(mario.high != 2)
 gamelevel++;
 mark = 1;
 init();
 //ReadFiles(nowLevel);
 };
 break;
 case 4: //淡入
 if(mario.victory == 1)
 show_victo();
 else if(life_num == 0)
 {
 sign = 5;
 mciSendString(TEXT("stop back"), NULL, 0, NULL);
 Drawdefeat();
 }
 else
 showmap();
 DrawFI();
 break;
  
 case 5:
 tempt=choice();
 if(mario.alive == 0)
 {
 if(tempt== 6)
 {
 mark = 0;
 sign = 4;
 gameState = 3;
 mario.alive = 1;
 mario.speed = 0;
 gamelevel = 0;
 map_sign = 0;
 }
 else if(tempt== 7)
 return 0;
 }
 else if(mario.alive == 1)
 {
 if(tempt== 6)
 return 0;
 else if(tempt== 7)
 {
 mciSendString(TEXT("stop back1"), NULL, 0, NULL);
 sign = 4;
 showmap();
 gameState = 3;
 gamelevel = 0;
 }
 }
 break;
  
 case 6:
 if(mario.high == 2)
 {
 sign = 5;
 mciSendString(TEXT("stop back"), NULL, 0, NULL);
 putimage(0,0,ambulen[am]);
 Sleep(1000);
 am++;
 gameState = 6;
 if(am== 4)
 {
 gameState = 3;
 map_sign = 1;
 mario.speed = 2;
 sign = 1;
 }
 }
 else
 {
 show_die();
 if(life_num == 0)
 {
 if(DrawDie()==1)
 {
 gameState = 4;
 }
 }
 else
 {
 if(DrawDie()==1)
 {
 gameState = 5;
 }
 }
 }
 break;
  
 case 7:
 show_situation();
 case 8:
 showmap();
 if (DrawFO() == 1);
 /* {
 //ReadFiles(nowLevel);
 };*/
 break;
 case 9:
 Drawvicto();
 break;
 case 10:
 exit(0);
 //break
 default:
 break;
  
 }
 time();
 mogu_move();
 monster_move();
  
 }
 closegraph();
  
 

}

 

实验总结:感觉写的代码很多,特别是可以撞击甚至于可以撞碎的砖块,撞击后才会出现的砖块,撞

击砖块后才会出现的星星、蘑菇,踩到乌龟脑袋后乌龟的加速与图片切换成龟壳的状态。。。。。。有

很多很多的数字标记,因为都是对地图的每个二位数组中数字的判断来切换的图片。标记的那些代码内

容,如果没有我的口头解释,估计一般人不太容易看懂,虽然可以实现简单实现。多线程的背景音乐很

激动呀,第一次加上了音乐!~

参考海报 

  • 34
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值