C语言零基础项目:吃豆人小游戏!详细思路+源码分享

每天一个C语言小项目,提升你的编程能力!

《吃豆游戏》是一款休闲小游戏,和贪吃蛇,球球大作战吃食物都是有差不多的游戏逻辑。

效果展示:

这个游戏本身很简单,一共3关,吃掉画面上全部小豆子就过关,被敌人碰到就over。吃大豆子可以让敌人暂时能被你吃,但是后面关卡,敌人恢复时间很短,敌人速度也很快。

当然现在你用代码自己开发的话,设置多少关卡,什么样的难度都看你自己咯!

游戏中使用了图片【https://codebus.cn/f/a/0/0/135/boxman.zip】

本项目编译环境:Visual Studio 2019/2022,EasyX插件

代码展示:

#include <stdio.h.h>
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define M 640                       //开屏大小
#define N 480     
#define rank 1                      //游戏等级                  
 
int  g_sum   = 0;                   //统计吃豆的个数
int  g_score = 0;                   //分数统计
bool g_win   = true;                //成败的标志
IMAGE image[5];                     //装载图片
enum {LEFT=1, RIGHT, UP, DOWN};     //方向的控制
struct figure						//人物属性
{
	int x;				   //人物图纸坐标      
	int y;
	int x1;                //人物方向移动
	int y1;
	int x2;				   //人物物理坐标
	int y2;
}you,enemy[5];          

/*0豆子,1可以移动地方,2墙壁,3自己,4敌人*/ 
int a[15][20]= {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 
				2,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2, 
				2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2, 
				2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2, 
				2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2, 
				2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2, 
				2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2, 
				2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2, 
				2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2, 
				2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2, 
				2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2, 
				2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2, 
				2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2, 
				2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2, 
				2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/ 

int b[15][20]= {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 
				2,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,2, 
				2,1,2,2,2,1,1,2,1,1,0,0,0,1,1,4,1,1,0,2, 
				2,1,1,0,2,1,1,2,0,1,1,2,2,2,2,2,0,0,0,2, 
				2,4,1,0,2,1,1,2,1,1,1,0,1,1,1,1,0,1,1,2, 
				2,1,2,1,2,1,1,2,1,3,2,2,1,1,1,1,2,2,1,2, 
				2,1,2,1,2,1,1,1,1,1,1,1,1,0,0,0,1,1,1,2, 
				2,1,2,1,0,1,1,1,1,2,1,0,1,2,2,2,1,1,1,2, 
				2,1,0,1,0,1,2,1,1,2,1,0,1,2,1,1,4,1,1,2, 
				2,1,0,2,0,1,2,1,1,2,1,0,1,2,1,1,1,1,1,2, 
				2,1,0,2,1,1,2,1,1,2,1,0,2,2,1,0,0,0,1,2, 
				2,1,1,2,1,1,2,1,1,2,1,0,2,1,1,2,2,1,1,2, 
				2,1,2,2,1,2,2,1,1,1,1,0,1,4,1,2,0,0,1,2, 
				2,1,0,0,0,0,0,4,0,1,1,0,1,1,1,1,0,0,1,2, 
				2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2};/*数组就是地图*/ 

函数声明/
void Init_begin();									//初始化开始界面
void Initia();										//初始化界面
void Init_score();									//记分板
void Init_loss();									//失败的界面
void Init_win();									//成功的界面
void Init_leave();									//离开的界面
void Init_copy();									//图形复制
void enemymove();					   				//敌人运动
void randdire(struct figure *sth);			        //使方向随即改变
bool judgemeet();									//相遇判断
void youmove(int k ,int speed) ;					//对自己进行移动
void mobile();										//自己移动
void eatbean();								    	//判断是否吃小黄点
void play();										//开始游戏
int  sjs(int a,int b);								//产生a,b之间的数
void enemymeetroad(int i);							//敌人与路
void enemymeetbean(int i) ;					    	//敌人遇豆子
void load_image();									//加载图片
void Game_levels();                                 //游戏等级设定                   

/

void Init_begin() 									//初始化开始界面
{
	setbkcolor(BLACK);
	char init[20] = "吃豆子游戏";
	int x = M/2 - 250,y = 100;
	setcolor(CYAN);
    setfont(100, 0,"楷体",0,0,FW_DEMIBOLD,false,false,false);
	outtextxy(x,y,init);
	Sleep(400);

   
	RECT r = {x + 50, 250, 540, 460};
	setfont(24, 0, "宋体");
	setcolor(BROWN);
	outtextxy(x + 50, 250,"吃豆子游戏规则:");
	setfont(18, 0, "宋体");
	drawtext("\n\n1:游戏中,操作者可以通过方向键(上、下、左、右)或字母键(‘w’、‘s’、‘a’、‘d’)来调整方向		\n2:游戏中途可以按‘空格键’来暂停游戏		\n3:按‘ESC’推出游戏",
		&r, DT_WORDBREAK);


	setfont(24, 0,"楷体");
	setcolor(DARKGRAY);
    outtextxy(M/2 - 107,y + 300, "按");
	setcolor(RED);
	outtextxy(M/2 - 80, y + 300, "回车键");
	setcolor(DARKGRAY);
	outtextxy(M/2 , y + 300, "开始游戏");
	char put ;
	put = getch();
	while(put != 13)
       put = getch();
}

/*0豆子,1可以移动地方,2墙壁,3自己,4敌人*/
void Initia() 										//初始化界面
{
	cleardevice();
	setbkcolor(RGB(72,12,12));

	for( int i = 0;i < 15;i++)                      
	  for(int j = 0;j < 20;j++)
	     putimage(100+j*20,100+i*20,&image[a[i][j]]);

	you.x=9;            you.y=5;					//敌人和自己的初始图纸坐标 
	enemy[0].x=15; enemy[0].y=2; 
	enemy[1].x=1;  enemy[1].y=4; 
	enemy[2].x=16; enemy[2].y=8; 
	enemy[3].x=13; enemy[3].y=12; 
	enemy[4].x=7;  enemy[4].y=13; 

	you.x2 = you.x * 20 + 100;						//图纸坐标转化为屏幕坐标
	you.y2 = you.y * 20 + 100;
	for(i=0;i<5;i++)
	{
		enemy[i].x2 = enemy[i].x * 20 + 100;        
		enemy[i].y2 = enemy[i].y * 20 + 100;
		enemy[i].x1 = 0;	enemy[i].y1 = 1;
	}
	Init_score();
}

void load_image()                                  //加载图片
{
	loadimage(&image[0],"IMAGE", "0.jpg");
	loadimage(&image[1],"IMAGE", "1.jpg");
	loadimage(&image[2],"IMAGE", "2.jpg");
	loadimage(&image[3],"IMAGE", "3.jpg");
	loadimage(&image[4],"IMAGE", "4.jpg");
}

void Init_score() 							       //记分板
{
	setbkcolor(RGB(72,12,12));
	char infor[10];
	itoa(g_score,infor,10);
	setcolor(CYAN);
	setfont(28,0,"Arial");
	outtextxy(M - 140,90,"当前分数为");
	setfillstyle(RGB(72,12,12));
	bar(M - 40,140,M - 20,170);
	outtextxy(M - 80,140,infor);
}

int sjs(int a,int b)                               //产生a,b之间的数                        
{
	return a+rand()%(b-a+1);
}

void Init_copy()                                   //图形复制
{ 
	for(int i = 0;i < 15;i++)
		for(int j = 0;j < 20;j++)
		  a[i][j] = b[i][j];
}

void enemymeetbean(int i)  				    	  //敌人遇豆子
{
	int x = enemy[i].x2  ;
	int y = enemy[i].y2  ;
	for(int j = 0;j<20;j++)
	{
		putimage(x,y,&image[0]);
		enemy[i].x2 += enemy[i].x1;
		enemy[i].y2 += enemy[i].y1;
		putimage(enemy[i].x2,enemy[i].y2,&image[4]);
	}
}

void enemymeetroad(int i)                        //敌人遇路
{
	int x = enemy[i].x2 ;
	int y = enemy[i].y2  ;
	for(  int j = 0;j < 20;j++)
	{
		putimage(x,y,&image[1]);
		enemy[i].x2 += enemy[i].x1;
		enemy[i].y2 += enemy[i].y1;
		putimage(enemy[i].x2,enemy[i].y2,&image[4]);
	}
}

void enemymove() 					   	         //敌人运动
{ 
	Game_levels();
	for(int i = 0;i < 5;i++)                     //判断是否与墙壁相遇,如果相遇,随即改变方向
	{
		if(a[enemy[i].y+enemy[i].y1][enemy[i].x+enemy[i].x1] == 2  ||  abs(enemy[i].y1) == abs(enemy[i].x1)) 
			randdire(&enemy[i]);
	}
	for(i = 0;i < 5;i++)
	{
		if(a[enemy[i].y ][enemy[i].x] == 0)
			enemymeetbean(i);
		else  
			enemymeetroad(i);
		enemy[i].x+=enemy[i].x1;
		enemy[i].y+=enemy[i].y1;
		if(judgemeet()) break;
	}
	Sleep(180);
}

void Game_levels()                                  //游戏等级设定                   
{
	if( sjs (1,rank) == 1)
    {
		int t = rand() % 5;
		enemy[t].x1 = enemy[t].x - you.x > 0 ? -1 : 1;  
	    enemy[t].y1 = enemy[t].y - you.y > 0 ? -1 : 1;
	}
	for(int i = 0;i < 5;i++)
	{
		if(enemy[i].x == you.x && enemy[i].y + 1 == you.y)
		{enemy[i].x1 = 0 ;     enemy[i].y1 = 1;}
		if(enemy[i].x == you.x && enemy[i].y - 1 == you.y)
		{enemy[i].x1 = 0 ;     enemy[i].y1 = -1;}
		if(enemy[i].x + 1 == you.x && enemy[i].y == you.y)
		{enemy[i].x1 = 1 ;     enemy[i].y1 = 0;}
		if(enemy[i].x - 1 == you.x && enemy[i].y == you.y)
		{enemy[i].x1 = -1 ;    enemy[i].y1 = 1;}
	}
}

void randdire( struct figure *sth)            //使方向随即改变 
{
   int b=1;
   int x,y;
   while(b)
   {
	   x =sjs(-1,1);
	   y=sjs(-1,1);
	   if(a[sth->y + y][sth->x + x] != 2 && abs(y) != abs(x))
	   {
			b = 0;
			sth->x1 = x;
			sth->y1 = y;
		}
	   else b = 1;
	}
}

bool judgemeet	() 		                      //相遇判断
{
	for(int i = 0;i < 5;i++)
	{
		if(enemy[i].x == you.x && enemy[i].y == you.y )
		{
			g_win  = false;
			Init_loss();
			return true;
			break;
		}
	}
	return false;
}

void eatbean() 								//判断是否吃小黄点
{
	if(a[you.y][you.x] == 0)
	{
	    a[you.y][you.x] = 1;
		g_sum++;
		g_score += 10;
		Init_score();
		a[you.y][you.x] = 1;
	}
}

void youmove(int k)                        //对自己进行移动
{
 	switch(k)
	{
	case LEFT:
		 you.x1 = -1;you.y1 = 0;
		break;
	case RIGHT:
	     you.x1 = 1;you.y1 = 0;
		break;
	case DOWN:
	     you.x1 = 0;you.y1 = 1;
		break;
	case UP:
	    you.x1 = 0;you.y1 = -1;
		break;
	}
   if(a[you.y + you.y1][you.x + you.x1] != 2)
   {
	   int x = you.x2 ;
	   int y = you.y2 ;
	   for(int j = 0 ;j < 10;j++)
	   {
			putimage(x,y,&image[1]);
			you.x2 += you.x1 * 2;
			you.y2 += you.y1 * 2;
			putimage(you.x2,you.y2,&image[3]);
	   }
	   you.x += you.x1;
	   you.y += you.y1;
	   eatbean();
   }
 }
 
void Init_loss()                            //失败的界面
{
	cleardevice();
	char str[] = "挑战失败,还需继续努力呀!";
	LOGFONT f;
	getfont(&f);
	f.lfHeight = 48;
	strcpy(f.lfFaceName , "楷体");
	f.lfQuality = ANTIALIASED_QUALITY;
	f.lfWeight = FW_NORMAL;
	setcolor(LIGHTGREEN);
	setfont(&f);
	outtextxy(20,200,str);

	char tryagain[] = "是否想继续挑战?(Y/N)";
	f.lfHeight = 28;
	setfont(&f);
	setcolor(BROWN);
	outtextxy(90,300,tryagain);

	char yesorno ;
	int keep = 1 ;
	while(keep)
	{
		yesorno = getch();
		if(yesorno == 'Y' || yesorno == 'y' || yesorno == 'N' || yesorno == 'n')
			keep = 0;
	}
		
	if(yesorno == 'Y'|| yesorno == 'y')
	{
		g_win   = true;
		g_score = 0;
		g_sum   = 0;
		cleardevice();
		Init_copy();
		Initia();
	}
	else  Init_leave();
}

void Init_leave()
{
	cleardevice();
	char str[] = "下次继续努力吧!";
	LOGFONT f;
	getfont(&f);
	f.lfHeight = 48;
	strcpy(f.lfFaceName , "楷体");
	f.lfQuality = ANTIALIASED_QUALITY;
	f.lfWeight = FW_NORMAL;
	setcolor(LIGHTGREEN);
	setfont(&f);
	outtextxy(150,200,str);
	Sleep(2000);
	exit(0);
}

void Init_win()                             //成功的界面                        
{
	cleardevice();
	char str[] = "恭喜你通过了游戏!!!";
	LOGFONT f;
	getfont(&f);
	f.lfHeight = 48;
	strcpy(f.lfFaceName , "楷体");
	f.lfQuality = ANTIALIASED_QUALITY;
	f.lfWeight = FW_NORMAL;
	setcolor(LIGHTGREEN);
	setfont(&f);
	outtextxy(50,200,str);
	Sleep(4000);

	char tryagain[] = "是否想再次挑战?(Y/N)";
	f.lfHeight = 28;
	setfont(&f);
	setcolor(BROWN);
	outtextxy(70,300,tryagain);

	char yesorno ;
	yesorno = getch();
	if(yesorno == 'y' || yesorno == 'Y')
	{
		g_win   = true;
		g_score = 0;
		g_sum   = 0;
		cleardevice();
		Init_copy();
	    Initia();							   
	}
	else  exit(0);
}

void stop()                                 //游戏暂停
{
	char key = 'a';
	char stop[] = "游戏暂停中";
	setcolor(RED);
	setfont(28,0,"楷体");
	outtextxy(230,50,stop);
	Sleep(100);
	while(key != ' ')
	key = getch();
	setcolor(RGB(72,12,12));
	outtextxy(230,50,stop);
}

void play()
{
	setbkcolor(RGB(72,12,12));
	char key;             //获取字母
	int t;                //记录方向
  	while(g_win)
	{
		enemymove();
    	judgemeet();
		while(kbhit())
		{
			key = getch();
			switch(key)
			{
			case 'a':
			case  75:      	t = LEFT;    youmove(t ); 			break;
			case 'd':
			case  77:   	t = RIGHT;  ;  youmove(t );   		break;
			case 's':
			case  80:       t = DOWN;      youmove(t );    		break;
			case 'w':
			case  72:		t = UP;    	youmove(t );  	 	break;
			case  27:		Init_leave();	break;
			case  32:		stop();			break;
			default :                       break;
			}
		}
		if(g_sum == 50)        Init_win();
	}
}

void main()
{
	initgraph(M,N);
	load_image();
	Init_begin();
	setbkcolor(RGB(72,12,12));
 	
	srand((unsigned)time(NULL));
	Initia(); 
	play();
	closegraph();
}

大家赶紧去动手试试吧!

此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上披荆斩棘!

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!(↓↓↓↓↓↓)

  • 11
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
基于C++控制台(Windows平台)的一个吃豆人小游戏.zip 探索c++ 小游戏的无限可能 一、开启c++ 游戏之门 对于许多初学者来说,c++ 可能是一门既神秘又令人畏惧的语言。但其实,c++ 也可以非常有趣!这次我们为您带来了一系列c++ 小游戏资源,旨在让您在轻松愉快的氛围中,逐步掌握c++ 的精髓。 二、资源亮点 由浅入深:我们为您提供了从入门级到进阶级的多种小游戏资源,满足您不同阶段的学习需求。 实践为王:这些资源不仅仅是理论,更有实际可运行的代码,让您亲身体验编程的乐趣。 模块化设计:每个游戏都按照功能模块进行划分,方便您学习和理解。 社区参与:我们鼓励您参与到社区中,与其他学习者分享经验,共同进步。 三、适用人群 无论您是初涉编程的新手,还是希望深入了解c++ 的进阶者,这些资源都能为您提供宝贵的实践机会。 四、使用建议 边学边做:建议您在学习过程中,积极动手实践,亲自感受c++ 的魅力。 不断挑战:尝试自行修改和优化游戏代码,培养独立思考和解决问题的能力。 交流与分享:加入我们的学习社群,与其他学习者交流心得,共同成长。 五、注意事项 尊重版权:请确保在使用这些资源时,遵循版权法规,尊重原创者的权益。 安全为先:在编写和运行代码时,请确保您的开发环境安全可靠,避免潜在风险。 持续学习:编程是一个不断进阶的过程,希望您能保持对知识的热情,持续深入学习。 感谢您选择我们的c++ 小游戏资源系列!让我们一起在探索中成长,用代码书写属于我们的精彩故事!
以下是一个简单的 C 语言实现的“吃豆人游戏的源代码,注释在代码中: ```c #include <stdio.h> #include <conio.h> // conio.h 库提供了一些控制台输入输出的函数,比如 getch() 函数 #include <stdlib.h> #include <time.h> #define ROW 10 // 定义行数 #define COL 20 // 定义列数 // 定义地图上的不同元素 #define BLANK ' ' // 空地 #define WALL '#' // 墙壁 #define DOT '.' // 豆子 #define PACMAN 'O' // 吃豆人 #define GHOST 'X' // 幽灵 // 定义吃豆人的方向 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 // 定义吃豆人和幽灵的初始位置 #define PACMAN_ROW 1 #define PACMAN_COL 1 #define GHOST_ROW 5 #define GHOST_COL 10 // 定义全局变量 int score = 0; // 得分 int pacman_row = PACMAN_ROW, pacman_col = PACMAN_COL; // 记录吃豆人的位置 int ghost_row = GHOST_ROW, ghost_col = GHOST_COL; // 记录幽灵的位置 char map[ROW][COL]; // 地图 // 初始化地图 void init_map() { int i, j; // 随机放豆子 srand(time(NULL)); // srand() 函数需要传入一个种子值,通常使用 time() 函数的返回值作为种子值,以确保每次运行程序时都会产生不同的随机数序列 for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (i == 0 || i == ROW - 1 || j == 0 || j == COL - 1) // 地图边缘放墙壁 { map[i][j] = WALL; } else if (rand() % 4 == 0) // 25% 的概率放豆子 { map[i][j] = DOT; } else { map[i][j] = BLANK; } } } // 放置吃豆人和幽灵 map[pacman_row][pacman_col] = PACMAN; map[ghost_row][ghost_col] = GHOST; } // 显示地图 void show_map() { int i, j; system("cls"); // 清空控制台屏幕 printf("得分:%d\n", score); for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { printf("%c", map[i][j]); } printf("\n"); } } // 移动吃豆人 void move_pacman(int direction) { switch (direction) { case UP: if (map[pacman_row - 1][pacman_col] != WALL) // 判断上方是否是墙壁 { pacman_row--; } break; case DOWN: if (map[pacman_row + 1][pacman_col] != WALL) // 判断下方是否是墙壁 { pacman_row++; } break; case LEFT: if (map[pacman_row][pacman_col - 1] != WALL) // 判断左方是否是墙壁 { pacman_col--; } break; case RIGHT: if (map[pacman_row][pacman_col + 1] != WALL) // 判断右方是否是墙壁 { pacman_col++; } break; } if (map[pacman_row][pacman_col] == DOT) // 吃到豆子 { score++; map[pacman_row][pacman_col] = BLANK; } map[pacman_row][pacman_col] = PACMAN; // 更新地图上的吃豆人位置 } // 移动幽灵 void move_ghost() { int direction; // 随机选择幽灵的移动方向 direction = rand() % 4 + 1; switch (direction) { case UP: if (map[ghost_row - 1][ghost_col] != WALL) // 判断上方是否是墙壁 { ghost_row--; } break; case DOWN: if (map[ghost_row + 1][ghost_col] != WALL) // 判断下方是否是墙壁 { ghost_row++; } break; case LEFT: if (map[ghost_row][ghost_col - 1] != WALL) // 判断左方是否是墙壁 { ghost_col--; } break; case RIGHT: if (map[ghost_row][ghost_col + 1] != WALL) // 判断右方是否是墙壁 { ghost_col++; } break; } map[ghost_row][ghost_col] = GHOST; // 更新地图上的幽灵位置 } // 判断游戏是否结束 int is_game_over() { if (pacman_row == ghost_row && pacman_col == ghost_col) // 吃豆人和幽灵相遇,游戏结束 { return 1; } int i, j; for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (map[i][j] == DOT) // 还有豆子未吃完,游戏继续 { return 0; } } } return 1; // 豆子已经被吃完,游戏结束 } int main() { int direction; init_map(); while (1) { show_map(); if (kbhit()) // 判断是否有键盘输入 { direction = getch(); // 获取键盘输入 switch (direction) { case 'w': case 'W': case 72: // 上箭头 move_pacman(UP); break; case 's': case 'S': case 80: // 下箭头 move_pacman(DOWN); break; case 'a': case 'A': case 75: // 左箭头 move_pacman(LEFT); break; case 'd': case 'D': case 77: // 右箭头 move_pacman(RIGHT); break; } } move_ghost(); if (is_game_over()) { show_map(); printf("游戏结束!得分:%d\n", score); break; } Sleep(100); // 休眠 100 毫秒,以控制游戏速度 } return 0; } ``` 这是一个简单的控制台程序,它实现了一个简单的“吃豆人游戏。玩家需要使用方向键控制吃豆人的移动,吃掉地图上的豆子,同时还要避开幽灵。游戏得分会随着吃掉的豆子数量增加而增加。当吃豆人和幽灵相遇,或者所有豆子都被吃掉时,游戏结束,显示得分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值