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

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

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

相关文章

picgo + typora + gitee图床

Picgo打造个人图床&#xff0c;稳定又安全 解决Typora笔记上传到CSDN图片无法显示的问题 typora中

Opencv第十一章——视频处理

1. 读取并显示摄像头视频 1.1 VideoCapture类 VideoCapture类提供了构造方法VideoCapture(),用于完成摄像头的初始化工作&#xff0c;其语法格式如下&#xff1a; capture cv2.VideoCapture(index) 参数说明&#xff1a; capture:要打开的摄像头视频。 index:摄像头设备索引。…

《动手学深度学习》笔记2.2——神经网络从基础→进阶 (参数管理-每层的权重/偏置)

目录 0. 前言 正文&#xff1a;参数管理 1. 参数访问 1.1 [目标参数] 1.2 [一次性访问所有参数] 1.3 [从嵌套块收集参数] 2. 参数初始化 2.1 [内置初始化] 2.2 [自定义初始化] 2.3 [参数绑定-共享参数] 3. 小结&#xff08;第2节&#xff09; 4. 延后初始化 (原书第…

Qt6.7开发安卓程序间接连接到MySQL的方法

本文主要描述一种通过间接的方法&#xff0c;使得Qt开发的安卓程序可以直连到Mysql数据库的方法。本文章的方案是通过JAVA代码去连接MySQL数据库&#xff0c;然后C代码去调用JAVA的方法&#xff0c;从而实现QT开发的安卓程序去直连到MySQL数据库。 本文使用 JDBC 结合 JNI&…

《深度学习》OpenCV 图像拼接 拼接原理、参数解析、案例实现

目录 一、图像拼接 1、直接看案例 图1与图2展示&#xff1a; 合并完结果&#xff1a; 2、什么是图像拼接 3、图像拼接步骤 1&#xff09;加载图像 2&#xff09;特征点检测与描述 3&#xff09;特征点匹配 4&#xff09;图像配准 5&#xff09;图像变换和拼接 6&am…

【深度学习】05-Rnn循环神经网络-01- 自然语言处理概述/词嵌入层/循环网络/文本生成案例精讲

循环神经网络&#xff08;RNN&#xff09;主要用于自然语言处理的。 循环神经网络&#xff08;RNN&#xff09;、卷积神经网络&#xff08;CNN&#xff09;和全连接神经网络&#xff08;FCN&#xff09;是三种常见的神经网络类型&#xff0c;各自擅长处理不同类型的数据。下面…

【数据库差异研究】update与delete使用表别名的研究

目录 ⚛️总结 ☪️1 Update ♋1.1 测试用例UPDATE users as a SET a.age 111 WHERE a.name Alice; ♏1.2 测试用例UPDATE users as a SET a.age 111 WHERE name Alice; ♐1.3 测试用例UPDATE users as a SET age 111 WHERE a.name Alice; ♑1.4 测试用例UPDATE us…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

Python安装流程(Windows + MAC)

目录 Windows 版 1.下载Python 2.开始安装 3.配置环境变量 4.测试python是否成功安装 MAC版 1.下载Python 2.开始安装 Windows 版 1.下载Python 进入Python官网下载&#xff1a;&#xff08;Python更新频繁&#xff0c;下载最新版即可&#xff0c;安装流程一致&#x…

【Bug】STM32F1的PB3和PB4无法正常输出

Bug 使用标准库配置STM32F103C8T6的PB3和PB4引脚输出控制LED灯时&#xff0c;发现引脚电平没有变化无法正常输出高低电平&#xff0c;配置代码如下&#xff1a; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE ); GPIO_InitStruc…

C语言+单片机

今天内容有点水哈哈&#xff08;忙着练焊铁技术了嘻嘻&#xff09; C语言 简单学习了while语言以及其与for语言的区别和适用方法 .循环结构&#xff1a; 初始化语句条件判断句条件控制句 for语句 for(int1;i<100;i){执行条件} for (int i 1; i < 100; i) {printf(&quo…

stm32四足机器人(标准库)

项目技术要求 PWM波形的学习 参考文章stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)_ttl pwm 驱动激光头区别-CSDN博客 舵机的学习 参考文章 stm32 TIM输出比较(PWM驱动LED呼吸灯&&PWM驱动舵机&&PWM驱动直流电机)…

发布:ultralytics-yolo-webui :Detect 目标检测 工具-先行版本 >> DataBall

通过webui 方式对ultralytics 的 detect 检测任务 进行&#xff1a; 1&#xff09;数据预处理&#xff0c;2&#xff09;模型训练&#xff0c;3&#xff09;模型推理。 本项目提供了 示例数据集&#xff0c;用 labelImage标注&#xff0c;标注文件为 xml 文件。 项目地址&…

css的背景background属性

CSS的background属性是一个简写属性&#xff0c;它允许你同时设置元素的多个背景相关的子属性。使用这个属性可以简化代码&#xff0c;使其更加清晰和易于维护。background属性可以设置不同的子属性。 background子属性 定义背景颜色 使用background-color属性 格式&#x…

【AI绘画】Midjourney进阶:景别详解

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AI绘画 | Midjourney 文章目录 &#x1f4af;前言&#x1f4af;为什么要学习景别景别的作用景别在Midjourney中的应用实例 &#x1f4af;大景别&#x1f4af;远景特点提示词书写技巧测试 &#x1f4af;全景特点提示词书写技巧测试…

三、数据链路层(下)

目录 3.6以太网 以太网的分类 Mac地址 以太网数据格式 3.7互联网 数据是如何传输的&#xff1f; 3.8以太网、局域网、互联网的区别 总结&#xff1a; 3.9 vlan基本概念与基本原理 Vlan实现 划分 VLAN 例题 3.10广域网及相关协议 ppp协议 PPP协议所满足的要求 P…

防sql注入的网站登录系统设计与实现

课程名称 网络安全 大作业名称 防sql注入的网站登录系统设计与实现 姓名 学号 班级 大 作 业 要 求 结合mysql数据库设计一个web登录页面密码需密文存放&#xff08;可以采用hash方式&#xff0c;建议用sha1或md5加盐&#xff09;采用服务器端的验证码&#…

C(十)for循环 --- 黑神话情景

前言&#xff1a; "踏过三界宝刹&#xff0c;阅过四洲繁华。笑过五蕴痴缠&#xff0c;舍过六根牵挂。怕什么欲念不休&#xff0c;怕什么浪迹天涯。步履不停&#xff0c;便是得救之法。" 国际惯例&#xff0c;开篇先喝碗鸡汤。 今天&#xff0c;杰哥写的 for 循环相…

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

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

【H2O2|全栈】关于CSS(9)CSS3扩充了哪些新鲜的东西?(二)

目录 CSS3入门 前言 准备工作 伪元素补充 :before :after 文本溢出属性 转换效果 预告和回顾 后话 CSS3入门 前言 本系列博客主要介绍CSS相关的知识点。 这一期主要介绍以下几个CSS3的知识点&#xff1a; 伪元素补充文本溢出属性转换 没有基础的朋友&#xff…