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

📄 mygame.cpp

📁 我自己实现的连连看软件
💻 CPP
字号:
// MyGame.cpp: implementation of the CMyGame class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MyFirstGame.h"
#include "MyGame.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyGame::CMyGame()
{
  pData= NULL;
  m_yc = 90 ;
  m_dx = 40;
  m_dy = 50;
}

CMyGame::~CMyGame()
{

}

void CMyGame::SetDataSize()
{   
	int i;
	switch(m_Class) {
	case sNone:
		pData = NULL;
		break;
	case sSimple:
		pData = new int*[14];
		for(i=0; i<14;i++)
		{
			pData[i] = new int[9];
		}
		break;
	case sMiddle:
		pData = new int*[16];
		for(i=0; i<14;i++)
		{
			pData[i] = new int[10];
		}
		break;
	case sHard:
		pData = new int*[18];
		for(i=0; i<18;i++)
		{
			pData[i] = new int[11];
		}
		break;
	}

}

void CMyGame::InitialData()
{

	int i,j;
	int count = m_Col * m_row/ 2;
	int *a= new int[count*2];
	GenerateRandomNum(a, count*2);
	for(i=0;i<(m_Col + 2);i++)
	{
		for(j=0;j<(m_row + 2);j++)
		{   

			pData[i][j] = 0;
		}
	}

	for(i=1 ;i<(m_Col + 1);i++)
	{
		for(j=1;j<(m_row + 1);j++)
		{   

			pData[i][j] = a[(i - 1)*m_row + j - 1]/4 + 1;
		}
	}

	delete []a;
	

}

void CMyGame::SetClass()
{
  switch(m_Class)
  {
  case sNone:
	  break;
  case sSimple:
	  break;
  case sMiddle:
	  break;
  case sHard:
	  break;
  }
}

//DEL void CMyGame::DrawCellBmp(CDC *pDc, CMyGame FMyGame)
//DEL {
//DEL 
//DEL }

void CMyGame::SetClass(int ClassType)
{ 
  ClearData();
  m_Class=ClassType;
  InitialInfo();
  SetDataSize();
  m_xc=(770-m_Col*m_dx)/2 ;
}


void CMyGame::InitialInfo()
{
	switch(m_Class)
	{
	case sNone:
		m_Col =0;
		m_row =0;
		break;
	case sSimple:
		m_Col =12;
		m_row =7;
		break;
	case sMiddle:
		m_Col =14;
		m_row =8;
		break;
	case sHard:
		m_Col =16;
		m_row =9;
		break;
	}

}

void CMyGame::ClearData()
{   
	int i;
	switch(m_Class) {
	case sNone:
		pData = NULL;
		break;
	case sSimple:
		
		for(i=0; i<14;i++)
		{
			delete []pData[i];
		}
		delete []pData;
		break;
	case sMiddle:
		for(i=0; i<16;i++)
		{
			delete []pData[i];
		}
		delete []pData;
		break;
	case sHard:
		for(i=0; i<18;i++)
		{
			delete []pData[i];
		}
		delete []pData;
		break;
	}

}

void CMyGame::GenerateRandomNum(int x[], int count)
{
	int i,j,xx;
	for(i=0;i<count;i++)
	{  do
	   {
		   xx= rand()%count;
		   for(j=0;(j<i)&&(xx!=x[j]);j++);
	   }while(i!=j);
	   x[i]=xx;
	}
  
}

void CMyGame::TranToXY(int *x, int *y, int i, int j)
{
   	*x = m_xc+i*m_dx ;
	*y = m_yc+j*m_dy ;
}

void CMyGame::TranXYToPosition(int *xpos, int *ypos, int x, int y)
{
   *xpos = (x - m_xc)/m_dx;
   *ypos = (y - m_yc)/m_dy;
}

bool CMyGame::TestLine(int x0, int y0, int x1, int y1 ,int &midx1, int &midy1, int &midx2, int &midy2)
{
	bool testok;
    testok = false;
    int i= 0;
    StartPoint.x = x0;
	StartPoint.y = y0;
	EndPoint.x = x1;
	EndPoint.y = y1;
	for(i=0; i<m_Col + 2 && !testok;i++)
	{ 
		testok =TestXLine(x1, i , y1) && TestXLine(x0, i, y0) && TestYLine(y0, y1, i) ;
		if(testok)
		{
			midx1 = i;
		    midy1 = y1;
			midx2 = i;
			midy2 = y0;
		}
		
	}
	for(i=0; i<m_row + 2 && !testok;i++)
	{
       testok = TestYLine(y1,i ,x1)  && TestYLine(y0, i, x0)  && TestXLine(x0, x1, i) ;
	   if(testok)
	   {
		   midx1 = x1;
	       midy1 = i;
		   midx2 = x0;
		   midy2 = i;
	   }
	   
	}

    return testok;
}




bool CMyGame::TestXLine(int x0, int x1, int y1)
{ 
  POINT pt;
  bool result = true;
  int i;
  if (x1 >= x0)
  {
	  for(i =x1; i>=x0;i--)
	  {   
		  pt.x = i;
		  pt.y =y1;
		  if ((StartPoint.x == i && StartPoint.y == y1) || ((EndPoint.x == i) && (EndPoint.y == y1)))
			 continue;
		  if(pData[i][y1] != 0)
		  {
			  result = false;
		      break;
		  }
	  }
  }
  else
  {
	  for(i=x1;i<=x0;i++)
	  {   
		  pt.x = i;
		  pt.y =y1;
		  if ((StartPoint.x == i && StartPoint.y == y1) || ((EndPoint.x == i) && (EndPoint.y == y1)))
			 continue;
		  if(pData[i][y1] != 0)
		  {
			  result = false;
		      break;
		  }
	  }
  }
  return result;
}

bool CMyGame::TestYLine(int y0, int y1, int x0)
{ 
  bool result = true;
  POINT pt;
  int i;
  if(y1 >= y0) 
  {
	  for(i = y1; i>=y0;i--)
	  {   
		  pt.x = x0;
		  pt.y = i;
		  if ((StartPoint.x == x0 && StartPoint.y == i) || ((EndPoint.x == x0) && (EndPoint.y == i)))
			 continue;
		  if(pData[x0][i] != 0)
		  {
			  result = false;
		      break;
		  }

	  }
  }
  else
  {
	  for(i=y1;i<=y0;i++)
	  {
		  pt.x = x0;
		  pt.y = i;
		  if ((StartPoint.x == x0 && StartPoint.y == i) || ((EndPoint.x == x0) && (EndPoint.y == i)))
			 continue;
		  if(pData[x0][i] != 0)
		  {
			  result = false;
		      break;
		  }
	  }
  }
  return result;
}

⌨️ 快捷键说明

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