随机行走

新手上路 大牛勿喷!

  这个是我想写捕鱼达人  然后实验的随机行走的算法  整个代码还很粗糙 只是一个小实验  先写了个 产生随机数的函数random 然后一直利用s=vt在计算 

思路: 冲一个地点 产生目标点 然后自己的位置随着s=vt移动到目标点  自身位置到了目标点 然后在产生目标点 一直循环  只不过在实践过程中发现  判断自身位置到达目标点的判断条件有点难写  但很粗糙的解决了    


#include <cmath>
#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;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值