亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? snake.cpp

?? snake.cppsgrg tyutyutrtwe4tte4tr erygtrsegr etgthtyt.
?? 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;i<m_length+2;i++)
	{
		m_pPos[i].x=0;m_pPos[i].y=0;
	}

	//初始化蛇的運動狀態
	m_newSnake.head=S_NONE;
	m_oldSnake.head=S_NONE;
	m_newSnake.body=new MoveState[m_length];
	m_oldSnake.body=new MoveState[m_length];
	for(i=0;i<m_length;i++)
	{
		m_newSnake.body[i]=S_NONE;
		m_newSnake.body[i]=S_NONE;
	}
	m_newSnake.tail=S_NONE;
	m_oldSnake.tail=S_NONE;

	//初始化蛇的位圖顯示狀態
	m_pStateArray=new BitmapState[m_length+2];
	for(i=0;i<m_length+2;i++)
		m_pStateArray[i]=M_NONE;
}

CSnake::~CSnake()
{
	SAFE_DELETE_ARRAY(m_pStateArray);
	SAFE_DELETE_ARRAY(m_pPos);
}

//
//根據新舊兩個身體的運動趨勢情況,返回當前應當顯示的身體狀態
//
BitmapState CSnake::GetRightState(MoveState oldDirect,MoveState newDirect)
{
	BitmapState res;
	switch(oldDirect)
	{
	case S_NONE:
		switch(newDirect)
		{
		case S_NONE:
			res=M_NONE;
			break;
		case S_UP:
			res=M_UP_UP;
			break;
		case S_DOWN:
			res=M_DOWN_DOWN;
			break;
		case S_LEFT:
			res=M_LEFT_LEFT;
			break;
		case S_RIGHT:
			res=M_RIGHT_RIGHT;
			break;
		}
		break;
	case S_UP:
		switch(newDirect)
		{
		case S_UP:
			res=M_UP_UP;
			break;
		case S_LEFT:
			res=M_UP_LEFT;
			break;
		case S_RIGHT:
			res=M_UP_RIGHT;
			break;
		}
		break;
	case S_DOWN:
		switch(newDirect)
		{
		case S_DOWN:
			res=M_DOWN_DOWN;
			break;
		case S_LEFT:
			res=M_DOWN_LEFT;
			break;
		case S_RIGHT:
			res=M_DOWN_RIGHT;
			break;
		}
		break;
	case S_LEFT:
		switch(newDirect)
		{
		case S_LEFT:
			res=M_LEFT_LEFT;
			break;
		case S_UP:
			res=M_LEFT_UP;
			break;
		case S_DOWN:
			res=M_LEFT_DOWN;
			break;
		}
		break;
	case S_RIGHT:
		switch(newDirect)
		{
		case S_RIGHT:
			res=M_RIGHT_RIGHT;
			break;
		case S_UP:
			res=M_RIGHT_UP;
			break;
		case S_DOWN:
			res=M_RIGHT_DOWN;
			break;
		}
		break;
	}
	return res;
}

//
//改變方向
//
void CSnake::ChangeDirect(MoveState d)
{
  //  改變方向的條件:非對立方向
  //  只能為其左,前,右方
	switch(d)
	{
	case S_NONE:
		m_newSnake.head=d;
		break;
	case S_UP:
		if(m_newSnake.head!=S_DOWN) m_newSnake.head=d;
		break;
	case S_DOWN:
		if(m_newSnake.head!=S_UP) m_newSnake.head=d;
		break;
	case S_LEFT:
		if(m_newSnake.head!=S_RIGHT) m_newSnake.head=d;
		break;
	case S_RIGHT:
		if(m_newSnake.head!=S_LEFT) m_newSnake.head=d;
		break;
	}
}

//
//蛇移動
//
void CSnake::Move(void)
{
	int i;
	//1.計算新狀態各個節點的狀態
	//保存蛇身體各個部位的形狀
	for(i=0;i<m_length;i++)
	{
		m_oldSnake.body[i]=m_newSnake.body[i];
	}	

	//將蛇身體的狀態根據前面的狀態變動一次
	m_newSnake.tail=m_newSnake.body[m_length-1];
	for(i=m_length-1;i>0;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;i<m_length;i++)
		m_pStateArray[i+1]=GetRightState(m_oldSnake.body[i],m_newSnake.body[i]);
	m_pStateArray[m_length+1]=GetRightState(m_oldSnake.tail,m_newSnake.tail);


	//2.將整個蛇的坐標移動
	//除蛇頭外,其他部分的新位置為其前一部分的原來位置
	for(i=m_length+1;i>0;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<m_length+2;i++)
		savePos[i]=m_pPos[i];

	//保存蛇的狀態信息
	//  1.oldSnake
	//  2.newSnake
	//  3.stateArray

	//1
	saveOldSnake.head=m_oldSnake.head;
	saveOldSnake.body=new MoveState[m_length];
	for(i=0;i<m_length;i++)
		saveOldSnake.body[i]=m_oldSnake.body[i];
	saveOldSnake.tail=m_oldSnake.tail;
	//2
	saveNewSnake.head=m_newSnake.head;
	saveNewSnake.body=new MoveState[m_length];
	for(i=0;i<m_length;i++)
		saveNewSnake.body[i]=m_newSnake.body[i];
	saveNewSnake.tail=m_newSnake.tail;
	//3
	savestateArray=new BitmapState[m_length+2];
	for(i=0;i<m_length+2;i++)
		savestateArray[i]=m_pStateArray[i];
	
	//將長度增長
	m_length+=n;
	
	//釋放所有蛇的身體存儲數據空間
	delete[] m_oldSnake.body;m_oldSnake.body=NULL;
	delete[] m_newSnake.body;m_newSnake.body=NULL;
	delete[] m_pStateArray;m_pStateArray=NULL;
	delete[] m_pPos;m_pPos=NULL;

	//創建并初始化增長后的蛇的存儲數據空間

	m_newSnake.head=S_NONE;
	m_oldSnake.head=S_NONE;
	m_newSnake.body=new MoveState[m_length];
	m_oldSnake.body=new MoveState[m_length];
	for(i=0;i<m_length;i++)
	{
		m_newSnake.body[i]=S_NONE;
		m_newSnake.body[i]=S_NONE;
	}
	m_newSnake.tail=S_NONE;
	m_oldSnake.tail=S_NONE;

	m_pStateArray=new BitmapState[m_length+2];
	for(i=0;i<m_length+2;i++)
		m_pStateArray[i]=M_NONE;
	m_pPos=new SPoint[m_length+2];
	for(i=0;i<m_length+2;i++)
	{
		m_pPos[i].x=0;
		m_pPos[i].y=0;
	}

	//恢復原來長度的數據(新的用初始化的數據)
	//a. newSnake ,oldSnake狀態
	//b. stateArray
	//c. pos

	//a
	m_newSnake.head=saveNewSnake.head;
	m_oldSnake.head=saveOldSnake.head;
	for(i=0;i<m_length-n;i++)
	{
		m_newSnake.body[i]=saveNewSnake.body[i];
		m_oldSnake.body[i]=saveOldSnake.body[i];
	}
	m_newSnake.tail=saveNewSnake.tail;
	m_oldSnake.tail=saveOldSnake.tail;

	//b
	for(i=0;i<m_length-n+2;i++)
		m_pStateArray[i]=savestateArray[i];

	//c
	for(i=0;i<m_length-n+2;i++)
		m_pPos[i]=savePos[i];
}

//
//設置蛇頭的坐標
//
void CSnake::SetHeadPos(int x,int y)
{
	m_pPos[0].x=x;m_pPos[0].y=y;
}

//
//取蛇的狀態標識數組
//
BitmapState* CSnake::GetStateArray(void)
{
	return m_pStateArray;
}

//
//取蛇的位置數組
//
SPoint* CSnake::GetPos(void)
{
	return m_pPos;
}

//
//取蛇身的長度
//
int CSnake::GetLength(void)
{
	return m_length+2;
}

//
//檢測蛇頭是否觸碰到其身體
//
bool CSnake::IsHeadTouchBody(int x,int y)
{
	int i;
	for(i=1;i<m_length+2;i++)
		if(m_pPos[i].x==x&&m_pPos[i].y==y) return true;
	return false;
}

//
//初始化 用作游戲結束后重新開始
//
void CSnake::Initial(void )
{
	//釋放以前的所有存儲空間
	SAFE_DELETE_ARRAY(m_pStateArray);
	SAFE_DELETE_ARRAY(m_pPos);

	//創建蛇身長度為1的蛇,并做各種初始化
	int i;
	int x = 0;
	int y = 0;

	//初始化蛇的坐標位置
	m_length=1;
	m_pPos=new SPoint[m_length+2];
	m_pPos[0].x=x;m_pPos[0].y=y;
	for(i=1;i<m_length+2;i++)
	{
		m_pPos[i].x=0;m_pPos[i].y=0;
	}

	//初始化蛇的運動狀態
	m_newSnake.head=S_NONE;
	m_oldSnake.head=S_NONE;
	m_newSnake.body=new MoveState[m_length];
	m_oldSnake.body=new MoveState[m_length];
	for(i=0;i<m_length;i++)
	{
		m_newSnake.body[i]=S_NONE;
		m_newSnake.body[i]=S_NONE;
	}
	m_newSnake.tail=S_NONE;
	m_oldSnake.tail=S_NONE;

	//初始化蛇的位圖顯示狀態
	m_pStateArray=new BitmapState[m_length+2];
	for(i=0;i<m_length+2;i++)
		m_pStateArray[i]=M_NONE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区不卡| 日韩理论片在线| 奇米亚洲午夜久久精品| 欧美一区二区三区播放老司机| 亚洲综合在线免费观看| 欧美性猛片xxxx免费看久爱| 亚洲午夜精品一区二区三区他趣| 色婷婷久久综合| 亚洲电影一级黄| 日韩免费福利电影在线观看| 国产精一区二区三区| 久久精品一区二区| 色丁香久综合在线久综合在线观看| 樱桃视频在线观看一区| 777久久久精品| 极品销魂美女一区二区三区| 国产精品免费视频观看| 一本色道亚洲精品aⅴ| 亚洲18影院在线观看| 欧美va天堂va视频va在线| 成人一区二区三区中文字幕| 一区二区三区不卡视频 | 捆绑变态av一区二区三区| 26uuuu精品一区二区| 成人av网址在线| 亚洲一区在线电影| 精品国产乱码久久久久久夜甘婷婷| 国产激情一区二区三区桃花岛亚洲| 中文字幕在线视频一区| 欧美久久久影院| 国产成人av一区二区| 亚洲国产精品久久人人爱| 26uuu欧美| 91免费观看视频| 六月丁香婷婷久久| 自拍偷拍国产亚洲| 日韩欧美中文一区| 91一区在线观看| 久久99精品久久久久久国产越南| 亚洲女性喷水在线观看一区| 欧美成人一区二区三区| 日本二三区不卡| 国产一本一道久久香蕉| 香蕉乱码成人久久天堂爱免费| 久久久久免费观看| 欧美日韩第一区日日骚| 成人高清伦理免费影院在线观看| 日韩中文字幕麻豆| 亚洲欧美日韩精品久久久久| 2020国产精品自拍| 欧美日韩免费高清一区色橹橹 | 欧美成va人片在线观看| 在线视频观看一区| 国产99久久久久| 蜜桃精品在线观看| 亚洲福利国产精品| 综合欧美一区二区三区| 国产精品久久久久久久久免费丝袜 | 欧美性极品少妇| 国产99久久久久| 久久电影网站中文字幕| 亚洲高清不卡在线观看| 亚洲欧洲日本在线| 日本一区二区三区在线观看| 日韩精品一区二区三区蜜臀| 欧美丰满嫩嫩电影| 欧美美女网站色| 欧美日韩国产综合视频在线观看 | 欧美激情一区在线观看| 久久综合久久综合九色| 91精品国产综合久久久久久漫画 | 91免费国产在线| 99精品国产99久久久久久白柏| 国产精品一二三区| 国产乱理伦片在线观看夜一区 | 一区二区三区在线视频免费观看| 国产人伦精品一区二区| 26uuu欧美日本| 久久久欧美精品sm网站| 久久久亚洲国产美女国产盗摄 | 日本成人在线网站| 午夜影院久久久| 视频一区二区欧美| 丝袜诱惑亚洲看片| 日本亚洲电影天堂| 蜜臀av亚洲一区中文字幕| 日本成人在线不卡视频| 免费高清视频精品| 麻豆91免费观看| 国产成人日日夜夜| 成人黄页毛片网站| 91视频xxxx| 欧美午夜精品久久久| 6080yy午夜一二三区久久| 欧美一卡二卡三卡四卡| 精品国产第一区二区三区观看体验| 日韩一区二区中文字幕| 精品国产制服丝袜高跟| 久久久噜噜噜久久中文字幕色伊伊| 久久久蜜桃精品| 国产精品国产三级国产普通话99| 亚洲精品视频在线观看免费| 亚洲一区二区四区蜜桃| 男女激情视频一区| 国产91色综合久久免费分享| 成人国产精品免费| 欧美区在线观看| 久久亚洲免费视频| 亚洲天堂免费看| 五月天亚洲婷婷| 国内精品视频666| 91在线观看污| 制服.丝袜.亚洲.中文.综合| 久久婷婷色综合| 一区二区三区中文字幕精品精品| 午夜精品久久久久久久久| 九色porny丨国产精品| 成人va在线观看| 欧美日韩一区二区三区视频| 久久综合久久久久88| 亚洲欧美视频在线观看视频| 蜜臀久久99精品久久久久宅男| 成人精品一区二区三区四区 | 亚洲小说欧美激情另类| 久久99久久久欧美国产| 99久久婷婷国产| 欧美人与z0zoxxxx视频| 国产欧美一区二区三区沐欲| 亚洲电影你懂得| 风间由美一区二区av101| 欧美群妇大交群中文字幕| 国产精品少妇自拍| 日韩av网站在线观看| 99re热视频这里只精品| 日韩免费高清电影| 亚洲成人av在线电影| av电影一区二区| 久久夜色精品国产噜噜av| 午夜免费久久看| 99精品国产热久久91蜜凸| 精品伦理精品一区| 视频一区二区欧美| 色婷婷精品大在线视频 | 国产精品日韩成人| 裸体健美xxxx欧美裸体表演| 欧美专区日韩专区| 国产精品美女久久久久久久久| 日韩中文字幕一区二区三区| 91国产视频在线观看| 国产欧美精品一区aⅴ影院| 久久精工是国产品牌吗| 欧美调教femdomvk| 亚洲人精品一区| 不卡av免费在线观看| 久久久www成人免费毛片麻豆| 视频一区二区三区中文字幕| 欧美性猛交xxxxxxxx| 一区二区三区在线观看网站| 99在线精品一区二区三区| 国产偷国产偷精品高清尤物| 极品少妇xxxx精品少妇| 欧美一卡二卡三卡| 天堂久久久久va久久久久| 欧美日韩国产高清一区二区三区 | 亚洲欧美二区三区| 播五月开心婷婷综合| 中文字幕不卡在线| 国产乱码精品一区二区三区忘忧草| 精品久久一区二区| 九九**精品视频免费播放| 日韩免费福利电影在线观看| 秋霞午夜av一区二区三区| 欧美欧美午夜aⅴ在线观看| 亚洲第一福利视频在线| 欧美日韩中文字幕一区二区| 亚洲高清久久久| 欧美欧美欧美欧美首页| 日本欧美一区二区在线观看| 91精品国产91热久久久做人人| 日韩精品电影在线观看| 欧美精品久久天天躁| 日韩电影在线免费观看| 日韩精品在线一区| 国产精品18久久久久久久久久久久 | ww亚洲ww在线观看国产| 国产成a人亚洲| 国产精品欧美经典| 91久久久免费一区二区| 亚洲成av人在线观看| 91麻豆精品国产91久久久更新时间 | www.日韩大片| 亚洲精品久久7777| 欧美精品777| 久久国内精品自在自线400部| 久久久久久久一区| 成人aaaa免费全部观看| 亚洲香肠在线观看| 精品久久久久久久久久久久久久久久久| 国产一区福利在线| 亚洲视频一二三区|