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

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

?? cminesweeper.cpp

?? 開發游戲人工智能的王道書
?? CPP
字號:
#include "CMinesweeper.h"

//-----------------------------------constructor-------------------------
//
//-----------------------------------------------------------------------
CMinesweeper::CMinesweeper():
                             m_dRotation(RandFloat() * CParams::dTwoPi),
                             m_lTrack(0),
                             m_rTrack(0),
                             m_dFitness(0),
							               m_dScale(CParams::iSweeperScale),
                             m_bCollided(false)
                             
			 
{
  //create a static start position
  m_vPosition = SVector2D(180, 200);

   //create the sensors
  CreateSensors(m_Sensors, CParams::iNumSensors, CParams::dSensorRange); 

  //initialize its memory
  m_MemoryMap.Init(CParams::WindowWidth,
                   CParams::WindowHeight);

}


//-------------------------------- CreateSensors ------------------------
//
//	This function returns a vector of points which make up the segments of
//  the sweepers sensors.
//------------------------------------------------------------------------
void CMinesweeper::CreateSensors(vector<SPoint> &sensors,
                                 int            NumSensors,
                                 double         range)
{
  //make sure vector of sensors is empty before proceeding
  sensors.clear();

  double SegmentAngle = CParams::dPi / (NumSensors-1);

	//going clockwise from 90deg left of position calculate the fan of
	//points radiating out (not including the origin)
	for (int i=0; i<CParams::iNumSensors; i++)
	{
		//calculate vertex position
		SPoint point;

    point.x = -sin(i * SegmentAngle - CParams::dHalfPi) * range;

	  point.y = cos(i * SegmentAngle - CParams::dHalfPi) * range;
		
		sensors.push_back(point);
		
	}//next segment

}
//-----------------------------Reset()------------------------------------
//
//	Resets the sweepers position, energy level and rotation
//
//------------------------------------------------------------------------
void CMinesweeper::Reset()
{
	//reset the sweepers positions
	m_vPosition = SVector2D(180, 200);
	
	//and the energy level
	m_dFitness = 0;

  //and the rotation
  m_dRotation = RandFloat() * CParams::dTwoPi;

  //reset its memory
  m_MemoryMap.Reset();

}

//------------------------- RenderMemory ---------------------------------
//
//------------------------------------------------------------------------
void CMinesweeper::Render(HDC surface)
{
  //render the memory
  m_MemoryMap.Render(surface);

  string s = itos(m_MemoryMap.NumCellsVisited());
  s = "Num Cells Visited: " + s;
  TextOut(surface, 230,0,s.c_str(), s.size());

}
//---------------------WorldTransform--------------------------------
//
//	sets up a translation matrix for the sweeper according to its
//  scale, rotation and position. Returns the transformed vertices.
//-------------------------------------------------------------------
void CMinesweeper::WorldTransform(vector<SPoint> &sweeper, double scale)
{
	//create the world transformation matrix
	C2DMatrix matTransform;
	
	//scale
	matTransform.Scale(scale, scale);
	
	//rotate
	matTransform.Rotate(m_dRotation);
	
	//and translate
	matTransform.Translate(m_vPosition.x, m_vPosition.y);
	
	//now transform the ships vertices
	matTransform.TransformSPoints(sweeper);
}

//-------------------------------Update()--------------------------------
//
//	First we take sensor readings and feed these into the sweepers brain.
//
//	The inputs are:
//	
//  The readings from the minesweeper's sensors
//  The readings from the minesweeper's feelers
//  bCollided
//
//	We receive two outputs from the brain.. lTrack & rTrack.
//	So given a force for each track we calculate the resultant rotation 
//	and acceleration and apply to current velocity vector.
//
//-----------------------------------------------------------------------
bool CMinesweeper::Update(vector<SPoint> &objects)
{
	
	//this will store all the inputs for the NN
	vector<double> inputs;	

  //grab sensor readings
  TestSensors(objects);


  //input sensors into net
  for (int sr=0; sr<m_vecdSensors.size(); ++sr)
  {
    inputs.push_back(m_vecdSensors[sr]);

    inputs.push_back(m_vecFeelers[sr]);
  }
	
  inputs.push_back(m_bCollided);
  
	//update the brain and get feedback
	vector<double> output = m_ItsBrain.Update(inputs);

	//make sure there were no errors in calculating the 
	//output
	if (output.size() < CParams::iNumOutputs) 
  {
    return false;
  }

  
	//assign the outputs to the sweepers left & right tracks
	m_lTrack = output[0];
	m_rTrack = output[1];

	//calculate steering forces
	double RotForce = m_lTrack - m_rTrack;

  //clamp rotation
	Clamp(RotForce, -CParams::dMaxTurnRate, CParams::dMaxTurnRate);
	
	m_dRotation += RotForce;

	//update Look At 
	m_vLookAt.x = -sin(m_dRotation);
	m_vLookAt.y = cos(m_dRotation);

  //if the sweepers haven't collided with an obstacle
  //update their position
  if (!m_bCollided)
  {
    m_dSpeed = (m_lTrack + m_rTrack);

   //update position
   m_vPosition += (m_vLookAt * m_dSpeed);
  }

  //update the memory map
  m_MemoryMap.Update(m_vPosition.x, m_vPosition.y);
  
	return true;
}
//----------------------- TestSensors ------------------------------------
//
//  This function checks for any intersections between the sweeper's 
//  sensors and the objects in its environment
//------------------------------------------------------------------------
void CMinesweeper::TestSensors(vector<SPoint> &objects)
{
  m_bCollided = false;  
  
  //first we transform the sensors into world coordinates
  m_tranSensors = m_Sensors;

  WorldTransform(m_tranSensors, 1);  //scale is 1

  //flush the sensors
  m_vecdSensors.clear();
  m_vecFeelers.clear();

  //now to check each sensor against the objects in the world
  for (int sr=0; sr<m_tranSensors.size(); ++sr)
  {
    bool bHit = false;

    double dist = 0;

    for (int seg=0; seg<objects.size(); seg+=2)
    {
      if (LineIntersection2D(SPoint(m_vPosition.x, m_vPosition.y),
                             m_tranSensors[sr],
                             objects[seg],
                             objects[seg+1],
                             dist))
      {
        bHit = true;

        break;        
      }
    }
      
    if (bHit)
    {
      m_vecdSensors.push_back(dist);

      //implement very simple collision detection
      if (dist < CParams::dCollisionDist)
      {
        m_bCollided = true;
      }
    }
    
    else
    {
      m_vecdSensors.push_back(-1);
    } 
    
    //check how many times the minesweeper has visited the cell
    //at the current position
    int HowOften = m_MemoryMap.TicksLingered(m_tranSensors[sr].x,
                                             m_tranSensors[sr].y);

    
    //Update the memory info according to HowOften. The maximum
    //value is 1 (because we want all the inputs into the
    //ANN to be scaled between -1 < n < 1)
    if (HowOften == 0)
    {
      m_vecFeelers.push_back(-1);

      continue;
    }
    
    if (HowOften < 10) 
    {
      m_vecFeelers.push_back(0);

      continue;
    }

    if (HowOften < 20)
    {
      m_vecFeelers.push_back(0.2);

      continue;
    }

    if (HowOften < 30)
    {
      m_vecFeelers.push_back(0.4);

      continue;
    }

    if (HowOften < 50)
    {
      m_vecFeelers.push_back(0.6);

      continue;
    }

    if (HowOften < 80) 
    {
      m_vecFeelers.push_back(0.8);

      continue;
    }

     m_vecFeelers.push_back(1);   

  }//next sensor
}

//------------------------- EndOfRunCalculations() -----------------------
//
//------------------------------------------------------------------------
void CMinesweeper::EndOfRunCalculations()
{
  m_dFitness += m_MemoryMap.NumCellsVisited();
}




		

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
狠狠色丁香久久婷婷综合_中| 欧美视频完全免费看| 国内成人自拍视频| 日韩va亚洲va欧美va久久| 亚洲欧美在线观看| 亚洲精品免费在线| 亚洲最大成人网4388xx| 一区二区三区欧美| 亚洲在线视频一区| 日韩激情在线观看| 色丁香久综合在线久综合在线观看 | 99re这里只有精品首页| 国产在线观看免费一区| 蜜桃视频在线一区| 美女免费视频一区二区| 韩国成人福利片在线播放| 国产精品中文字幕一区二区三区| 国产一区二区导航在线播放| 懂色av一区二区三区蜜臀| 99久久国产综合色|国产精品| 91老师片黄在线观看| 欧美视频在线观看一区二区| 日韩女优毛片在线| 欧美激情综合在线| 视频一区国产视频| 日韩在线卡一卡二| 色狠狠色狠狠综合| 91网站视频在线观看| 国产一区 二区 三区一级| 国产在线观看一区二区| 6080日韩午夜伦伦午夜伦| 天堂一区二区在线免费观看| 欧美一区二区三区视频在线观看| 国产福利一区在线| 91在线高清观看| 欧美吞精做爰啪啪高潮| 精品va天堂亚洲国产| 亚洲色图制服诱惑 | 成人免费不卡视频| 欧美日韩一区二区三区在线看 | 精品一区二区三区欧美| 成熟亚洲日本毛茸茸凸凹| 欧洲av一区二区嗯嗯嗯啊| 精品国产污网站| 国产精品理论片| 日本午夜一区二区| 成人激情黄色小说| 日韩一区二区电影网| 亚洲欧洲成人精品av97| 日韩精品电影一区亚洲| 在线免费观看日本欧美| 国产农村妇女毛片精品久久麻豆| 丝袜a∨在线一区二区三区不卡| 成人永久看片免费视频天堂| 在线观看免费一区| 综合久久给合久久狠狠狠97色 | 久久久九九九九| 亚洲国产成人精品视频| 国产·精品毛片| 91精品午夜视频| 亚洲女人的天堂| 久久精工是国产品牌吗| 在线视频一区二区免费| 国产欧美一二三区| 免费在线看成人av| 日本韩国一区二区三区视频| 国产精品区一区二区三区| 视频一区二区三区入口| 色偷偷久久一区二区三区| 国产欧美日本一区二区三区| 免费人成精品欧美精品| 欧美日韩一区二区不卡| 亚洲免费在线视频一区 二区| 成人永久免费视频| 欧美精品一区二区三区蜜桃视频| 亚洲va中文字幕| 色8久久精品久久久久久蜜| 国产精品理伦片| 久久99精品国产麻豆婷婷| 欧美日韩国产影片| 一区二区免费视频| 成人国产在线观看| 久久网站热最新地址| 日韩黄色免费网站| 欧美亚洲国产一区在线观看网站| 亚洲欧美福利一区二区| 粉嫩av一区二区三区| 久久久精品天堂| 麻豆91在线观看| 91精品国产综合久久香蕉的特点| 一区二区三区四区中文字幕| 99久久婷婷国产综合精品电影| 国产精品久久久久久一区二区三区| 韩国av一区二区三区在线观看| 欧美一区二区三区视频免费播放| 一区二区三区四区乱视频| 成人动漫在线一区| 久久久久久夜精品精品免费| 国产一区在线视频| 日韩欧美在线网站| 青青草91视频| 日韩精品自拍偷拍| 国产美女娇喘av呻吟久久| 久久综合视频网| 国产乱码精品一区二区三区忘忧草 | 国产人伦精品一区二区| 国产成人在线视频播放| 亚洲国产电影在线观看| 国产盗摄精品一区二区三区在线| 国产日韩欧美综合在线| 成人性生交大片免费看中文网站| 国产欧美一二三区| 91久久精品一区二区三区| 椎名由奈av一区二区三区| av综合在线播放| 国产亚洲精品资源在线26u| 国产美女一区二区三区| 久久久蜜桃精品| 成人99免费视频| 国产精品理论片在线观看| 91在线播放网址| 自拍偷在线精品自拍偷无码专区| 欧美午夜精品久久久久久超碰| 亚洲午夜一区二区| 欧美精品高清视频| 国产在线国偷精品产拍免费yy| 国产精品高潮呻吟久久| 欧美日本国产一区| 韩国成人在线视频| 亚洲美女屁股眼交3| 欧美日韩国产不卡| 免费久久99精品国产| 欧美激情一区二区在线| 色综合色综合色综合色综合色综合 | 国产69精品久久久久毛片| 亚洲一二三区在线观看| 2欧美一区二区三区在线观看视频| 风间由美中文字幕在线看视频国产欧美| 国产清纯美女被跳蛋高潮一区二区久久w| 91丨porny丨蝌蚪视频| 午夜精品久久久久影视| 久久久久久久久久久久电影| 91网站在线播放| 男人的天堂久久精品| 1区2区3区国产精品| 欧美日韩国产片| 成人综合婷婷国产精品久久蜜臀| 亚洲成人在线观看视频| 久久精品视频在线看| 91捆绑美女网站| 久久精品国产一区二区三区免费看| 在线免费精品视频| 欧美一区日韩一区| 中文字幕一区二区三区四区| 婷婷丁香激情综合| 成人a级免费电影| 久久免费的精品国产v∧| 一二三四区精品视频| 成人av在线观| 日韩精品中文字幕一区| 一区二区三区美女| 国产精品99久久久久久有的能看| 一本一道综合狠狠老| 亚洲精品在线三区| 亚洲bt欧美bt精品| 色综合久久久网| 精品乱人伦小说| 五月天亚洲婷婷| 91免费看片在线观看| 久久综合久久综合久久综合| 五月婷婷另类国产| 国产高清久久久久| 亚洲卡通欧美制服中文| www.日韩av| 91精品免费在线| 久久久精品中文字幕麻豆发布| 亚洲国产综合人成综合网站| 99视频在线观看一区三区| 久久综合99re88久久爱| 成人美女视频在线看| 国产成人精品aa毛片| 天堂影院一区二区| 欧美久久一二三四区| 日本大香伊一区二区三区| 国产一区二区导航在线播放| 天天影视涩香欲综合网| 一区二区三区四区中文字幕| 中文字幕不卡的av| 日韩欧美自拍偷拍| 日韩三级伦理片妻子的秘密按摩| 欧美精品色综合| 91麻豆国产在线观看| 成人av影院在线| 国产老肥熟一区二区三区| 久久av老司机精品网站导航| 日韩中文字幕不卡| 亚洲高清在线视频| 一区二区三区日韩欧美| 国产精品国产馆在线真实露脸| 国产欧美日韩三级|