C++/C语言编程功德木鱼

简介

项目名称:C++/C语言功德木鱼小程序(Merit Wooden Fish) 
开发环境:devc++
外部库:EGE 
优化级别:自动
C++标准:ISOC++11
游戏规则:鼠标点击 

项目介绍

前一段时间功德木鱼十分的火爆,于是我就跟风制作了一个建议的功德木鱼小程序(但是没有佛祖陪你笑),而且字幕在一时间内也只能显示一条,十分影响体验,但是挂个代码(可能写的不好,多多见谅)

项目源码&&注释

Merit Wooden Fish.cpp

#include "subsidiary.cpp"
mouse_msg mouse;//鼠标状态变量 
PIMAGE png=NULL;//木鱼图片指针 
PIMAGE jpg=NULL;//文字图片指针 
char name[]="../pictures/wooden Fish.png";//木鱼图片路径 
char music[]="../music/music.wav";//敲击音效路径 
char ch[]="../pictures/characters.png";//文字图片路径 
bool status=false,status2=false;//鼠标状态哨兵 
int big=WIDTH,tm,y;//木鱼大小 ,文字透明度,文字位置
int main()
{
	HideWindow();//隐藏控制台 
	initgraph(HIGH,WIDTH,INIT_RENDERMANUAL);//初始化窗口(x,y),并设置为手动渲染模式
	//即须有delay_fps()之类的函数才会输出缓冲帧 
	setbkcolor(EGERGB(0,0,0));//设置背景RGB颜色为0,0,0,即黑色 
	setcaption("功德木鱼");//设置窗口标题 
	GetPicture(png,name);
	//读取木鱼图片
	GetPicture(jpg,ch);
	//读取文字图片
	ChangeSize(WIDTH,HIGH,png);
	//调整图片大小
	putimage(WIDTH/2-big/2,HIGH/2-big/2,png);
	//保持木鱼在中间 
	for(;is_run();delay_fps(60))
	{
		while(status2==true||mousemsg())
		{
			//当有鼠标信息时 
			mouse=getmouse();
			//获取鼠标信息 
			if(mouse.is_left()&&mouse.is_down()&&status==false)
			{
				//鼠标按下且标记位为左键没按下 
				y=STARTY;//文字的起始位置 
				status=true;//将标记位标记为左键按下 
			}
			else if((mouse.is_left()&&mouse.is_up())||status2==true)
			{
				//鼠标左键弹起 
				status=false;//将标志位标志为松开 
				status2=false;
				for(tm=STARTTM;big<=WIDTH;big++,delay_fps(60),tm--,y--)
				{
					//将木鱼的大小一点点恢复 
					//文字向上移动,且透明度变高 
					cleardevice();//清屏 
					ChangeSize(big,big,png);//改变木鱼的大小 
					putimage(WIDTH/2-big/2,HIGH/2-big/2,png);//在中间输出木鱼 
					putimage_alphablend(NULL,jpg,WIDTH-100,y,tm);//输出文字 
				}
				Music(music);//播放敲击木鱼的声音 
				putimage(WIDTH/2-big/2,HIGH/2-big/2,png);//在中间输出木鱼 
				delay_fps(60);//手动渲染,让缓冲帧输出 
			} 
		} 
		if(status==true)
		{
			//如果左键按下 
			if(big>=(WIDTH-SCOPE))
			{
				//如果木鱼的大小大于范围值
				//则继续缩小 
				big--;//将木鱼大小缩小 
				cleardevice();//清屏 
				ChangeSize(big,big,png);//改变木鱼的大小 
				putimage(WIDTH/2-big/2,HIGH/2-big/2,png);//在中间输出木鱼 
			}
			putimage_alphablend(NULL,jpg,WIDTH-100,y,STARTTM);//输出文字 
			y--;//文字位置变高 
			if(y<=ENDY)status2=true,status=false;
			//如果文字到达指定位置,不再上升 
			delay_fps(60);//手动渲染,让缓冲帧输出 
		}
	}
	return 0;
}

subsidiary.cpp

#include "subsidiary.h"
int ChangeSize(int width,int high,PIMAGE& png)//改变图片大小 
{
	if(png==NULL)
		return -1;
	else if(width==getwidth(png)&&getheight(png))
		return 0;
	//判断图片指针是否为空和是否需要改变大小
	 
	PIMAGE png2=newimage(width,high);//定义一个规定大小的空图片指针 
	putimage(png2,0,0,width,high,png,(getwidth(png)-width)/2,(getheight(png)-high)/2,getwidth(png),getheight(png));
	//将图片输出到空指针内,并且改变大小 
	delimage(png);
	//销毁原指针的图片数据 
	png=png2;
	//用原指针指向修改大小后的指针数据 
	return 0;
}
int GetPicture(PIMAGE& png,char* name)//图片指针,文件绝对路径 
{
	//读取图片并保存在图片指针png内 
	png=newimage();//申请内存 
	int eorry=getimage(png,name);
	//读取图片,获取其状态 :成功、失败 
	
	if(eorry!=0)return -1;
	//判断图片是否获取成功 
	return 0;
}
void Music(char* name)//文件绝对路径 
{
	//播放wav格式的音乐 
	PlaySound(name,NULL,SND_ASYNC);
}
void HideWindow()
{
	//隐藏控制台 
	ShowWindow(GetConsoleWindow(),SW_HIDE);
}

subsidiary.h

#include "graphics.h"
#include <time.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
#define HIGH 250
#define WIDTH 250
#define STARTY 20
#define STARTTM 255
#define ENDY 10
#define SCOPE 10

写在最后

全套源码在主页资源处

功德加999999999(嘿嘿嘿)......

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值