c++马里奥

这是一个用C++编写的马里奥风格跑酷游戏,包括模式选择、游戏控制、地图设计等功能。游戏支持单人至四人模式,玩家通过键盘操作角色跳跃、移动,避开障碍物到达终点。游戏设有多个关卡,每个关卡地图不同,玩家需要掌握好节奏和技巧才能顺利过关。此外,代码中还包含了暂停、存档、读档等功能,增加了游戏的可玩性。

话不多说,上代码:

#undef UNICODE
#undef _UNICODE
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <ctime>
#include <windows.h>
#include <conio.h>
#include <fstream>
#include <stdio.h>
using namespace std;
namespace _game
{
	
	//常量
	const long long ESC=27,
					Enter=13,
					Tab=9,
					Shang=38,
					Xia=40,
					Zuo=37,
					You=39,
					Kong=' ',
					z_sb=VK_LBUTTON,
					y_sb=VK_RBUTTON,
					Shift=VK_SHIFT,
					z_Shift=VK_LSHIFT,
					y_Shift=VK_RSHIFT,
					Ctrl=VK_CONTROL,
					z_Ctrl=VK_LCONTROL,
					y_Ctrl=VK_RCONTROL,
					Alt=VK_MENU,
					z_Alt=VK_LMENU,
					y_Alt=VK_RMENU,
					A='A',
					B='B',
					C='C',
					D='D',
					E='E',
					F='F',
					G='G',
					H='H',
					I='I',
					J='J',
					K='K',
					L='L',
					M='M',
					N='N',
					O='O',
					P='P',
					Q='Q',
					R='R',
					S='S',
					T='T',
					U='U',
					V='V',
					W='W',
					X='X',
					Y='Y',
					Z='Z';
	
	//结构体
	struct cdhs//存档结构体
	{
		void out(int n, string name)//输出存档
		{
			ofstream cd(&name[0]);
			cd << n;
			return;
		}
		void out(long long n, string name)
		{
			ofstream cd(&name[0]);
			cd << n;
			return;
		}
		void out(bool n, string name)
		{
			ofstream cd(&name[0]);
			cd << n;
			return;
		}
		void out(char n, string name)
		{
			ofstream cd(&name[0]);
			cd << n;
			return;
		}
		void out(string n, string name)
		{
			ofstream cd(&name[0]);
			cd << n;
			return;
		}//重载
		void in(int& n, string name)//读入存档
		{
			ifstream cd(&name[0]);
			cd >> n;
			return;
		}
		void in(long long& n, string name)
		{
			ifstream cd(&name[0]);
			cd >> n;
			return;
		}
		void in(bool& n, string name)
		{
			ifstream cd(&name[0]);
			cd >> n;
			return;
		}
		void in(char& n, string name)
		{
			ifstream cd(&name[0]);
			cd >> n;
			return;
		}
		void in(string& n, string name)
		{
			ifstream cd(&name[0]);
			cd >> n;
			return;
		}//重载 
	};
	struct hl//行列
	{
		long long h,l;
	};
	
	//函数
	bool axj(long long key)
	{
		return (GetKeyState(key)<0);
	}
	void bout(string n, long long s=50,bool f=0,char key=13)//输出
	{
		for (long long i = 0; i < n.size(); i++)
		{
			if (f&&GetKeyState(key)<0)
			{
				cout<<n.substr(i,n.size());
				return ;
			}
			cout << n[i];
			Sleep(s);
		}
		return;
	}
	void ckbb()//查看当前b_game.h库版本信息
	{
		system("cls");
		cout << "库名:b_game.h\n";
		cout << "类型:拓展库\n";
		cout << "版本号:2.0.1\n";
		return;
	}
	void gs(long long h, long long l, string z)//格式
	{
		for (long long i = 1; i <= h; i++)
			cout << "\n";
		for (long long i = 1; i <= l; i++)
			cout << " ";
		cout << z;
		return;
	}
	hl sbwz(bool x=1,bool n=1)//鼠标位置
	{
		HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
		HWND h=GetForegroundWindow();
		CONSOLE_FONT_INFO consoleCurrentFont;
		hl hl;
		POINT p;
		if(x)
		{
			GetCursorPos(&p);
			ScreenToClient(h,&p);
		}
		else
		{
			GetCursorPos(&p);
		}
		if(n)
		{
			GetCurrentConsoleFont(hOutput, FALSE, &consoleCurrentFont);
			p.x/=consoleCurrentFont.dwFontSize.X;
			p.y/=consoleCurrentFont.dwFontSize.Y;
		}
		hl.h=p.y+1;
		hl.l=p.x+1;
		return hl;
	}
	void yanse(int n)//颜色
	{
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);
		return;
	}
	void ycbj()//移除快速编辑模式
	{
		HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
		DWORD mode;
		GetConsoleMode(hStdin, &mode);
		mode&=~ENABLE_QUICK_EDIT_MODE;
		SetConsoleMode(hStdin, mode);
		return ;
	}
	void ycgb()//隐藏光标
	{
		CONSOLE_CURSOR_INFO cursor;
		cursor.bVisible = FALSE;
		cursor.dwSize = sizeof(cursor);
		HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleCursorInfo(handle, &cursor);
		return;
	}
	void ydgb(long long h, long long l)//移动光标
	{
		COORD pos = { l-1,h-1 };
		HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleCursorPosition(hOut, pos);
		return;
	}
}
using namespace _game;
const long long dts = 9;
long long wj1x, wj1y, wj2x, wj2y, wj3x, wj3y, wj4x, wj4y, cs = 0, dtbh, sy, runs, cgjd = 1, y_1x, y_1y, y_2x, y_2y, y_3x, y_3y, y_4x, y_4y;
cdhs cddx;
bool f = 1, t1 = 1, t2 = 1, t3 = 1, t4 = 1, cxjs = 1, hyflag = 1;
long long csx[dts + 1] = {
	0,
	18,
	18,
	18,
	14,
	1,
	3,
	1,
	3,
	18
};
long long csy[dts + 1] = {
	0,
	1,
	1,
	1,
	1,
	1,
	1,
	1,
	37,
	1
};
string dtm[dts + 1] = {
	"空地图",
	"新手练习",
	"蹦床天地",
	"信仰之跃",
	"生死双道",
	"天空跳床",
	"小心暗刺",
	"转来转去",
	"9 9 加 6",
	"天空尖刺"
};
string dt[dts + 1][21] = {
	{
		"                                                                            ",//
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
	},
	{
		"                                                                            =",//
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                                            =",
		"                                                          ===================",
		"                                                                            =",
		"                                                             ====           =",
		"                                                            =               =",
		"                       <     >                             =               $=",
		" ====     ====^^^^==================-               =======                 =",
		"                                                                            ="
	},
	{
		"                                                                            ",//
		"                             =                                <             ",
		"                             =                                <             ",
		"                             =                                <         $   ",
		"                             =                                <             ",
		"                             =                                <             ",
		"                     ---                                      <             ",
		"                             =                                              ",
		"                             ======-=====-===---=----=-=----========-=======",
		"                                                                            ",
		"                                                                            ",
		"               ---                                                          ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                                                            ",
		"                                        
### 开发与运行 C++ 版本超级马里奥游戏的指南 开发或运行一个基于 C++ 的超级马里奥风格游戏需要以下几个关键步骤,包括选择合适的开发工具、了解游戏引擎库以及获取源代码进行学习和调试。 #### 1. 游戏开发所需工具和技术栈 要使用 C++ 开发类似超级马里奥的游戏,通常会用到以下技术和工具: - **编程语言**:C++ 是首选语言,因其性能优越且适合底层图形操作。 - **图形库**:SDL2(Simple DirectMedia Layer)是一个广泛使用的跨平台多媒体库,非常适合用于 2D 游戏开发。它提供了图像渲染、音频播放、事件输入等功能[^2]。 - **集成开发环境 (IDE)**:推荐使用 Visual Studio(Windows)、CLion 或 Code::Blocks 等支持 C++ 的 IDE。 - **版本控制工具**:Git 可以帮助你管理代码版本并参与开源项目协作。 #### 2. 获取和运行 C++ 超级马里奥游戏源码 以下是几种获取和运行相关游戏源码的方式: ##### a. uMario 开源项目 该项目由 Łukasz Jakowski 使用 C++ 和 SDL2 实现了一个简单的马里奥风格游戏。你可以从 GitHub 上克隆该项目,并按照 README 文件中的说明进行编译和运行。具体步骤如下: - 安装 SDL2 库:在 Windows 上可以通过 vcpkg 安装 `sdl2` 包;Linux 用户可以使用 `sudo apt install libsdl2-dev`。 - 克隆项目仓库:`git clone https://github.com/lukasj/umario.git` - 编译项目:使用 CMake 构建系统生成 Makefile 并执行 `make` 进行编译。 - 运行游戏:执行生成的可执行文件即可启动游戏[^2]。 ##### b. 超级猫里奥游戏源码 这是一个类似于《超级马里奥》但具有“变态”关卡设计的 C++ 游戏项目,其源码可用于研究游戏逻辑、碰撞检测、角色控制等机制。可以从特定资源网站下载该源码包,其中通常包含完整的可执行文件和文档资料,方便开发者理解其实现方式[^1]。 ##### c. 学习教程与文档 如果你是初学者,建议参考一些详细的学习教程,例如《【181008】超级玛丽C++编程揭秘源码+文档》这类资源不仅提供完整的游戏源码,还附带了技术文档,帮助你逐步掌握游戏开发的核心概念,如地图滚动、精灵动画、物理引擎基础等[^3]。 #### 3. 核心代码示例 以下是一个简单的游戏主循环伪代码,展示了如何使用 SDL2 创建窗口并处理基本事件: ```cpp #include <SDL.h> int main(int argc, char* argv[]) { SDL_Init(SDL_INIT_VIDEO); SDL_Window* window = SDL_CreateWindow("Super Mario Clone", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN); SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); bool running = true; SDL_Event event; while (running) { while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { running = false; } } SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderClear(renderer); // Game drawing logic here SDL_RenderPresent(renderer); } SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } ``` 此代码初始化 SDL2 并创建一个窗口及渲染器,进入主循环后持续监听退出事件并清空屏幕。你可以在此基础上添加玩家控制、敌人 AI、地图加载等功能。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值