基本信息
源码名称:c++ 超级玛丽 游戏源码
源码大小:1.96M
文件格式:.zip
开发语言:C/C++
更新时间:2016-12-10
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
操作说明:左右方向键 让 超级玛丽 走动, Ctrl Z Ctrl X 分别为 跳跃 和 发子弹 操作
#include "stdafx.h" #include "bitmaptool.h" #include "gamemap.h" extern GAMEMAP gamemap; extern FILEREPORT f1; MYBITMAP::MYBITMAP() { } MYBITMAP::~MYBITMAP() { DeleteObject(hBm); } void MYBITMAP::Init(HINSTANCE hInstance,int iResource,int row,int col) { BITMAP bm; inum=row; jnum=col; hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(iResource)); GetObject(hBm,sizeof(BITMAP),&bm); width=bm.bmWidth/inum; height=bm.bmHeight/jnum; } void MYBITMAP::SetDevice(HDC hdest,HDC hsrc,int wwin,int hwin) { hdcdest=hdest; hdcsrc=hsrc; screenwidth=wwin; screenheight=hwin; } void MYBITMAP::Show(int x,int y) { xpos=x; ypos=y; SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); } void MYBITMAP::ShowCenter(int y) { xpos=(screenwidth-width)/2; ypos=y; SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); } void MYBITMAP::ShowLoop(int left,int top,int right,int bottom,int iframe) { int i,j; SelectObject(hdcsrc,hBm); for(j=top;j<bottom;j =height) { for(i=left;i<right;i =width) { BitBlt(hdcdest,i,j,width,height,hdcsrc,iframe*width,0,SRCCOPY); } } } void MYBITMAP::ShowNoBack(int x,int y,int iFrame) { xpos=x; ypos=y; SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,height/2,SRCAND); BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,0,SRCPAINT); } void MYBITMAP::ShowNoBackLoop(int x,int y,int iFrame,int iNum) { int i; xpos=x; ypos=y; SelectObject(hdcsrc,hBm); for(i=0;i<iNum;i ) { BitBlt(hdcdest,xpos i*width,ypos,width,height/2,hdcsrc,iFrame*width,height/2,SRCAND); BitBlt(hdcdest,xpos i*width,ypos,width,height/2,hdcsrc,iFrame*width,0,SRCPAINT); } } void MYBITMAP::ShowAni() { /* if(!iStartAni) return; SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*width,height/2,SRCAND); BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*width,0,SRCPAINT); framenow ; //播放结束 if(framenow>=inum) iStartAni=0; */ } void MYBITMAP::SetAni(int x,int y) { xpos=x; ypos=y; /* framenow=0; iStartAni=1; */ } void MYBITMAP::SetPos(int istyle,int x,int y) { switch(istyle) { case BM_CENTER: xpos=(screenwidth-width)/2; ypos=y; break; case BM_USER: xpos=x; ypos=y; break; } } void MYBITMAP::Draw(DWORD dwRop) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,dwRop); } void MYBITMAP::Stretch(int x,int y) { SelectObject(hdcsrc,hBm); StretchBlt(hdcdest,xpos,ypos,width*x,height*y, hdcsrc,0,0,width,height, SRCCOPY); } void MYBITMAP::Stretch(int x,int y,int id) { SelectObject(hdcsrc,hBm); StretchBlt(hdcdest,xpos,ypos,width*x,height*y, hdcsrc,0,id*height, width,height, SRCCOPY); } ///////////////////////// bitmap object animation////////////////// MYBKSKY::MYBKSKY() { xseparate=0; } MYBKSKY::~MYBKSKY() {} void MYBKSKY::MoveTo(int x,int y) { xpos=x; ypos=y; } void MYBKSKY::MoveRoll(int x) { xseparate =x; xseparate%=width; if(xseparate<0) { xseparate=width; } } void MYBKSKY::DrawRoll() { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos, width-xseparate,height, hdcsrc,xseparate,0,SRCCOPY); BitBlt(hdcdest,xpos width-xseparate,ypos, xseparate,height, hdcsrc,0,0,SRCCOPY); } void MYBKSKY::DrawRollStretch(int x,int y) { SelectObject(hdcsrc,hBm); StretchBlt(hdcdest,xpos,ypos, (width-xseparate)*x,height*y, hdcsrc,xseparate,0, width-xseparate,height, SRCCOPY); StretchBlt(hdcdest,xpos (width-xseparate)*x,ypos, xseparate*x,height*y, hdcsrc,0,0, xseparate,height, SRCCOPY); } void MYBKSKY::DrawRollStretch(int x,int y, int id) { SelectObject(hdcsrc,hBm); StretchBlt(hdcdest,xpos,ypos, (width-xseparate)*x,height*y, hdcsrc,xseparate,id*height, width-xseparate,height, SRCCOPY); StretchBlt(hdcdest,xpos (width-xseparate)*x,ypos, xseparate*x,height*y, hdcsrc,0,id*height, xseparate,height, SRCCOPY); } ///////////////////////// bitmap role////////////////// MYROLE::MYROLE() { } MYROLE::~MYROLE() {} void MYROLE::MoveTo(int x,int y) { xpos=x; ypos=y; } void MYROLE::MoveOffset(int x,int y) { if(x==0 && y==0) return; if(!gamemap.RoleCanMove(x,y)) return; xpos =x; ypos =y; if(xpos<minx) xpos=minx; if(xpos>maxx) xpos=maxx; } void MYROLE::MoveStepTo(int x,int y) { if(xpos<x) xpos =ROLE_STEP; if(ypos<y) ypos =8; if(ypos>y) ypos=y; } // 去背显示 void MYROLE::Draw() { if(iAniBegin) { PlayAni(); } else { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,xpos,ypos, width,height/2, hdcsrc,iFrame*width,height/2,SRCAND); BitBlt(hdcdest,xpos,ypos, width,height/2, hdcsrc,iFrame*width,0,SRCPAINT); } } void MYROLE::Draw(int x,int y,int frame) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y, width,height/2, hdcsrc,frame*width,height/2,SRCAND); BitBlt(hdcdest,x,y, width,height/2, hdcsrc,frame*width,0,SRCPAINT); } void MYROLE::InitRole(int xleft,int xright) { iFrame=0; iState=0; maxx=xright; minx=xleft; jumpheight=0; movex=0; movey=0; jumpx=0; idirec=0; iAniBegin=0; } void MYROLE::SetLimit(int xleft,int xright) { maxx=xright; minx=xleft; } void MYROLE::Move() { if(0 == movey) { //水平移动 MoveOffset(movex, 0); } else { //跳动 MoveOffset(jumpx, 0); MoveOffset(0, movey); } //帧控制 if(movex<0 && iFrame<3) { iFrame=3; } if(movex>0 && iFrame>=3) { iFrame=0; } if(movex!=0) { if(0==idirec) iFrame=1-iFrame; else iFrame=7-iFrame; } if(movey!=0) { iFrame=idirec*3; } if(movey<0) { //up jumpheight =(-movey); //根据重力影响,加速度减慢 if(movey<-1) { movey ; } //到达顶点后向下落 if(jumpheight >= JUMP_HEIGHT * 32) { jumpheight = JUMP_HEIGHT * 32; movey=4; } } else if(movey>0) { jumpheight -= movey; //根据重力影响,加速度增大 movey ; } } void MYROLE::Jump() { //上升过程 MoveOffset(0, -4); } void MYROLE::ChangeFrame() { } void MYROLE::SetState(int i) { iState=i; } void MYROLE::SetAni(int istyle) { iAniStyle=istyle; iparam1=0; iAniBegin=1; } //是否正在播放动画 int MYROLE::IsInAni() { return iAniBegin; } void MYROLE::PlayAni() { switch(iAniStyle) { case ROLE_ANI_DOWN: if(iparam1>31) { break; } //人物下降动画 SelectObject(hdcsrc,hBm); BitBlt(hdcdest, xpos,ypos iparam1, width,height/2-iparam1, hdcsrc, iFrame*width,height/2,SRCAND); BitBlt(hdcdest, xpos,ypos iparam1, width,height/2-iparam1, hdcsrc, iFrame*width,0,SRCPAINT); iparam1 ; break; case ROLE_ANI_UP: if(iparam1>31) { break; } //人物上升动画 SelectObject(hdcsrc,hBm); BitBlt(hdcdest, xpos,ypos 32-iparam1, width,iparam1, hdcsrc, iFrame*width,height/2,SRCAND); BitBlt(hdcdest, xpos,ypos 32-iparam1, width,iparam1, hdcsrc, iFrame*width,0,SRCPAINT); iparam1 ; if(iparam1>31) { iAniBegin=0; //动画结束 } default: break; } } /////////////////////////////////// my animation ///////////////////// MYANIOBJ::MYANIOBJ() { memset(wlist, 0, sizeof(wlist)); memset(hlist, 0, sizeof(hlist)); memset(ylist, 0, sizeof(ylist)); iframeplay=0; } MYANIOBJ::~MYANIOBJ() {} void MYANIOBJ::DrawItem(int x,int y,int id,int iframe) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id] hlist[id],SRCAND); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id],SRCPAINT); } void MYANIOBJ::DrawItemNoMask(int x,int y,int id,int iframe) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id],SRCCOPY); } void MYANIOBJ::DrawItemNoMaskWidth(int x,int y,int id,int w,int iframe) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y,w,hlist[id], hdcsrc, iframe*wlist[id],ylist[id],SRCCOPY); } void MYANIOBJ::PlayItem(int x,int y,int id) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframeplay*wlist[id],ylist[id] hlist[id],SRCAND); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframeplay*wlist[id],ylist[id],SRCPAINT); iframeplay=(iframeplay 1)%2; } void MYANIOBJ::InitAniList(int *pw,int *ph,int inum,int ismask) { int i; memcpy(wlist, pw, inum*sizeof(int)); memcpy(hlist, ph, inum*sizeof(int)); ylist[0]=0; for(i=1;i<inum;i ) { //如果是mask,两张图片的间隔高度要乘以2 ylist[i]=ylist[i-1] hlist[i-1]*(ismask 1); } } void MYANIOBJ::InitAniList(int style,int a, int b) { int i; switch(style) { case BM_SQUARE: // a : 数量, b: 边长 for(i=0;i<a;i ) { wlist[i]=b; hlist[i]=b; ylist[i]=i*b; } break; default: break; } } /////////////////////////////////// my animation magic///////////////////// MYANIMAGIC::MYANIMAGIC() { memset(wlist, 0, sizeof(wlist)); memset(hlist, 0, sizeof(hlist)); memset(ylist, 0, sizeof(ylist)); } MYANIMAGIC::~MYANIMAGIC() {} void MYANIMAGIC::DrawItem(int x,int y,int id,int iframe) { SelectObject(hdcsrc,hBm); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id] hlist[id],SRCAND); BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id],SRCPAINT); /* //先在临时DC上画出效果总图 BitBlt(hdctemp,0,0,wlist[id],hlist[id], hdcsrc, 0,ylist[id],SRCCOPY); //用MASK图作裁剪 BitBlt(hdctemp,0,0,wlist[id],hlist[id], hdcsrc, iframe*wlist[id],ylist[id],SRCPAINT); //最后画到屏幕上 BitBlt(hdcdest,x,y,wlist[id],hlist[id], hdctemp, 0,0,SRCPAINT); */ } //带MASK void MYANIMAGIC::InitAniList(int *pw,int *ph,int inum) { int i; memcpy(wlist, pw, inum*sizeof(int)); memcpy(hlist, ph, inum*sizeof(int)); ylist[0]=0; for(i=1;i<inum;i ) { ylist[i]=ylist[i-1] hlist[i-1]*2; } } void MYANIMAGIC::SetDevice(HDC hdest, HDC hsrc, HDC htemp) { hdcdest=hdest; hdcsrc=hsrc; hdctemp=htemp; }