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

📄 yw_playballview.cpp

📁 本程序是弹球游戏实验程序,故而
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -