C++平台跳跃游戏

news/2024/12/22 2:08:56/

目录

  • 开头
  • 程序
    • 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.ppmy.cn/news/1533989.html

相关文章

NVLM多模态 LLM 在图像和语言任务中的表现优于 GPT-4o

论文地址&#xff1a;https://arxiv.org/pdf/2409.11402 背景 传统的多模态 LLM 有两种主要方法&#xff1a;纯解码器架构&#xff08;如 LLaVA&#xff09;和基于交叉注意力的架构&#xff08;如 Flamingo&#xff09;。混合架构&#xff0c;既提高了训练效率&#xff0c;又增…

RISC-V开发 linux下GCC编译自定义指令流程笔记

第一步&#xff1a;利用GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言 第二步&#xff1a;利用RSIC-V的中的.insn模板进行自定义指令的插入 第三步&#xff1a;RISC-V开发环境的搭建 C语言插入汇编 GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了…

ansible 配置

目录 1.集群自动化维护工具 ansible 2.ansible管理架构 3.安装ansible 4.Iventory主机模式 5.通过ping验证 6.ansible常用模块 7.命令行模块 7.1command模块 7.2shell模块 7.3scripts模块 7.4file模块 7.5copy模块​ 7.6yum模块 1.集群自动化维护工具 ansibl…

Hive数仓操作(三)

一、Hive 数据库操作 1. 创建数据库 基本创建数据库命令&#xff1a; CREATE DATABASE bigdata;说明&#xff1a; 数据库会在 HDFS 中以目录的形式创建和保存&#xff0c;数据库名称会存储在 Hive 的元数据中。如果不指定目录&#xff0c;数据库将在 /user/hive/warehouse 下…

从原理到代码:如何通过 FGSM 生成对抗样本并进行攻击

从原理到代码&#xff1a;如何通过 FGSM 生成对抗样本并进行攻击 简介 在机器学习领域&#xff0c;深度神经网络的强大表现令人印象深刻&#xff0c;尤其是在图像分类等任务上。然而&#xff0c;随着对深度学习的深入研究&#xff0c;研究人员发现了神经网络的一个脆弱性&…

react 状态管理

Redux Redux是React中常用的状态管理组件&#xff0c;类似于Vue中的Pinia(Vuex)&#xff0c;可以独立于框架运行 作用&#xff1a; 通过集中管理的方式管理应用的状态 配套工具 在react中使用redux&#xff0c;官方要求按照两个插件&#xff0c;Redux Toolkit 和 react-red…

some 蓝桥杯题

12.反异或01串 - 蓝桥云课 (lanqiao.cn) #include "bits/stdc.h" #define int long long using namespace std; char c[10000000]; char s[10000000]; int cnt,Ans,mr,mid; int maxi; int p[10000000],pre[10000000]; signed main() {ios::sync_with_stdio(0);cin.t…

Python 封装 socket 为 [TCP/UDP/MULTICAST] 客户端

发送 TCP/UDP/MULTICAST 数据并接收响应。 #!/usr/bin/env python # -*- coding: utf-8 -*- import socketclass ClientSocket:def __init__(self, *, protocol: str, ip: str, port: int, recv_timeout: float 1.5):"""客户端套接字发送 TCP/UDP/MULTICAST 数…