2024年最新面向对象完成小游戏贪吃蛇,2024年最新面试培训班有必要吗

总结:

  • 函数式编程其实是一种编程思想,它追求更细的粒度,将应用拆分成一组组极小的单元函数,组合调用操作数据流;

  • 它提倡着 纯函数 / 函数复合 / 数据不可变, 谨慎对待函数内的 状态共享 / 依赖外部 / 副作用;

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

Tips:

其实我们很难也不需要在面试过程中去完美地阐述出整套思想,这里也只是浅尝辄止,一些个人理解而已。博主也是初级小菜鸟,停留在表面而已,只求对大家能有所帮助,轻喷🤣;

我个人觉得: 这些编程范式之间,其实并不矛盾,各有各的 优劣势

理解和学习它们的理念与优势,合理地 设计融合,将优秀的软件编程思想用于提升我们应用;

所有设计思想,最终的目标一定是使我们的应用更加 解耦颗粒化、易拓展、易测试、高复用,开发更为高效和安全

  1. move 移动蛇

  2. eatFood 吃食物

Document

Game 游戏类 - 控制器

========================================================================

  1. start 开始游戏

  2. stop 暂停游戏

  3. isOver 判断是否结束

  4. control 游戏控制器

Document

0

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个基本的贪吃游戏的代码示例,代码如下所示: ```c++ #include <iostream> #include <conio.h> #include <windows.h> #include <deque> using namespace std; const int width = 25; // 游戏界面宽度 const int height = 25; // 游戏界面高度 // 枚举类型,表示方向 enum Direction { STOP = 0, LEFT, RIGHT, UP, DOWN }; class Snake { private: deque<pair<int, int>> body; // 的身体,使用deque实现 Direction dir; // 的运动方向 public: Snake() { // 初始化的位置和方向 body.push_back(make_pair(height / 2, width / 2)); dir = STOP; } // 获取头的坐标 pair<int, int> getHead() { return body.front(); } // 获取的身体 deque<pair<int, int>> getBody() { return body; } // 获取的长度 int getLength() { return body.size(); } // 设置的运动方向 void setDirection(Direction d) { dir = d; } // 移动 void move() { // 根据方向移动头 int x = body.front().first; int y = body.front().second; switch (dir) { case LEFT: y--; break; case RIGHT: y++; break; case UP: x--; break; case DOWN: x++; break; default: break; } // 将新的头位置加入到队列头 body.push_front(make_pair(x, y)); // 删除队列尾,实现的移动 body.pop_back(); } // 增加的长度 void grow() { // 在队列尾增加一个元素 body.push_back(body.back()); } }; class Game { private: int score; // 得分 int speed; // 游戏速度 bool gameOver; // 游戏是否结束 Snake snake; // pair<int, int> food; // 食物的位置 public: Game() { score = 0; speed = 100; gameOver = false; // 随机生成食物的位置 srand((unsigned)time(NULL)); food.first = rand() % height; food.second = rand() % width; } // 显示游戏界面 void display() { system("cls"); // 打印游戏界面 for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { if (j == 0) cout << "#"; // 判断当前位置是否为头 if (i == snake.getHead().first && j == snake.getHead().second) cout << "O"; // 判断当前位置是否为身体 else if (find(snake.getBody().begin(), snake.getBody().end(), make_pair(i, j)) != snake.getBody().end()) cout << "o"; // 判断当前位置是否为食物 else if (i == food.first && j == food.second) cout << "F"; else cout << " "; if (j == width - 1) cout << "#"; } cout << endl; } for (int i = 0; i < width + 2; i++) cout << "#"; cout << endl; // 打印得分和速度 cout << "Score: " << score << endl; cout << "Speed: " << speed << endl; } // 处理键盘输入 void handleInput() { if (_kbhit()) { switch (_getch()) { case 'a': snake.setDirection(LEFT); break; case 'd': snake.setDirection(RIGHT); break; case 'w': snake.setDirection(UP); break; case 's': snake.setDirection(DOWN); break; case 'x': gameOver = true; break; default: break; } } } // 更新游戏状态 void update() { // 移动 snake.move(); // 判断是否吃到食物 if (snake.getHead() == food) { // 增加得分 score++; // 增加的长度 snake.grow(); // 重新生成食物的位置 food.first = rand() % height; food.second = rand() % width; } // 判断是否撞到墙或自身 if (snake.getHead().first < 0 || snake.getHead().first >= height || snake.getHead().second < 0 || snake.getHead().second >= width || find(snake.getBody().begin() + 1, snake.getBody().end(), snake.getHead()) != snake.getBody().end()) { gameOver = true; } // 根据得分调整游戏速度 if (score < 10) speed = 100; else if (score < 20) speed = 80; else if (score < 30) speed = 60; else if (score < 40) speed = 40; else speed = 20; // 暂停一段时间,实现游戏速度 Sleep(speed); } // 运行游戏 void run() { while (!gameOver) { display(); handleInput(); update(); } cout << "Game Over!" << endl; } }; int main() { Game game; game.run(); return 0; } ``` 这个代码中使用了面向对象的思想,将游戏分别封装成了一个类。其中,Snake类表示,包括的身体、运动方向、移动、增加长度等操作;Game类表示游戏,包括得分、速度、游戏状态、显示游戏界面、处理键盘输入、更新游戏状态、运行游戏等操作。 在main函数中,创建了一个Game对象,然后调用run方法运行游戏。当游戏结束时,输出"Game Over!"。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值