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

Python014

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

#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

}

可以指定光标位置进行printf输出字符,多字符同时出现,最好使用多线程,下面是个简单的例子,希望对你有帮助

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#include <time.h>

void setxy(int x, int y)

{

   COORD coord = {x, y}

   SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord)

}

int main()

{

CONSOLE_CURSOR_INFO cci

cci.bVisible = FALSE

cci.dwSize = sizeof(cci)

HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE)

SetConsoleCursorInfo(handle, &cci)

srand((unsigned)time(0))

int x,y

int c

while(1)

{

c=rand()%26

c+='A'

x=rand()%40

y=0

while(1)

{

setxy(x,y)

printf("%c",c)

sleep(1)

setxy(x,y)

printf(" ")

y++

if(y>5)

{

break

}

}

}

return 0

}

程序一:

类似于学习机上的指法练习程序,简单而实用

#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=0i<60i++)

{

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=0num<30num++)

{

circle(x1,y1,r) /*步骤二、使用当前颜色绘制一个闭合图形*/

setfillstyle(num%12,color1)/*步骤三、设置填充方式*/

floodfill(x1,y1,color1) /*步骤四、对闭合图形进行填充*/

x1+=20

delay(100)

}

setcolor(color2)

for(num=0num<30num++)

{

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=0i<100i++)

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!\nTRY 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!!\nONE 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()

}