从屏幕上方从上往下,随机刷新字母,字母为下坠效果,按下一个对应的字母即可加一分,到达分数后通关
按下对应字母
左下角会计分
直接上代码
#include <stdio.h>
#include <locale.h>
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <time.h>
#include <conio.h>
#include <unistd.h>
#include <windows.h>
void dayin();
void zhongwendayin();
void kuang();
void youxiyunxing();
int weizhi[20];
char zimu[20];
void suijiweizhi();
void suijizimu() ;
int stopPrinting = 0;
int score = 0;
void jeishu();
void jeishu1();
void chongkai();
void jeishu()
{
system("cls");
printf("游戏结束!恭喜通关,3秒后退出\n");
printf("3...\n");
sleep(1);
printf("2...\n");
sleep(1);
printf("1...\n");
exit(0);
/* printf("输入y加回车重新开始游戏: \n");
char remake;
scanf("%c",&remake);
if(remake == 'y'||remake=='Y')
{
chongkai();
}
*/
}
void jeishu1()
{
system("cls");
printf("游戏结束!恭喜通关,3秒后退出\n");
printf("3...\n");
sleep(1);
printf("2...\n");
sleep(1);
printf("1...\n");
exit(0);
}
void dayin(int x, int y, char text) // 在指定位置打印字符 dayin(个 ,行,"打印啥玩意")
{
printf("\033[?25l"); // 隐藏光标
printf("\033[%d;%dH", y, x);
printf("%c", text);
}
void zhongwendayin(int x, int y, const char text[50]) // 在指定位置打印字符 dayin(个 ,行,"打印啥玩意")
{
printf("\033[?25l"); // 隐藏光标
printf("\033[%d;%dH", y, x);
printf("%s", text);
}
void suijiweizhi() //生成随机10个1-100的数存在[]
{
srand(time(NULL));
for (int i = 0; i <= 15; ++i) {
weizhi[i] = rand() % 99+ 2;
}
}
void suijizimu() //生成10个26个字母 存在zimu[]
{
srand(time(NULL));
for (int i = 0; i <= 15; ++i)
{
int suijidezimu = rand() % 26;
zimu[i] = (char)(suijidezimu + 'A');
}
}
void kuang()
{
system("cls");
for(int i=0;i<102;i++)
{
dayin(i, 0, '*');
}
for(int i=0;i<102;i++)
{
dayin(i, 24, '*');
}
for(int i=1;i<24;i++)
{
dayin(0,i , '*');
}
for(int i=1;i<25;i++)
{
dayin(102,i , '*');
}
}
void anjian() {
if (_kbhit()) {
char key = _getch();
for (int i = 0; i <= 15; ++i)
{
// 将输入的字符和数组中的字符都转换为小写(或大写)
if (tolower(key) == tolower(zimu[i]))
{
zimu[i] = ' '; // 将匹配的 zimu[] 中的字符变为空格
score++;
if(score < 10)
{
dayin(1, 27, (score %10)+'0' );
}
else if(score == 10)
{
dayin(1, 27, '1' );
dayin(2, 27, '0' );
}else
{
dayin(1, 27, '1' );
dayin(2, 27, (score %10)+'0' );
}
return;
}
}
}
}
void youxiyunxing()
{
suijiweizhi();
suijizimu() ;
int speed = 0;
int youxiflag = 1;
while(youxiflag == 1)
{
Sleep(100);//0.001秒刷新一次
speed++;
anjian();
int speedflag = (speed / 10) + 1;
for (int i = 1; i <= 15; ++i)
{
if ((speedflag <= 22)&&score<10)
{
dayin(weizhi[i], speedflag, ' '); // 将第i个位置打印为空格
dayin(weizhi[i], speedflag + 1, zimu[i]); // 将下一行打印为字母
}
else if((speedflag > 22))
{
youxiflag = 0;
}
else if(score>=10)
{
Sleep(100);
youxiflag = 3;
}
}
}
if(youxiflag == 0)
{
jeishu1();//通关失败
}else if(youxiflag == 3)
{
jeishu();//成功
}
}
void chongkai()
{
kuang();//打印框
zhongwendayin(1, 26, "您的分数是:" );
youxiyunxing() ;
}
int main ()
{
/* printf("输入y加回车重新开始游戏: \n");
char remake;
scanf("%c",&remake);
if(remake == 'y'||remake=='Y')
{
chongkai();
}
*/
system("cls");
chongkai();
}