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

📄 menxiview.cpp

📁 我在学数据结构与算法时写的一个程序
💻 CPP
字号:
// menxiView.cpp : implementation of the CMenxiView class
//

#include "stdafx.h"
#include "menxi.h"
#include "windows.h"
#include "assert.h"
#include "math.h"

#include "menxiDoc.h"
#include "menxiView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//*第一关迷宫结构*
int map[10][10]={
		{1,1,1,1,1,1,1,1,1,1},
		{1,0,0,1,0,0,0,1,0,1},
		{1,0,0,1,0,0,0,1,0,1},
		{1,0,0,0,0,1,1,0,0,1},
		{1,0,1,1,1,0,0,0,0,1},
		{1,0,0,0,1,0,0,0,0,1},
		{1,0,1,0,0,0,1,0,0,1},
		{1,0,1,1,1,0,1,1,0,1},
		{1,1,0,0,0,0,0,0,0,1},
		{1,1,1,1,1,1,1,1,1,1}
	};
//*第二关迷宫结构*
int map2[10][10]={
		{1,1,1,1,1,1,1,1,1,1},
		{1,0,0,1,0,0,1,1,0,1},
		{1,1,0,0,0,0,0,1,0,1},
		{1,0,0,0,0,1,1,0,0,1},
		{1,0,1,1,1,0,0,0,0,1},
		{1,0,0,0,1,0,0,1,0,1},
		{1,0,1,0,0,0,1,0,0,1},
		{1,0,1,1,1,0,1,1,0,1},
		{1,1,0,0,0,0,0,0,0,1},
		{1,1,1,1,1,1,1,1,1,1}
	};



/////////////////////////////////////////////////////////////////////////////
// CMenxiView

IMPLEMENT_DYNCREATE(CMenxiView, CView)

BEGIN_MESSAGE_MAP(CMenxiView, CView)
	//{{AFX_MSG_MAP(CMenxiView)
	ON_COMMAND(IDmigong, Onmigong)
	ON_WM_KEYDOWN()
	ON_COMMAND(ID_next, Onnext)
	ON_UPDATE_COMMAND_UI(ID_next, OnUpdatenext)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CMenxiView construction/destruction
//构造函数给变量赋初值
CMenxiView::CMenxiView()
{
	pt1.x=1;         //pt1是当前x的横坐标
	pt1.y=1;         //pt1是当前x的纵坐标
	pt2.x=-100;      //pt2是x的prev的横坐标
	pt2.y=-100;      //pt2是x的prev的纵坐标
	start=false;     //游戏是否开始的标志
	next=1;          //第一关的标志
	m_next=0;        //下一关标志是否可用  
	// TODO: add construction code here

}

CMenxiView::~CMenxiView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMenxiView drawing

void CMenxiView::OnDraw(CDC* pDC)   //*OnDraw是绘画函数*
{  
	if(next==1){                    //绘制第一关
		CBrush brush1;     
		brush1.CreateSolidBrush(RGB(128,128,0));  
		CPen pen;
		pen.CreatePen(0,1,RGB(0,255,255));
		pDC->SelectObject(pen);
		for(int i=0;i<10;i++)
			for(int j=0;j<10;j++)
				if(map[i][j]==1)   //=1表示画一块砖
				{  
					pDC->SelectObject(brush1);
					pDC->Rectangle(50+i*20,50+j*20,50+(i+1)*20,50+(j+1)*20);
				}	//画矩形再填充	
				
				pen.DeleteObject();
				
			/*	pDC->SetROP2(R2_NOTXORPEN);
				CPen pen2;
				pen2.CreatePen(0,2,RGB(255,0,0));
				pDC->SelectObject(pen2);
				
				pDC->MoveTo(50+pt1.x*20,50+pt1.y*20);
				pDC->LineTo(50+(pt1.x+1)*20,50+(pt1.y+1)*20);
				
				pDC->MoveTo(50+(pt1.x+1)*20,50+pt1.y*20);
				pDC->LineTo(50+pt1.x*20,50+(pt1.y+1)*20);
				
				pDC->MoveTo(50+pt2.x*20,50+pt2.y*20);
				pDC->LineTo(50+(pt2.x+1)*20,50+(pt2.y+1)*20);
				
				pDC->MoveTo(50+(pt2.x+1)*20,50+pt2.y*20);
				pDC->LineTo(50+pt2.x*20,50+(pt2.y+1)*20);*/
				drawX();     //调用画x函数
				
				CMenxiDoc* pDoc = GetDocument();
				ASSERT_VALID(pDoc);
				// TODO: add draw code for native data here
	}
	if(next==2){        //第二关
		
		CBrush brush2,brush1;
		brush2.CreateSolidBrush(RGB(255,255,255));
		brush1.CreateSolidBrush(RGB(128,128,0));
		CPen pen3,pen;
		for(int i=0;i<10;i++)
			for(int j=0;j<10;j++)			
				if(map2[i][j]==1)  //=1就画一个砖
				{     
					pen.CreatePen(0,1,RGB(0,255,255));
					pDC->SelectObject(pen); 
					pDC->SelectObject(brush1);
					pDC->Rectangle(50+i*20,50+j*20,50+(i+1)*20,50+(j+1)*20);
					pen.DeleteObject();
				}
				else{			    //=0就擦除(相当于画一个白色的砖)
					pen3.CreatePen(0,1,RGB(255,255,255));
					pDC->SelectObject(pen3); 
					pDC->SelectObject(brush2);
					pDC->Rectangle(50+i*20,50+j*20,50+(i+1)*20,50+(j+1)*20);
					pen3.DeleteObject();
				}	
				
		/*		pDC->SetROP2(R2_NOTXORPEN);
				CPen pen2;
				pen2.CreatePen(0,2,RGB(255,0,0));
				pDC->SelectObject(pen2);
				
				pDC->MoveTo(50+pt1.x*20,50+pt1.y*20);
				pDC->LineTo(50+(pt1.x+1)*20,50+(pt1.y+1)*20);
				
				pDC->MoveTo(50+(pt1.x+1)*20,50+pt1.y*20);
				pDC->LineTo(50+pt1.x*20,50+(pt1.y+1)*20);
				
				pDC->MoveTo(50+pt2.x*20,50+pt2.y*20);
				pDC->LineTo(50+(pt2.x+1)*20,50+(pt2.y+1)*20);
				
				pDC->MoveTo(50+(pt2.x+1)*20,50+pt2.y*20);
				pDC->LineTo(50+pt2.x*20,50+(pt2.y+1)*20);*/	
				drawX();      //调用画x的函数
				CMenxiDoc* pDoc = GetDocument();
				ASSERT_VALID(pDoc);
				// TODO: add draw code for native data here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CMenxiView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMenxiView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CMenxiView message handlers

void CMenxiView::Onmigong()        //点击游戏/开始后
{  
	start=true;                    //游戏开始的标志
	// TODO: Add your command handler code here
	 
}
//键盘按下的事件
void CMenxiView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
	if(start){                    
		if(pt1.x==8&&pt1.y==8){   //走到右下方迷宫出口
			if(next==1){
				AfxMessageBox("第一关成功了!请点击 游戏/下一关");
				m_next=1;        //激活下一关菜单
				//Visible(ID_next);		
			}
			if(next==2){
				AfxMessageBox("第二关成功了!");
				exit(1);
			}
			//
		}
		else{
			switch(nChar){        //判断是哪个键按下
			case VK_LEFT:         
				if(map[pt1.x-1][pt1.y]==0)  //判断要走的方向可不可通
				{
					pt2.x=pt1.x;
					pt2.y=pt1.y;
					pt1.x=pt1.x-1;
					pt1.y=pt1.y;		
					Invalidate(false);   //重新调用OnDraw函数
					Sleep(100);
				}
				break;
			case VK_RIGHT:
			             if(map[pt1.x+1][pt1.y]==0)
						 {
							 pt2.x=pt1.x;
							 pt2.y=pt1.y;
							 pt1.x=pt1.x+1;
							 pt1.y=pt1.y;
							 Invalidate(false);
							 Sleep(100);
						 }
						 break;
			case VK_UP:
				if(map[pt1.x][pt1.y-1]==0)
				{
					pt2.x=pt1.x;
					pt2.y=pt1.y;
					pt1.x=pt1.x;
					pt1.y=pt1.y-1;
					Invalidate(false);
					Sleep(100);	
				}
				break;
			case VK_DOWN:
				if(map[pt1.x][pt1.y+1]==0)
				{
					pt2.x=pt1.x;
					pt2.y=pt1.y;
					pt1.x=pt1.x;
					pt1.y=pt1.y+1;
					Invalidate(false);
					Sleep(100);
				}
				break;	
			default :
				break;
			}
			
		}
		CView::OnKeyDown(nChar, nRepCnt, nFlags);
	}
}

void CMenxiView::Onnext()     //第二关的初始化 
{
	// TODO: Add your command handler code here

	pt1.x=1;         //pt1是当前x的横坐标
	pt1.y=1;         //pt1是当前x的纵坐标
	pt2.x=-100;      //pt2是x的prev的横坐标
	pt2.y=-100;      //pt2是x的prev的纵坐标
    next=2;          //第二关开始的标志
    Invalidate(true);//调用OnDraw函数
	Sleep(100);
}

void CMenxiView::drawX()    //画x函数
{
	CClientDC pDC(this);
	CPen pen1,pen2;
	pen2.CreatePen(0,2,RGB(255,255,255));
	pen1.CreatePen(0,2,RGB(255,0,0));
	
	pDC.SelectObject(pen1);
				
				pDC.MoveTo(50+pt1.x*20,50+pt1.y*20);
				pDC.LineTo(50+(pt1.x+1)*20,50+(pt1.y+1)*20);
				
				pDC.MoveTo(50+(pt1.x+1)*20,50+pt1.y*20);
				pDC.LineTo(50+pt1.x*20,50+(pt1.y+1)*20);

	pDC.SelectObject(pen2);
				pDC.MoveTo(50+pt2.x*20,50+pt2.y*20);
				pDC.LineTo(50+(pt2.x+1)*20,50+(pt2.y+1)*20);
				
				pDC.MoveTo(50+(pt2.x+1)*20,50+pt2.y*20);
				pDC.LineTo(50+pt2.x*20,50+(pt2.y+1)*20);	
}

void CMenxiView::OnUpdatenext(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if(m_next)    //下一关菜单被激活
	{
		pCmdUI->Enable(TRUE);
	}
	else          //下一关菜单不可用
	{
		pCmdUI->Enable(FALSE);
		
	}
}

⌨️ 快捷键说明

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