当前位置:首页 » 编程语言 » 打字母游戏c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

打字母游戏c语言

发布时间: 2022-02-02 00:36:57

① 求个c语言打字游戏代码

你描述一下具体的功能要求
我做一个给你

② c语言打字母游戏中控制字母下落速度的函数是什么

用clock()函数编写一个延迟函数,比如:
void wait(int ms){ //ms为要等待的毫秒数
clock_t t;
t=clock();
while(t+ms>clock());
}

③ c语言编程打字母游戏,怎么设置规定时间

# include
# include
# include
# include
# pragma comment(lib,”Winmm.lib”) //引用Windows Multimedia APT
int score =0; //全局变量********整型的分数
char s[5]; //全局变量****字符型的分数
struct player_ //自定义的结构体,并顺便定义一个结构体变量
{
char name[20];
int score_;
}player[11];
/***************函数声明*****************/
void record_(); //记录彼此成绩函数
void welcome( ); //欢迎界面函数
void instructions( ); //游戏说明界面函数
void gane (int rank2); //游戏函数
void record ( ); //显示记录函数
int rank_(char rank1); //等级选择函数
void goodbye ( ); //退出界面函数
/**************主函数**************/
int main ()
{
char rank1; //rank1接受从键盘输入的字符,根据字符判断等级
int rank2=15; // 控制延时时间,从而控制速度
intsign=1; // 当做标记,用于标记是否弹出MessageBox对话框
welcome ( ); //调用欢迎界面函数
instructions ( ); //调用游戏什么函数
record( ); //调用显示记录函数
InputBox(player[10].name,20,"请输入玩家昵称"; //以对话框形式获取用户输入函数
rank1=getch();//读入一个字母
rank2=rank_(rank1); //调用等级函数
game (rank2); //调用游戏函数
HWND wnd =GetHWnd();
while (sign) //sign作为标记,执行循环
if (MessageBox(wnd,"游戏结束!!!
再来一局,挑战更高分数","询问",MB_YESNO|MB_ICONQUESTION)==IDYES)

④ 求 打字母 小游戏 程序c语言

程序一:
类似于学习机上的指法练习程序,简单而实用
#include<time.h>
main()
{
int x,y,i,j;
unsigned int Timer;
char ch;
char key;
char *kb[]={"Q W E R T Y U I O P [ ]","A S D F G H J K L ; '","Z X C V B N M , . /"};
long AllCounter=0,RightCounter=0,FalseCounter=0;
time_t t;
int fun_Esc();
srand((unsigned)time(&t));
clrscr();
gotoxy(18,1);
printf("%s\n",kb[0]);
gotoxy(20,3);
printf("%s\n",kb[1]);
gotoxy(22,5);
printf("%s\n",kb[2]);
gotoxy(11,25);
for(i=0;i<60;i++)
{
printf("=");
}
gotoxy(1,1);
printf("AllCh: %ld\nRight: %ld\nFalse: %ld",AllCounter,RightCounter,FalseCounter);
printf("\n\n");
printf("Esc to exit");
printf("\n");
printf("Enter to pause");
gotoxy(26,12);
printf("* * * * * * * * * * * * * * *");
gotoxy(26,13);
printf("* Press any key to start! *");
gotoxy(26,14);
printf("* * * * * * * * * * * * * * *");
gotoxy(51,13);
if(getch()==27)
{
if(fun_Esc()==1)
{
clrscr();
exit(0);
}
}
gotoxy(23,12);
printf(" ");
gotoxy(23,13);
printf(" ");
gotoxy(23,14);
printf(" ");
lab_start:
y = 6;
Timer = 100000;
i = rand()%3;
j = rand()%(12-i);
ch = kb[i][j*4];
x = 18+i*2+j*4;
while(y<=24)
{
if(kbhit())
{
key = getch();
if(key==ch key==ch+32)
{
ch = '*'; Timer = 1000;
}
else if(key==27)
{
if(fun_Esc()==1)
{
clrscr();
exit(0);
}
}
else if(key=='\r')
{
gotoxy(x,y-1);
printf(" ");
gotoxy(28,13);
printf("Press any key to continue");
getch();
gotoxy(28,13);
printf(" ");
}
else
{
FalseCounter++;
}
}
if(y>6)
{
gotoxy(x,y-1);
printf(" ");
}
gotoxy(x,y);
printf("%c",ch);
gotoxy(1,1);
printf("AllCh: %ld\nRight: %ld\nFalse: %ld",AllCounter,RightCounter,FalseCounter);
delay(Timer);
y++;
}
AllCounter++;
if(ch == '*')
{
RightCounter++;
}
goto lab_start;
}
int fun_Esc()
{
int key = '#';
gotoxy(24,12);
printf("* * * * * * * * * * * * * * * * *");
gotoxy(24,13);
printf("* Are you sure to exit? (Y/N) *");
gotoxy(24,14);
printf("* * * * * * * * * * * * * * * * *");
gotoxy(51,13);
while(key!='Y' && key!='y' && key!='N' && key!='n')
{
key = getch();
if(key=='Y' key=='y')
{
return 1;
}
if(key=='N' key=='n')
{
gotoxy(24,12);
printf(" ");
gotoxy(24,13);
printf(" ");
gotoxy(24,14);
printf(" ");
return 0;
}
}
}

程序二:
大家自己设三个或一个文本文件,内含1000个字符就行了,英文字母或其他字符都可以。谢谢指教!!主函数在下面!介绍一下自定义函数的功能吧
自定义函数名称
函数功能
Background()
设置简单友好界面。
DEMO()
设置菜单供用户选择练习方式及退出。
Get_charater()
实现从用户指定文件随机抽取100个字符并显示在屏幕上供用户参照打字的功能
Typing()
程序的核心,实现了接受输入的字符、判断正误、计算练习成绩和时间等并显示在屏幕
特点:而主函数则非常简单,只包含这四个要调用的函数。这四个函数功能单一,且每个函数不超过50行,较好地满足设计风格。

#include
#include
#include
#include
#include

char string[101];

void Background()
{
int driver=DETECT,mode; /*定义变量*/
int x1=20,y1=20,r=10,num;
int x2=20,y2=450;
int color1=10,color2=10; /*在此设置颜色,一改全改*/
initgraph(&driver,&mode,"a:\\bgi "); /*初始化图形模式*/
setcolor(color1); /*步骤一、设置当前颜色用于绘图*/
for(num=0;num<30;num++)
{
circle(x1,y1,r); /*步骤二、使用当前颜色绘制一个闭合图形*/
setfillstyle(num%12,color1); /*步骤三、设置填充方式*/
floodfill(x1,y1,color1); /*步骤四、对闭合图形进行填充*/
x1+=20;
delay(100);
}
setcolor(color2);
for(num=0;num<30;num++)
{
circle(x2,y2,r);
setfillstyle(num%12,color2);
floodfill(x2,y2,color2);
x2+=20;
delay(100);
}
setcolor(YELLOW); /*改变当前颜色,输出友好话*/
settextstyle(0,0,2);
outtextxy(50,150,"WELCOME TO THE TYPING WORLD!");
setcolor(LIGHTMAGENTA);
outtextxy(200,350,"DESIGED BY HE ZHANG HONG");
sleep(3); /*延时二秒观看结果*/
closegraph(); /*关闭图形*/
}

void DEMO() /*设置菜单函数*/
{

printf("_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_*_**_*\n”

"\t\t\t"
"THE DEMO DISPLAY FOR THE FILE SYSTEM\n"
"\n"
"\t\t"
"1:PRATICE ONLY ENGLISH Characters.\n"
"\t\t"
"2:PRATICE OTHER Charcters.\n"
"\t\t"
"3:PRATICE ALL Charcters.\n"
"\t\t"
"4:QUIT AT ONCE!\n"
"\n");
}

void Get_character(void) /*设置得到字符函数*/
{
void Typing(); /*声明typing()函数*/
FILE *in;
int i,t,choice;
char ch;
t=abs(time(0))%700; /*获取随机数来指定下面指针的位*/
printf("\nPLEASE ENTER YOUR CHOICE:");
choice=getch();
clrscr(); /*清屏*/
switch(choice) /*选择不同打开文件来打不同的字符*/
{
case ’1’: in=fopen("english.txt","r");
break;
case ’2’: in=fopen("others.txt","r");
break;
case ’3’: in=fopen("type all.txt","r");
break;
case ’4’: exit(1);break;
}
fseek(in,t*1l,0);
fgets(string,101,in);
printf("\n");
printf("********************************************************************");
for(i=0;i<100;i++)
putchar(string[i]);
printf("\n");
printf("********************************************************************");
fclose(in);
printf("LET’S BEGIN TYPING,OK?[Y/N]");
printf("\n");
ch=getch();
if(ch==’n’||ch==’N’) /*判断是否练习打字*/
exit(0);
else if(ch==’y’||ch==’Y’)
Typing();
}

void Typing(void) /*设置打字(包括计算其他结果)函数*/
{
int i,j,Right_char=0,Wrong_char=0,Sum_char=0;
float Speed,Timeused,Right_rate;
char absorb_char,ch_1,ch_2,ch_3;
time_t star,stop; /*定义time变量,获取系统时间并显示在屏幕上*/
time(&star);
printf("\n");
printf("time begin:%s",ctime(&star));
i=0;
absorb_char=getchar(); /*接受键盘输入的字符并在下面的while语句判断正 错和计算结果*/
while(absorb_char!=’\n’&&i<100)
{
if(absorb_char==string[i])
{
Right_char++;
Sum_char++;
}
else
{
Wrong_char++;
Sum_char++;
}
i++;
absorb_char=getchar();
}
time(&stop);
Timeused=difftime(stop,star); /*利用difftime()函数输出所用时间*/
Right_rate=(float)Right_char/(float)Sum_char*100;
Speed=(Sum_char/Timeused)*60;
printf("time end:%s",ctime(&stop)); /*下面显示分数*/
printf("****#################~~~~~~~~~~~~~YOUR SCORE!!~~~~~~~~~~~~~~################****");
printf(" 1: TOTAL TIME USED:%.3f\n",Timeused);
printf(" 2: YOU HAVE TYPED:%d\n",Sum_char);
printf(" 3: Typing Right_Characters are:%d\n",Right_char);
printf(" 4: Typing Wrong_Characters are:%d\n",Wrong_char);
printf(" 5: YOUR TYPING SPEED IS :%.2f\\min\n",Speed);
printf(" 6: YOUR TYPING RIGHT_RATE IS :%.2f%%\n",Right_rate);
printf("****#################~~~~~~~~~~~~~YOUR SCORE!!~~~~~~~~~~~~~~################****");
if(Speed<=50||Right_rate<=80) /*询问用户是否重来一遍*/
{
printf(" NOT VERY GOOD!\n TRY IT AGAIN,OK?[Y/N]\n");
ch_2=getch();
if(ch_2==’n’||ch_2==’N’) exit(0);
else if(ch_2==’y’||ch_2==’Y’)
{
clrscr();
DEMO(); /*分别调用函数重来一遍*/
Get_character();
Typing();
}
exit(0);
}
else printf(" WELL DONE!!\n ONE MORE TIME?[Y/N]\n"); /*询问用户是否重来一遍*/
ch_3=getch();
if(ch_3==’n’||ch_3==’N’) exit(0);
else if(ch_3==’y’||ch_3==’Y’)
{
clrscr();
DEMO(); /*分别调用函数重来一遍*/
Get_character();
Typing();
}
exit(0);
}

main(void) /*主函数包含四个要调用的函数*/
{
Background();
DEMO();
Get_character();
Typing();
}

⑤ 急求一份C语言打字游戏代码,要求单词从屏幕上方落下,打字正确字母变为绿色。

#include<time.h>
#include<stdlib.h>
#include<graphics.h>
#include<conio.h>
#include<dos.h>
#include<math.h>

#define R 10
#define ESC 0x011b
#define LOW 0x5000
#define FAST 0x4800
int draw_car(int x,int y,char *ch);
double dalta=20,angle;

void *image;
int step=20;
main()
{

int gdriver=DETECT,gmode;
static int startx=60;
static int starty=20;
int maxy,maxx,l=1,n=1;
char ch,play, str[2];
int size,temch;
int ok,y=50;

clrscr();

printf("\n\n\n\n\n*****************************************\n");

printf(" 1.play only number 0-9 .\n");
printf(" 2.play only char a-z .\n");
printf(" 3.exit\n");
printf("*****************************************\n");
while(1){
printf("\nPls enter choice:");
play=getche();
if((play=='1')||(play=='2'))
break;

if(play=='3')
return;
}

registerbgidriver( EGAVGA_driver ); /*注册vga驱动*/
initgraph(&gdriver,&gmode,"d:\\tc3\\bgi"); /*初始化图形界面*/
cleardevice(); /*清除屏幕*/
setbkcolor(BLUE); /*将背景色设置成蓝色*/
size=imagesize(startx,starty,startx+60,starty+60); /*计算生成60×60个象素的图需要的字节数*/
image=(unsigned char *)malloc(size); /*分配内存*/
maxx=getmaxx();
maxy=getmaxy();
randomize();

printf("Press ESC to exit game! ");
printf(" %c to fast speed,%c to low speed!",24,25);
do{

ok=0;
if(play=='1')
ch=random(9)+48;
if(play=='2')
ch=random(26)+65;
str[0]=ch;
do{

while(bioskey(1)==0) /*如果没有按键就不停的循环*/
{
if(l==1) /*从左到右*/
{
n++;
angle=-1*(n*step)/M_PI*180/R;
if((int)(-1*angle)%360<dalta)
angle-=dalta;
if(n>(maxx-180)/step){
if(starty>maxy-100)
starty=20;
else
starty+=y;

l=0;
}
}
if(l==0) /*从右到左*/
{
--n;
angle=-1*(n*step)/R/M_PI*180;
if((int)(-1*angle)%360<dalta)
angle-=dalta;

if(n==1){
if(starty>maxy-100)
starty=20;
else
starty+=y;

l=1;
}
}

draw_car(startx+n*step,starty,str);
}

temch=bioskey(0);
if(temch==FAST){
step+=10;
y+=10;
}
if(temch==LOW){
step-=10;
y-=10;
}
ok=temch&0x00ff;

if((ok==ch)||(ok==ch+32)){
ok=1;
starty=20;
break;
}

}while(temch!=ESC);
if(ok!=1)
break;
}while(1);
free(image);
closegraph();
return;
}

int draw_car(int x,int y,char *ch){
setcolor(YELLOW); /*设置前景色为黄色*/
rectangle(x,y,x+60,y+40); /*画车厢*/

pieslice(x+15,y+50,angle,angle-dalta,10); /*画轮上的小片扇形部分*/
pieslice(x+45,y+50,angle,angle-dalta,10);

setfillstyle(SOLID_FILL, YELLOW); /*设置填充模式为实填充,颜色为黄色*/
circle(x+15,y+50,10); /*画车轮*/
circle(x+45,y+50,10);
circle(x+15,y+50,3);
circle(x+45,y+50,3);
setcolor(WHITE);
settextstyle(1,0,4);
outtextxy(x+25,y,ch);
getimage(x,y,x+60,y+60,image); /*获取当前的图片*/
delay(200);
putimage(x,y,image,XOR_PUT); /*使用异或模式将图片显示上去*/

return;
}

⑥ c语言打字游戏

//字母P出现的概率为1/17,字母S的出现概率为1/4.其他字母等概率出现。用for循环按照该概率随机生成100个字母
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
main()
{
int
tmp,i;
srand(time(NULL));
for(i=0;i<100;i++)
{
tmp=rand()%68;
if(tmp<4)
//0~3概率为4/68=1/17
{
printf("P");
}
else
if(tmp<21)
//4~20概率为17/68=1/4
{
printf("S");
}
else
//其他的等概率出现
{
tmp=rand()%24;
if(tmp<15)
//P之前的字母
printf("%c",'A'+tmp);
else
if(tmp<17)
//P之后S之前
printf("%c",'A'+tmp+1);
else
//S之后
printf("%c",'A'+tmp+2);
}
}
}

⑦ C语言打字游戏!

//字母P出现的概率为1/17,字母S的出现概率为1/4.其他字母等概率出现。用for循环按照该概率随机生成100个字母
#include<stdio.h>
#include<time.h>
#include<stdlib.h>

main()
{
int tmp,i;
srand(time(NULL));
for(i=0;i<100;i++)
{
tmp=rand()%68;
if(tmp<4) //0~3概率为4/68=1/17
{
printf("P");
}
else if(tmp<21) //4~20概率为17/68=1/4
{
printf("S");
}
else //其他的等概率出现
{
tmp=rand()%24;
if(tmp<15) //P之前的字母
printf("%c",'A'+tmp);
else if(tmp<17) //P之后S之前
printf("%c",'A'+tmp+1);
else //S之后
printf("%c",'A'+tmp+2);
}
}
}

⑧ 用C语言编写一个简单的打字母游戏,给出基本思路及完整程序。

# include<stdio.h>
# include <conio.h>
# include <graphics.h>
# include <time.h>
# pragma comment(lib,”Winmm.lib”) //引用Windows Multimedia APT

int score =0; //全局变量********整型的分数
char s[5]; //全局变量****字符型的分数
struct player_ //自定义的结构体,并顺便定义一个结构体变量
{
char name[20];
int score_;
}player[11];
/***************函数声明*****************/
void record_(); //记录彼此成绩函数
void welcome( ); //欢迎界面函数
void instructions( ); //游戏说明界面函数
void gane (int rank2); //游戏函数
void record ( ); //显示记录函数
int rank_(char rank1); //等级选择函数
void goodbye ( ); //退出界面函数

/**************主函数**************/
int main ()
{
char rank1; //rank1接受从键盘输入的字符,根据字符判断等级
int rank2=15; // 控制延时时间,从而控制速度
intsign=1; // 当做标记,用于标记是否弹出MessageBox对话框

welcome ( ); //调用欢迎界面函数
instructions ( ); //调用游戏什么函数
record( ); //调用显示记录函数
InputBox(player[10].name,20,"请输入玩家昵称"; //以对话框形式获取用户输入函数
rank1=getch();//读入一个字母
rank2=rank_(rank1); //调用等级函数
game (rank2); //调用游戏函数
HWND wnd =GetHWnd();
while (sign) //sign作为标记,执行循环
if (MessageBox(wnd,"游戏结束!!!\n再来一局,挑战更高分数","询问",MB_YESNO|MB_ICONQUESTION)==IDYES)
game (rank2);
else
{
sign=0;
goodbye( );
}
closegraph( );
return 0;
}
/***************记录本次成绩函数***************/
void record_()
{
FILE*fp; //文件指针
int i,j;
struct player_t; //定义结构体变量t,冒泡法比较大小时用
player[10].score_=score; //把该局的分数赋给该局用户的结构体变量中
fp=fopen("记录.dat","rb"); //打开二进制文件
for (i=0;i<10;i++)
{
fread(player[i].name,20,l,fp); //读入记录中的成绩和名字
fread (&player[i].score_,4,l,fp);
}
fclose(fp); //关闭二进制文件
for (j=0;j<10;j++) //冒泡法排序
for (i=0;i<10-j;i++)
if (player[i].score_)
{
t=player[i];
player[i]=player[i+1];
player[i+1]=t;
}
fp=fopen("记录.dat","wb"); //打开文件
for (i=0;i<10;i++) //把排好序列的数据存入记录文件
{
fwrite(player[i].name,20,l,fp);
fwrite (&player[i].score_,4,l,fp);
}
fclose(fp); //关闭文件
}
/****************欢迎界面函数****************/
void welcome ( )
{
char ch;
mciSendString("open\"res\\Sleep Away.mp3\"alias mymusic",NULL,0,NULL);

initgraph(640,480); //初始化画图界面
IMAGE img; //定义IMAGE对象
loadimage (&img,"res\\00.jpg"); //读取图片到img对象中
putimage (0,0,&img); //在坐标(0,0)位置显示IMAGE对象
ch=getch(); //吸收掉一个按键
cleardevice(); //清屏
}

/***************游戏说明界面函数**************/
void instructions()
{
int c=255; //控制变色的变量
setcolor(YELLOW); //设置颜色
setfont (30,0,"黑体"); //设置字体
outtextxy(0,0,"游戏说明"); //输出文字
setcolor(WHITE);
setfont(28,0,"宋体");
outtextxy(0,30,"一、每次游戏下落200个字母"); //输出文字
outtextxy(0,58,"二、请按数字键选择游戏等级");
outtextxy(0,86,"三、统计被击中的个数");
setfont(30,0,"华文行楷")
outtextxy (20,220,"等级一二三四 五六七八九");
outtextxy(20,260,“按键 1 2 3 4 5 6 7 8 9”);
while (!kbhit()) //kihit()作用是判断是否有字幕输入
{
setcolor(RGB(c,255,0));
setfont (80,0,"楷体");
outtextxy(140,130,"请选择等级");
setcolor(RGB(c,0,255));
setfont(100,0,"Wickenden Cafe NDP");
outtextxy(100,135,"Let's go!!!");
c-=25; //控制颜色的变量自减
if(c<0)c=255; //控制颜色的变量小于0时,再把255赋给c
cleardevice(); //清屏
}
/***************退出界面函数***************/
void goodbye()
{
int c=255; //控制变色变量
cleardevice(); //清屏
setcolor(YELLOW);
setfont (48,0,"黑体");
outtextxy (104,120,"的最终成绩是: ");
setfont (48,0,"华文楷体");
setcolor(RGB(255,255,0));
outtextxy(140,320,"按任意键退出游戏");
setcolor(YELLOW);
setfont(48,0,"黑体");
outtextxy (104,120,"的最终成绩是: ");
outtextxy(104,70,player[10].name);
record_(); //调用记录本次成绩函数
while(!kbhit())
{
setcolor(RGB(255,0,c-100)); //设置颜色
setfont(100,0,”Wickenden Café NDP”);
outtextxy(400,90,s); //输出数字
setcolor(RGB(c,0,255));
setfont(48,0,”黑体”);
if (score==200)
outtextxy(100,200,”全部击中!!!”);
else
if(score>190)
outtextxy(100,200,”不错!继续加油!”);
else
outtextxy(100,200,”不要灰心!继续加油!”);
c-=25;
if(c<0)
c=255;
Sleeep(20); //延时20秒
}
getch( ); //提供给用户时需要等待输入后再退出
}
/**************等级选择函数**************/
int rank_(char rank1)
{
int rank2;
switch(rank1) //判断字符,确定等级
{
case’0’:rank2=11;break;
case’1’:rank2=10;break;
case’2’:rank2=9;break;
case’3’:rank2=8;break;
case’4’:rank2=7;break;
case’5’:rank2=6;break;
case’6’:rank2=5;break;
case’7’:rank2=4;break;
case’8’:rank2=3;break;
case’9’:rank2=2;break;
default:rank2=15;break;
}
return rank2;
}

/**************显示记录函数***********/
void record( )
{
FILE *p; //文件指针
int a[10],j;
char b[10][10];
fp=fopen(“记录。dat”,”rb”); //打开文件
for (j=0;j<10;j++)
{
fread(player[j].name,20,1,fp); //读取文件中的信息
fread(&player[j].score_,4,1,fp);
}
fclose(fp); //关闭文件
setfont(60,0,”Arial”);
setcolor(RGB(250,250,0));
outtextxy(250,0,”TOP10”);
for(j=0;j<10;j++)
{
sprintf(“b[j],%d”,player[j].score_); //把整型转换为字符型
setcolor(RGB(0,100,255));
setfont(40,0,”Arial”);
outtextxy(420,50+40*j,b[j]);
outtextxy(120,50+40*j,player[j].name); //输出名字

/**********游戏函数******************/
void game (int rank2)
{
cleardevice( ); //清屏
score=0; //清除掉原有的分数
outtextxy(0,0,”玩家:”);
outtextxy(90,0,player[10].name);
setfont(20,0,”Arial”);
outtextxy(100,460,” 人生有享受片刻优雅恬适的权力,让打字母游戏放松你一下吧!”);
int i;
char target; //目标字母
char key; //用户的按键
intx,y; //字母的位置
int flag =1; //标记是否按了退出键
int sum=0; //成绩计数
int num =200; //规定下落字母的个数
srand (time(NULL)); //随机时间种子,设置第一个随机函数的值
setfillstyle(BLACK); //设置下面矩形内图的颜色
setcolor(YELLOW); //
line(0,450,640,450); //用3条线规定一下工作区
line(0,440,640,440); //用3条线规定一下工作区
line(0,40,640,40); //用3条线规定一下工作区

while (flag&&num)
{
setfont(40,0,”宋体”); //设置字母的字体和大小
i=rand()%2; //rand()函数返回0~32767之间的一个整数
if(i)
target=97+rand()%26; //产生任意小写字母
else
target=65+rand()%26; //产生任意大写字母
x=rand()%610; //产生任意下落位置
for (y=41;y<380;y++)
{
setcolor (RGB(255,0,255));
outtextxy(x,y,target); //显示字母

if(kbhit())
{
key=getch(); //获取用户按键
if ((key==target)||( key==target-32)||( key==target+32))
{
score++; //分数统计
sprintf(s,”%d”score);
setfont(30,0,”Arial”);
outtextxy(500,0,“分数”);
outtextxy(600,0,s); //输出分数
bar(x-10,y-10,x+35,y+50); // 击中用黑框形擦去字母
break; //跳出循环,进行下一个字母
}
else if (key==27) //判断是否按了
{
flag=0; //若果按ESC,退出游戏主循环
break;
}
}
Sleep(rank2); //控制清除字母的时间爱你也就是控制下落速度
bar(x,y,x+35,y+60); //擦最下面的字符
}
num--; //计数
}
}

⑨ 求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>
#defineW30//宽度
#defineH20//高度
#defineMinSPEED50//最慢下降速度(周期,数字越小越快)
#defineMAXSPEED5//最快下降速度
intscore=0;//总分
typedefstructletter
{
intascii;//字母ASCII码
inthIndex;//对应打印数组行下标
intwIndex;//对应打印数组列下标
intcnt;//周期计数,当cnt==speed,hIndex++并且cnt重新置0
intspeed;//下降速度
intkey;//0表示没有被按中,1表示被按中
structletter*next;
}LETR;
voidmeError(void*p);//内存申请失败
LETR*newLETR(LETR*letrHead,LETR*letrTail,intwIndex);//产生一个新的字母,并添加到链表,返回尾节点
LETR*delLETR(LETR*letrHead,LETR*letrTail,intwIndex);//删除列下标的字母节点,返回新的尾节点
LETR*init(LETR*letrHead);//初始化一组字母,返回链表尾节点
LETR*showList(LETR*letrHead,LETR*letrTail);//显示列表并检查,发现到底或被按键按中的字母删除并新建新的字母,返回新的尾节点
voidrunLetter(LETR*letrHead);//所有字母一周期计数
DWORDWINAPIcheckKey(LPVOIDlpParameter);//新线程
intmain()
{
inti;
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("总分:%d ",score);
for(i=0;i<W;i++)
printf("-");
printf(" ");
runLetter(letrHead);
letrTail=showList(letrHead,letrTail);
for(i=0;i<W;i++)
printf("-");
printf(" ");
}
return0;
}
DWORDWINAPIcheckKey(LPVOIDlpParameter)
{
charc;
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;
}
}
return0;
}
voidrunLetter(LETR*letrHead)//所有字母一周期计数
{
while(letrHead->next)
{
if(letrHead->cnt<letrHead->speed)
letrHead->cnt++;
else
(letrHead->next->hIndex)++,letrHead->cnt=0;
letrHead=letrHead->next;
}
}
LETR*showList(LETR*letrHead,LETR*letrTail)//显示列表并检查,发现到底或被按键按中的字母删除并新建新的字母,返回新的尾节点
{
inti,j,wIndex;
charsp[H][W];
LETR*head=letrHead;
for(i=0;i<H;i++)
for(j=0;j<W;j++)
sp[i][j]='';
while(letrHead->next)
{
if(letrHead->next->hIndex>H-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;i<H;i++,printf(" "))
for(j=0;j<W;j++)
printf("%c",sp[i][j]);
returnletrTail;
}

LETR*init(LETR*letrHead)//初始化一组字母,返回链表尾节点
{
inti;
LETR*letrTail=NULL;
for(i=0;i<W;i++)
letrTail=newLETR(letrHead,letrTail,i);
returnletrTail;
}
LETR*newLETR(LETR*letrHead,LETR*letrTail,intwIndex)//在列下标wIndex首行,产生一个新的字母,并添加到链表,返回尾节点
{
intn;
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;
returnletrTail;
}
LETR*delLETR(LETR*letrHead,LETR*letrTail,intwIndex)//删除列下标的字母节点,返回新的尾节点
{
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;
returnletrHead;
}
voidmeError(void*p)//内存申请失败
{
if(p==NULL)
{
printf(" 异常:内存申请失败!回车结束程序! ");
while(getch()!=' ');
exit(0);
}
}