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

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

?? bugbots.cpp

?? BugBots是一個游戲
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "utility.h"#include "BugBot.h"#include "food.h"#include "clump.h"#include "mainbrain.h"
#include "soundmanager.h"#include <cmath>#include <iostream>#include <algorithm>#include <map>#include <list>#include "sutil.h"#include "MapHandler.h"const extern int SCREENWIDTH;const extern int SCREENHEIGHT;extern MapHandler MH;BugBot::BugBot(){    m_dest = NoPosition;    m_health = 1000;    m_targetbot = -1;    m_me = -1;
	starved = false;}void BugBot::CheckHunger(){    if(m_health < 100)    {	m_flags += HUNGRY;	if(HasItem() && !m_item.bot || (HasItem() && m_item.bot && IsCannibal()))	{	    Eat(m_item);	    m_dest = (*MH.GetMainBrainIter(m_team)).GetTargetPos(m_pos);	    if(m_dest == NoPosition)	    {		m_dest.Random();		m_flags += SEARCHING;	    }	    if(m_health >= 100)	    {		m_flags -= HUNGRY;	    }	}	if(MH.IsOccupiedByItem(m_pos))	{	    std::list<BugBot>::iterator Corpse = MH.GetCorpseAt(m_pos);	    std::list<Food>::iterator Food = MH.GetFoodAt(m_pos);	    if(Food != 0)	    {		Eat(Item((*Food).GetMe(), false));	    }	    if(Corpse != 0 && IsCannibal())	    {		Eat(Item((*Corpse).GetMe(), true));	    }	}    }    else    {	m_flags -= HUNGRY;    }    if(m_health < 40)    {	m_flags += STARVING;	if(HasItem())	{	    Eat(m_item);	    m_dest = (*MH.GetMainBrainIter(m_team)).GetTargetPos(m_pos);	    if(m_dest == NoPosition)	    {		m_dest.Random();		m_flags += SEARCHING;	    }	}	if(MH.IsOccupiedByItem(m_pos))	{	    std::list<BugBot>::iterator Corpse = MH.GetCorpseAt(m_pos);	    std::list<Food>::iterator Food = MH.GetFoodAt(m_pos);	    if(Food != 0)	    {		Eat(Item((*Food).GetMe(), false));	    }	    if(Corpse != 0)	    {		Eat(Item((*Corpse).GetMe(), true));	    }	}    }    else    {	m_flags -= STARVING;    }    if(m_health <=0)    {	if(HasItem())	{	    Eat(m_item);	    m_dest = (*MH.GetMainBrainIter(m_team)).GetTargetPos(m_pos);	    if(m_dest == NoPosition)	    {		m_dest.Random();		m_flags += SEARCHING;	    }	}	if(MH.IsOccupiedByItem(m_pos))	{	    std::list<BugBot>::iterator Corpse = MH.GetCorpseAt(m_pos);	    std::list<Food>::iterator Food = MH.GetFoodAt(m_pos);	    if(Food != 0)	    {		Eat(Item((*Food).GetMe(), false));	    }	    if(Corpse != 0)	    {		Eat(Item((*Corpse).GetMe(), true));	    }	}	if(m_health <= 0)	{
		starved = true;	    Die();	}    }    if(m_health >= 40)    {	m_flags -= STARVING;	if(m_health >= 100)	{	    m_flags -= HUNGRY;	}    }}void BugBot::CheckFollow(){    if(m_targetbot != -1)    {	std::list<BugBot>::iterator i = MH.GetBugBotIter(m_targetbot);	if(i==0) 	{		    //std::cout << "CheckFollow() Invalid target:" << m_targetbot << endl;	    m_targetbot=-1;	    return;	}		m_dest =(*i).GetPos();    }}void BugBot::CheckDest(){    // //std::cout << "My team is " << m_team << endl;    if(m_dest == m_pos)    {	m_dest = NoPosition; //clear m_dest when arrived	m_flags -= SEARCHING;    }//m_dest == mpos            if(m_dest == NoPosition)    {	if(HasItem() && !IsRenegade())	{	    std::list<MainBrain>::iterator mbit= MH.GetMainBrainIter(m_team);	    	    if(mbit!=0)		m_dest = (*mbit).GetPos(); //head towards mainbrain	}	if(!HasItem() && !IsRenegade())// && !m_flags[SEARCHING])	{	    std::list<MainBrain>::iterator mbit= MH.GetMainBrainIter(m_team);	    	    m_dest = (*mbit).GetTargetPos(m_pos);	    	    if(m_dest == NoPosition) //mainbrain doesnt know	    {		m_flags.SetFlag(SEARCHING);		m_dest.Random();	    }	    else	    {		m_flags -= SEARCHING;	    }	}	if(IsRenegade())	{	    //m_targetbot = MH.GetRandomBot()->GetMe();	}    }    if(m_flags[SEARCHING] && !IsRenegade())    {	std::list<MainBrain>::iterator mbit = MH.GetMainBrainIter(m_team);		if(!m_team) return;		Position tpos = (*mbit).GetTargetPos(m_pos);	if(tpos != NoPosition)	{	    m_dest = tpos;	    m_flags -= SEARCHING;	}    }

	if(m_dest == NoPosition)
	{
		m_flags.SetFlag(SEARCHING);
		m_dest.Random();
	}}bool BugBot::MoveToDest(){        Position tmp;    Pixel Location;    vector<Pixel> Points;        Location.Location = m_pos;    Location.DistToDest = DistPTP(m_pos, m_dest);        tmp = m_pos;        tmp.x++;    if(tmp.x < SCREENWIDTH && tmp.y < SCREENHEIGHT && tmp.x > 0 && tmp.y >0)    {	Points.push_back(Pixel(tmp, DistPTP(m_dest, tmp)));    }    tmp.x--;        tmp.x--;    if(tmp.x < SCREENWIDTH && tmp.y < SCREENHEIGHT && tmp.x > 0 && tmp.y >0)    {	Points.push_back(Pixel(tmp, DistPTP(m_dest, tmp)));    }    tmp.x++;        tmp.y++;    if(tmp.x < SCREENWIDTH && tmp.y < SCREENHEIGHT && tmp.x > 0 && tmp.y >0)    {	Points.push_back(Pixel(tmp, DistPTP(m_dest, tmp)));    }    tmp.y--;        tmp.y--;    if(tmp.x < SCREENWIDTH && tmp.y < SCREENHEIGHT && tmp.x > 0 && tmp.y >0)    {	Points.push_back(Pixel(tmp, DistPTP(m_dest, tmp)));    }    tmp.y++;        sort(Points.begin(),Points.end());        for(int i = 0; i < Points.size(); i++ )    {	if(!IsCorpse())	{	    if( Move(Points[i].Location) )	    {		if( Points[i] > Location ) // we moved away from our target.		{		    m_avoids.push_back(Avoid( Location.Location, AvoidLength ) );		}		if(MH.IsOccupiedByItem(Points[i].Location))		{		    ItemInPath(Points[i].Location);		}		break;	    }	}	else	{	    break;	}    }    if(HasItem())    {	if(!m_item.bot)	{	    (*MH.GetFoodIter(m_item.vnum)).SetPos(m_pos,true);	    	}	else	{	    std::list<BugBot>::iterator it = MH.GetBugBotIter(m_item.vnum);	    if( it == 0 )	    {		std::cout << "MoveToDest() Bad item vnum:" << m_item.vnum << endl;	    }	    else	    {		(*it).SetPos(m_pos,true);	    }	}    }    if(IsCorpse())    {	return false;    }    else    {	return true;    }}bool BugBot::Move(Position pos){    if(pos.x < 0 || pos.x > SCREENWIDTH || pos.y < 0 || pos.y > SCREENHEIGHT)    {	return false;    }    for(std::vector<Avoid>::iterator i = m_avoids.begin();i != m_avoids.end();i++)    {	if( (*i).Location == pos )	{	    return false;	}    }

	if(MH.IsOccupiedByCorpse(pos) && HasItem() && m_item.bot)
	{
		m_avoids.push_back(Avoid(pos, AvoidLength));
		return false;
	}
    if(MH.IsOccupiedByBugBot(pos))    {	if(BotInPath(pos))	{	    return false;	}    }    if(!IsCorpse())    {		SetPos(pos,true); // WOOP		return true;    }    else    {		return false;    }}bool BugBot::BotInPath(Position pos){    const bool can = IsCannibal();    const bool ren = IsRenegade();    const bool food = HasItem();    const bool hungry = IsHungry();    const bool starving = IsStarving();    const std::list<BugBot>::iterator BotIt = MH.GetBugBotAt(pos);        //if(!BotIt) return false;        const bool SameTeam = (m_team == (*BotIt).GetTeam());        if(BotIt == 0)    {	return false;    }        if(IsCorpse())    {	return true;    }    if(SameTeam)    {	if(!ren)	{	    return true;	}	else	{

	    if(Attack((*BotIt).GetMe()))	    {		if(starving || (can && hungry))		{		    Eat(Item((*BotIt).GetMe(),true));		}		return false;	    }	}    }    else    {	if(Attack((*BotIt).GetMe()))	{	    if(starving || (can && hungry))	    {		Eat(Item((*BotIt).GetMe(),true));	    }	    return false;	}    }    return true;}void BugBot::ItemInPath(Position pos){    std::list<Food>::iterator food = MH.GetFoodAt(pos);    std::list<BugBot>::iterator corpse = MH.GetCorpseAt(pos);        if(food != 0)//food in path    {		if(!IsRenegade())		{			std::list<MainBrain>::iterator mbit = MH.GetMainBrainIter(m_team);	    			if(mbit!=0)			(*mbit).ReportFood((*food).GetMe());		}		if(HasItem())		{			return;		}		if(IsHungry() || IsStarving())		{			Eat(Item((*food).GetMe(),false));			return;		}		else		{			if(!(m_flags.IsSet(SEARCHING)) && (m_dest != pos))			{				return;			}			PickUp(Item((*food).GetMe(),false));		}    }    if(corpse != 0 && !(*corpse).IsCarried())//corpse    {		if(HasItem() && (m_item.bot==false) )		{						if(!MH.IsOccupiedByFood(pos))			{			DropItem();			PickUp(Item((*corpse).GetMe(),true));			}			return;		}		if(HasItem())		{			if(!IsRenegade())			{			std::list<MainBrain>::iterator mbit = MH.GetMainBrainIter(m_team);						if(mbit!=0)				(*mbit).ReportCorpse((*corpse).GetMe());			}			return;		}		if(IsStarving() || (IsHungry() && IsCannibal()))		{			Eat(Item((*corpse).GetMe(),true));			return;		}		if(!(m_flags.IsSet(SEARCHING)) && (m_dest != pos))		{			if(!IsRenegade())			{			std::list<MainBrain>::iterator mbit = MH.GetMainBrainIter(m_team);						if(mbit!=0)				(*mbit).ReportCorpse((*corpse).GetMe());			}			return;		}
		if(!HasItem())		PickUp(Item((*corpse).GetMe(),true));	}}void BugBot::AreaScan(){    std::vector<Item> Objects;    std::vector<int> Food;    std::vector<int> BotSameTeam;    std::vector<int> BotDifferentTeam;    std::vector<int> Corpse;        Objects = Radar();        if(!Objects.empty())    {	for(std::vector<Item>::iterator i = Objects.begin(); i != Objects.end(); i++)	{	    if((*i).bot && MH.GetBugBotIter((*i).vnum) != 0)	    {			if( (*MH.GetBugBotIter((*i).vnum)).IsCorpse() && !(MH.GetBugBotIter(i->vnum)->GetFlags().IsSet(CARRIED)))			{				Corpse.push_back((*i).vnum);			}			else if((*MH.GetBugBotIter((*i).vnum)).GetTeam() == m_team)			{				BotSameTeam.push_back((*i).vnum);			}			else			{				BotDifferentTeam.push_back((*i).vnum);			}	    }	    else	    {			if((*MH.GetFoodIter((*i).vnum)).GetClump() != -2)			{				Food.push_back((*i).vnum);			}	    }	}	if(!Corpse.empty())	{	    for(std::vector<int>::iterator i = Corpse.begin(); i != Corpse.end(); i++)	    {		(*MH.GetMainBrainIter(m_team)).ReportCorpse(*i);	    }	    if(!HasItem() && m_flags[SEARCHING])	    {		std::vector<Pixel> CorpseSpots;		Position tmp;		for(std::vector<int>::iterator i = Corpse.begin(); i != Corpse.end(); i++)		{		    std::list<BugBot>::iterator it = MH.GetBugBotIter(*i);		    if( it == 0 )		    {			//std::cout << "AreaScan, Bad corpse" << endl;		    }		    else		    {			tmp = (*it).GetPos();			CorpseSpots.push_back(Pixel(tmp, DistPTP(tmp, m_pos)));		    }		}		std::sort(CorpseSpots.begin(), CorpseSpots.end());		std::vector<Pixel>::iterator vi = CorpseSpots.begin();		m_dest = (*vi).Location;
		m_flags -= SEARCHING; // VLOOP	    }	}	if(!Food.empty())	{	    for(std::vector<int>::iterator i = Food.begin(); i != Food.end(); i++)	    {		(*MH.GetMainBrainIter(m_team)).ReportFood(*i);	    }	    if(m_item.vnum == -1 && m_flags[SEARCHING])	    {		std::vector<Pixel> FoodSpots;		Position tmp;		for(std::vector<int>::iterator i = Food.begin(); i != Food.end(); i++)		{		    tmp = (*MH.GetFoodIter(*i)).GetPos();		    FoodSpots.push_back(Pixel(tmp, DistPTP(tmp, m_pos)));		}		std::sort(FoodSpots.begin(), FoodSpots.end());		std::vector<Pixel>::iterator vi2 = FoodSpots.begin();		m_dest = (*vi2).Location;
		m_flags -= SEARCHING; //VLOOP	    }	}	if(!BotSameTeam.empty())	{	    Position tmp;	    std::vector<Pixel> BotPos;	    if(m_flags[RENEGADE])	    {			for(std::vector<int>::iterator i = BotSameTeam.begin(); i != BotSameTeam.end(); i++)			{		   // tmp = (MH->GetMainBrainIter(*i))->GetPos();
				tmp = (MH.GetBugBotIter(*i))->GetPos();
				if(MH.GetBugBotAt(tmp) == 0 )

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合咪咪久久| 国产精品一二三区| 99国产精品国产精品毛片| 欧美国产精品专区| 国产精品99久久久久久似苏梦涵| 精品国产欧美一区二区| 韩国在线一区二区| 久久久九九九九| 成人黄动漫网站免费app| 国产精品福利电影一区二区三区四区| 99久久精品免费看国产免费软件| 亚洲欧美日韩国产综合在线| 欧美亚洲动漫精品| 久久精品国产精品亚洲红杏| 久久精品综合网| 色综合久久久久综合99| 亚洲aⅴ怡春院| 精品国产电影一区二区| 成人av在线资源网| 亚洲777理论| 久久蜜桃一区二区| 色噜噜久久综合| 爽好多水快深点欧美视频| 亚洲黄色小视频| 91久久线看在观草草青青| 午夜私人影院久久久久| 久久综合一区二区| 91久久人澡人人添人人爽欧美 | 精品国产人成亚洲区| 福利一区福利二区| 视频一区国产视频| 国产网红主播福利一区二区| 在线观看免费视频综合| 极品美女销魂一区二区三区| 亚洲欧美另类综合偷拍| 欧美tk—视频vk| 色菇凉天天综合网| 美女视频黄a大片欧美| 国产精品欧美一区二区三区| 欧美三片在线视频观看| 国产精品一二三四| 日韩不卡手机在线v区| 日本一区二区动态图| 51久久夜色精品国产麻豆| 成人视屏免费看| 日韩二区三区在线观看| 中文字幕色av一区二区三区| 黄页视频在线91| 一区二区激情小说| 中文字幕第一区综合| 欧美一区二区在线看| 亚洲成a人片在线不卡一二三区| 久久久久久久久久久久久女国产乱| 色成年激情久久综合| 国产精品一二三四区| 理论片日本一区| 性感美女极品91精品| 国产精品国产a| 久久久噜噜噜久久人人看| 欧美精品黑人性xxxx| 91国偷自产一区二区三区成为亚洲经典| 国产麻豆精品一区二区| 免费成人av在线| 亚洲线精品一区二区三区| 国产精品三级久久久久三级| 久久网这里都是精品| 在线综合+亚洲+欧美中文字幕| 一本大道久久a久久精二百| 处破女av一区二区| 国内精品第一页| 激情综合五月天| 久久av老司机精品网站导航| 日本成人在线视频网站| 亚洲444eee在线观看| 洋洋av久久久久久久一区| 亚洲柠檬福利资源导航| 亚洲欧美日韩在线| 亚洲免费观看视频| 亚洲黄色小视频| 亚洲影院理伦片| 亚洲电影激情视频网站| 亚洲第一狼人社区| 日本在线不卡视频| 日韩精品国产精品| 蓝色福利精品导航| 美女一区二区三区在线观看| 日韩高清不卡在线| 奇米精品一区二区三区四区| 日本亚洲最大的色成网站www| 亚洲国产成人porn| 日韩成人一区二区| 精品中文av资源站在线观看| 国产一区二区主播在线| 国产精品99久久久久| 成av人片一区二区| 欧美在线色视频| 欧美剧情片在线观看| 久久久99精品久久| 亚洲国产成人自拍| 亚洲一区二区三区四区在线免费观看| 一区二区三区四区在线| 日韩高清一区二区| 国产精品一区二区在线观看网站 | 2021久久国产精品不只是精品| 欧美一区二区播放| 国产亚洲综合色| 国产精品久久福利| 免费观看30秒视频久久| 北条麻妃一区二区三区| 韩国中文字幕2020精品| 亚洲福利国产精品| 日韩精品亚洲专区| 国产在线一区二区| 91免费看片在线观看| 欧美一区欧美二区| 亚洲国产精品精华液2区45| 亚洲精品视频在线| 美女看a上一区| 91麻豆成人久久精品二区三区| 欧美色国产精品| 久久精品亚洲精品国产欧美| 亚洲黄色免费网站| 国产麻豆精品theporn| 日本精品视频一区二区三区| 日韩一区二区三区av| 中文字幕一区二区三区在线不卡| 婷婷中文字幕综合| gogogo免费视频观看亚洲一| 在线播放亚洲一区| 亚洲天堂福利av| 国产制服丝袜一区| 在线电影欧美成精品| 国产精品灌醉下药二区| 精品系列免费在线观看| 亚洲午夜影视影院在线观看| 国产精品91xxx| 91精品婷婷国产综合久久竹菊| 国产精品―色哟哟| 久久激情五月婷婷| 奇米影视一区二区三区| 一本一本大道香蕉久在线精品 | 高清免费成人av| 欧美人与禽zozo性伦| 国产精品灌醉下药二区| jiyouzz国产精品久久| 日韩欧美你懂的| 亚洲第四色夜色| 色av成人天堂桃色av| 国产精品无人区| 国产一区二区福利视频| 日韩午夜中文字幕| 午夜欧美电影在线观看| 色综合天天综合网天天狠天天 | 国产精品毛片高清在线完整版| 亚洲mv在线观看| 欧洲精品一区二区| 欧美日韩一区二区三区免费看| 国产精品成人免费在线| 成人午夜看片网址| 久久综合成人精品亚洲另类欧美| 免费成人在线播放| 日韩一区二区在线播放| 午夜不卡av在线| 在线成人免费视频| 日本欧美一区二区在线观看| 欧美精品1区2区| 日韩在线卡一卡二| 欧美一级淫片007| 日本亚洲天堂网| 日韩欧美黄色影院| 极品瑜伽女神91| 久久蜜桃av一区精品变态类天堂| 国产精品视频一二三| 成人h版在线观看| 中文字幕中文字幕一区| 99精品久久久久久| 亚洲免费在线电影| 欧美在线视频全部完| 午夜精品福利一区二区三区蜜桃| 欧美日韩精品一区二区三区| 婷婷综合另类小说色区| 日韩三级精品电影久久久 | 国产日韩v精品一区二区| 国产精品综合在线视频| 亚洲国产精品黑人久久久| av亚洲精华国产精华精华| 中文字幕日韩一区| 欧美日韩小视频| 久久久久久久久伊人| 成人av网站在线观看免费| 亚洲欧美电影院| 欧美色偷偷大香| 久久国产三级精品| 亚洲国产精品传媒在线观看| 91论坛在线播放| 日本欧洲一区二区| 国产精品视频第一区| 欧美日韩一级片在线观看| 麻豆一区二区在线| 国产精品久久久一本精品|