在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → c++ 超级玛丽 游戏源码

c++ 超级玛丽 游戏源码

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:1.96M
  • 下载次数:170
  • 浏览次数:24704
  • 发布时间:2016-12-10
  • 实例类别:C/C++游戏开发
  • 发 布 人:李工
  • 文件格式:.zip
  • 所需积分: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;
}


标签: 超级玛丽 文档

实例下载地址

c++ 超级玛丽 游戏源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 1337704795 发表于: 2016-12-26 10:51 19
看看

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警