① 求個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);
}
}