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

📄 greedysnake.cpp

📁 运用VC++编写的
💻 CPP
字号:
// GreedySnake.cpp: implementation of the CGreedySnake class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Snake.h"
#include "GreedySnake.h"

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

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

CGreedySnake::CGreedySnake()
{
	m_currentLen=START_LEN;   //初始化蛇长
}

CGreedySnake::~CGreedySnake()
{

}

void CGreedySnake::MoveUp()
{
	if(m_down) return;
	m_up=true;
	m_down=false;
	m_left=false;
	m_right=false;
}

void CGreedySnake::MoveDown()
{
	if(m_up) return;
	m_up=false;
	m_down=true;
	m_left=false;
	m_right=false;
}

void CGreedySnake::MoveLeft()
{
	if(m_right) return;
	m_up=false;
	m_down=false;
	m_left=true;
	m_right=false;
}

void CGreedySnake::MoveRight()
{
	if(m_left) return;
	m_up=false;
	m_down=false;
	m_left=false;
	m_right=true;
}

void CGreedySnake::KeepMoving()
{
	if(!m_up&&!m_down&&!m_left&&!m_right)  //不移动
		return;
	m_preEnd=m_body[m_currentLen-1];   //将移动前的尾坐标保存
	for(int i=m_currentLen-1;i>0;i--)
	{
		m_body[i]=m_body[i-1];    //后一节=前一节坐标(蛇头另外处理)
	}
    
	//-----处理蛇头坐标
	
	//向上走
	if(m_up)
	{
		m_body[0].y-=1;
	}
	//向下走
	if(m_down)
	{
		m_body[0].y+=1;
	}
    //向左走
	if(m_left)
	{
		m_body[0].x-=1;	
	}
	//向右走
	if(m_right)
	{
        m_body[0].x+=1;
	}

}

bool CGreedySnake::IsTouch(int max_x,int max_y)
{
    for(int i=1;i<m_currentLen;i++)
	{
		if( m_body[0].x>=max_x||m_body[0].x<0||    //检查是否撞到墙
			m_body[0].y>=max_y||m_body[0].y<0||    //
			(m_body[i].x==m_body[0].x&&m_body[i].y==m_body[0].y) //检查是否撞到身体
			)
			return false;
	}
	return true;
}

bool CGreedySnake::IsEat(CPoint food)
{
	if(m_body[0]==food)	 //吃到食物	
		return true;
	return false;
}

int CGreedySnake::GetBodyLen()
{
	return m_currentLen;  //返回当前身长
}


void CGreedySnake::InitSnake(int max_x, int max_y)
{
	//初始 不动
	m_up=false;
	m_down=false;
	m_left=false;
	m_right=true;
	
	m_currentLen=START_LEN;
	m_preEnd=0;
	
	//计算一个合适的位置放置蛇
	CPoint head;
	head.x=max_x-(max_x-START_LEN)/2-1;     
	head.y=max_y/2;
    for(int i=0;i<START_LEN;i++)
	{
		m_body[i].x=head.x-i;
		m_body[i].y=head.y;
	}
}

void CGreedySnake::Grow()
{
	//生长,新增的一节保存之前的尾巴坐标
	m_body[m_currentLen]=m_preEnd;  
	m_currentLen++;  //蛇身长计数+1
}

⌨️ 快捷键说明

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