📄 migong.cpp
字号:
#include<iostream.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#include<math.h>
#include<string.h>
#include <STDLIB.H>
#include<graphics.h>
double jiping[25]={123.475/2,130.85/2,138.6/2,146.85/2,155.55/2,164.8/2,
174.6/2,185/2,196/2,207.65/2,220/2,233.1/2,246.95/2,
130.85,138.6,146.85,155.55,164.8,
174.6,185,196,207.65,220,233.1,246.95
};
/*class Cmouse
{
public:
Cmouse(){intnum=0x33;}
~Cmouse(){hidemouse();}
// union REGS inreg,outreg;
// int intnum=0x33;
void showmouse(){inreg.x.ax=1;int86(intnum,&inreg,&outreg);}
void hidemouse(){inreg.x.ax=2;int86(intnum,&inreg,&outreg);}
void setmousex(int minx,int maxx){inreg.x.ax=7;int86x(intnum,&inreg,&outreg,&sr);inreg.x.cx=minx;inreg.x.dx=maxx;}
void setmousey(int miny,int maxy){inreg.x.ax=8;int86x(intnum,&inreg,&outreg,&sr);inreg.x.cx=miny;inreg.x.dx=maxy;}
private:
union REGS inreg,outreg;
struct SREGS sr;
int intnum;
};*/
/*void Cmouse::showmouse(){inreg.x.ax=1;int86(intnum,&inreg,&outreg);}
void Cmouse::hidemouse(){inreg.x.ax=2;int86(intnum,&inreg,&outreg);}
void Cmouse::setmousex(int minx,int maxx){inreg.x.ax=7;int86(intnum,&inreg,&outreg);inreg.x.cx=minx;inreg.x.dx=maxx;}
void Cmouse::setmousey(int miny,int maxy){inreg.x.ax=8;int86(intnum,&inreg,&outreg);inreg.x.cx=miny;inreg.x.dx=maxy;}*/
class Cmusic
{
public:
Cmusic(){oldt=0;firsttime=1;i=-1;diao=1;o=4;s=5;t=3;stop=-1,close=0;nopause=1;fu=0;n=0;loopl=0;loopr==0;}
float pow1(float x,float n);
int pow1(int x,int n);
int getstop(){return stop;}
void change(){stop=-stop;firsttime=1;}
void outnewsound();
void addcode(char *s);
void musicplay();
void reward(){i=-1;}
int musicend();
int musicclose(){return close;}
void closemusic(){close=1;}
void openmusic(){close=0;}
private:
time_t nowt,oldt;
int firsttime,i,code,diao,o,s,t,t1,stop,close,nopause,fu,n;
int lasti,loopl,loopr;
char *st;
};
int Cmusic::pow1(int x,int n)
{
int temple=1;
if(n==0){return 1;}
else
{
for(int i=1;i<=n;i++)
{
temple*=x;}
return temple;
}
}
float Cmusic::pow1(float x,float n)
{
float temple=1;
if(n==0){return 1;}
else
{
for(int i=1;i<=n;i++)
{
temple*=x;}
return temple;
}
}
void Cmusic::addcode(char *s)
{
strcat(st,s);
}
int Cmusic::musicend()
{
int y;
if(i==strlen(st)){y=1;}
else {y=0;}
return y;
}
void Cmusic::outnewsound()
{
int strlength=strlen(st),newcode=0;
char ch;
while(i<strlength)
{
if(newcode==1)break;
i++;
if(i>strlength-1){i=-1;break;}
switch(st[i])
{
case 'h':switch(st[++i])
{
case'c':diao=1;break;
case'd':diao=3;break;
case'e':diao=5;break;
case'f':diao=6;break;
case'g':diao=8;break;
case'a':diao=10;break;
case'b':diao=12;break;
}
switch(st[i+1])
{
case'#':diao+=1;i++;break;
case'@':diao-+1;i++;break;
}
continue;
case'o':ch=st[++i];
if((ch>48)&&(ch<55))
{ o=ch-48;continue;}
else{continue;}
case's':ch=st[++i];
if((ch>48)&&(ch<58))
{s=ch-48;continue;}
case'>':o+=1;continue;
case'<':o-=1;continue;
case'/':lasti=i;loopl=1;continue;
case'|':if(loopr!=1)(i=lasti);loopl=0;if(loopr==1){loopr=0;}else{loopr=1;} continue;
default:ch=st[i];
if((ch>96)&&(ch<104)||ch=='p')
{
switch(st[i])
{
case 'c':code=1;break;
case 'd':code=3;break;
case 'e':code=5;break;
case 'f':code=6;break;
case 'g':code=8;break;
case 'a':code=10;break;
case 'b':code=12;break;
case 'p':nopause=0;break;
}
if((st[i+1]=='#')||(st[i+1]=='@'))
{
i++;
if(st[i]=='#'){code+=1;}
else{code-=1;}
}
ch=st[i+1];
if((ch>48)&&(ch<58))
{
t=ch-48;
i++;
}
if(st[i+1]=='.'){fu=1;i++;}
t1=pow(2,t-1)*pow(1.5,fu);
sound(jiping[diao+code-1]*pow1(2,o-1)*nopause);
fu=0;
newcode=1;
nopause=1;
break;
}
}
}
}
void Cmusic::musicplay()
{
if(stop!=1)
{
nowt=clock();
if(firsttime==1)
{
outnewsound();
oldt=nowt;
firsttime=0;
}
else
if(nowt-oldt==t1)
{
nosound();outnewsound();
oldt=nowt;
}
}
}
//Cmouse mou;
const int mapi=17,mapj=66;
Cmusic music,music2;
int map[mapi][mapj]=
{
{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5},
{5,03,1,1,1,0,0,0,0,0,1,0,1,1,1,1,1,1,0,0,0,0,1,1,0,0,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,1,1,0,1,1,5}, //2
{5,2,1,1,1,0,1,1,1,1,0,1,2,2,2,2,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,2,2,2,1,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,5}, //3
{5,2,2,2,2,2,1,2,2,2,2,2,2,1,1,2,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2,1,0,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,5}, //4
{5,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,2,1,2,0,0,1,0,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,0,1,0,5}, //5
{5,2,2,2,2,2,1,2,2,2,1,1,1,2,2,2,1,1,0,1,1,0,1,2,2,2,2,2,2,2,2,1,0,1,2,1,2,1,1,1,0,1,1,1,2,2,2,2,0,0,0,1,0,0,0,1,2,0,0,1,0,0,1,0,0,5}, //6
{5,2,1,1,1,1,1,1,1,2,1,1,1,2,1,1,0,0,0,0,0,0,1,2,1,1,1,1,1,1,2,1,0,1,2,1,2,1,0,0,0,0,0,0,1,1,1,2,1,1,0,0,0,1,0,1,2,1,0,0,1,0,1,0,1,5}, //7
{5,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,1,1,1,1,0,1,2,1,1,1,1,1,1,2,1,0,1,2,1,2,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,2,1,0,1,1,0,1,0,1,5}, //8
{5,1,0,1,1,0,1,1,1,1,2,2,2,1,1,2,0,0,0,0,0,0,1,2,0,0,0,0,0,1,2,1,0,1,2,1,2,1,1,1,0,1,1,1,1,1,1,2,1,0,0,0,0,0,0,1,2,1,0,0,0,0,1,0,1,5}, //9
{5,1,0,1,1,0,1,1,1,1,2,1,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,1,0,1,2,1,0,1,2,1,2,1,0,0,0,0,0,0,0,0,1,2,1,0,1,1,1,1,1,1,2,1,0,1,0,1,1,0,0,5}, //10
{5,0,0,0,0,0,0,0,0,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0,1,2,1,0,1,2,1,2,1,1,1,0,1,1,1,1,1,1,2,1,0,0,0,0,0,0,1,2,1,0,1,0,0,0,0,1,5}, //11
{5,0,1,0,1,0,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,2,1,1,0,2,1,2,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,2,1,0,0,0,1,1,1,1,5}, //12
{5,0,1,0,1,0,1,1,0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0,0,0,1,2,1,1,1,1,1,1,1,1,5}, //13
{5,0,1,0,1,0,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,0,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,5}, //14
{5,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,1,1,1,0,0,1,1,1,1,0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,1,2,5}, //15
{5,0,0,0,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,0,0,0,1,0,0,1,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,04,2,2,2,2,2,2,2,5}, //16
{5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}
};
class Cmigong
{
public:
Cmigong(){beginx=8;beginy=5;mancolor=2+128;manascii=1;selband=0;firstplay=1;firstbegin=1;win=0;band=1;level=1;button=0;z=-12;}
void bkground(int bkcolor);
void outputchar(int i,int j,int color,int ascii);
void drawgold(); //{outputchar(goldi,goldj,14+128,5);}
void drawman(); //{outputchar(mani,manj,mancolor,manascii);}
void clrman() ; //{outputchar(mani,manj,mancolor,32);}
void moveleft(); //{clrman();manj--;drawman();}
void moveright();//{clrman();manj++;drawman();}
void moveup() ; //{clrman();mani--;drawman();}
void movedown(); //{clrman();mani++;drawman();}
void moveto(int i,int j);//{clrman();mani=i;manj=j;drawman();}
void drawmap();
void gameplay();
void automove();
void showmainboard();
void showselboard(int x,int y,int edge,int selboard);
void showoption(int y,int i,int value1,int value2,int value3);
void Cmigong::clrselboard(int x,int y);
void outtext(int x,int y,int forecolor,int bkcolor,char *text);
void changewindow();
private:
int beginx,beginy,mani,manj,lastmani,lastmanj,manfirsti,manfirstj,goldi,goldj,mancolor,manascii,policei,policej,selband,firstplay,firstbegin,bkcolor,win,band,level,button,z;
};
void Cmigong::bkground(int bkcolor1) //set the color of the background
{
textbackground(bkcolor1);
textcolor(0);
cprintf("1");
clrscr();
bkcolor=bkcolor1;
}
void Cmigong::outtext(int x,int y,int forecolor,int bkcolor,char *text)
{
gotoxy(x,y+z);
textcolor(forecolor);
textbackground(bkcolor);
cprintf(text);
}
void Cmigong::clrselboard(int x,int y)
{
int i,j; //??????
firstbegin=0;
for(i=23;i<=55;i++)
{outtext(i+x,16+y,4+1*(i%2)+128*(i%2),0," ");}
for(i=23;i<=55;i++)
{outtext(i+x,33+y,2+1*(i%5)+128*(i%2),0," ");}
for(j=16;j<=33;j++)
{outtext(23+x,j+y,2+1*(j%5)+128*(j%2),0," ");}
for(j=16;j<=33;j++)
{outtext(55+x,j+y,2+1*(j%5)+128*(j%2),0," ");}
outtext(33+x,22+y,3,0," ");
outtext(33+x,24+y,3,0," ");
outtext(33+x,26+y,3,0," ");
outtext(33+x,28+y,3,0," ");
}
void Cmigong::showoption(int y,int i,int close,int value2,int value3=1)
{
outtext(30,20+y,4,bkcolor,"MUSIC OPTION."); //?
//if(value1==1)
outtext(32,21+y,4,bkcolor+i%2,"BackMusic. ");
if(close==1){outtext(43,21+y,4,bkcolor+i%2,"ON ");}
else{outtext(43,21+y,4,bkcolor+i%2,"OFF");}
outtext(32,22+y,4,bkcolor+!(i%2),"Loop. ");
if(value2==1){outtext(43,22+y,4,bkcolor+!(i%2),"ON ");}
else{outtext(43,22+y,4,bkcolor+!(i%2),"OFF");}
outtext(30,23+y,4,bkcolor,"LEVEL.");
if(value3==1){outtext(43,23+y,4,bkcolor,"1.");}
else {outtext(47,23+y,4,bkcolor,"2.");}
}
void Cmigong::showselboard(int x,int y,int edge,int selband)
{
int i,j;
firstbegin=0;
if(edge==1){
for(j=1;j<=25;j++)
{outtext(1,j-z,1,bkcolor,"*");delay(6*firstbegin);}
for(i=1 ;i<80;i++)
{outtext(i,25-z,1,bkcolor,"*");delay(4*firstbegin);}
for(j=25;j>1;j--)
{outtext(79,j-z,1,bkcolor,"*");delay(6*firstbegin);}
for(i=79 ;i>0;i--)
{outtext(i,1-z,1,bkcolor,"*");delay(4*firstbegin);}
}
for(i=23;i<=55;i++)
{outtext(i+x,16+y,4+1*(i%2)+edge*128*(i%2),0,"\005");}
for(i=23;i<=55;i++)
{outtext(i+x,33+y,2+1*(i%5)+edge*128*(i%2),0,"*");}
for(j=16;j<=33;j++)
{outtext(23+x,j+y,2+1*(j%5)+edge*128*(j%2),0,"\006");}
for(j=16;j<=33;j++)
{outtext(55+x,j+y,2+1*(j%5)+edge*128*(j%2),0,"\006");}
outtext(33+x,22+y,3,0,"1.START NEW.");
outtext(33+x,24+y,3,0,"2.CONTINUE. ");
outtext(33+x,26+y,3,0,"3.OPTION. ");
outtext(33+x,28+y,3,0,"4.EXIT GAME.");
switch(selband)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -