新手上路 大牛勿喷!
这个是我想写捕鱼达人 然后实验的随机行走的算法 整个代码还很粗糙 只是一个小实验 先写了个 产生随机数的函数random 然后一直利用s=vt在计算
思路: 冲一个地点 产生目标点 然后自己的位置随着s=vt移动到目标点 自身位置到了目标点 然后在产生目标点 一直循环 只不过在实践过程中发现 判断自身位置到达目标点的判断条件有点难写 但很粗糙的解决了
#include <ctime>
#include <string>
#include <cstdlib>
#include <iostream>
using namespace std;
//自制随见函数 产生一个0到参数的函数int random(int c)
{
while(true)
{
int a=rand();
if (a<c&&a!=0)
{
return a;
}
}
}
//点类
class point
{
public:
double x;
double y;
point(double xx,double yy){x=xx;y=yy;}
};
int main()
{
bool flag=true;
point mypos=point(0,0);
int speed=2;
bool xflag;
bool yflag;
while(true)
{
double x=random(1000);
double y=random(1000);
point targetpos=point(x+mypos.x,y+mypos.y);
cout<<"mypos.x:"<<mypos.x<<"mypos.y"<<mypos.y<<endl;
cout<<"targetpos.x"<<targetpos.x<<"targetpos.y"<<targetpos.y<<endl;
double xmove;
double ymove;
if(targetpos.y-mypos.y!=0&&targetpos.x-mypos.x!=0)
{
double S_tan=(double)(targetpos.y-mypos.y)/(targetpos.x-mypos.x);
xmove=speed/sqrt(S_tan*S_tan+1);
ymove=abs(S_tan*xmove);
cout<<S_tan<<"y:"<<(targetpos.y-mypos.y)<<"x:"<<(targetpos.x-mypos.x)<<endl;
}
else if(targetpos.y-mypos.y==0)
{
xmove=2;
ymove=0;
}
else if(targetpos.x-mypos.x==0)
{
xmove=0;
ymove=2;
}
time_t start=clock();
while(flag=true)
{
if((clock()-start)>100)
{
if(targetpos.x-mypos.x>0)
{
mypos.x=mypos.x+xmove;
}
else
{
mypos.x=mypos.x-xmove;
}
if(targetpos.y-mypos.y>0)
{
mypos.y=mypos.y+ymove;
}
else
{
mypos.y=mypos.y-ymove;
}
cout<<mypos.x<<endl;
cout<<"x:"<<(int)mypos.x<<"Y:"<<mypos.y<<endl;
//这个地方判断 最先开始完全没有想过很麻烦 但是到实践的时候这个地方 会发现很多的问题 这个是我用粗糙的方式解决的代码
if(((targetpos.x-1)<=mypos.x&&mypos.x<=(targetpos.x+1))&&((targetpos.y-1)<=mypos.y&&mypos.y<=(targetpos.y+1)))
{
break;
}
start=clock();
}
}
mypos=targetpos;
}
return 0;
}