动态数组在消字母游戏精简版的应用(C语言)

这是一个简易的消单词游戏程序,利用C语言实现。游戏通过随机生成单词,并让用户输入对应的字母来消除单词,旨在锻炼用户的反应能力和拼写能力。游戏支持用户自定义单词长度,并通过不同的键盘输入实现游戏控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预备知识
1)getch()
函数原型:
int getch(void);
函数功能:    从控制台读取一个字符,但不显示在屏幕上。

函数返回:    读取的字符。
2)rand()
函数原型
:    int rand(void);
函数功能: 随机函数, 产生0到32767间的随机整数(0到0x7fff之间)。

函数返回:      随机整数

所属文件
:      <stdlib.h>
(3)
srand()
函数原型
:      void srand(unsigned seed);
函数功能:      该函数和rand随机函数配合使用,产生随机数的起始发生数据。

参数说明:      seed为无符号整数。

所属文件
:      <stdlib.h>
(4)
time()
函数原型
:      time_t time(time_t *timer)
函数功能:      得到机器的日历时间或者设置日历时间。

函数返回:      机器日历时间。

参数说明:      timer=NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,

time_t是一个long类型。
所属文件
:      <time.h>
(5)'\b'实现退格,即当前光标后退一格。

6)'\a'实现响铃,即执行时计算机会嘟一声。
7)得到随机数值范围在a~b(包含b)的方法:rand()%(b-a+1)+a;

#include <stdio.h>
#include <conio.h>//getch()函数所需头文件
#include <stdlib.h>//随机函数所需头文件
#include <time.h>//time()函数所需头文件
void clear(void)//此函数用以清除当前行
{
printf("\r                                                  \r");
}
void start(void)
{
puts("这是消单词游戏的精简版,还不会图像编程的人可以看一看");
puts(" 由于没有引人数据库,所以此单词是模拟的。");
puts("按任意键开始,按Esc键结束,按tab键重新开始:");
puts(" 一旦输错,将发出声音警告,你必须重新输入。");
puts("           按任意键开始,按Esc键结束:");
getch();
}
int main()
{
char*c_rand,*c_input;
int i,j,N,n,space,N_rand;
start();
printf("\r你想消最多由多少个字母组成的单词?(输入数字(1-9)");
n=getch();
N=n-'0';//将输入的字符转换为整型数字
clear();//清除当前行
    
if(!((N>=1&&N<=9)||n==27))//27是键Esc的ASII值
{
    printf("\r范围错误,请重新开始:");
    getch();
    exit(1);//异常退出
}
if(n==27)
    return 0;     
srand(time(NULL));//用来对随机函数初始化
c_rand=(char*)malloc(N+1);
c_input=(char*)malloc(N+1);

while(1)
{
   N_rand=rand()%N+1;//实现单词长度随机定义
   for(i=0;i<N_rand;i++)
   {
    c_rand[i]=(rand()%20==0)?(rand()%26+'A'):(rand()%26+'a');//随机取字母,并使大写字母出现概率为1/20
   }
   c_rand[N_rand]='\0';
   //下面四行代码实现单词位置随机出现
   space=rand()%50;
   putchar('\r');
   for(i=0;i<space;i++)
    putchar(' ');
    printf("%s",c_rand);
  
   for(i=0;i<N_rand;i++)
   {
    c_input[i]=getch();//用户输入
    if(c_input[i]=='\x1b')//"\x1b"代表的是Esc键
     break;
    //下面五行代码实现字母消失效果
    putchar('\r');
    for(j=0;j<space;j++)
     putchar(' ');
    for(j=0;j<=i;j++)
     putchar(' ');
   
    if(c_input[i]!=c_rand[i])
    {
     i=-1;
     putchar('\a');
     //下面四行代码代码字母重现效果
     putchar('\r');
     for(j=0;j<space;j++)
      putchar(' ');
     printf("%s",c_rand);
    }
   }
  
   if(c_input[i]=='\x1b')//"\x1b"代表的是Esc键
   break;
}
free(c_rand);
free(c_input);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值