📄 liftview.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 + -