📄 program1view.cpp
字号:
// PROGRAM1View.cpp : implementation of the CPROGRAM1View class
//
#include "stdafx.h"
#include "PROGRAM1.h"
#include "PROGRAM1Doc.h"
#include "PROGRAM1View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View
IMPLEMENT_DYNCREATE(CPROGRAM1View, CView)
BEGIN_MESSAGE_MAP(CPROGRAM1View, CView)
//{{AFX_MSG_MAP(CPROGRAM1View)
ON_WM_KEYDOWN()
ON_WM_TIMER()
ON_COMMAND(ID_MENU_NEWGAME, OnMenuNewgame)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View construction/destruction
CPROGRAM1View::CPROGRAM1View()
{
// TODO: add construction code here
Food=FALSE;
Score=0;
srand(GetTickCount());
}
CPROGRAM1View::~CPROGRAM1View()
{
}
BOOL CPROGRAM1View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View drawing
void CPROGRAM1View::OnDraw(CDC* pDC)
{
CPROGRAM1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
SetTimer(10,60,NULL); // 设置龙速度
CString sText; // 分数
sText.Format("Score= %u",Score); // 格式化分数
pDC->TextOut(10,10,sText); // 输出分数
if(theDRAGON.IsDead==FALSE)
{
pDC->TextOut(FoodX,FoodY,"★");
pDC->TextOut(theDRAGON.GetX(0),theDRAGON.GetY(0),"¤"); // 显示龙头
for(int i=1;i<theDRAGON.Lenth;i++) // 显示
pDC->TextOut(theDRAGON.GetX(i),theDRAGON.GetY(i),"■"); // 龙身
// 显示食物
}
}
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View printing
BOOL CPROGRAM1View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CPROGRAM1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CPROGRAM1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View diagnostics
#ifdef _DEBUG
void CPROGRAM1View::AssertValid() const
{
CView::AssertValid();
}
void CPROGRAM1View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CPROGRAM1Doc* CPROGRAM1View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPROGRAM1Doc)));
return (CPROGRAM1Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPROGRAM1View message handlers
void CPROGRAM1View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
///////////////////////////////////方向控制///////////////////////////
if( nChar==VK_UP && theDRAGON.GetX(1) != theDRAGON.GetX(0) ) theDRAGON.Direction=1;
else if( nChar==VK_DOWN && theDRAGON.GetX(1) != theDRAGON.GetX(0) ) theDRAGON.Direction=2;
else if( nChar==VK_LEFT && theDRAGON.GetY(1) != theDRAGON.GetY(0) ) theDRAGON.Direction=3;
else if( nChar==VK_RIGHT && theDRAGON.GetY(1) != theDRAGON.GetY(0) ) theDRAGON.Direction=4;
//////////////////////////////////////////////////////////////////////
}
void CPROGRAM1View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
////更新窗口/////
OnUpdate(NULL,NULL,NULL);
////////////////
//////////////////////////设置食物坐标///////////////////////////
if(Food==FALSE) /////当没有食物时
{
RandFood(&FoodX,&FoodY); /////食物坐标
Food=TRUE; /////这时食物有无为“TRUE”
}
/////////////////////////////////////////////////////////////////
if(theDRAGON.IsDead==FALSE) ////// 判断龙是否死亡
{
theDRAGON.DgnMove(); ////// 使龙移动
/////当龙头与龙体相碰 或 与视图边相碰 则置死亡标志IsDead=TRUE///////
if(theDRAGON.IsBody(theDRAGON.GetX(0),theDRAGON.GetY(0))||(theDRAGON.GetX(0)<0||theDRAGON.GetY(0)<0||theDRAGON.GetX(0)>285||theDRAGON.GetY(0)>140))
{
theDRAGON.IsDead=TRUE;
AfxMessageBox("You DEAD Man");
}
///////////////////////////////////////////////////////////////////
//////////////////////当龙头与食物相碰则“吃(Eat())”下食物/////////////////////////////////////////////
else
{
if(theDRAGON.GetX(0)==FoodX&&theDRAGON.GetY(0)==FoodY) // 判断头是否吃到食物
{
theDRAGON.Eat(); // “吃下食物”
Score+=10; // 加分
Food=FALSE; // 食物吃完,置食物标志为FALSE
}
}
}
CView::OnTimer(nIDEvent);
}
void CPROGRAM1View::OnMenuNewgame() // “新游戏”菜单项
{ // TODO: Add your command handler code here
theDRAGON.Init(); // 将龙初始化
Score=0; // 分数归零
}
void CPROGRAM1View::RandFood(int *x, int *y) //随机食物坐标布置函数
{
BOOL IsDragon; //“是否龙体”标志
do
{
IsDragon=FALSE; //置标志为“FALSE”
*x=rand()%285/theDRAGON.Width*theDRAGON.Width; // 食物坐标为龙
*y=rand()%140/theDRAGON.Width*theDRAGON.Width; // 体宽(Width)的倍数,且在视图内
//检查随机坐标是否与龙体重合,若重合则重置//
for(int i=0;i<theDRAGON.Lenth;i++)
if(theDRAGON.GetX(i)==*x&&theDRAGON.GetY(i)==*y)
IsDragon=TRUE;
}
while(IsDragon==TRUE);
////////////////////////////////////////////
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -