//SET UP ALL OF THE GRAPHICS AND OTHER JUNK//////////////////////////////////
void init()
{
int loop;
x_set_mode(X_MODE_320x240,320); //SET MODE X//
x_set_tripplebuffer(240); //INSTALL TRIPPLE BUFFER//
install_new_key_handler(); //INSTALL KEYBOARD HANDLER//
x_install_vsync_handler(1); //INSTALL VSYNC HANDLER//
for (loop=0;loop<52;loop++) //ALLOCATE MEM FOR GRAPHICS//
if ((data.block[loop]=(char far *)malloc(258))==NULL)
exitgame();
for (loop=0;loop<3;loop++)
if ((data.coin[loop]=(char far *)malloc(258))==NULL)
exitgame();
if ((bcoin=(cointype *)malloc(sizeof(cointype)))==NULL)
exitgame();
bcoin->next=NULL;
if ((bscore=(scoretype *)malloc(sizeof(scoretype)))==NULL)
exitgame();
bscore->next=NULL;
for (loop=0;loop<2;loop++)
{
player[loop].lives=3;
player[loop].level=1;
player[loop].screenx=0;
}
}
//FILL SCREEN ///////////////////////////////////////////////////////////////
void fillscreen(int color)
{
x_rect_fill(32,0,288,224,HiddenPageOffs,color);
}
//GET INPUTS FROM DATA FILES/////////////////////////////////////////////////
int getinputs()
{
FILE *in;
int count,loop1,loop2,loop3,yinit,blocknum,backnum;
char *temp,ch,levelfile[13],graphfile[13];
char far *tempbm;
strcpy(levelfile,"LEVEL000.DAT");
levelfile[7]=player[curplay].level%10+48;
if (player[curplay].level>9)
levelfile[6]=player[curplay].level/10+48;
if ((in=fopen(levelfile,"r"))==NULL)
{
exitgame();
printf("%s could not be found!\n",levelfile);
exit(1);
}
data.maxlength=(int)fgetc(in);
yinit=(int)fgetc(in);
data.startpos[0]=(int)fgetc(in);
data.startpos[1]=(int)fgetc(in);
blocknum=(int)fgetc(in);
backnum=(int)fgetc(in);
fseek(in,0,SEEK_SET);
for (loop1=0;loop1<14;loop1++)
for (loop2=0;loop2<=data.maxlength;loop2++)
{
ch=getc(in);
if(ch<='0')
data.world[loop1][loop2]=0;
if (ch>='a' && ch<='z')
data.world[loop1][loop2]=ch-70;
if (ch>='A' && ch<='Z')
data.world[loop1][loop2]=ch-64;
if (loop1==0)
data.world[loop1][loop2]=0;
}
fclose(in);
strcpy(graphfile,"BLOCK000.PCX");
graphfile[7]=blocknum;
if ((in=fopen(graphfile,"rb"))==NULL)
{
exitgame();
printf("%s could not be found!\n",graphfile);
exit(1);
}
temp=getpcx(in,temp,6000);
tempbm=(char far *)farmalloc(258);
tempbm[0]=tempbm[1]=16;
for (loop1=0;loop1<26;loop1++)
{
count=2;
for (loop2=0;loop2<16;loop2++)
for (loop3=0;loop3<16;loop3++)
tempbm[count++]=temp[loop1*17+(loop2+1)*320+loop3+1];
x_bm_to_pbm(tempbm,data.block[loop1+26]);
}
free(temp);
fseek(in,-768,SEEK_END);
for (loop1=0;loop1<256;loop1++)
{
data.palette[loop1].red=(getc(in)>>2);
data.palette[loop1].green=(getc(in)>>2);
data.palette[loop1].blue=(getc(in)>>2);
}
fclose(in);
strcpy(graphfile,"BGRND000.PCX");
graphfile[7]=backnum;
if ((in=fopen(graphfile,"rb"))==NULL)
{
exitgame();
printf("%s could not be found!\n",graphfile);
exit(1);
}
temp=getpcx(in,temp,6000);
for (loop1=0;loop1<26;loop1++)
{
count=2;
for (loop2=0;loop2<16;loop2++)
for (loop3=0;loop3<16;loop3++)
tempbm[count++]=temp[loop1*17+(loop2+1)*320+loop3+1];
x_bm_to_pbm(tempbm,data.block[loop1]);
}
free(temp);
fclose(in);
strcpy(graphfile,"COIN.PCX");
if ((in=fopen(graphfile,"rb"))==NULL)
{
exitgame();
printf("%s could not be found!\n",graphfile);
exit(1);
}
temp=getpcx(in,temp,6000);
for (loop1=0;loop1<3;loop1++)
{
count=2;
for (loop2=0;loop2<16;loop2++)
for (loop3=0;loop3<16;loop3++)
tempbm[count++]=temp[loop1*17+(loop2+1)*320+loop3];
x_bm_to_pbm(tempbm,data.coin[loop1]);
}
farfree(tempbm);
free(temp);
fclose(in);
for (loop1=0;loop1<256;loop1++)
setpalette(loop1,data.palette[loop1]);
return(yinit);
}
//GET MARIO DATA/////////////////////////////////////////////////////////////
void getmario()
{
FILE *marioin;
int loop1,loop2,loop3;
char *temp;
if ((marioin=fopen("MARIO.PCX","rb"))==NULL)
{
exitgame();
printf("MARIO.PCX could not be found!\n");
exit(1);
}
fseek(marioin,128,SEEK_SET);
temp=(char *)malloc(6000);
temp=getpcx(marioin,temp,6000);
for (loop1=0;loop1<7;loop1++)
for (loop2=0;loop2<=15;loop2++)
for (loop3=0;loop3<=15;loop3++)
data.mario[loop1][loop2][loop3]=temp[loop1*17+(loop2+1)*320+loop3+1];
fseek(marioin,-765,SEEK_END);
for (loop1=0;loop1<2;loop1++)
{
data.marioc[loop1].red=(getc(marioin)>>2);
data.marioc[loop1].green=(getc(marioin)>>2);
data.marioc[loop1].blue=(getc(marioin)>>2);
}
fseek(marioin,-750,SEEK_END);
for (loop1=0;loop1<2;loop1++)
{
data.luigic[loop1].red=(getc(marioin)>>2);
data.luigic[loop1].green=(getc(marioin)>>2);
data.luigic[loop1].blue=(getc(marioin)>>2);
}
fclose(marioin);
free(temp);
}
char *getpcx(FILE *file, char *temp, int length)
{
long int count=0;
int numbytes,loop;
unsigned char ch;
fseek(file,128,SEEK_SET);
temp=(char *)malloc(length);
while(count<length)
{
ch=fgetc(file);
if ((ch>=192 && ch<=255))
{
numbytes=ch-192;
ch=fgetc(file);
for(loop=0;loop<numbytes;loop++)
temp[count++]=ch;
}
else
temp[count++]=ch;
}
return(temp);
}
//SET PALETTE////////////////////////////////////////////////////////////////
void setpalette(int index, colorpal color)
{
outp(0x3c6,0xff);
outp(0x3c8,index);
outp(0x3c9,color.red);
outp(0x3c9,color.green);
outp(0x3c9,color.blue);
}
//CALCULATE CURRENT SCREEN///////////////////////////////////////////////////
void drawscreen(int x)
{
int loop1,loop2,back,x2;
static int dy;
status();
x2=x;
back=0;
while(x2>=16)
{
x2-=16;
back++;
}
for (loop1=1;loop1<=13;loop1++)
for (loop2=back;loop2<=back+16;loop2++)
if (data.world[loop1][loop2]>0)
{
if (data.bumped[0]==loop2 && data.bumped[1]==loop1)
{
dy+=data.bumploop;
x_put_masked_pbm((loop2<<4)-x+32,(loop1<<4)+dy,HiddenPageOffs,data.block[data.world[loop1][loop2]-1]);
data.bumploop++;
if(data.bumploop==3)
{
data.bumploop=0;
data.bumped[0]=0;
data.bumped[1]=0;
dy=0;
}
}
else
x_put_masked_pbm((loop2<<4)-x+32,(loop1<<4),HiddenPageOffs,data.block[data.world[loop1][loop2]-1]);
}
drawcoin(x);
drawscore(x);
x_rect_fill(15,0,32,224,HiddenPageOffs,0);
x_rect_fill(288,0,306,224,HiddenPageOffs,0);
}
//DRAW INFO ON TOP OF SCREEN/////////////////////////////////////////////////
void status()
{
static char pscore[7]="000000";
char pscore2[7];
char slevel[4]="1-1";
char scoins[3]="00";
static char stime[4]=" ";
int loop1,loop2;
if (curplay==0)
graphstring(34,1,"MARIO",TEXTCOLOR,HiddenPageOffs);
else
graphstring(34,1,"LUIGI",TEXTCOLOR,HiddenPageOffs);
graphstring(180,1,"WORLD",TEXTCOLOR,HiddenPageOffs);
graphstring(254,1,"TIME",TEXTCOLOR,HiddenPageOffs);
if(player[curplay].score[1]!=player[curplay].score[0])
{
itoa(player[curplay].score[1],pscore2,10);
loop2=5;
for(loop1=strlen(pscore2)-1;loop1>=0;loop1--)
pscore[loop2--]=pscore2[loop1];
graphstring(34,9,pscore,BACKGROUND,HiddenPageOffs);
}
strcpy(pscore,"000000");
itoa(player[curplay].score[0],pscore2,10);
loop2=5;
for(loop1=strlen(pscore2)-1;loop1>=0;loop1--)
pscore[loop2--]=pscore2[loop1];
graphstring(34,9,pscore,TEXTCOLOR,HiddenPageOffs);
player[curplay].score[1]=player[curplay].score[0];
if (times[1]!=times[2])
{
itoa(times[0],stime,10);
graphstring(260,9,stime,BACKGROUND,HiddenPageOffs);
times[2]=times[1];
times[0]--;
itoa(times[0],stime,10);
}
graphstring(260,9,stime,TEXTCOLOR,HiddenPag
没有合适的资源?快使用搜索试试~ 我知道了~
“超级玛丽”游戏的源代码
共43个文件
obj:10个
h:10个
pcx:10个
需积分: 46 0 下载量 51 浏览量
2008-06-04
14:51:42
上传
评论 1
收藏 114KB ZIP 举报
温馨提示
“超级玛丽”游戏的源代码,“超级玛丽”游戏的源代码
资源详情
资源评论
资源推荐
收起资源包目录
smb.zip (43个子文件)
COIN.PCX 4KB
LOGO.PCX 7KB
BLOCK002.PCX 6KB
KEY.C 2KB
BGRND002.PCX 5KB
XLIB.H 6KB
SMBFUNC.C 22KB
XPOINT.H 1KB
LEVEL004.DAT 2KB
LEVEL003.DAT 2KB
XLIB.OBJ 213B
XVSYNC.OBJ 3KB
MARIO.OBJ 20KB
BLOCK004.PCX 5KB
MARIO.PCX 5KB
BGRND003.PCX 5KB
XRECT.OBJ 5KB
XRECT.H 2KB
SMB.EXE 61KB
XPBITMAP.OBJ 4KB
XLINE.H 1009B
SMB.OBJ 25KB
LEVEL001.DAT 3KB
SMB.H 3KB
SMB.DSK 30KB
SMB.PRJ 7KB
KEY.H 2KB
GAMEDEFS.H 669B
BLOCK001.PCX 5KB
SCORE.C 713B
XLINE.OBJ 2KB
XBMTOOLS.H 2KB
XBMTOOLS.OBJ 1KB
BLOCK003.PCX 5KB
TCDEF.DPR 4KB
XMAIN.OBJ 11KB
SMB.C 3KB
XPBITMAP.H 2KB
LEVEL002.DAT 3KB
TCDEF.DSK 112B
XPOINT.OBJ 917B
XVSYNC.H 387B
BGRND001.PCX 5KB
共 43 条
- 1
andyhanjun
- 粉丝: 2
- 资源: 37
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0