求求大佬帮忙,C语言想写一段节拍式的密码锁(包含密码设定/认证)
想写一段节拍式的密码锁(包含密码设定/认证),流程与目前遇到的问题是1.先输入若干数字(输入密码的节奏自行控制(ex. 1--2----3--4("-"为输入间隔(以ms表示))))
遇到问题(1)不确定C语言是否能做到如"ex.",在只以数字键输入密码前提下,捕捉到其在输入的间隔时间并以某种形式记录下来
(2)希望在键入密码的"同时"以声音做为提示音(类似提款机),目前是以<windows.h> 中的 Beep() 函数作为原型,但效果不理想(做不到同时的效果)
2.输入完成后按下enter进入到验证密码(使用者需照输入时的间隔节奏输入第一步设定的密码)
遇到问题(1)希望输入密码时,将记录下的节奏加入+-的滞迟时间补偿(就如玩节奏游戏,不可能100%完全准确地按在节奏上,希望实现这种功能)
3.节奏与密码输入正确则显示正确提示(此用Password correct!表示)反之以Password incorrect!表示。
遇到问题(1)还未能做到在验证密码"步骤2."让系统纪录时间差,故无法结合判断时间差(节奏)去做密码验证,目前程式码只能以密码是否正确作为验证(但这样失去设计本意),希望可以有解决办法
以上是目前遇到的技术瓶颈,自己在初次做这个项目有查阅很多资料,但几乎没有发现可行的解决办法,也许是基于C语言框架本身的限制,或着说我的观念还不太纯熟,提供这些,希望能提供一些帮助。
下面提供当初的程式码供参考:
程序代码:
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #include <conio.h> #include <math.h> const int NOTE = 440; // 随机生成节奏和音高,并存储到对应的数组中 void generate_rhythm(int rhythm[], int durations[], int length) { srand(time(NULL)); for (int i = 0; i < length; i++) { rhythm[i] = rand() % 7; durations[i] = rand() % 1200 + 200; } } // 根据音高和持续时间,发出声音 void play_tone(int note_index, int duration) { Beep(NOTE * (int)pow(2, note_index / 7.0), duration); } // 验证密码 int check_password(char password[], int rhythm[], int durations[], int length) { int note_index = 0; printf("Please input the password in rhythm:n"); for (int i = 0; i < length; i++) { char c = getch(); if (c == 'r' || c == 'n' || c == ' ') { break; } if (password[i] != c) { return 0; } play_tone(rhythm[note_index], durations[note_index]); note_index = (note_index + 1) % length; Sleep(250); } return 1; } int main() { char password[50]; int rhythm[50], durations[50]; int password_length = 0; generate_rhythm(rhythm, durations, 50); printf("Please enter your password:n"); // 读入密码 while (1) { char c = getch(); if (c == 'r' || c == 'n') { break; } password[password_length] = c; password_length++; } // 发出节奏 for (int i = 0; i < password_length; i++) { play_tone(rhythm[i], durations[i]); // 暂停一段时间,以实现特定的节奏 Sleep(250); } // 验证密码 if (check_password(password, rhythm, durations, password_length)) { printf("nPassword correct!n"); } else { printf("nPassword incorrect!n"); } return 0; }