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

这篇具有很好参考价值的文章主要介绍了C++制作一款小黑子键盘提示音程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不好意思我漏出鸡脚了。

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

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

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

提取码:JNTM文章来源地址https://www.toymoban.com/news/detail-500523.html

  1. 准备资源

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

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

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

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

#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

到了这里,关于C++制作一款小黑子键盘提示音程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 辅助测试和研发人员的一款小插件【数据安全】

    数据,一直在思考如何让数据更安全的流转和服务于客户,围绕这样的想法,我们做过许多方面的扩展。我们落地了服务端的数据切片支持场景化的设计,实现了基于JDBC协议对SQL的拦截与切片,实现了在应用层的全链路数据库审计方案和实现,实现了WEB端明暗水印和文档水印

    2024年02月06日
    浏览(45)
  • 电脑卡顿分享一款小工具MemReduct让电脑起飞不卡顿

    手机技巧 | 电脑软件  | 电视软件  |实用干货 | 你是否经常遇到电脑运行缓慢,内存占用过高,甚至出现死机或蓝屏的情况?你是否想要优化你的电脑性能,提高运行速度,节省电池寿命?如果你的答案是肯定的,那么你一定要试试mem reduct这款内存管理工具。 *创作不易,点

    2024年02月16日
    浏览(33)
  • 一款程序员值得拥有的机械键盘:Keychron K3

    我是一个工作将近20年的老程序员,每天有10个小时的时间使用笔记本电脑编程,但是最近一年才开始使用一款机械键盘:Keychron K3. 这是为什么呢? 我工作的公司,每隔三年会让开发人员将之前使用的笔记本电脑回收,再授予新型号的电脑。我一直是 Thinkpad 系列的忠实用户。

    2024年02月11日
    浏览(50)
  • 如何为WPF应用程序制作一个虚拟键盘?这里有答案(Part 1)

    Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio工具箱中。 点击获取Telerik UI for WPF最新版下载 T

    2024年02月09日
    浏览(93)
  • ghost磁盘克隆后,笔记本的键盘鼠标不可用,外接键盘也不好用,触摸板可用,提示Windows 无法加载这个硬件的设备驱动程序。驱动程序可能已损坏或不见了。 (代码 39)无法识别该外部支持提供程序。

     原来笔记本的1T m2硬盘有点不够用了,我就搞了另外一台2T的,用ghost全盘克隆了系统,但是启动后笔记本的键盘不能用了,但是触摸板还是可以正常使用。外接键盘鼠标也全部失灵,但是远程控制软个如向日葵和todesk都是可以输入的。 另外启动设备管理器时报这个错   

    2024年02月03日
    浏览(57)
  • 探秘DaiDodgeKeyboard:一款创新的键盘布局优化项目

    项目地址:https://gitcode.com/DaidoujiChen/DaiDodgeKeyboard 【](https://gitcode.com/DaidoujiChen/DaiDodgeKeyboard?utm_source=artical_gitcode)】 DaiDodgeKeyboard 是一个开源项目,旨在提供一种更高效、更符合人体工程学的键盘布局解决方案。这个项目的开发者——DaidoujiChen,通过深入研究和实践,设计出了一

    2024年04月10日
    浏览(34)
  • 不好意思,ELK 该换了!

    来源:https://cloud.tencent.com/developer/article/2115373 最近客户有个新需求,就是想查看网站的访问情况,由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的页面,咱也做不到 成熟的日志解决方

    2024年02月05日
    浏览(47)
  • 不好意思,Nginx 该换了!

    来源:nginx(ID:nginx-study) Cloudflare公司去年宣布弃用nginx,转用自研的新一代方向代理服务Pingora,并号称比nginx更快、更高效、更安全,下面通过Cloudfare官方网站的一篇文章来了解下Pingora比Nginx强在哪里。 今天,我们很高兴有机会在此介绍 Pingora,这是我们使用 Rust 在内部构

    2024年02月08日
    浏览(56)
  • 不好意思,Mybatis Plus 该换了!

    来源:juejin.cn/post/6886019929519177735 使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybati

    2024年02月08日
    浏览(53)
  • 不好意思,list.contain 去重该换换了!

    最近又是一轮代码review , 发现了一些实现去重的代码,在使用 list.contain ...... 我沉思,是不是其实很多初学者也存在这种去重使用问题? 所以我选择把这个事情整出来,分享一下。 推荐一个开源免费的 Spring Boot 实战项目: https://github.com/javastacks/spring-boot-best-practice 首先是造

    2024年02月10日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包