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

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

?? snake.cpp

?? 實現貪吃蛇游戲
?? 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一区二区三区免费野_久草精品视频
a在线欧美一区| 一二三区精品视频| 久久久777精品电影网影网 | 久久精品久久精品| 国产乱子轮精品视频| 色噜噜偷拍精品综合在线| 欧美一区二区精美| 亚洲欧洲日韩av| 人人精品人人爱| 精品福利一二区| 亚洲色图视频免费播放| 韩国午夜理伦三级不卡影院| 欧美日韩大陆在线| 国产精品欧美一区喷水| 日本午夜精品一区二区三区电影| av激情综合网| 亚洲国产精品久久人人爱| 国产成人精品免费看| 精品国产伦一区二区三区观看方式| 国产精品资源网| 精品日韩99亚洲| 日韩国产精品久久久久久亚洲| 欧美大黄免费观看| 久久精品国产久精国产| 亚洲国产精品精华液ab| 久久99国产精品麻豆| 精品免费国产二区三区| 99久久国产综合色|国产精品| 国产蜜臀av在线一区二区三区| 蜜臀av一区二区在线观看| 欧美精品一二三| 天堂成人国产精品一区| 欧美日韩国产系列| 国产精品1区2区| 亚洲第一主播视频| 欧美一区二区三区的| 99精品热视频| 日韩电影免费一区| 中文字幕日韩一区| 精品粉嫩aⅴ一区二区三区四区| 成人a级免费电影| 中文字幕精品在线不卡| 欧美另类z0zxhd电影| 99久久99久久精品国产片果冻| 免费一级欧美片在线观看| 国产精品一区二区在线观看网站| 亚洲一线二线三线视频| 日本久久一区二区| 国产一区二三区好的| 亚洲va欧美va国产va天堂影院| 亚洲国产精品成人综合| 日韩午夜在线播放| 福利电影一区二区三区| 中文一区二区在线观看 | 精品视频在线看| 日本不卡在线视频| 亚洲主播在线观看| 中文字幕+乱码+中文字幕一区| 久久一留热品黄| 91免费版在线看| 亚洲成a人v欧美综合天堂| 中文字幕亚洲一区二区va在线| 国产欧美日韩视频一区二区 | 精品电影一区二区三区| 欧美久久久影院| 欧美视频在线观看一区| 精品一区二区日韩| 麻豆91在线观看| 久久国产精品免费| 精品在线亚洲视频| 麻豆成人综合网| 久久se精品一区二区| 轻轻草成人在线| 蜜桃一区二区三区在线观看| 亚洲国产另类av| 午夜伊人狠狠久久| 午夜伊人狠狠久久| 精品国一区二区三区| 日韩精品一区二区三区在线 | 欧美tk丨vk视频| 欧美成人精精品一区二区频| 日韩一级黄色片| 精品国一区二区三区| 久久久久久久久99精品| 欧美视频在线观看一区二区| 欧美日韩一区二区电影| 欧美三级在线视频| 欧美一区二视频| 精品国产在天天线2019| 久久久国产一区二区三区四区小说| 久久久久久夜精品精品免费| 国产精品每日更新| 亚洲欧美日韩国产一区二区三区 | 欧美高清激情brazzers| 在线不卡一区二区| 亚洲精品一区二区三区蜜桃下载 | 九一九一国产精品| 久久国产精品99久久人人澡| 国产乱码精品一区二区三区av| 不卡的电影网站| 欧美亚洲日本一区| 欧美一卡二卡在线| 久久亚洲精精品中文字幕早川悠里| 国产精品久久久久久久午夜片| 日韩一二三区视频| 久久久五月婷婷| 亚洲精选一二三| 亚洲欧美一区二区在线观看| 亚洲综合999| 另类小说综合欧美亚洲| 国产精品亚洲一区二区三区在线| 99国产一区二区三精品乱码| 欧美一区二区视频在线观看2022| 久久久91精品国产一区二区三区| 一区二区三区不卡视频在线观看| 日本欧美一区二区| 成人h精品动漫一区二区三区| 欧美男生操女生| 国产精品美日韩| 麻豆精品视频在线观看| 一本一道综合狠狠老| 成人晚上爱看视频| 国产成人综合网| 欧美亚洲一区二区在线观看| 久久伊人中文字幕| 亚洲国产综合人成综合网站| 国产一区二区伦理片| 欧美日韩一级视频| 国产精品日韩成人| 捆绑调教一区二区三区| 色综合欧美在线视频区| 久久蜜桃av一区精品变态类天堂 | 久久99久国产精品黄毛片色诱| 成人激情电影免费在线观看| 日韩三级在线免费观看| 一区二区三区鲁丝不卡| 国产91富婆露脸刺激对白| 8v天堂国产在线一区二区| 欧美一级免费大片| 亚洲黄色片在线观看| 国产剧情一区二区| 日韩亚洲欧美一区| 亚洲妇女屁股眼交7| 色美美综合视频| 国产精品色呦呦| 国产乱人伦偷精品视频不卡 | 成人深夜福利app| 日韩欧美国产小视频| 亚洲国产sm捆绑调教视频| 91浏览器打开| 亚洲欧美一区二区三区国产精品| 精彩视频一区二区三区| 欧美一区二区三区在线电影| 亚洲国产成人91porn| 欧美性视频一区二区三区| 亚洲精品视频一区| 91麻豆免费看| 综合中文字幕亚洲| 91色在线porny| 亚洲视频在线一区观看| av在线播放一区二区三区| 国产精品人妖ts系列视频| 国产精品1区二区.| 久久精品这里都是精品| 国产精品18久久久久| 国产偷国产偷亚洲高清人白洁| 国产麻豆精品95视频| 久久亚洲精精品中文字幕早川悠里| 韩国av一区二区三区| 精品美女在线播放| 国产成人精品亚洲午夜麻豆| 国产日韩欧美精品电影三级在线| 狠狠色丁香婷婷综合| 精品播放一区二区| 国产精品一区在线| 欧美激情一区二区三区全黄| 成人av在线播放网站| 成人欧美一区二区三区| 色婷婷激情久久| 性感美女极品91精品| 日韩欧美aaaaaa| 成人免费看视频| 亚洲免费av高清| 欧美日韩国产色站一区二区三区| 亚洲国产精品影院| 欧美一区二区三区免费在线看 | 日韩一区二区精品在线观看| 麻豆一区二区在线| 26uuu亚洲综合色| 91老师片黄在线观看| 丝瓜av网站精品一区二区| 精品成a人在线观看| av成人免费在线| 首页国产欧美日韩丝袜| 婷婷久久综合九色综合绿巨人 | 欧美韩国日本综合| 色综合中文字幕国产| 日韩视频一区二区三区| 国产激情一区二区三区桃花岛亚洲| 中文字幕av一区二区三区高|