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

📄 吃数字view.cpp

📁 一个模仿手机游戏的小游戏
💻 CPP
字号:
// 吃数字View.cpp : CMyView 类的实现
//

#include "stdafx.h"
#include "吃数字.h"
#include<time.h>
#include<stdlib.h>
#include "吃数字Doc.h"
#include "吃数字View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMyView

IMPLEMENT_DYNCREATE(CMyView, CView)

BEGIN_MESSAGE_MAP(CMyView, 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_WM_LBUTTONDOWN()
	ON_WM_KEYDOWN()
END_MESSAGE_MAP()

// CMyView 构造/销毁

CMyView::CMyView()
 
: x(10)
, y(10)
, total(1)
{
	// TODO: 在此处添加构造代码

}

CMyView::~CMyView()
{
}

BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式

	return CView::PreCreateWindow(cs);
}

// CMyView 绘制

void CMyView::OnDraw(CDC* /*pDC*/)
{
	CMyDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CClientDC dc(this);//draw the chessboard
	for(int i=0;i<=10;i++)
	{
	dc.MoveTo(40,40+40*i);
	dc.LineTo(440,40+40*i);
	}
	for(int i=0;i<=10;i++)
	{
	dc.MoveTo( 40+40*i,40);
	dc.LineTo( 40+40*i,440);
	}
	dc.TextOut(20,10,"你当前的战绩为");
	int num1; 
  // CString string;
   //string.Format(_T("%d"),)
    //int num[11][11];//give us the rand number
	srand((unsigned)time(NULL));
	for(int m=0;m<11;m++)
	   for(int n=0;n<11;n++)
		{  
		   num1=rand()*4.0/RAND_MAX+1;
		     num[m][n]=num1;
			 if(m!=0&&n!=0)
	       DrawChess(m,n,num1);
		 

		}
    num[10][10]=0;
    DrawChess(10,10,-1);
	MessageBox("这应该是一个关于图论的游戏,TRY!");
	// TODO: 在此处为本机数据添加绘制代码
}


// CMyView 打印

BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印前添加额外的初始化
}

void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 打印后添加清除过程
}


// CMyView 诊断

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

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

CMyDoc* CMyView::GetDocument() const // 非调试版本是内联的
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
	return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG


// CMyView 消息处理程序

void CMyView::DrawChess(int m, int n,int num)
{  CClientDC dc(this);
	//CString string;
	if(num==-1)
	{
		
		CPen pen(PS_NULL,0,(RGB(255,0,0)));
		dc.SetTextColor(RGB(255,0,0));
		dc.TextOut(20+40*m,20+40*n,"?");
	}

	else
	{	CString string;
	string.Format(_T("%d"),num);

dc.TextOut(20+40*m,20+40*n,string);
	}
}
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
 int m1,n1;
  m1=(point.x-40)/40+1;
  n1=(point.y-40)/40+1;
 /*CString string;
string.Format(_T("%d%d"),m1,n1);
 CClientDC dc(this);
dc.TextOut(660,400,string);*/



CView::OnLButtonDown(nFlags, point);
}

 

bool CMyView::IsLegal(int m, int n, int direct)
{
	switch(direct){
		case 1://up
			{
		   
			if(n<=num[m][n-1]||num[m][n-1]==0)
				return 0;
            for(int i=1;i<=num[m][n-1];i++)
				if(num[m][n-i]==0)
					return 0;
			return 1;
			break;
			}
		case 2://down
			{
			if((10-n)<num[m][n+1]||num[m][n+1]==0)
				return 0;
            for(int i=1;i<=num[m][n+1];i++)
				if(num[m][n+i]==0)
				return 0;
			return 1;
			break;
			}
		case 3://left
			{
			if(m<=num[m-1][n]||num[m-1][n]==0)
				return 0;
            for(int i=1;i<=num[m-1][n];i++)
				if(num[m-i][n]==0)
					return 0;
			return 1;
			break;
			}
		case 4://right
			{
			if((10-m)<num[m+1][n]||num[m+1][n]==0)
				return 0;
            for(int i=1;i<=num[m+1][n];i++)
				if(num[m+i][n]==0)
				return 0;
			return 1;
			break;
			}

	}
	return false;
}

void CMyView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
    
	switch(nChar){
   case VK_LEFT:
	   {
		   if(IsLegal(x,y,3))
		   {
			 
                
			    for(int i=0;i<=num[x-1][y];i++)
				DrawChess(x-i,y,0);
                
				 
				 int temp=num[x-1][y];
				 DrawChess(x-temp,y,-1);
				for(int i=1;i<=temp;i++)
				num[x-i][y]=0;
				
				 x-=temp;
				 total+=temp;
				 
				 
		   }
		   else MessageBox("NOT LEGAL");

	   }
	   break;
   case VK_RIGHT:
	   {
		   if(IsLegal(x,y,4))
		   {
		 
			    for(int i=0;i<=num[x+1][y];i++)
				DrawChess(x+i,y,0);

				 
				 int temp=num[x+1][y];
DrawChess(x+temp,y,-1);
				for(int i=1;i<=temp;i++)
				num[x+i][y]=0;
				
				 x+=temp;
				 total+=temp;
		   }
		   else MessageBox("NOT LEGAL");

	   }
	   break;
   case VK_UP:
	   {
		   if(IsLegal(x,y,1))
		   {
			         
			    for(int i=0;i<=num[x][y-1];i++)
				DrawChess(x,y-i,0);

				 
				 int temp=num[x][y-1];
DrawChess(x,y-temp,-1);
				for(int i=1;i<=temp;i++)
				num[x ][y-i]=0;
				
				 y-=temp;
				 total+=temp;
		   }
		   else MessageBox("NOT LEGAL");

	   }
	   break;
   case VK_DOWN:
	   {
		   if(IsLegal(x,y,2))
		   {
			       for(int i=0;i<=num[x][y+1];i++)
				DrawChess(x,y+i,0);

				 
				 int temp=num[x][y+1];
DrawChess(x,y+temp,-1);
				for(int i=1;i<=temp;i++)
				num[x ][y+i]=0;
				
				 y+=temp;
				 total+=temp;
		   }
		   else MessageBox("NOT LEGAL");

	   }
	   break;
   default:
	   break;
	}
	 CString string,string1;
string.Format(_T("%d"),total);
 CClientDC dc(this);
// string+="您当前的战绩为";
dc.TextOut(129,10,string); 
bool x1=IsLegal(x,y,1);
bool x2=IsLegal(x,y,2);
bool x3=IsLegal(x,y,3);
bool x4=IsLegal(x,y,4);
if(!IsLegal(x,y,1)&&!IsLegal(x,y,2)&&!IsLegal(x,y,3)&&!IsLegal(x,y,4))
{
	//MessageBox("ddd");
	string1="GameOver! ";
	string1+="您当前的战绩为"; 
	string1+=string;
    MessageBox( string1);
  Reset();


}
	CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CMyView::Reset(void)
{

	x=10;
	y=10;
	total=1;
	CClientDC dc(this);
	dc.TextOut(20,10,"你当前的战绩为 0  ");
	OnDraw(&dc);
}

⌨️ 快捷键说明

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