📄 keygameview.cpp
字号:
// KEYGameView.cpp : CKEYGameView 类的实现
//
#include "stdafx.h"
#include "KEYGame.h"
#include "KEYGameDoc.h"
#include "KEYGameView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CKEYGameView
IMPLEMENT_DYNCREATE(CKEYGameView, CView)
BEGIN_MESSAGE_MAP(CKEYGameView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_COMMAND(IDS_First_Menu1, &CKEYGameView::OnFirstMenu1)
ON_COMMAND(IDS_First_Menu2, &CKEYGameView::OnFirstMenu2)
ON_WM_KEYDOWN()
ON_COMMAND(IDS_First_Menu3, &CKEYGameView::OnFirstMenu3)
ON_COMMAND(IDS_First_Menu4, &CKEYGameView::OnFirstMenu4)
ON_COMMAND(IDS_First_Menu5, &CKEYGameView::OnFirstMenu5)
END_MESSAGE_MAP()
// CKEYGameView 构造/析构
CKEYGameView::CKEYGameView()
{
// TODO: 在此处添加构造代码
i=0;
j=0;
a=0;
b=0;
r=0;
X1=5;
Y1=5;
X2=45;
Y2=45;
life=1;
LocationX=0;
LocationY=0;
lstrcpy(str," ");
for (i=0;i<=9;i++)
for (j=0;j<=9;j++)
ChessBoard[i][j]=0;
VirKey=0;
br.CreateSolidBrush(RGB(255,0,0));
br1.CreateSolidBrush(RGB(0,255,0));
br2.CreateSolidBrush(RGB(0,0,255));
lstrcpy(rule," 游戏规则:初来者可先选实习游戏进行练习,之后可以在选项的下拉菜单中选择不同等级的游戏;其中绿色的圆形表示能量;蓝色的方行表示炸药;点击上下左右键进行游戏。");
}
CKEYGameView::~CKEYGameView()
{
br.DeleteObject();
br1.DeleteObject();
br2.DeleteObject();
}
BOOL CKEYGameView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// CKEYGameView 绘制
void CKEYGameView::OnDraw(CDC *pDC)
{
CKEYGameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
pDC->TextOutA(5,550,rule);
}
// CKEYGameView 打印
BOOL CKEYGameView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CKEYGameView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CKEYGameView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清除过程
}
// CKEYGameView 诊断
#ifdef _DEBUG
void CKEYGameView::AssertValid() const
{
CView::AssertValid();
}
void CKEYGameView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CKEYGameDoc* CKEYGameView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CKEYGameDoc)));
return (CKEYGameDoc*)m_pDocument;
}
#endif //_DEBUG
// CKEYGameView 消息处理程序
void CKEYGameView::OnFirstMenu1()
{
// TODO: 在此添加命令处理程序代码
CDC* pDC;
pDC=GetDC();
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
X1=5;
Y1=5;
X2=45;
Y2=45;
pDC->SelectObject(&br);
pDC->Ellipse(X1,Y1,X2,Y2);
LocationX=0;
LocationY=0;
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
ChessBoard[i][j]=((double)rand())/RAND_MAX*10.0;
if (ChessBoard[i][j]!=1&&ChessBoard[i][j]!=3)
ChessBoard[i][j]=0;
}
}
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
if (!(i==0 && j==0||i==9 && j==9))
{
if (ChessBoard[i][j]==1)
{
pDC->SelectObject(&br1);
pDC->Ellipse(i*50+10,j*50+10,i*50+40,j*50+40);
}
if (ChessBoard[i][j]==3)
{
pDC->SelectObject(&br2);
pDC->Rectangle(i*50+10,j*50+10,i*50+40,j*50+40);
}
}
}
}
ReleaseDC(pDC);
}
void CKEYGameView::OnFirstMenu2()
{
// TODO: 在此添加命令处理程序代码
CDC* pDC;
pDC=GetDC();
pDC->FillSolidRect(X1,Y1,X2,Y2,RGB(255,255,255));
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
X1=5;
Y1=5;
X2=45;
Y2=45;
life=1;
LocationX=0;
LocationY=0;
pDC->SelectObject(&br);
pDC->Ellipse(X1,Y1,X2,Y2);
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
ChessBoard[i][j]=((double)rand())/RAND_MAX*10.0;
if (ChessBoard[i][j]!=1&&ChessBoard[i][j]!=3)
ChessBoard[i][j]=0;
}
}
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
if (!(i==0 && j==0||i==9 && j==9))
{
if (ChessBoard[i][j]==1)
{
pDC->SelectObject(&br1);
pDC->Ellipse(i*50+10,j*50+10,i*50+40,j*50+40);
}
if (ChessBoard[i][j]==3)
{
pDC->SelectObject(&br2);
pDC->Rectangle(i*50+10,j*50+10,i*50+40,j*50+40);
}
}
}
}
ReleaseDC(pDC);
}
void CKEYGameView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CClientDC dc(this);
VirKey=nChar;
if(LocationX==9 && LocationY==9 || life<=0)
return;
RECT rc;
GetClientRect(&rc);
switch (VirKey)
{
case VK_RIGHT:
if (X2+50<=500)
{
dc.FillSolidRect(X1,Y1,X2-X1,Y2-Y1,RGB(255,255,255));
X1=X1+50;
X2=X2+50;
dc.SelectObject(&br);
dc.Ellipse(X1,Y1,X2,Y2);
LocationX=LocationX+1;
if (ChessBoard[LocationX][LocationY]==1||ChessBoard[LocationX][LocationY]==2)
{
life=life+1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
if (ChessBoard[LocationX][LocationY]>=3)
{
life=life-1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
ChessBoard[LocationX][LocationY]=0;
}
break;
case VK_LEFT:
if (X1-50>=5)
{
dc.FillSolidRect(X1,Y1,X2-X1,Y2-Y1,RGB(255,255,255));
X1=X1-50;
X2=X2-50;
dc.SelectObject(&br);
dc.Ellipse(X1,Y1,X2,Y2);
LocationX=LocationX-1;
if (ChessBoard[LocationX][LocationY]==1||ChessBoard[LocationX][LocationY]==2)
{
life=life+1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
if (ChessBoard[LocationX][LocationY]>=3)
{
life=life-1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
ChessBoard[LocationX][LocationY]=0;
}
break;
case VK_UP:
if (Y1-50>=5)
{
dc.FillSolidRect(X1,Y1,X2-X1,Y2-Y1,RGB(255,255,255));
Y1=Y1-50;
Y2=Y2-50;
dc.SelectObject(&br);
dc.Ellipse(X1,Y1,X2,Y2);
LocationY=LocationY-1;
if (ChessBoard[LocationX][LocationY]==1||ChessBoard[LocationX][LocationY]==2)
{
life=life+1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
if (ChessBoard[LocationX][LocationY]>=3)
{
life=life-1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
ChessBoard[LocationX][LocationY]=0;
}
break;
case VK_DOWN:
if (Y2+50<=500)
{
dc.FillSolidRect(X1,Y1,X2-X1,Y2-Y1,RGB(255,255,255));
Y1=Y1+50;
Y2=Y2+50;
dc.SelectObject(&br);
dc.Ellipse(X1,Y1,X2,Y2);
LocationY=LocationY+1;
if (ChessBoard[LocationX][LocationY]==1||ChessBoard[LocationX][LocationY]==2)
{
life=life+1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
if (ChessBoard[LocationX][LocationY]>=3)
{
life=life-1;
sprintf(str,"%d ",life);
dc.TextOutA(600,180,str);
}
ChessBoard[LocationX][LocationY]=0;
}
break;
}
if (LocationX==9 && LocationY==9 && life>0)
dc.TextOutA(630,120,"游戏成功结束!");
else
{
if (life==0)
dc.TextOutA(630,120,"游戏已经失败!");
else
dc.TextOutA(630,120,"游戏正在进行!");
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CKEYGameView::OnFirstMenu3()
{
// TODO: 在此添加命令处理程序代码
CDC* pDC;
pDC=GetDC();
pDC->FillSolidRect(X1,Y1,X2,Y2,RGB(255,255,255));
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
X1=5;
Y1=5;
X2=45;
Y2=45;
life=1;
LocationX=0;
LocationY=0;
pDC->SelectObject(&br);
pDC->Ellipse(X1,Y1,X2,Y2);
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
ChessBoard[i][j]=((double)rand())/RAND_MAX*10.0;
if (ChessBoard[i][j]!=1 && ChessBoard[i][j]!=2 && ChessBoard[i][j]!=3 && ChessBoard[i][j]!=4)
ChessBoard[i][j]=0;
}
}
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
if (!(i==0 && j==0||i==9 && j==9))
{
if (ChessBoard[i][j]==1||ChessBoard[i][j]==2)
{
pDC->SelectObject(&br1);
pDC->Ellipse(i*50+10,j*50+10,i*50+40,j*50+40);
}
if (ChessBoard[i][j]==3||ChessBoard[i][j]==4)
{
pDC->SelectObject(&br2);
pDC->Rectangle(i*50+10,j*50+10,i*50+40,j*50+40);
}
}
}
}
ReleaseDC(pDC);
}
void CKEYGameView::OnFirstMenu4()
{
// TODO: 在此添加命令处理程序代码
CDC* pDC;
pDC=GetDC();
pDC->FillSolidRect(X1,Y1,X2,Y2,RGB(255,255,255));
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
X1=5;
Y1=5;
X2=45;
Y2=45;
life=1;
LocationX=0;
LocationY=0;
pDC->SelectObject(&br);
pDC->Ellipse(X1,Y1,X2,Y2);
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
r=((double)rand())/RAND_MAX*10.0;
ChessBoard[i][j]=r;
if (ChessBoard[i][j]!=1 && ChessBoard[i][j]!=2 && ChessBoard[i][j]!=3 && ChessBoard[i][j]!=4 && ChessBoard[i][j]!=5&&ChessBoard[i][j]!=6)
ChessBoard[i][j]=0;
}
}
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
if (!(i==0 && j==0||i==9 && j==9))
{
if (ChessBoard[i][j]==1||ChessBoard[i][j]==2)
{
pDC->SelectObject(&br1);
pDC->Ellipse(i*50+10,j*50+10,i*50+40,j*50+40);
}
if (ChessBoard[i][j]==3||ChessBoard[i][j]==4||ChessBoard[i][j]==5||ChessBoard[i][j]==6)
{
pDC->SelectObject(&br2);
pDC->Rectangle(i*50+10,j*50+10,i*50+40,j*50+40);
}
}
}
}
ReleaseDC(pDC);
}
void CKEYGameView::OnFirstMenu5()
{
// TODO: 在此添加命令处理程序代码
CDC* pDC;
pDC=GetDC();
pDC->FillSolidRect(X1,Y1,X2,Y2,RGB(255,255,255));
pDC->Rectangle(0,0,500,500);
pDC->Rectangle(550,0,750,500);
for (i=50;i<=450;i+=50)
{
pDC->MoveTo(i,0);
pDC->LineTo(i,500);
pDC->MoveTo(0,i);
pDC->LineTo(500,i);
}
X1=5;
Y1=5;
X2=45;
Y2=45;
life=1;
LocationX=0;
LocationY=0;
pDC->SelectObject(&br);
pDC->Ellipse(X1,Y1,X2,Y2);
pDC->TextOutA(575,50,"游戏状态:");
pDC->TextOutA(575,150,"生命数:");
sprintf(str,"%d",life);
pDC->TextOutA(600,180,str);
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
r=((double)rand())/RAND_MAX*5.0;
ChessBoard[i][j]=r;
if (ChessBoard[i][j]!=1&&ChessBoard[i][j]!=2&&ChessBoard[i][j]!=3&&ChessBoard[i][j]!=4&&ChessBoard[i][j]!=5)
ChessBoard[i][j]=0;
}
}
for (i=0;i<=9;i++)
{
for (j=0;j<=9;j++)
{
if (!(i==0 && j==0||i==9 && j==9))
{
if (ChessBoard[i][j]==1)
{
pDC->SelectObject(&br1);
pDC->Ellipse(i*50+10,j*50+10,i*50+40,j*50+40);
}
if (ChessBoard[i][j]==3||ChessBoard[i][j]==4||ChessBoard[i][j]==5||ChessBoard[i][j]==6||ChessBoard[i][j]==7)
{
pDC->SelectObject(&br2);
pDC->Rectangle(i*50+10,j*50+10,i*50+40,j*50+40);
}
}
}
}
ReleaseDC(pDC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -