C++实现贪吃蛇(含源代码)—基于easyx图形库

这篇具有很好参考价值的文章主要介绍了C++实现贪吃蛇(含源代码)—基于easyx图形库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

                                        食用指南:本文在有C++基础的情况下食用更佳  

                                       🍀本文前置知识:C++基础

                                       ♈️今日夜电波:toge—あよ

                                                                0:36 ━━━━━━️💟──────── 4:03
                                                                    🔄   ◀️   ⏸   ▶️    ☰ 

                                      💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍 


目录

📱一、前置条件—easyx图形库的安装

        easyx简介

        easyx安装

        easyx安装步骤

🐍二、进入正题!—贪吃蛇的实现!

        1、大致实现思路

        2、具体实现思路

        父类:

        蛇类 :

        食物类:

        游戏场景的实现(重要):

📑三、 实现效果以及源代码

        1、运行效果

        2、总体代码 

              🔑3、一些注意事项


📱一、前置条件—easyx图形库的安装

easyx简介

        easyx 是一款基于 C /C++的图形库,它提供了简单易用的接口,可以方便地进行图形绘制和交互操作。通过引入 easyx,开发者可以快速实现基于 Windows 平台的图形界面应用程序开发。

        easyx 提供了一系列的绘图函数,例如画线、画圆、填充颜色等,开发者可以利用这些函数创建各种图形效果。同时,easyx 还提供了键盘和鼠标事件的处理函数,方便用户与图形界面进行交互。

        easyx 的优势在于它的简洁易用性和适用性。它不仅适用于初学者学习 C /C++图形编程,也可以用于快速原型开发和小型项目。易于安装和使用,对于想要学习图形编程的开发者来说是一个很好的选择。

easyx安装

        easyx安装地址(本文为EasyX 2023大暑版 )

easyx安装步骤

        简单又快捷的安装  😍  我可太爱了!

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

        根据相应的提示安装即可

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言


🐍二、进入正题!—贪吃蛇的实现!

        1、大致实现思路

        话不多说,先上一张图୧(๑•̀◡•́๑)૭

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

         通过父类与子类节点继承的关系这样可以使得代码连贯以及紧密相连(其实只是作者想复习一下前段时间学的父类跟子类的知识而已( ̄3 ̄)a)大体的功能实现如上图。


          2、具体实现思路

        父类:
class sprite//父类
{
public:
	int m_x;
	int m_y;
	COLORREF m_color;
public:
	sprite() :sprite(0, 0) {};
	sprite(int x, int y) :m_x(x), m_y(y), m_color(BLUE) {};//初始化坐标,颜色
	virtual void draw()
	{
		setfillcolor(m_color);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	virtual void draw(COLORREF a)
	{
		setfillcolor(a);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	void moveby(int dx,int dy)
	{
		m_x += dx;
		m_y += dy;
	}

	bool collision(const sprite& ote)//碰撞食物检测
	{
		return m_x == ote.m_x && m_y == ote.m_y;
	}
};

        作为最基本的类,所要实现的最基本任务就是储存数据,对此我做了坐标数据的储存以及蛇颜色数据的储存。接着是对于基本绘图需求实现函数、移动需求实现函数以及配置检查函数。这几个函数也是对于蛇基本的逻辑判断以及移动的需求。

        蛇类 :

class Snake:public sprite//蛇体
{
public:
	Snake() :Snake(0, 0) {};
	Snake(int x, int y):sprite(x, y),dir(VK_RIGHT),grade(0) //初始化三节蛇
	{
		nodes.push_back(sprite(120, 100));//蛇头
		nodes.push_back(sprite(110, 100));
		nodes.push_back(sprite(100, 100));
	};
	void draw()
	{
		for (int i = 0; i < nodes.size(); i++)
		{
			nodes[i].draw();
		}
	}
	void move()
	{
		for (int i=nodes.size()-1;i>0;i--)//整体移动
		{
			nodes[i] = nodes[i - 1];
		}
		switch (dir)//控制方向
		{
		case VK_UP:
			nodes[0].moveby(0,-10);
			break;
		case VK_DOWN:
			nodes[0].moveby(0, 10);
			break;
		case VK_LEFT:
			nodes[0].moveby(-10, 0);
			break;
		case VK_RIGHT:
			nodes[0].moveby(10, 0);
			break;
		}
	}

	bool collision(const sprite& ote)
	{
		return nodes[0].collision(ote);
	}

	void increase()//长度增加一节
	{
		nodes.push_back(sprite());
		grade++;
	}

	void cotget()//计分
	{
		string str = "当前得分为:";
		str += to_string(grade);
		char Outscore[1024];
		strcpy_s(Outscore, sizeof(Outscore), str.c_str());
		settextstyle(15, 0, "宋体");
		settextcolor(GREEN);
		outtextxy(20, 20, Outscore);
		
	}

	bool dead()//死亡检测
	{
		for (int i = 1; i < nodes.size(); i++)//撞到自己
		{
			if (nodes[0].m_x == nodes[i].m_x && nodes[0].m_y == nodes[i].m_y)
			{
				cleardevice();
				return true;
			}
		}
		
		if (nodes[0].m_x == 0 || nodes[0].m_y == 0 || nodes[0].m_x == 630 || nodes[0].m_y == 470)//撞到墙
			return true;

		return false;
	}
private:
	vector<sprite> nodes;//存蛇节
	
public:
	int dir;//蛇的方向
	int grade;//得分
};

        这个类就是具体的蛇体实现的过程了。主要是实现了蛇的初始化以及所有逻辑判断。在原父类的基础上还进行了蛇的方向、得分、蛇节点等数据的添加。

         食物类:

class Food :public sprite//食物
{
public:
	Food() :sprite(0, 0) 
	{
		changefood();
	};

	void draw()
	{
		setfillcolor(RED);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	//生成食物
	void changefood()
	{
		//随机生成坐标
		m_x = rand() % 64 * 10;
		if (m_x == 0)
			m_x += 10;
		else if (m_x == 640)
			m_x -= 20;
		else if (m_x == 630)
			m_x -= 10;

		m_y = rand() % 48 * 10;
		if (m_y == 0)
			m_y += 10;
		else if (m_y == 480)
			m_y -= 30;
		else if (m_x == 470)
			m_y -= 20;
	}

	
};

        这个类就是在父类的基础上实现了食物的随机位置生成,基于坐标数据所生成的。

         游戏场景的实现(重要):

class gameScreen//游戏场景
{
private:
	Snake snake;
	Food food;
public:
	gameScreen() {};
	void run()
	{
		//双缓冲绘图
		setbkcolor(YELLOW);
		BeginBatchDraw();
		
		cleardevice();
		
		wall();
		snake.draw();//蛇生成
		food.draw();//实物生成
		snake.cotget();
		snake.dead();
		EndBatchDraw();
		//移动
		snake.move();
		//吃食物
		SnakeEat();
		
		//获取信息
		ExMessage msg = { 0 };
		while (peekmessage(&msg, EX_KEY))
		{
			onmesg(msg);
		}
	}
	//改变蛇的方向 通过方向键 
	void onmesg(const ExMessage& msg)
	{
		//判断键盘有没有方向按键按下
		if (msg.message == WM_KEYDOWN)//接受↑↓←→信息
		{
			switch (msg.vkcode)//不让蛇头向后走
			{
			case VK_UP:
				if(snake.dir!= VK_DOWN)
					snake.dir = msg.vkcode;
				break;
			case VK_DOWN:
				if (snake.dir != VK_UP)
					snake.dir = msg.vkcode;
				break;
			case VK_LEFT:
				if (snake.dir != VK_RIGHT)
					snake.dir = msg.vkcode;
				break;
			case VK_RIGHT:
				if (snake.dir != VK_LEFT)
					snake.dir = msg.vkcode;
				break;
			}
			
		}
	}

	void SnakeEat()
	{
		if (snake.collision(food))//吃到了食物
		{
			//蛇节数增加
			snake.increase();
			//食物重新生成
			food.changefood();
		}
	}

	void deadcot()//死亡结算
	{
		string str = "您的最终得分为:";
		str += to_string(snake.grade);
		char Outscore[1024];
		strcpy_s(Outscore, sizeof(Outscore), str.c_str());
		settextstyle(30, 0, "宋体");
		settextcolor(GREEN);
		outtextxy(200, 210, Outscore);
	}

	void realdead()//判死
	{
		if (snake.dead())
		{
			deadcot();
			Sleep(3000);
			closegraph();
		}
			
	}

	void wall()//生成墙
	{
		sprite wa;
		for (int i = 0; i < 480; i+=10) {
			//首先声明颜色,否则第一个格子怪怪的
			wa.draw(GREEN);
			wa.moveby(0, 10);
		}
		sprite wb;
		{
			for (int i = 0; i < 640; i += 10) {
				//首先声明颜色,否则第一个格子怪怪的
				wb.draw(GREEN);
				wb.moveby(10, 0);
			}
		}
		sprite sa(630, 470);
		for (int i = 0; i < 480; i += 10) {
			//首先声明颜色,否则第一个格子怪怪的
			sa.draw(GREEN);
			sa.moveby(0, -10);
		}

		sprite sb(630, 470);
		for (int i = 0; i < 640; i += 10) {
			//首先声明颜色,否则第一个格子怪怪的
			sb.draw(GREEN);
			sb.moveby(-10, 0);
		}
	}
	
};

        这个类实现的就是将前面所实现的类进行整合,然后再进行有些稍微的调节。比如:增加了接受方向键的函数omsg,得以操控蛇的运动。这个类也进行了蛇活动场景的搭建等等。


        📑三、 实现效果以及源代码

        1、运行效果

        游戏开始界面:

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

        游戏运行界面:

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

        游戏结算界面: 

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言


        2、总体代码 

#include<iostream>
#include<easyx.h>
#include<vector>
#include<stdlib.h>
#include<time.h>
#include<string>
#include<conio.h>

using namespace std;

class sprite//父类
{
public:
	int m_x;
	int m_y;
	COLORREF m_color;
public:
	sprite() :sprite(0, 0) {};
	sprite(int x, int y) :m_x(x), m_y(y), m_color(BLUE) {};//初始化坐标,颜色
	virtual void draw()
	{
		setfillcolor(m_color);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	virtual void draw(COLORREF a)
	{
		setfillcolor(a);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	void moveby(int dx,int dy)
	{
		m_x += dx;
		m_y += dy;
	}

	bool collision(const sprite& ote)//碰撞食物检测
	{
		return m_x == ote.m_x && m_y == ote.m_y;
	}
};


class Snake:public sprite//蛇体
{
public:
	Snake() :Snake(0, 0) {};
	Snake(int x, int y):sprite(x, y),dir(VK_RIGHT),grade(0) //初始化三节蛇
	{
		nodes.push_back(sprite(120, 100));//蛇头
		nodes.push_back(sprite(110, 100));
		nodes.push_back(sprite(100, 100));
	};
	void draw()
	{
		for (int i = 0; i < nodes.size(); i++)
		{
			nodes[i].draw();
		}
	}
	void move()
	{
		for (int i=nodes.size()-1;i>0;i--)//整体移动
		{
			nodes[i] = nodes[i - 1];
		}
		switch (dir)//控制方向
		{
		case VK_UP:
			nodes[0].moveby(0,-10);
			break;
		case VK_DOWN:
			nodes[0].moveby(0, 10);
			break;
		case VK_LEFT:
			nodes[0].moveby(-10, 0);
			break;
		case VK_RIGHT:
			nodes[0].moveby(10, 0);
			break;
		}
	}

	bool collision(const sprite& ote)
	{
		return nodes[0].collision(ote);
	}

	void increase()//长度增加一节
	{
		nodes.push_back(sprite());
		grade++;
	}

	void cotget()//计分
	{
		string str = "当前得分为:";
		str += to_string(grade);
		char Outscore[1024];
		strcpy_s(Outscore, sizeof(Outscore), str.c_str());
		settextstyle(15, 0, "宋体");
		settextcolor(GREEN);
		outtextxy(20, 20, Outscore);
		
	}

	bool dead()//死亡检测
	{
		for (int i = 1; i < nodes.size(); i++)//撞到自己
		{
			if (nodes[0].m_x == nodes[i].m_x && nodes[0].m_y == nodes[i].m_y)
			{
				cleardevice();
				return true;
			}
		}
		
		if (nodes[0].m_x == 0 || nodes[0].m_y == 0 || nodes[0].m_x == 630 || nodes[0].m_y == 470)//撞到墙
			return true;

		return false;
	}
private:
	vector<sprite> nodes;//存蛇节
	
public:
	int dir;//蛇的方向
	int grade;//得分
};


class Food :public sprite//食物
{
public:
	Food() :sprite(0, 0) 
	{
		changefood();
	};

	void draw()
	{
		setfillcolor(RED);

		fillrectangle(m_x, m_y, m_x + 10, m_y + 10);
	}
	//生成食物
	void changefood()
	{
		//随机生成坐标
		m_x = rand() % 64 * 10;
		if (m_x == 0)
			m_x += 10;
		else if (m_x == 640)
			m_x -= 20;
		else if (m_x == 630)
			m_x -= 10;

		m_y = rand() % 48 * 10;
		if (m_y == 0)
			m_y += 10;
		else if (m_y == 480)
			m_y -= 30;
		else if (m_x == 470)
			m_y -= 20;
	}

	
};

class gameScreen//游戏场景
{
private:
	Snake snake;
	Food food;
public:
	gameScreen() {};
	void run()
	{
		//双缓冲绘图
		setbkcolor(YELLOW);
		BeginBatchDraw();
		
		cleardevice();
		
		wall();
		snake.draw();//蛇生成
		food.draw();//实物生成
		snake.cotget();
		snake.dead();
		EndBatchDraw();
		//移动
		snake.move();
		//吃食物
		SnakeEat();
		
		//获取信息
		ExMessage msg = { 0 };
		while (peekmessage(&msg, EX_KEY))
		{
			onmesg(msg);
		}
	}
	//改变蛇的方向 通过方向键 
	void onmesg(const ExMessage& msg)
	{
		//判断键盘有没有方向按键按下
		if (msg.message == WM_KEYDOWN)//接受↑↓←→信息
		{
			switch (msg.vkcode)//不让蛇头向后走
			{
			case VK_UP:
				if(snake.dir!= VK_DOWN)
					snake.dir = msg.vkcode;
				break;
			case VK_DOWN:
				if (snake.dir != VK_UP)
					snake.dir = msg.vkcode;
				break;
			case VK_LEFT:
				if (snake.dir != VK_RIGHT)
					snake.dir = msg.vkcode;
				break;
			case VK_RIGHT:
				if (snake.dir != VK_LEFT)
					snake.dir = msg.vkcode;
				break;
			}
			
		}
	}

	void SnakeEat()
	{
		if (snake.collision(food))//吃到了食物
		{
			//蛇节数增加
			snake.increase();
			//食物重新生成
			food.changefood();
		}
	}

	void deadcot()//死亡结算
	{
		string str = "您的最终得分为:";
		str += to_string(snake.grade);
		char Outscore[1024];
		strcpy_s(Outscore, sizeof(Outscore), str.c_str());
		settextstyle(30, 0, "宋体");
		settextcolor(GREEN);
		outtextxy(200, 210, Outscore);
	}

	void realdead()//判死
	{
		if (snake.dead())
		{
			deadcot();
			Sleep(3000);
			closegraph();
		}
			
	}

	void wall()//生成墙
	{
		sprite wa;
		for (int i = 0; i < 480; i+=10) {
			//首先声明颜色,否则第一个格子怪怪的
			wa.draw(GREEN);
			wa.moveby(0, 10);
		}
		sprite wb;
		{
			for (int i = 0; i < 640; i += 10) {
				//首先声明颜色,否则第一个格子怪怪的
				wb.draw(GREEN);
				wb.moveby(10, 0);
			}
		}
		sprite sa(630, 470);
		for (int i = 0; i < 480; i += 10) {
			//首先声明颜色,否则第一个格子怪怪的
			sa.draw(GREEN);
			sa.moveby(0, -10);
		}

		sprite sb(630, 470);
		for (int i = 0; i < 640; i += 10) {
			//首先声明颜色,否则第一个格子怪怪的
			sb.draw(GREEN);
			sb.moveby(-10, 0);
		}
	}
	
};

void play()
{
	cleardevice();
	//initgraph(640, 480);
	srand(time(nullptr));
	gameScreen game;
	while (1)
	{
		Sleep(100);
		game.run();
		game.realdead();
	}
	

	getchar();

}


void menu()
{
	char str_0[] = "》 -贪吃蛇- 《";
	char str_1[] = "1.play";
	char str_2[] = "2.游戏帮助";
	char str_3[] = "按任意键退出";
	settextstyle(20, 0, "宋体");
	outtextxy(200, 150, str_0);
	outtextxy(220, 190, str_1);
	outtextxy(220, 230, str_2);
	outtextxy(220, 270, str_3);
}

void intro()
{
	cleardevice();
	char str_0[] = "【帮助】";
	char str_1[] = "操作技巧:↑↓← →控制蛇的方向";
	char str_2[] = "什么?你说你没方向键?";
	char str_3[] = "亲,请点右上角";
	char str_4[] = "制作者:慕斯";
	char str_5[] = "按任意键返回";
	settextstyle(20, 0, "宋体");
	outtextxy(200, 120, str_0);
	outtextxy(180, 160, str_1);
	outtextxy(180, 200, str_2);
	outtextxy(180, 240, str_3);
	outtextxy(180, 280, str_4);
	outtextxy(180, 320, str_5);
	int leb = 0;
	leb = _getch();
}

void SNAKE()
{
	int leb = 0;
	int kk = 1;
	do
	{
		initgraph(640, 480);
		menu();
		leb = _getch();
		switch (leb)
		{
		case 49:
			play();
			break;
		case 50:
			intro();
			break;
		default:
			kk = 0;
			break;
		}
	} while (kk);
	
	
}

int main()
{
	SNAKE();
	//play();
	return 0;
}

        🔑3、一些注意事项

        由于有些字符的限制,我们需要按以下步骤去更改一下字符集,将字符集改为使用多字节字符集以解决其中一些报错!报错情况如下:

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

         如果你出现以上报错,请按以下步骤进行多字节字符集设置:

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言

C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言


                 感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o!  

                                C++实现贪吃蛇(含源代码)—基于easyx图形库,C++ 实现小游戏,c++,开发语言,c语言 

                                                                 给个三连再走嘛~      文章来源地址https://www.toymoban.com/news/detail-698985.html

到了这里,关于C++实现贪吃蛇(含源代码)—基于easyx图形库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • easyx图形库基础4:贪吃蛇

    1.食物不可以生成到画布的外面; 2.不可以生成在蛇的身体上面; 3.食物是随机生成的; 1.蛇头碰到墙壁: 2.蛇头碰到蛇身体:

    2024年02月12日
    浏览(24)
  • C++【unordered_map/set的底层实现-哈希表】—含有源代码

    前面讲了STL中的map和set容器以及封装实现,虽然它们的查找效率是O(logN),但是当红黑树中的节点非常多时,因为红黑树不是严格平衡,树的高度可能变得很大,就是一变高一边低的情况,这会导致查询操作的时间复杂度变为O(N),所以后面就出现了四个unordered系列的关联式容

    2024年02月08日
    浏览(33)
  • 一种改进的条形码定位方案,基于openCV实现,附完整源代码

            全世界常用和不常用的条码类型大概有一百多种,常用的条码类型一般是指在世界上的多个国家或者地区使用比如EAN-13码、UPC-A码、Code-128码、Code-39码、EAN/UCC-128码、ITF-14码等等,而不常用的条形码可能只是在某些国家地区,或者仅在某一个行业使用,比较少见。

    2024年02月03日
    浏览(26)
  • ASP.NET基于BS方式的即时通讯软件的设计与实现(源代码+论文)

    即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,而各种各样的即时通讯软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。随着互联网的发展,即时通讯的运用将日益广泛,即时通讯软件业方兴未艾。本文首先描述了即时通讯业的发展和现状,

    2024年02月09日
    浏览(29)
  • ASP.NET基于cs的电子邮件简单收发系统设计与实现(源代码+论文)

    电子邮件作为互联网中交换信息广泛的通信工具之一,如今都已被广大用户接受。 早期的电子邮件只是从一个计算机终端向另外一个计算机终端传送文本信息,而现在的电子邮件不仅可以发送文本信息,还可以传送声音、图片、文档等多种信息。很多邮件邮件客户端软件不断

    2024年02月08日
    浏览(43)
  • 基于java的学籍管理系统设计与实现(源代码+数据库+部署文档+部署视频)

    目  录 1 引言............................................................. 1 2 可行性分析及总体设计原则......................................... 3 2.1 可行性分析...................................................... 3 2.1.1 技术可行性................................................... 3 2.1.2 经济可行性........................

    2024年02月03日
    浏览(54)
  • ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文)

    即时通 信 ( I nstant M essage), 由于其具有 实时性、跨平台性、成本低、效率高等优点 而受到广泛的使用。设计并实现 一个能够处理 多用 户进行实时、安全的即时通 信系统 具有较强的现实意义。即时 通信 的底层 通信是 通过SOCKE T套接 字接口实现 的 。当前的主流UNIX系统和

    2024年02月09日
    浏览(50)
  • 基于java的图书借阅管理系统设计与实现(源代码+数据库+部署文档+部署视频)

           图书管理系统 该系统对数据进行保存、修改、删除等管理。为用户提供了一个友好、简单快捷的运行操作平台。该统对数据进行保存、修改、删除等管理,为用户提供了一个友好、简单快捷的运行操作平台。本系统的各界面设计友好、流程正确、功能也较为完善,

    2024年02月03日
    浏览(41)
  • 【毕业设计】42基于FPGA的LCD1602控制器设计仿真与实现(原理图+仿真+源代码+论文)

    包含此题目毕业设计全套资料: 原理图工程文件 仿真工程文件 源代码 仿真截图 低重复率论文,字数:19964 基于altera 公司cyclone4代芯片的fpga以及quartusII软件设计一款屏幕显示系统,显示装置可以选择点阵或字符型液晶,最终实现滚动显示、可控制滚动方向、暂停、清屏等功能

    2024年02月04日
    浏览(79)
  • 《起风了》C++源代码

    Visual Studio、Dev-C++、Visual Studio Code等C/C++创建一个 .cpp 文件,直接粘贴赋值即可。 《起风了》歌词 这一路上走走停停 顺着少年漂流的痕迹 迈出车站的前一刻 竟有些犹豫 不禁笑这近乡情怯 仍无法避免 而长野的天 依旧那么暖 风吹起了从前 从前初识这世间 万般流连 看着天边

    2024年02月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包