C++实现童年游戏

 其中多处坐标的代码是经过运算移项推导出的

#include<easyx.h>
#include<conio.h>
#include<time.h>
#include<stdio.h>
bool Timer(int id, int ms)//计时器,过了多少毫秒就会返回真
{static long start[3] = { 0 };long last = clock();if (last - start[id] >= ms){start[id] = last;return true;}else return false;
}
void fail()
{settextstyle(600, 0, 0);settextcolor(RED);outtextxy(800, 500, "你死了!");EndBatchDraw();_getch();
}
class Car {
public:short x, y;COLORREF color;void isHit(short objx, short objy){if (!(x > objx + 65 || x + 65 < objx || 715 > objy || 885 < objy))fail();}void show(){setfillcolor(color);solidcircle(x + 10, y + 10, 10);solidcircle(x + 55, y + 10, 10);solidrectangle(x + 20, y + 20, x + 45, y + 65);solidcircle(x + 10, y + 75, 10);solidcircle(x + 55, y + 75, 10);//长度65,宽度85}};class Npc :public Car
{
public:bool isLive = false;static Npc* p;static int* a;bool overLap(int j){for (int i = 0; i < 6; i++){if (i == j || p[i].isLive == false)continue;if (!(x > p[i].x + 65 || x + 65 < p[i].x || 86 < p[i].y))return true;}return false;}static void loop(Car*player,int j) {for (int i = 0; i < 6; i++){int c = 0;if (p[i].isLive == false && rand() % 100 == 0){short n1 = a[j], n2 = a[j + 1 > 53 ? 0 : j + 1], n3 = a[j + 2 > 53 ? j - 52 : 2], length;short max = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;short min = (n1 < n2 ? n1 : n2) < n3 ? (n1 < n2 ? n1 : n2) : n3;length = min + 835 - max;//max-min+900-65,算出车辆x坐标可出现的变动值do { p[i].x = rand() % length + 10 + max; }//随机偏移量加上最右边的道路方块起始坐标while (p[i].overLap(i) && c++ < 1000);p[i].isLive = true;p[i].y = 1;p[i].color = RGB(rand() % 200 + 56, rand() % 200 + 56, rand() % 200 + 56);}}for (int i = 0; i < 6; i++){if (p[i].isLive){if (p[i].y >= 1080)p[i].isLive = false;p[i].y += 20;p[i].show();player->isHit(p[i].x, p[i].y);//判断有没有撞击敌机}}}
};
Npc* Npc::p = 0;
int* Npc::a = 0;
int main()
{short a[54] = { 0 };//道路两旁横坐标数组,为了生成蜿蜒曲折的路,用数组模拟双向循环链表short dire = 0, lastdire = 0, c = 0, t = 30, change = 0, behind = 0, j = 0, metre = 0;//c为道路绵延相同方向的次数ExMessage ex = { 0 }; bool mouseclick = 0; char str[128];Car player;player.x = 500, player.y = 800, player.color = RGB(0, 255, 255);Npc npc[6];Npc::p = npc;srand(time(0));//车路宽度为920initgraph(1920, 1080);setbkmode(TRANSPARENT);settextstyle(100, 0, 0);settextcolor(GREEN);_getch();while (1){if (peekmessage(&ex, EX_MOUSE))//监听鼠标事件{switch (ex.message){case WM_LBUTTONDOWN:if (ex.x > player.x && ex.x < player.x + 45)mouseclick = 1;break;case WM_LBUTTONUP:mouseclick = 0;}if (mouseclick)//只有拖拽不放才能移动,不能单击任意位置实现瞬移player.x = ex.x - 22;}if (Timer(1, 3000) && t > 5)t--;if (Timer(2, t * 4)){metre++;sprintf_s(str, "%d米", metre);}if (Timer(0, t)){BeginBatchDraw();cleardevice();int color = 255;for (int i = 0; i < 54; i++){int index, x;if (j + i > 53)index = j + i - 54;else index = j + i;x = a[index];setfillcolor(RGB(color, color, 0));color -= 4;//道路颜色变淡solidrectangle(x, i * 20 + 1, x + 10, i * 20 + 21);x += 910;solidrectangle(x, i * 20 + 1, x + 10, i * 20 + 21);}player.show();Npc::loop(npc, j);for (int i = 3, y = 40 + j; i < 6; i++)//检测主角是否撞到道路{int index, x;if (y + i > 53)index = y + i - 54;else index = y + i;x = a[index];if (x + 10 > player.x || x + 865 < player.x)fail();}outtextxy(0, 0, str);if (j-- == -1)//j为道路最前面对应的数组下标,自减后是新一轮的下标{behind = 0;j = 53;}else behind = j + 1;if (c >= 13)dire = rand() % 3 - 1;if (dire == lastdire)c++;else c = 1;lastdire = dire;change = dire * 2 * (rand() % 4 + 1);int tmp = a[behind] + change;if (tmp > 0 && tmp <= 1000)a[j] = tmp;else a[j] = a[behind];//前面的路受后面影响							EndBatchDraw();}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/13865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于linux的防护,以及群集你要知道的有哪些11-搭建Zabbix监控系统

1、zabbix具备功能 主机的性能监控、网络设备性能监控、数据库性能监控、多种警告方式、详细报表图表绘制 2、zabbix的监测对象 Linux服务器、Windows服务器、路由器、交换机等网络设备 3、zabbix的监控架构 server-client架构&#xff1a;适用于网络比较简单&#xff0c…

Qt 科目一考试系统(有源码)

项目源码和资源&#xff1a;科目一考试系统: qt实现科目一考试系统 一.项目概述 该项目是一个基于Qt框架开发的在线考试系统&#xff0c;主要实现了考试题目的随机抽取、考试时间限制、成绩统计等功能。用户可以通过界面操作进行考试&#xff0c;并查看自己的考试成绩。 二.技…

threejs的基本属性

1.创建场景,摄像机,渲染器,几何体,材质,网格 网格 物体材质 场景.add(网格),网格加入场景中 场景.add(坐标辅助器) 渲染 场景摄像机 相机的轨道控制器是个单独的对象 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/j…

利用element实现简单右键

利用element-plus中的el-menu实现简单右键 实现如下 <template><main class"mainClass" contextmenu"showMenu($event)"> </main><el-menu:default-active"1"class"el-menu-demo"mode"vertical":col…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例

MIT6.S081&#xff08;操作系统&#xff09;学习笔记 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&a…

8.11 矢量图层线要素单一符号使用三(插值线)

文章目录 前言插值线&#xff08;Interpolated Line&#xff09;QGis设置线符号为插值线&#xff08;Interpolated Line&#xff09;二次开发代码实现插值线&#xff08;Interpolated Line&#xff09; 总结 前言 本章介绍矢量图层线要素单一符号中插值线&#xff08;Interpol…

基于地理坐标的高阶几何编辑工具算法(4)——线分割面

文章目录 工具步骤应用场景算法输入算法输出算法示意图算法原理 工具步骤 选中待分割面&#xff0c;点击“线分割面”工具&#xff0c;绘制和面至少两个交点的线&#xff0c;双击结束&#xff0c;执行分割操作 应用场景 快速切分大型几何面&#xff0c;以降低面的复杂度&…

496.下一个更大的元素

刷算法题&#xff1a; 第一遍&#xff1a;1.看5分钟&#xff0c;没思路看题解 2.通过题解改进自己的解法&#xff0c;并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步&#xff0c;下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

【Makefile】Makefile 编译 Keil 工程(Linux 环境)

本文使用的开发板为 stm32f103C8T6&#xff0c;使用的驱动库为stm32标准库。 目录 一、软件下载 1、stm32 标准库 2、arm-none-eabi 工具链 3、烧录器 二、Keil 工程改造 1、Keil 工程 2、基本 Makefile 工程 3、添加启动文件 4、添加链接脚本 5、去掉 core_cm3.c 三…

05Django项目--前端公共文件和其他html文件的适配

对应视频链接点击直达 Django项目--前端公共文件和其他html文件的适配 对应视频链接点击直达前端页面准备Pubilc页面设置 OVER&#xff0c;不会有人不会吧不会的加Q1394006513结语 接着上一节 前端页面准备 为了方便大家更好的复制&#xff0c;我把整个项目及templates文件夹和…

Buffer Pool中是如何管理Page页

Page页分类:在BP的底层采用的是链表数据结构管理Page。Page根据状态可以分为3中类型 1)free Page:空闲Page&#xff0c;未被使用的Page。 2)clean Page:被使用的Page&#xff0c;但是数据没有修改过。 3)dirty Page:脏页&#xff0c;被使用过的Page&#xff0c;并且数据被修…

FastDfs快速安装和数据迁移同步。Ubuntu环境

一&#xff1a;防火墙 ufw status 二&#xff1a;下载 分别是&#xff08;环境依赖&#xff0c;网络模块依赖&#xff0c;安装包&#xff09; git clone https://github.com/happyfish100/libfastcommon.git git clone https://github.com/happyfish100/libserverframe.git …

nginx服务器执行的过程

一:打包 1.打包前的分析 文件路径下npm run preview -- --report 生成打包之后的内容 2.解决有些内容体积过大的问题 1.删除有些不使用但是占用较多的,将main.js上import删除,打包时不会有 2.不能删除但是内容较大的 vue.config.js文件夹下 externals: { vue: Vue,…

Jenkins动态slave

目录 所需环境 安装nfs 部署Jenkins 安装插件 ​编辑添加凭据 配置动态slave 连接kubernetes集群 ​编辑配置Jenkins地址 ​编辑配置Pod模板 ​编辑确认代理端口 创建任务测试 在当今软件开发生命周期中&#xff0c;持续集成/持续部署&#xff08;CI/CD&#xff09;已…

Selenium 异常类详解

在使用 Selenium 进行 Web 自动化测试时&#xff0c;经常会遇到各种异常情况。了解这些异常并掌握如何处理它们对于编写稳定可靠的测试脚本至关重要。本文将详细介绍 Selenium 中常见和不常见的异常类及其使用场景。 Selenium 常见异常类列表 序号异常类基类描述1selenium.co…

告别死记硬背!这一AI学习法让你和别人的差距越拉越大

文章目录 一、初步提问二、需求分析三、提示词初步设计四、提示词迭代五、需求扩展 今天我要分享的是如何利用GPT来辅助学习和理解各种繁琐、复杂、抽象的教材内容或者冗长的片段。 今天将以《操作系统教程》中的内存管理章节为例进行讲解。 本次采用的大模型是通义千问2.5&am…

STM32---蓝牙模块ECB02(从机模式_与手机通信)

目录 1、ECB02 重点 参数 2、引脚说明 3、AT指令使用重点 4、使用USB转TTL模块测试 5、STM32开发板的接线 6、STM32通信代码 7、手机小程序 连接ECB02 1、ECB02 重点 参数 蓝牙协议&#xff1a; 5.2主从模式&#xff1a;主、从一体&#xff0c;可设置睡眠模式&#xff…

职业规划与指导

文章目录 职业规划与指导2024心得2405架构师的必经之路 职业规划与指导2024 心得 但凡工作中&#xff0c;能够搞明白的就在工作中把原理使用等等搞明白&#xff0c;但凡工作中搞不明白的&#xff0c;业余也不用花时间在去搞明白&#xff0c;因为工作中都搞不明白的事&#xf…

mac远程桌面连接工具:Microsoft Remote Desktop正式版

Microsoft Remote Desktop 是一款由微软开发的远程桌面控制软件。它允许用户通过互联网连接到远程计算机&#xff0c;从而可以在本地计算机上访问和控制远程计算机的桌面、文件和应用程序。 下载地址&#xff1a;https://www.macz.com/mac/1004.html?idOTI2NjQ5Jl8mMjcuMTg2Lj…

x264 码率控制 MBtree 原理:mbtree_propagate_list 函数分析

mbtree_propagate_list 函数功能 是视频编码中宏块树传播算法的一部分,用于在编码决策过程中更新参考帧的传播成本。这个过程特别关注于如何处理运动向量(Motion Vectors, MVs)以及如何根据这些MVs对参考帧的成本进行加权,从而影响最终的编码选择。 该函数作为x264编码器…