GreedySnake:2020.6.19第三次更新及踩坑

参考:https://github.com/silence1772/GreedySnake
个人github:https://github.com/okJiang/GreedySnake

更新:

  • 实现了food.h类:随机生成一个food
  • 实现了snakefood的操作,吃掉之后snake长度+1,并重新生成一个food
  • 实现了map.h类:一个简易的地图边框,正在用set实现蛇撞墙结束游戏的功能

踩坑:

  • 构造/析构函数声明了必须要实现,大括号内为空也行。

  • 不对类成员元素造成改变的函数,最好在声明的小括号后面/实现的大括号前面加上const,例如下面,

  // Point.h中
  void Clear() const;
  int getx() const;
  int gety() const;
  void ChangePosition(const int x, const int y);
  void Print(std::string s);
  
  void Print(std::string s) const;
  bool operator==(const Point& p) const;
  bool operator<(const Point& p) const;
  virtual ~Point();
  
  // Point.cpp中
  bool Point::operator==(const Point& p) const
  {
      return (p.getx() == x)&&(p.gety() == y);
  }
  int Point::gety() const
  {
      return y;
  }
  int Point::getx() const
  {
      return x;
  }

不然可能会出现类似的错误

passing ‘const *’ as ‘this’ argument of ‘*’ discards qualifiers

这种错误是指该变量是const的,在下面的变量的使用中,所有涉及到的该变量的函数,也要是const的,避免函数改变那个变量。例如:

  std::set<Point> p(1,1);
  for(auto& i: p)		//这里用auto取出来的i,就是const的
  {
  	i.gety();		//所以这里使用到的gety(),也就必须是const的,不然报错
  }					//这个for循环中使用到的所有i的函数,都要是const的,像上面的gety()一样
  • 在使用自己定义的类的set的时候,需要重载运算符<

  • 在本文件使用其他文件的全局变量时,需要在本文件中用extern声明一次

  • 如果在snake.h类中,有函数要传递class food的参数,则要在class snake:前对food声明一次,不需要#include "food.h"

总结

  • 其实很多东西在书上都学过,但是用起来还是漏洞百出

  • 成果

    在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值