首页 > 编程知识 正文

c语言打字比赛,c语言打字程序

时间:2023-12-29 13:16:27 阅读:329588 作者:OPYN

本文目录一览:

请问如何用C语言编写打字模拟练习程序呢

定议键码,

用一个数组来定义

key13=key[13] 是一个数组

在FORM上面的keyperss

上加入

if key=#13 and key=true then //如果你按了回车和当前回车键出现则。。。。。。。

key=false

这样简单可以实现它的原理,基础。。。见笑了

求c语言打字游戏程序,要求如下:

//头文件stdio.h,conio.h,time.h

int main()

{//首先打印信息

getch();

char a,b;

int t,s;

s=time();//获取系统时间,以秒为单位,存入s中

for(;;)

{t=time();

if(t-s=60)break;//假设规定时间是60秒

a=(char)rand();//随机生成数字(返回int型,需要强制转换)

/*rand每次生成的随机数相同,

需要用系统时间初始化随机数生成器,

相关内容可以到百度查*/

for(a'a'||a'z')a=(char)rand();//如果不是小写字母,重新生成

printf("%c",a);

b=getch();

if(a==b);//正确

else printf("b_");//b代表backspace,错误时打印_

}

getch();//结束

}

//当然,如有兴趣,可以定义两个int型变量,分别记录总字数和敲对的字数

c语言制作一个简单的打字游戏(落下一个字母按相应字母消去,记录分数)

游戏常量参数自行修改(字母的列数,下落最大高度,下落速度等)。

程序功能:(随机生成字母,下落,并检查按键,计分)

多线程:按键检查采用新的线程与主线程同步。

独立速度:每个字母下落速度都是随机且不相同。

玩法:按键区分大小写,落到底部或被玩家按中,下落中的字母就会消失,并在该列顶部创建新的字母下落,按中1次记1分。

注意:由于字母都是随机的,如果同时下落的字母很多,可能会有重复字母出现,如果按键对应了多个同样的字母,这些字母会删掉并新建,也就是说出现按中一次记多分,说明有多个重复字母,不是BUG!

#include stdio.h

#include stdlib.h

#include malloc.h

#include conio.h

#include time.h

#include windows.h

#define W 30//宽度

#define H 20//高度

#define MinSPEED 50//最慢下降速度(周期,数字越小越快)

#define MAXSPEED 5//最快下降速度

int score=0;//总分

typedef struct letter

{

     int ascii;// 字母ASCII码

     int hIndex;//对应打印数组行下标

     int wIndex;//对应打印数组列下标

     int cnt;//周期计数,当cnt==speed,hIndex++并且cnt重新置0

     int speed;//下降速度

     int key;//0表示没有被按中,1表示被按中

     struct letter *next;

}LETR;

void meError(void *p);//内存申请失败

LETR *newLETR(LETR *letrHead,LETR*letrTail,int wIndex);//产生一个新的字母,并添加到链表,返回尾节点

LETR* delLETR(LETR *letrHead,LETR*letrTail,int wIndex);//删除列下标的字母节点,返回新的尾节点

LETR *init(LETR *letrHead);//初始化一组字母,返回链表尾节点

LETR *showList(LETR *letrHead,LETR*letrTail);//显示列表并检查,发现到底或被按键按中的字母删除并新建新的字母,返回新的尾节点

void runLetter(LETR *letrHead);//所有字母一周期计数

DWORD WINAPI checkKey(LPVOID lpParameter);//新线程

int main()

{

    int i;

    LETR *letrHead=NULL,*letrTail=NULL;

    letrHead=(LETR *)malloc(sizeof(LETR));

    meError(letrHead);

    letrHead-next=NULL;

    srand(time(NULL));

    letrTail=init(letrHead);

    CreateThread(NULL,0,checkKey,letrHead,0,NULL);

    letrTail=showList(letrHead,letrTail);

    while(1)

    {

        system("cls");

        printf("总分:%dn",score);

        for(i=0;iW;i++)

            printf("-");

        printf("n");

        runLetter(letrHead);

        letrTail=showList(letrHead,letrTail);

        for(i=0;iW;i++)

            printf("-");

        printf("n");

    }

    return 0;

}

DWORD WINAPI checkKey(LPVOID lpParameter)

{

char c;

LETR *letrHead=NULL;

while(1)

    {

        letrHead=(LETR *)lpParameter;

        c=getch();

        while(letrHead-next)

        {

            if(c==letrHead-next-ascii)

                letrHead-next-key=1,score++;//按键标识置1,考虑可能有多个相同随机字母,故用标识,在显示函数统一删除并新建

            letrHead=letrHead-next;

        }

    }

return 0;

}

void runLetter(LETR *letrHead)//所有字母一周期计数

{

    while(letrHead-next)

    {

        if(letrHead-cntletrHead-speed)

            letrHead-cnt++;

        else

            (letrHead-next-hIndex)++,letrHead-cnt=0;

        letrHead=letrHead-next;

    }

}

LETR *showList(LETR *letrHead,LETR*letrTail)//显示列表并检查,发现到底或被按键按中的字母删除并新建新的字母,返回新的尾节点

{

    int i,j,wIndex;

    char sp[H][W];

    LETR *head=letrHead;

    for(i=0;iH;i++)

        for(j=0;jW;j++)

            sp[i][j]=' ';

    while(letrHead-next)

    {

        if(letrHead-next-hIndexH-1 || letrHead-next-key==1)//到底或者被按中就删除并新建,重新循环

        {

            wIndex=letrHead-next-wIndex;

            letrTail=delLETR(head,letrTail,wIndex);

            letrTail=newLETR(head,letrTail,wIndex);

            letrHead=head;

        }

        else

            sp[letrHead-next-hIndex][letrHead-next-wIndex]=letrHead-next-ascii;

        letrHead=letrHead-next;

    }

    for(i=0;iH;i++,printf("n"))

        for(j=0;jW;j++)

            printf("%c",sp[i][j]);

    return letrTail;

}

LETR *init(LETR *letrHead)//初始化一组字母,返回链表尾节点

{

    int i;

    LETR*letrTail=NULL;

    for(i=0;iW;i++)

        letrTail=newLETR(letrHead,letrTail,i);

    return letrTail;

}

LETR *newLETR(LETR *letrHead,LETR*letrTail,int wIndex)//在列下标wIndex首行,产生一个新的字母,并添加到链表,返回尾节点

{

    int n;

    LETR *leterNEW=(LETR *)malloc(sizeof(LETR));

    meError(leterNEW);

    leterNEW-next=NULL;

    n=rand()%2;

    if(n)//随机大小写

        leterNEW-ascii=rand()%26+65;//随机一个大写字母

    else

        leterNEW-ascii=rand()%26+97;//随机一个小写字母

    leterNEW-hIndex=0;

    leterNEW-wIndex=wIndex;

    leterNEW-cnt=0;

    leterNEW-speed=rand()%(MinSPEED-MAXSPEED)+1+MAXSPEED;

    leterNEW-key=0;

    if(letrHead-next==NULL)

        letrHead-next=leterNEW;

    else

        letrTail-next=leterNEW;

    letrTail=leterNEW;

    return letrTail;

}

LETR* delLETR(LETR *letrHead,LETR*letrTail,int wIndex)//删除列下标的字母节点,返回新的尾节点

{

    LETR *lhead=letrHead,*letrDel=NULL;

    while(letrHead-next)

    {

        if(letrHead-next-wIndex==wIndex)

        {

            letrDel=letrHead-next;

            letrHead-next=letrHead-next-next;

            free(letrDel);

            break;

        }

        letrHead=letrHead-next;

    }

    letrHead=lhead;

    while(letrHead-next)//重置尾节点

        letrHead=letrHead-next;

    return letrHead;

}

void meError(void *p)//内存申请失败

{

    if(p==NULL)

    {

        printf("n异常:内存申请失败!回车结束程序!n");

        while(getch()!='r');

        exit(0);

    }

}

C语言编写一个小项目,打字测试 求大神帮忙

最简单明了的程序如下:

#include

main(){

double

x,y,max,min;min=max=0;

for(x=0;x=2;x+=0.2)

{

y=2*x*x*x-3*x*x*x*x+6*x*x*x*x*x-4*x-50;

printf("当x=%f时,y=%fn",x,y);

if(ymax)

max=y;

if(y

追问:

我想检验符不符合作业要求

有什么软件能推荐一下么

大神

评论

加载更多

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。