简介
项目名称: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(嘿嘿嘿)......