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