www.pudn.com > Snake.rar > snake.cpp


/*++ 
 
Copyright (c) 2004-2005  AFE(Active-Free-Elegance) 
 
Module Name: 
 
    snake.cpp 
 
Abstract: 
 
    the class of Snake,including the basic-method  
	such as : move,born,and eat,and so on. 
 
Author: 
 
 
    Weijian Luo (Arthur Luo)   15-Jun-2005 
 
	E-mail: skybluehacker@yahoo.com.cn 
 
Revision History:      1.0 
 
--*/ 
 
#include "snake.h" 
 
CSnake::CSnake(int x_pos,int y_pos,int len) 
{ 
	if(len<1) len=1; 
	int i; 
 
	m_length=len;  //蛇的身体体长 
 
	//初始化蛇的坐标位置 
	m_pPos=new SPoint[m_length+2]; 
	m_pPos[0].x=x_pos;m_pPos[0].y=y_pos; 
	for(i=1;i0;i--) 
	{ 
		m_newSnake.body[i]=m_newSnake.body[i-1]; 
	} 
	m_newSnake.body[0]=m_newSnake.head;	 
	 
	//根据新旧状态特性取正确的状态 
	m_pStateArray[0]=GetRightState(m_oldSnake.head,m_newSnake.head); 
	for(i=0;i0;i--) 
		m_pPos[i]=m_pPos[i-1]; 
	//蛇头的新位置根据蛇的运动方向判断做相应偏移 
	switch(m_newSnake.head) 
	{ 
	case S_UP: 
		m_pPos[0].y-=SNAKE_MOVE; 
		break; 
	case S_DOWN: 
		m_pPos[0].y+=SNAKE_MOVE; 
		break; 
	case S_LEFT: 
		m_pPos[0].x-=SNAKE_MOVE; 
		break; 
	case S_RIGHT: 
		m_pPos[0].x+=SNAKE_MOVE; 
		break; 
	} 
 
} 
 
// 
//蛇的身体增长 
// 
void CSnake::AddBody(int n) 
{ 
 
//  分配临时的"save类型"变量,用作保留 
//  蛇的各种数据状态 
	int i; 
	Snake_Struct saveOldSnake,saveNewSnake; 
	BitmapState *savestateArray; 
	SPoint *savePos; 
 
	//保存蛇的位置信息  
	// pos 
	savePos=new SPoint[m_length+2]; 
	for(i=0;i