当前位置: 首页 > news >正文

【c++】超好玩游戏

#include <iostream>
#include <vector>
#include <conio.h>
#include <windows.h>
#include <time.h>using namespace std;// 游戏常量
const int WIDTH = 40;
const int HEIGHT = 20;
const int PADDLE_WIDTH = 5;// 方向枚举
enum Direction { STOP = 0, LEFT, RIGHT };class BreakoutGame {
private:int ballX, ballY;       // 球的位置int ballDirX, ballDirY; // 球的方向int paddleX;            // 挡板位置int score;              // 分数bool gameOver;          // 游戏结束标志vector<vector<bool>> bricks; // 砖块矩阵public:BreakoutGame() {// 初始化游戏状态resetGame();}// 重置游戏void resetGame() {ballX = WIDTH / 2;ballY = HEIGHT - 5;ballDirX = 1;ballDirY = -1;paddleX = (WIDTH - PADDLE_WIDTH) / 2;score = 0;gameOver = false;// 初始化砖块bricks.resize(5, vector<bool>(WIDTH - 2, true));}// 绘制游戏界面void draw() {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 == ballY && j == ballX)cout << "O";// 绘制挡板else if (i == HEIGHT - 1 && j >= paddleX && j < paddleX + PADDLE_WIDTH)cout << "=";// 绘制砖块else if (i < 5 && j > 0 && j < WIDTH - 1 && bricks[i][j-1])cout << "■";elsecout << " ";if (j == WIDTH - 1)cout << "#"; // 右边界}cout << endl;}// 绘制底部边界for (int i = 0; i < WIDTH + 2; i++)cout << "#";cout << endl;// 显示分数cout << "分数: " << score << endl;if (gameOver) {if (score == (WIDTH - 2) * 5)cout << "恭喜你赢了!按R重新开始,按Q退出" << endl;elsecout << "游戏结束!按R重新开始,按Q退出" << endl;}}// 处理用户输入void input() {if (_kbhit()) {switch (_getch()) {case 'a':if (paddleX > 0)paddleX--;break;case 'd':if (paddleX + PADDLE_WIDTH < WIDTH)paddleX++;break;case 'q':gameOver = true;break;case 'r':resetGame();break;default:break;}}}// 更新游戏状态void update() {if (gameOver) return;// 移动球ballX += ballDirX;ballY += ballDirY;// 检测左右边界碰撞if (ballX <= 0 || ballX >= WIDTH - 1)ballDirX *= -1;// 检测上边界碰撞if (ballY <= 0)ballDirY *= -1;// 检测下边界(游戏结束)if (ballY >= HEIGHT) {gameOver = true;return;}// 检测挡板碰撞if (ballY == HEIGHT - 1 && ballX >= paddleX && ballX < paddleX + PADDLE_WIDTH)ballDirY *= -1;// 检测砖块碰撞if (ballY < 5 && ballY >= 0 && ballX > 0 && ballX < WIDTH - 1) {int brickX = ballX - 1;int brickY = ballY;if (bricks[brickY][brickX]) {bricks[brickY][brickX] = false;score++;ballDirY *= -1;// 检查是否所有砖块都被消除bool allCleared = true;for (int i = 0; i < 5; i++) {for (int j = 0; j < WIDTH - 2; j++) {if (bricks[i][j]) {allCleared = false;break;}}if (!allCleared) break;}if (allCleared)gameOver = true;}}}// 运行游戏主循环void run() {while (!gameOver) {draw();input();update();Sleep(60); // 控制游戏速度}}
};int main() {cout << "简易打砖块游戏" << endl;cout << "使用A和D键移动挡板,Q键退出,R键重新开始" << endl;cout << "按任意键开始游戏..." << endl;_getch();BreakoutGame game;game.run();return 0;
}

                                         结语

                                   希望你也能学会ヾ(◍°∇°◍)ノ゙
                         制作不易,点个赞吧!Thanks♪(・ω・)ノ

http://www.dtcms.com/a/353912.html

相关文章:

  • 一、CSS3 新增选择器(非 “属性”,但为核心基础)
  • day082-初识ElasticStack
  • 路由基础(二):路由表和FIB表
  • Ansible文件管理与Jinja2模板
  • Linux查看SFTP登录不上的问题以及解决
  • 【Simulink专题】Simulink模型:MIL单元测试
  • 宝塔发布ktg-mes
  • vue cli 没使用的图片会被打包吗
  • 2025年08月27日Github流行趋势
  • 怎么更新 cargo.exe ?(Rust 工具链)
  • etcd-基本工作原理及部署
  • react + G2(v4) 应用
  • 【C++游记】模板升级
  • 飞腾 D2000 八核处理器板卡深度解析:全国产化硬件方案与丰富扩展能力
  • Linux中创建SFTP账号
  • Netty:现代网络应用的利器
  • 软件定义汽车(SDV)调试——如何做到 适配软件定义汽车(SDV)?(中)
  • 造作AI-你的人工智能创作助手
  • 某中医院信息化能力提升:智能组网设备助力网络架构优化
  • 【日常学习】2025-8-27 测开框架设计模式探索04
  • Element整体操作样式
  • 数据分析编程第五步:数据准备与整理
  • DDD之事件机制(9)
  • 沃丰科技出海客服系统对接沃尔玛全球电商平台,赋能中企出海
  • 升级DrRacket8.10到8.18版本@Ubuntu24.04
  • GitLab 导入/导出仓库
  • 金融 IT 运维痛点突围:用网络管理工具筑牢业务稳定防线(附 OpManager Plus 实践)
  • 【51单片机按键按下数码管秒增计时并LED亮释放停计时LED熄】2022-11-12
  • Android -第二十一次技术总结
  • 使用LLAMA_cpp_python进行qwen2.5-vl-7b-instruct进行推理