C++制作一款小黑子键盘提示音程序

不好意思我漏出鸡脚了。

首先讲一下思路,这次制作的小黑子相当于键盘提示音,输入J,N,T,M,会发出“鸡你太美”的声音,连续按下JNTM则会发出“你干嘛啊,哎呦”的声音。

完整的工程和代码以及成品已经上传至百度网盘,喜欢的同学可以下载:

链接:https://pan.baidu.com/s/101qGAiRrwmY55fadY-nFww

提取码:JNTM

  1. 准备资源

首先我们要下载鸡你太美的音频并剪辑好,然后再准备一个可爱的图片当作图标。我已经准备好了一份,想要的同学可以直接用。

将准备好的资源添加到工程中。

之后不要忘记在主程序引用资源文件

#include "resource.h"
  1. 播放声音

使用PlaySound函数即可

 PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_SYNC);
  1. 获取键盘按键

使用GetAsyncKeyState获取键盘按键状态。为了方便使用,我使用了宏定义

#define KEY_DOWN(key_name) ((GetAsyncKeyState(key_name)& 0x8001)?1:0)
#define KEY_UP(key_name) ((GetAsyncKeyState(key_name)& 0x8001)?0:1)

然后就是获取键盘输入了

for (;;)
    {
        //鸡
        if (KEY_DOWN('J')) {
            if (hasPress[0] == false)
            {
                hasPress[0] = true;
                niganma = 1;
                thread t1(PlaySounds,0);
                t1.detach();
            }
        }
        if (KEY_UP('J'))
        {
            hasPress[0] = false;
        }
        //你
        if (KEY_DOWN('N')) {
            if (hasPress[1] == false)
            {
                hasPress[1] = true;
                if (niganma == 1)
                {
                    niganma = 2;
                }
                else
                {
                    niganma = 0;
                }
                thread t1(PlaySounds, 1);
                t1.detach();
            }
        }
        if (KEY_UP('N'))
        {
            hasPress[1] = false;
        }
        //太
        if (KEY_DOWN('T')) {
            if (hasPress[2] == false)
            {
                hasPress[2] = true;
                if (niganma == 2)
                {
                    niganma = 3;
                }
                else
                {
                    niganma = 0;
                }
                thread t1(PlaySounds, 2);
                t1.detach();
            }
        }
        if (KEY_UP('T'))
        {
            hasPress[2] = false;
        }
        //美
        if (KEY_DOWN('M')) {
            if (hasPress[3] == false)
            {
                hasPress[3] = true;
                if (niganma == 3)
                {
                    thread t1(PlaySounds, 4);
                    t1.detach();
                    niganma = 0;
                }
                else {
                    thread t1(PlaySounds, 3);
                    t1.detach();
                }
                
            }
        }
        if (KEY_UP('M'))
        {
            hasPress[3] = false;
        }
    }

所以,完整的代码如下:

// XiaoHeiZi.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include "resource.h"
#include <iostream>
#include<thread>
#include <conio.h>
#include<stdlib.h>
#include<windows.h>
#include<iostream>
#include <Mmsystem.h> 
#pragma comment(lib, "Winmm.lib") 
#define KEY_DOWN(key_name) ((GetAsyncKeyState(key_name)& 0x8001)?1:0)
#define KEY_UP(key_name) ((GetAsyncKeyState(key_name)& 0x8001)?0:1)
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) 
using namespace std;

bool ModifyRegedit(bool bAutoRun)
{
    char pFileName[MAX_PATH] = { 0 };
    DWORD dwRet = GetModuleFileNameA(NULL, (LPSTR)pFileName, MAX_PATH);
    std::cout << pFileName;
    HKEY hKey;
    LPCSTR lpRun = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
    long lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);
    if (lRet != ERROR_SUCCESS)
    {
        std::cout << "failed";
        return false;
    }
      

    if (bAutoRun)
        RegSetValueA(hKey, "XiaoHeizi", (DWORD)REG_SZ, (LPCSTR)pFileName, MAX_PATH);
    else
        RegDeleteValueA(hKey, "XiaoHeizi");
    RegCloseKey(hKey);
    return true;
}


static void PlaySounds(int i)
{
    if (i == 0)
    {
        PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_SYNC);
    }
    else if (i == 1)
    {
        PlaySound((LPCTSTR)IDR_WAVE4, NULL, SND_RESOURCE | SND_SYNC);
    }
    else if (i == 2)
    {
        PlaySound((LPCTSTR)IDR_WAVE5, NULL, SND_RESOURCE | SND_SYNC);
    }
    else if (i == 3)
    {
        PlaySound((LPCTSTR)IDR_WAVE3, NULL, SND_RESOURCE | SND_SYNC);
    }
    else
    {
        PlaySound((LPCTSTR)IDR_WAVE2, NULL, SND_RESOURCE | SND_SYNC);
    }
    
}
int main()
{
    ModifyRegedit(true);
    bool hasPress[4];
    for (int i = 0; i < 4; i++) {
        hasPress[i] = false;
    }
    int niganma = 0;
    for (;;)
    {
        //鸡
        if (KEY_DOWN('J')) {
            if (hasPress[0] == false)
            {
                hasPress[0] = true;
                niganma = 1;
                thread t1(PlaySounds,0);
                t1.detach();
            }
        }
        if (KEY_UP('J'))
        {
            hasPress[0] = false;
        }
        //你
        if (KEY_DOWN('N')) {
            if (hasPress[1] == false)
            {
                hasPress[1] = true;
                if (niganma == 1)
                {
                    niganma = 2;
                }
                else
                {
                    niganma = 0;
                }
                thread t1(PlaySounds, 1);
                t1.detach();
            }
        }
        if (KEY_UP('N'))
        {
            hasPress[1] = false;
        }
        //太
        if (KEY_DOWN('T')) {
            if (hasPress[2] == false)
            {
                hasPress[2] = true;
                if (niganma == 2)
                {
                    niganma = 3;
                }
                else
                {
                    niganma = 0;
                }
                thread t1(PlaySounds, 2);
                t1.detach();
            }
        }
        if (KEY_UP('T'))
        {
            hasPress[2] = false;
        }
        //美
        if (KEY_DOWN('M')) {
            if (hasPress[3] == false)
            {
                hasPress[3] = true;
                if (niganma == 3)
                {
                    thread t1(PlaySounds, 4);
                    t1.detach();
                    niganma = 0;
                }
                else {
                    thread t1(PlaySounds, 3);
                    t1.detach();
                }
                
            }
        }
        if (KEY_UP('M'))
        {
            hasPress[3] = false;
        }
    }
}

完整的工程和成品已经上传至百度网盘,喜欢的同学可以下载:

链接:https://pan.baidu.com/s/101qGAiRrwmY55fadY-nFww

提取码:JNTM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>