⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 liftview.cpp

📁 下阶梯游戏
💻 CPP
字号:
// LiftView.cpp : implementation of the CLiftView class
//

#include "stdafx.h"
#include "Lift.h"

#include "LiftDoc.h"
#include "LiftView.h"
//////////////////////
#include<time.h>
#include<stdlib.h>
#define Interval 40		///the interval between the rectangles
#define Width	 20		///////Bitmap width
#define ManWith  20
#define ManHight 20
#define Totle	 10
#define Step	 1 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLiftView

IMPLEMENT_DYNCREATE(CLiftView, CView)

BEGIN_MESSAGE_MAP(CLiftView, CView)
	//{{AFX_MSG_MAP(CLiftView)
	ON_WM_TIMER()
	ON_WM_KEYDOWN()
	ON_WM_KEYUP()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLiftView construction/destruction

CLiftView::CLiftView()
{

	// TODO: add construction code here
	T=0;
	Num=0;
	n=0;///随机数
	m_Set=true;
	flag=0;////0.centr;1.left; 2.right.
	Left=Right=Down=Jump=false;
	JumpTime=0;
	
	i=0;//标记rectangle
	///rectangle 的初始位置
	for(int j=0;j<10;j++)
	{
		m_Point[j].y=j*60;
	}
	m_Point[0].x=400;
	m_Point[1].x=30;
	m_Point[2].x=100;
	m_Point[3].x=100;
	m_Point[4].x=250;
	m_Point[5].x=50;
	m_Point[6].x=100;
	m_Point[7].x=300;
	m_Point[8].x=400;
	m_Point[9].x=200;
	////man的初始位置
	ManNum=5;
	ManX=m_Point[ManNum].x+45;
	ManY=m_Point[ManNum].y-20;
	

//	m_Point[i]=(500-2*i,525-2*i);
	

}

CLiftView::~CLiftView()
{
}

BOOL CLiftView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CLiftView drawing

void CLiftView::OnDraw(CDC* pDC)
{

	CLiftDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for nat ive data here
	if(m_Set)
	{
		SetTimer(1,2,NULL);
		m_Set=false;
	}
	CRect rect;
	GetClientRect(&rect);
	CPoint point1(rect.BottomRight().x-100,rect.BottomRight().y);
	Rectangle();
	ManUp();
/*	char ch[30];
	wsprintf(ch,"%d",T);
	pDC->TextOut(T,T,ch);
	*/
	char ch[30];
	wsprintf(ch,"%d",T/500);
	pDC->TextOut(10,10,ch);

}

/////////////////////////////////////////////////////////////////////////////
// CLiftView printing

BOOL CLiftView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CLiftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CLiftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CLiftView diagnostics

#ifdef _DEBUG
void CLiftView::AssertValid() const
{
	CView::AssertValid();
}

void CLiftView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CLiftDoc* CLiftView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLiftDoc)));
	return (CLiftDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CLiftView message handlers
/////////////////////////////////////////////画矩形Bitmap

void CLiftView::Rectangle()
{
	//内存准备工作
	CClientDC pdc(this);
	CBitmap RectBitmap;
	CDC memdc1,memdc2;
	memdc1.CreateCompatibleDC(&pdc);
	memdc2.CreateCompatibleDC(&pdc);
	if(RectBitmap.LoadBitmap(IDB_Rect))//装入内存
		memdc1.SelectObject(&RectBitmap);//装入内存显示区
	CRect rect;///////////500*600
	GetClientRect(&rect);
	for(i=0;i<Totle;i++)
	{
		if(m_Point[i].y+20<0)////是否换
		{
			m_Point[i].x=(n*(rect.BottomRight().x-90))/10;
		
			m_Point[i].y=rect.BottomRight().y;
		}
		
		m_Point[i].y-=Step;
		pdc.BitBlt(m_Point[i].x,m_Point[i].y,90,20,&memdc1,0,0,DSTINVERT);
		pdc.BitBlt(m_Point[i].x,m_Point[i].y,90,20,&memdc1,0,0,SRCINVERT);
	//	dc->BitBlt(m_Point[i].x,m_Point[i].y,90,20,&memdc1,0,0,SRCCOPY);
		//InvalidateRect(m_Point[i].x,m_Point[i].y,90,20);
	}
	
	

}

//////////////////////////////


void CLiftView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	
	T++;
	srand(unsigned(time(NULL)));
//	if(T%Interval==0)
//	{
	//	Num++;
		n=rand()%10;
//	}
//	CRect rect;
//	GetClientRect(rect);
//	if(nIDEvent==1)
	Invalidate();
//	if(T==100)KillTimer(1);

	
	CView::OnTimer(nIDEvent);
}

void CLiftView::ManUp()
{	
	CClientDC dc(this);
	CBitmap Bitmap;
	CDC memdc;
	memdc.CreateCompatibleDC(&dc);
	if(Bitmap.LoadBitmap(IDB_MAN))//装入内存
		memdc.SelectObject(&Bitmap);//装入内存显示区
	CRect rect;
	GetClientRect(&rect);
	if(Left)
	{
		if(ManX>2)
		ManX-=5;
	//ManX--;
	}
//	if(ManX+20<=m_Point[0].x)Down=true;
	if(Right)
	{
		if(ManX<478)
		ManX+=5;
		//ManX++;
	}
	if(Jump&&JumpTime>0)
	{
		ManY-=14;
		JumpTime--;
	}
	if(Down)ManY=ManY+5;	
	dc.BitBlt(ManX,ManY,20,20,&memdc,0,0,DSTINVERT);
	dc.BitBlt(ManX,ManY,20,20,&memdc,0,0,SRCINVERT);
	
	ManY-=Step;
	if(Down)
	{	
		
		for(i=0;i<Totle;i++)///是否落上
		{
			if((ManY+20<(m_Point[i].y+3)&&ManY+20>(m_Point[i].y-3))&&((ManX<(m_Point[i].x+89)&&ManX>(m_Point[i].x-20))))////允许有误差2
			{
				ManNum=i;
				ManY=m_Point[ManNum].y-20;
				Down=false;
				Jump=false;
				break;
			}
		}				
	}
	
	else
	{
		if((ManX<m_Point[ManNum].x-20)||(ManX>m_Point[ManNum].x+90))
			Down=true;
		if(ManY<0)Down=true;
	//	if(ManY>600)
	}
}

void CLiftView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if(nChar==VK_LEFT)
		Left=true;
	if(nChar==VK_RIGHT)
		Right=true;
	if(nChar==VK_SPACE&&Down==false)
	{
		Jump=true;
		Down=true;
		JumpTime=5;
	}
	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CLiftView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if(nChar==VK_LEFT)
	Left=false;
	if(nChar==VK_RIGHT)
	{
		Right=false;

	}
	CView::OnKeyUp(nChar, nRepCnt, nFlags);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -