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

C++平台跳跃游戏

目录

  • 开头
  • 程序
    • Game.cpp源文件
    • Player.h头文件
    • Player.cpp源文件
  • 程序的流程图
  • 程序游玩的效果
  • 下一篇博客要说的东西

开头

大家好,我叫这是我58。

程序

Game.cpp源文件

#include <iostream>
#include "Player.h"
using namespace std;
void printmap(const char strmap[11][11], const int icoin) {int i = 0;int ia = 0;for (; i < 11; i++) {for (ia = 0; ia < 11; ia++) {cout << "\033[" << ('G' == strmap[i][ia] ? "32;1m" : '$' == strmap[i][ia] ? "33m" : "0m") << strmap[i][ia] << "\033[0m";}cout << "|" << endl;}cout << "-----------@" << endl << "\033[33" << (20 == icoin ? ";1" : "") << "m$ * " << icoin << "\033[0m" << endl;
}
int main() {char str[9] = "color 0";char strmap[11][11] = {' ',' ',' ',' ',' ',' ',' ',' ','$','$',' ',' ','G',' ',' ',' ','$',' ','*','*','*',' ',' ','*','*','*',' ',' ',' ',' ',' ',' ',' ','$',' ',' ',' ','$',' ','$',' ',' ','$',' ',' ',' ','$',' ','*','*','*',' ','$',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','*','*','*',' ',' ','*','*','*',' ',' ',' ',' ','$',' ','$',' ',' ',' ','$',' ',' ',' ',' ','*','*','*',' ','$',' ','*','*','*',' ',' ',' ',' ',' ',' ',' ',' ',' ','$','$','P',' ','$','$','$',' ',' ',' ',' ','$','$'};char* cp = &strmap[10][0];Player p;char ch = 0;int icoin = 0;int coinarr[40] = { 0,8,0,9,1,5,3,0,3,4,3,6,3,9,4,2,4,8,7,2,7,4,7,8,8,6,9,9,9,10,10,2,10,3,10,4,10,9,10,10 };cout << "欢迎你来玩这个平台跳跃游戏,在这个游戏中,“P”是你,“*”是平台,你不能走到这,空格是\033[30;1m空气\033[0m,“w”使你跳,就像\033[31;1m马里奥\033[0m一样,“a”使你左移,“d”使你右移,而\033[32;1m“G”\033[0m是\033[32;1m终点\033[0m,走到这能让你\033[32;1m胜利\033[0m,并且,\033[33m“$”\033[0m是\033[33m金币\033[0m,得到\033[33m它\033[0m就会使你\033[33m获得\033[0m一个\033[33m金币\033[0m。这就是这游戏的规则,你听明白了吗?" << endl << endl;system("pause");system("cls");while ('G' == strmap[1][1]) {p.sgetxy(X) = (cp - &strmap[0][0]) / 11;p.sgetxy(Y) = (cp - &strmap[0][0]) % 11;for (ch = 0; ch < 40; ch += 2) {p.sgetxy(X) == coinarr[ch] && p.sgetxy(Y) == coinarr[ch + 1] && (coinarr[ch] = -1, icoin++);}printmap(strmap, icoin);cin >> ch;rewind(stdin);*cp = ' ';switch (ch) {case 'a':p.left_move(&cp);break;case 'd':p.right_move(&cp);break;case 'w':p.jump(&cp);break;default:break;}p.upOrDown(&cp);*cp = 'P';system("cls");}20 == icoin && (str[7] = 'E'), 20 == icoin || (str[7] = '6');system(str);cout << "恭喜你,你赢了,获得了金币" << icoin << "枚" << endl;return 0;
}

Player.h头文件

#pragma once
#include <iostream>
using namespace std;
#define JUMPHIGH 3
enum XY {X,Y,
};
class Player {
private:int ix;int iy;int ij;
public:Player();void jump(char** cpp);void left_move(char** cpp);void right_move(char** cpp);int& sgetxy(XY xymode);void upOrDown(char** cpp);
};

Player.cpp源文件

#include <iostream>
#include "Player.h"
using namespace std;
Player::Player(){ij = 0;
}
void Player::jump(char** cpp) {(10 == ix || '*' == (*cpp)[11]) && (ij = JUMPHIGH);
}
void Player::left_move(char** cpp) {iy && '*' != *(*cpp - 1) && ((*cpp)--);
}
void Player::right_move(char** cpp) {10 != iy && '*' != *(*cpp + 1) && ((*cpp)++);
}
int& Player::sgetxy(XY xymode) {return xymode ? iy : ix;
}
void Player::upOrDown(char** cpp) {if (ij > 0 && ix && '*' != (*cpp)[-11]) {ij--, *cpp -= 11;}else if ('*' != (*cpp)[11] && (!ix || '*' == (*cpp)[-11])) {ij = 0, *cpp += 11;}else if ('*' != (*cpp)[11] && 10 != ix) {*cpp += 11;}
}

程序的流程图

Game.cpp源文件
把有11行11列的二维数组strmap初始化为下面的图片
开始
导入io流
导入Player.h头文件
释放std作用域下的所有东西
定义printmap函数
把有9个字符的字符串初始化为“color 0”
Game.cpp源文件
等待玩家按下任意一个键,按下后就清屏
break
清屏
break
break
否(break)
结束
定义字符指针cp为二维字符数组strmap第10行第0列的元素的地址
创建一个名叫p的Player对象
定义字符ch为0
定义整型icoin为0
把有40个元素的整型数组coinarr里的元素分别初始化为0,8,0,9,1,5,3,0,3,4,3,6,3,9,4,2,4,8,7,2,7,4,7,8,8,6,9,9,9,10,10,2,10,3,10,4,10,9,10和10
输出“欢迎你来玩这个平台跳跃游戏,在这个游戏中,“P”是你,“*”是平台,你不能走到这,空格是\​033[30;1m空气\​033[0m,“w”使你跳,就像\​033[31;1m马里奥\​033[0m一样,“a”使你左移,“d”使你右移,而\​033[32;1m“G”\​033[0m是\​033[32;1m终点\​033[0m,走到这能让你\​033[32;1m胜利\​033[0m,并且,\​033[33m“$”\​033[0m是\​033[33m金币\​033[0m,得到\​033[33m它\​033[0m就会使你\​033[33m获得\​033[0m一个\​033[33m金币\​033[0m。这就是这游戏的规则,你听明白了吗?\​n\​n”
'G' == strmap[1][1]?
把Player对象p的方法sgetxy,参数为枚举XY的X的值的返回的引用设为cp与二维字符数组strmap第0行第0列的元素地址除以11的结果
把Player对象p的方法sgetxy,参数为枚举XY的Y的值的返回的引用设为cp与二维字符数组strmap第0行第0列的元素地址模上11的结果
设ch为0
ch < 40?
p.sgetxy(X) == coinarr[ch] && p.sgetxy(Y) == coinarr[ch + 1]?
把整型数组coinarr的第ch项设为-1
icoin自增1
ch自增2
执行printmap函数,参数为二维字符数组strmap和整型icoin
把ch设为你输入的字符
清空缓冲区
把解引用的cp设为空格
'a' == ch?
执行Player对象p的方法left_move,参数为字符指针cp的地址
执行Player对象p的方法upOrDown,参数为字符指针cp的地址
把解引用的cp设为字符“P”
20 == icoin?
把字符串str的第7项的元素设为字符“E”
20 == icoin?
执行系统命令,命令为字符串str
输出“恭喜你,你赢了,获得了金币”,icoin和“枚\​n”
'd' == ch?
执行Player对象p的方法right_move,参数为字符指针cp的地址
'w' == ch?
执行Player对象p的方法jump,参数为字符指针cp的地址
把字符串str的第7项的元素设为字符“6”
Player.h头文件
结束
开始
不让头文件重复定义
导入io流
释放std作用域下的所有东西
定义JUMPHIGH宏为3
定义枚举XY,并设X的值为0,Y的值为1
定义Player类,私有的有成员变量ix,成员变量iy和成员变量ij,公开的有Player无参构造函数的声明,jump方法的声明,left_move方法的声明,right_move方法的声明,sgetxy方法的声明和upOrDown方法的声明
Player.cpp源文件
结束
开始
导入io流
导入Player.h头文件
释放std作用域下的所有东西
定义Player类作用域下的jump方法
定义Player类作用域下的无参构造函数
定义Player类作用域下的left_move方法
定义Player类作用域下的right_move方法
定义Player类作用域下的sgetxy方法
定义Player类作用域下的upOrDown方法
Player类作用域下的无参构造函数
结束
开始
设类Player里的ij为0
Player类作用域下的jump方法
结束
开始
(10 == ix || '*' == (*cpp)[11])?
设类Player里的ij为JUMPHIGH宏的值
Player类作用域下的left_move方法
结束
开始
iy && '*' != *(*cpp - 1)?
把解引用的cpp向左移动一位
Player类作用域下的right_move方法
结束
开始
10 != iy && '*' != *(*cpp + 1)?
把解引用的cpp向右移动一位
Player类作用域下的sgetxy方法
如果xymode不为0,那么就返回iy的引用,否则就返回ix的引用
结束
开始
Player类作用域下的upOrDown方法
结束
开始
ij > 0 && ix && '*' != (*cpp)[-11]?
ij自减1
把解引用的cpp向左移动11位
'*' != (*cpp)[11] && (!ix || '*' == (*cpp)[-11])?
设ij为0
把解引用的cpp向右移动11位
'*' != (*cpp)[11] && 10 != ix?
把解引用的cpp向右移动11位

程序游玩的效果

平台跳跃游戏

下一篇博客要说的东西

C++版iwanna

相关文章:

C++平台跳跃游戏

目录 开头程序Game.cpp源文件Player.h头文件Player.cpp源文件 程序的流程图程序游玩的效果下一篇博客要说的东西 开头 大家好&#xff0c;我叫这是我58。 程序 Game.cpp源文件 #include <iostream> #include "Player.h" using namespace std; void printma…...

多系统萎缩患者必看!这些维生素助你对抗病魔

亲爱的朋友们&#xff0c;今天我们来聊聊一个相对陌生但重要的健康话题——多系统萎缩&#xff08;MSA&#xff09;。这是一种罕见的神经系统疾病&#xff0c;影响着患者的自主神经系统、运动系统和平衡功能。面对这样的挑战&#xff0c;科学合理的饮食和营养补充显得尤为重要。…...

深度学习模型性能优化实战之从评估到提升的全流程解析

1. 概述 在构建和使用机器学习模型的过程中&#xff0c;模型的效果评估和优化是两个至关重要的环节。无论模型是用于分类、回归还是其他任务&#xff0c;评估其表现以及持续优化模型性能&#xff0c;都是确保模型在实际应用中取得成功的关键。本节将重点介绍模型效果评估的定义…...

C++ | Leetcode C++题解之第446题等差数列划分II-子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int numberOfArithmeticSlices(vector<int> &nums) {int ans 0;int n nums.size();vector<unordered_map<long long, int>> f(n);for (int i 0; i < n; i) {for (int j 0; j < i;…...

【解密 Kotlin 扩展函数】扩展属性与扩展函数类似(十九)

导读大纲 1.1.1 扩展属性的创建和使用 1.1.1 扩展属性的创建和使用 之前, 我们已经了解声明 Kotlin 属性的语法 Kotlin中的顶级属性–传送门就像扩展函数一样,我们也可以指定扩展属性就像之前所说&#xff0c;属性和函数的区别在于前者是特征&#xff0c;后者是行为 相比扩展函…...

【Spring Boot 入门二】Spring Boot中的配置文件 - 掌控你的应用设置

一、引言 在上一篇文章中&#xff0c;我们开启了Spring Boot的入门之旅&#xff0c;成功构建了第一个Spring Boot应用。我们从环境搭建开始&#xff0c;详细介绍了JDK的安装以及IDE的选择与配置&#xff0c;然后利用Spring Initializr创建了项目&#xff0c;分析了项目结构&am…...

OpenCV第十二章——人脸识别

1.人脸跟踪 1.1 级联分类器 OpenCV中的级联分类器是一种基于AdaBoost算法的多级分类器&#xff0c;主要用于在图像中检测目标对象。以下是对其简单而全面的解释&#xff1a; 一、基本概念 级联分类器&#xff1a;是一种由多个简单分类器&#xff08;弱分类器&#xff09;级联组…...

深入Volatile

深入Volatile 1、变量不可见性&#xff1a; 1.1多线程下变量的不可见性 直接上代码 /*** author yourkin666* date 2024/08/12/16:12* description*/ public class h1 {public static void main(String[] args) {MyClass myClass new MyClass();myClass.start();while (tr…...

数据结构 ——— 顺序表oj题:编写函数,合并两个有序数组

目录 题目要求 代码实现 题目要求 nums1 和 nums2 是两个升序的整型数组&#xff0c;另外有两个整数 m 和 n 分别代表 nums1 和 nums2 中的元素个数 要求合并 nusm2 到nums1 中&#xff0c;使合并后的 nums1 同样按升序顺序排列 最终&#xff0c;合并后的数组不应由函数返…...

Proto文件相关知识

百度Apollo的数据结构常用proto文件来定义&#xff0c; proto文件允许你以类似于C结构体或类的方式定义数据结构。你可以在这个文件中定义简单数据类型、枚举、消息类型等。 基于proto文件&#xff0c;Protocol Buffers编译器&#xff08;protoc&#xff09;可以自动生成对应的…...

k8s的控制节点不能访问node节点容器的ip地址

master控制node服务器添加容器后,访问不了该node服务器容器的ip,只能在node服务器访问 排查后发现是k8s的master服务器和node节点的网址网段和k8s初始化时提示的ip网段不一致 我之前是192.168.137.50, 实际上master主机期望的是192.168.1.50 解决方案: 1.删除服务器后重建ma…...

鸿蒙OpenHarmony

开源鸿蒙系统编译指南 Ubuntu编译环境配置第一步&#xff1a;Shell 改 Bash第二步&#xff1a;安装Git和安装pip3工具第三步&#xff1a;远程仓配置第四步&#xff1a;拉取代码第五步&#xff1a;安装编译环境第六步&#xff1a;本地编译源码 Windows开发环境配置第一步&#x…...

把白底照片变蓝色用什么软件免费 批量更换证件照底色怎么弄

作为专业的修图师&#xff0c;有时候也会接手证件照修图和换底色工作&#xff0c;这种情况下&#xff0c;需要换底色的照片也许达到上百张。为了提高工作效率&#xff0c;一般需要批量快速修图&#xff0c;那么使用什么软件工具能够给各式不同的照片批量更换背景色呢&#xff1…...

Spring之生成Bean

Bean的生命周期&#xff1a;实例化->属性填充->初始化->销毁 核心入口方法&#xff1a;finishBeanFactoryInitialization-->preInstantiateSingletons DefaultListableBeanFactory#preInstantiateSingletons用于实例化非懒加载的bean。 1.preInstantiateSinglet…...

笔记整理—linux进程部分(6)进程间通信、alarm和pause

两个进程间通信可能是任何两个进程间的通信&#xff08;IPC&#xff09;。同一个进程是在同一块地址空间中的&#xff0c;在不同的函数与文件以变量进程传递&#xff0c;也可通过形参传递。2个不同进程处于不同的地址空间&#xff0c;要互相通信有难度&#xff08;内存隔离的原…...

Java网络通信—UDP

0.小记 1.udp通信不需要建立socket管道&#xff0c;一边只管发&#xff0c;一边只管收 2.客户端&#xff1a;将数据&#xff08;byte&#xff09;打包成包裹&#xff08;DatagramPacket&#xff09;&#xff0c;写上地址&#xff08;IP端口&#xff09;&#xff0c;通过快递站&…...

k8s架构,从clusterIP到光电半导体,再从clusterIP到企业管理

clusterIP作为k8s中的服务&#xff0c; 也是其他三个服务的基础 ~]$ kubectl create service clusterip externalname loadbalancer nodeport 客户端的流量到service service分发给pod&#xff0c;pod由控制器自动部署&#xff0c;自动维护 那么问题是service的可用…...

vue框架和uniapp框架区别

文章目录 vue框架和uniapp框架区别一、引言二、Vue.js 概述1、Vue.js 简介1.1、特点 2、适用场景 三、Uni-app 概述1、Uni-app 简介1.1、特点 2、适用场景 四、区别与比较1、跨平台能力2、开发体验3、性能优化4、社区和支持 五、总结 vue框架和uniapp框架区别 一、引言 在前端…...

828华为云征文 | 华为云Flexus云服务器X实例搭建Zabbix网络设备监视系统(Ubuntu服务器运维)

前言 Flexus X实例内嵌智能应用调优算法&#xff0c;性能强悍&#xff0c;基础模式GeekBench单核及多核跑分可达同规格独享型实例的1.6倍&#xff0c;性能模式更是超越多系列旗舰型云主机&#xff0c;为企业业务提供强劲动力。 &#x1f4bc; Flexus X Zabbix&#xff1a;打造…...

JAVA基础-线程(Thread)、多线程(Multi-threaded)

1、知识铺垫 要想了解什么是线程&#xff0c;首先要搞明白线程与进程的区别&#xff0c;并行与并发的区别 1.1 线程与进程 进程&#xff1a;是指⼀个内存中运⾏的应⽤程序&#xff0c;每个进程都有⼀个独⽴的内存空间&#xff0c;⼀个应⽤程序可以同时运⾏多个进程&#xff1b…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...