📄 yw_playballview.cpp
字号:
// Yw_PlayBallView.cpp : implementation of the CYw_PlayBallView class
//
#include "stdafx.h"
#include "Yw_PlayBall.h"
#include "MainFrm.h"
#include "math.h"
#include "Yw_PlayBallDoc.h"
#include "Yw_PlayBallView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView
CBitmap *m_Bit0,*m_Bit1,*m_Bit2,*m_Bit_pingmu,*m_Bit_pingkongmu;
CBitmap *m_ten;
int values_x=40;//水平移动变化值
int values_y=10;//垂直移动变化值
UINT yw_count;//计数器
UINT pingmu_count;//开始计数器
int x_Max=80;//水平移动最大速度
int y_Max=50;//垂直移动最大速度
int process=0;//用于控制程序流程
long int locatx=180; //当前水平方位
long int locaty=100; //当前垂直方位
int red_varies_x=15;//红球水平方向上的速度
int red_varies_y=5;//红球垂直方向上的速度
int red_position_x=0;//红球当前水平方位
int red_position_y=0;//红球当前垂直方位
unsigned long int count=0;//用于次要弹球方位计数
int g_Cursor_Flags=1; //光标标志位
int yw_x,yw_y;//加分点位置
int yw_socre_count;//点击计数器
int yw_score_flags;
IMPLEMENT_DYNCREATE(CYw_PlayBallView, CScrollView)
BEGIN_MESSAGE_MAP(CYw_PlayBallView, CScrollView)
//{{AFX_MSG_MAP(CYw_PlayBallView)
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_COMMAND(ID_MENUACCELERATE, OnMenuaccelerate)
ON_WM_KEYUP()
ON_COMMAND(ID_MENUDRAG, OnMenudrag)
ON_COMMAND(ID_MENUUP, OnMenuup)
ON_COMMAND(ID_MENUIDOWN, OnMenuidown)
ON_COMMAND(ID_MENU_YW_RIGHT, OnMenuYwRight)
ON_COMMAND(ID_MENU_YW_LEFT, OnMenuYwLeft)
ON_COMMAND(ID_MENU_YW_UP, OnMenuYwUp)
ON_COMMAND(ID_MENU_YW_DOWN, OnMenuYwDown)
ON_WM_KEYDOWN()
ON_COMMAND(ID_RESET, OnReset)
ON_COMMAND(ID_SCORE, OnScore)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView construction/destruction
CYw_PlayBallView::CYw_PlayBallView()
{
// TODO: add construction code here
}
CYw_PlayBallView::~CYw_PlayBallView()
{
}
BOOL CYw_PlayBallView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView drawing
void CYw_PlayBallView::OnDraw(CDC* pDC)
{
CYw_PlayBallDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//CBitmap Old_Bitmap;//用于恢复设备环境的变量
CDC *pMemDC=new CDC;
pMemDC->CreateCompatibleDC(pDC);
pMemDC->SelectObject(m_Bit1);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit1;
pDC->BitBlt(locatx,locaty,3200,3200,pMemDC,0,0,SRCCOPY);
// 将位图复制到实际的设备环境中
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
pMemDC->SelectObject(m_Bit0);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit0;
pDC->BitBlt(locatx,locaty,3200,3200,pMemDC,0,0,SRCCOPY);
// 将位图复制到实际的设备环境中
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC;//删除内存设备
}
void CYw_PlayBallView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// TODO: calculate the total size of this view
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;//定义屏幕大小
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView printing
BOOL CYw_PlayBallView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CYw_PlayBallView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CYw_PlayBallView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView diagnostics
#ifdef _DEBUG
void CYw_PlayBallView::AssertValid() const
{
CScrollView::AssertValid();
}
void CYw_PlayBallView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CYw_PlayBallDoc* CYw_PlayBallView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CYw_PlayBallDoc)));
return (CYw_PlayBallDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CYw_PlayBallView message handlers
void CYw_PlayBallView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
m_Bit0=new CBitmap;
m_Bit0->LoadBitmap(IDB_BITMAP2);// 调入位图资源(白板)
m_Bit1=new CBitmap;
m_Bit1->LoadBitmap(IDB_BITMAP1);// 调入位图资源(蓝球)
m_Bit2=new CBitmap;
m_Bit2->LoadBitmap(IDB_BITMAP3);// 调入位图资源(红球)
m_Bit_pingmu=new CBitmap;
m_Bit_pingmu->LoadBitmap(IDB_PINGMU);// 调入位图资源(开始屏幕)
m_Bit_pingkongmu=new CBitmap;
m_Bit_pingkongmu->LoadBitmap(IDB_KONGPING);// 调入位图资源(开始屏幕白板)
m_ten=new CBitmap;
m_ten->LoadBitmap(IDB_BITMAP4);// 调入位图资源(加分点)
}
int CYw_PlayBallView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
this->SetTimer(2,100,NULL);//启动定时器
return 0;
}
void CYw_PlayBallView::OnDestroy()
{
CScrollView::OnDestroy();
// TODO: Add your message handler code here
this->KillTimer(2);//关闭定时器
}
void CYw_PlayBallView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CSize ScrollSize=GetTotalSize();
CRect ScrollRect(0,0,ScrollSize.cx,ScrollSize.cy);
CRect ViewRect;
this->GetClientRect(&ViewRect);
CRect rc;
rc.IntersectRect(&ScrollRect,&ViewRect);
this->ClientToScreen(&rc);
//CBitmap Old_Bitmap;//用于恢复设备环境的变量
yw_x=((RECT)ViewRect).right/2;
yw_y=((RECT)ViewRect).bottom/2;
pingmu_count++;//用于记录屏幕显示时间
if(pingmu_count==35) //***** *** 去除屏幕 *** *****
{
CClientDC pingkongmu_dc(this);
CDC *pMemDC_pingkongmu=new CDC;
pMemDC_pingkongmu->CreateCompatibleDC(&pingkongmu_dc);
pMemDC_pingkongmu->SelectObject(m_Bit_pingkongmu);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit_pingkongmu;
pingkongmu_dc.BitBlt(locatx,locaty,3200,3200,pMemDC_pingkongmu,0,0,SRCCOPY);
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC_pingkongmu;
} //***** *** *** *****
if(pingmu_count<35) //***** *** 用于显示屏幕 *** *****
{
CClientDC pingmu_dc(this);
CDC *pMemDC_pingmu=new CDC;
pMemDC_pingmu->CreateCompatibleDC(&pingmu_dc);
pMemDC_pingmu->SelectObject(m_Bit_pingmu);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit_pingmu;
pingmu_dc.BitBlt(locatx,locaty,3200,3200,pMemDC_pingmu,0,0,SRCCOPY);
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC_pingmu;
CScrollView::OnTimer(nIDEvent);//结束定时器运行
return;
} //***** *** *** *****
CMainFrame *pa=(CMainFrame *)AfxGetMainWnd();
pa->now_mark++;//***** 成绩加1 *****
if(values_x>0)//***** ***** 摩擦等导致的速度损失 ***** *****
values_x-=1;
else if(values_x<0)
values_x+=1;
else
values_x=values_x;//***** ***** 损失速度为1 ***** *****
CClientDC dc(this);//***** ***** 消除小球原始路径 ***** *****
CDC *pMemDC0=new CDC;
pMemDC0->CreateCompatibleDC(&dc);
pMemDC0->SelectObject(m_Bit0);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit0;
dc.BitBlt(locatx,locaty,3200,3200,pMemDC0,0,0,SRCCOPY);
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC0; //***** ***** ***** *****
CClientDC dc_red(this); //***** *** 载入红球 *** *****
CDC *pMemDC_Red=new CDC;
pMemDC_Red->CreateCompatibleDC(&dc_red);
pMemDC_Red->SelectObject(m_Bit0);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit0;
dc.BitBlt(red_position_x,red_position_y,3200,3200,pMemDC_Red,0,0,SRCCOPY);
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC_Red; //***** *** *** *****
if(process==-1)
{
this->KillTimer(2);//关闭定时器
CMainFrame *parent=(CMainFrame *)AfxGetMainWnd();
parent->CYW_PLAYBALL_MYDLG();
CScrollView::OnTimer(nIDEvent);
if(parent->g_Flags==-1)//***** 如果不想玩,则做结束处理 *****
::PostQuitMessage(0);
else if(parent->g_Flags==1)//***** 如果想玩,则初始化 *****
{
values_x=40;//水平移动变化值
values_y=10;//垂直移动变化值
x_Max=80;//水平移动最大速度
y_Max=50;//垂直移动最大速度
process=0;//用于控制程序流程
locatx=200; //当前水平方位
locaty=100; //当前垂直方位
red_varies_x=15;//红球水平方向上的速度
red_varies_y=5;//红球垂直方向上的速度
red_position_x=0;//红球当前水平方位
red_position_y=0;//红球当前垂直方位
this->SetTimer(2,100,NULL);//启动定时器
parent->now_mark=0;//成绩赋值为0
pingmu_count=0; //开始计数器为0
yw_socre_count=0;
}
return;
}
CDC *pMemDC1=new CDC;
pMemDC1->CreateCompatibleDC(&dc);
pMemDC1->SelectObject(m_Bit1);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit1;
if(locatx>((RECT)ViewRect).right-20)
{
//x_varies=-x_varies;
values_x=-values_x;
if(values_x>0)//***** ***** 碰壁等导致的速度损失 ***** *****
values_x-=2;
else if(values_x<0)
values_x+=2;
else
values_x=values_x;//***** ***** 损失速度为2 ***** *****
//values_x+=2;
//locatx+=values_x;
}
else if(locatx<((RECT)ViewRect).left)
{
//x_varies=-x_varies;
values_x=-values_x;
if(values_x>0)//***** ***** 碰壁等导致的速度损失 ***** *****
values_x-=3;
else if(values_x<0)
values_x+=3;
else
values_x=values_x;//***** ***** 损失速度为3 ***** *****
//values_x-=3;
//locatx+=values_x;
}
else;
locatx+=values_x;
if(locaty>((RECT)ViewRect).bottom-20)
{
//x_varies=-x_varies;
values_y=-values_y;
if(values_y>0)//***** ***** 碰壁等导致的速度损失 ***** *****
values_y-=4;
else if(values_y<0)
values_y+=4;
else;
//values_y=-values_y;//***** ***** 损失速度为4 ***** *****
//values_y+=4;
//locaty+=values_y;
}
else if(locaty<((RECT)ViewRect).top)
{
//x_varies=-x_varies;
values_y=-values_y;
if(values_y>0)//***** ***** 碰壁等导致的速度损失 ***** *****
values_y-=3;
else if(values_y<0)
values_y+=3;
else;
//values_y=-values_y;//***** ***** 损失速度为3 ***** *****
//values_y-=3;
//locaty+=values_y;
}
else;
locaty+=values_y;
dc.BitBlt(locatx,locaty,3200,3200,pMemDC1,0,0,SRCCOPY);
//pMemDC->SelectObject(Old_Bitmap);//恢复设备环境
delete pMemDC1;
/////////////////////////////////////////////////////////////////
//***** ***** ***** 边界处理 ***** ***** *****
CDC *pMemDC2=new CDC;
pMemDC2->CreateCompatibleDC(&dc_red);
pMemDC2->SelectObject(m_Bit2);//将位图选入内存设备环境中
//Old_Bitmap=m_Bit2;
if((red_position_x>((RECT)ViewRect).right-20)
||(red_position_x<((RECT)ViewRect).left))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -