c語言塗字遊戲,C++文字遊戲

本文目錄一覽:

用C語言編寫一個簡單的打字母遊戲,給出基本思路及完整程序。

# includestdio.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;i10;i++)

{

fread(player[i].name,20,l,fp); //讀入記錄中的成績和名字

fread (player[i].score_,4,l,fp);

}

fclose(fp); //關閉二進制文件

for (j=0;j10;j++) //冒泡法排序

for (i=0;i10-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;i10;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(c0)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(score190)

outtextxy(100,200,”不錯!繼續加油!”);

else

outtextxy(100,200,”不要灰心!繼續加油!”);

c-=25;

if(c0)

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;j10;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;j10;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 (flagnum)

{

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;y380;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語言打字遊戲代碼,要求單詞從屏幕上方落下,打字正確字母變為綠色。

#includetime.h

#includestdlib.h

#includegraphics.h

#includeconio.h

#includedos.h

#includemath.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)%360dalta)

angle-=dalta;

if(n(maxx-180)/step){

if(startymaxy-100)

starty=20;

else

starty+=y;

l=0;

}

}

if(l==0) /*從右到左*/

{

–n;

angle=-1*(n*step)/R/M_PI*180;

if((int)(-1*angle)%360dalta)

angle-=dalta;

if(n==1){

if(startymaxy-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=temch0x00ff;

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語言簡易文字冒險遊戲源代碼

記憶遊戲

#includestdio.h

#includetime.h

#includestdlib.h

#includewindows.h

#define N 10

int main(  )

{int i,k,n,a[N],b[N],f=0;

srand(time(NULL));

printf(”  按1開始\n  按0退出:_”);

scanf(“%d”,n);

system(“cls”);

while(n!=0)

{for(k=0;kN;k++)a[k] = rand( )%N;

printf(“\n\t\t[請您牢記看到顏色的順序]\n\n”);

for(k=0;kN;k++)

{switch(a[k])

{case 0:system(“color 90″);printf(”  0:淡藍色\n”);break;  //淡藍色

case 1:system(“color f0″);printf(”  1:白色\n”);break;  //白色

case 2:system(“color c0″);printf(”  2:淡紅色\n”);break;  //淡紅色

case 3: system(“color d0″);printf(”  3:淡紫色\n”);break;  //淡紫色

case 4: system(“color 80″);printf(”  4:灰色\n”); break;  //灰色

case 5: system(“color e0″);printf(”  5:黃色\n”);break;  //黃色

case 6: system(“color 10″);printf(”  6:藍色\n”); break;  //藍色

case 7: system(“color 20″);printf(”  7:綠色\n”);break;  //綠色

case 8: system(“color 30″);printf(”  8:淺綠色\n”);break;  //淺綠色

case 9: system(“color 40″);printf(”  9:紅色\n”);break;  //紅色

}

Sleep(1500);

system(“color f”);  //單個控制 文字顏色

Sleep(100);

}

system(“cls”);

printf(” 0:淡藍色,1:白色,2:淡紅色,3:淡紫色,4:灰色,5:黃色,6:藍色7:綠色,8:淺綠色,9:紅色\n”);

printf(“\n\t請輸入顏色的順序:”);

for(k=0;kN;k++)scanf(“%d”,b[k]);

for(k=0;kN;k++)if(a[k] == b[k]) f++;

if(f==0) printf(”  你的記憶弱爆了0\n”);

else if(f==1) printf(”  你的記憶有點弱1\n”);

else if(f5) printf(”  你的記憶一般5\n”);

else printf(”  你的記憶力很強!\n”);

Sleep(2000);

system(“cls”);

printf(“\t\t按0退出\n\t\t按任意鍵繼續遊戲:\n”);

scanf(“%d”,n);

system(“cls”);

}

return 0;

}

註:DEVc++運行通過,每輸入一個數字要加入一個空格。

求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語言編寫一個小遊戲?

“貪吃蛇”C代碼:

#include stdio.h

#include stdlib.h

#include conio.h

#include time.h

#include Windows.h

#define W 78  //遊戲框的寬,x軸

#define H 26  //遊戲框的高,y軸

int dir=3;    //方向變量,初值3表示向“左”

int Flag=0;   //吃了食物的標誌(1是0否)

int score=0;  //玩家得分

struct food{ int x;  //食物的x坐標

                  int y;  //食物的y坐標

                 }fod;  //結構體fod有2個成員

struct snake{ int len;  //身長

                   int speed;  //速度

                   int x[100];

                   int y[100];

                  }snk;  //結構體snk有4個成員

void gtxy( int x,int y)  //控制光標移動的函數

{ COORD coord;

coord.X=x;

coord.Y=y;

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

}

void gtxy( int x,int y);  //以下聲明要用到的幾個自編函數

void csh( );  //初始化界面

void keymove( ); //按鍵操作移動蛇

void putFod( );  //投放食物

int  Over( );   //遊戲結束(1是0否)

void setColor(unsigned short p, unsigned short q); //設定顯示顏色

int main( )   //主函數

{ csh( );

  while(1)

    { Sleep(snk.speed);

      keymove( );

      putFod( );

      if(Over( ))

       {system(“cls”);

        gtxy(W/2+1,H/2); printf(“遊戲結束!T__T”);

        gtxy(W/2+1,H/2+2); printf(“玩家總分:%d分”,score);

        getch( );

        break;

       }

   }

   return 0;

}

void csh( )  //初始化界面

{ int i;

gtxy(0,0);

CONSOLE_CURSOR_INFO cursor_info={1,0};  //以下兩行是隱藏光標的設置

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

for(i=0;i=W;i=i+2)  //橫坐標要為偶數,因為這個要打印的字符佔2個位置

{ setColor(2, 0);  //設定打印顏色為綠字黑底

  gtxy(i,0);  printf(“■”);  //打印上邊框

  gtxy(i,H); printf(“■”);  //打印下邊框

}

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

{ gtxy(0,i); printf(“■”);  //打印左邊框

   gtxy(W,i); printf(“■”);  //打印右邊框

}

while(1)

  { srand((unsigned)time(NULL));  //初始化隨機數發生器srand( )

  fod.x=rand()%(W-4)+2;  //隨機函數rand( )產生一個從0到比”(W-4)”小1的數再加2

  fod.y=rand()%(H-2)+1;  //隨機函數rand( )產生一個從0到比”(H-2)”小1的數再加1

  if (fod.x%2==0) break;  //fod.x是食物的橫坐標,要是2的倍數(為偶數)

}

setColor(12, 0);  //設定打印顏色為淡紅字黑底

gtxy(fod.x,fod.y); printf(“●”);  //到食物坐標處打印初試食物

snk.len=3;      //蛇身長

snk.speed=350;  //刷新蛇的時間,即是移動速度

snk.x[0]=W/2+1;  //蛇頭橫坐標要為偶數(因為W/2=39)

snk.y[0]=H/2;    //蛇頭縱坐標

setColor(9, 0);  //設定打印顏色為淡藍字黑底

gtxy(snk.x[0], snk.y[0]);  printf(“■”);  //打印蛇頭

for(i=1;isnk.len;i++)

    { snk.x[i]=snk.x[i-1]+2;  snk.y[i]=snk.y[i-1];

      gtxy(snk.x[i],snk.y[i]);  printf(“■”);  //打印蛇身

   }

setColor(7, 0);  //恢復默認的白字黑底

return;

}

void keymove( )  //按鍵操作移動蛇

{ int key;

if( kbhit( ) )    //如有按鍵輸入才執行下面操作

   { key=getch( );

     if (key==224)  //值為224表示按下了方向鍵,下面要再次獲取鍵值

       { key=getch( );

         if(key==72dir!=2)dir=1;  //72表示按下了向上方向鍵

         if(key==80dir!=1)dir=2;  //80為向下

         if(key==75dir!=4)dir=3;  //75為向左

         if(key==77dir!=3)dir=4;  //77為向右

       }

   if (key==32)

      { while(1) if((key=getch( ))==32) break; }  //32為空格鍵,這兒用來暫停

  }

if (Flag==0)  //如沒吃食物,才執行下面操作擦掉蛇尾

  { gtxy(snk.x[snk.len-1],snk.y[snk.len-1]);  printf(”  “); }

int i;

for (i = snk.len – 1; i 0; i–)  //從蛇尾起每節存儲前一節坐標值(蛇頭除外)

{ snk.x[i]=snk.x[i-1];  snk.y[i]=snk.y[i-1]; }

switch (dir)  //判斷蛇頭該往哪個方向移動,並獲取最新坐標值

{ case 1: snk.y[0]–; break;   //dir=1要向上移動

  case 2: snk.y[0]++; break;  //dir=2要向下移動

  case 3: snk.x[0]-=2; break;  //dir=3要向左移動

  case 4: snk.x[0]+=2; break;  //dir=4要向右移動

}

setColor(9, 0);

gtxy(snk.x[0], snk.y[0]); printf(“■”);  //打印蛇頭

if (snk.x[0] == fod.x snk.y[0] == fod.y)  //如吃到食物則執行以下操作

   { printf(“\007”); snk.len++; score += 100; snk.speed -= 5; Flag = 1; } //007是響鈴

else Flag = 0;   //沒吃到食物Flag的值為0

if(snk.speed150) snk.speed= snk.speed+5;  //作弊碼,不讓速度無限加快

}

void putFod( )  //投放食物

{ if (Flag == 1)  //如吃到食物才執行以下操作,生成另一個食物

   { while (1)

  { int i,n= 1;

   srand((unsigned)time(NULL));  //初始化隨機數發生器srand( )

   fod.x = rand( ) % (W – 4) + 2;  //產生在遊戲框範圍內的一個x坐標值

   fod.y = rand( ) % (H – 2) + 1;  //產生在遊戲框範圍內的一個y坐標值

   for (i = 0; i snk.len; i++)   //隨機生成的食物不能在蛇的身體上

 { if (fod.x == snk.x[i] fod.y == snk.y[i]) { n= 0; break;} }

   if (n fod.x % 2 == 0) break;  //n不為0且橫坐標為偶數,則食物坐標取值成功

  }

 setColor(12, 0);

      gtxy(fod.x, fod.y);  printf(“●”);   //光標到取得的坐標處打印食物

   }

return;

}

int Over( )  //判斷遊戲是否結束的函數

{ int  i;

setColor(7, 0);

gtxy(2,H+1); printf(“暫停鍵:space.”);  //以下打印一些其它信息

gtxy(2,H+2); printf(“遊戲得分:%d”,score);

if (snk.x[0] == 0 || snk.x[0] == W) return 1;  //蛇頭觸碰左右邊界

if (snk.y[0] == 0 || snk.y[0] == H) return 1;  //蛇頭觸碰上下邊界

for (i = 1; i snk.len; i++)

{ if (snk.x[0] == snk.x[i] snk.y[0] == snk.y[i]) return 1; }  //蛇頭觸碰自身

return 0;   //沒碰到邊界及自身時就返回0

}

void setColor(unsigned short ForeColor = 7, unsigned short BackGroundColor = 0)

{  HANDLE  handle = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute( handle, ForeColor + BackGroundColor * 0x10 );

}   //用來設定顏色的函數

求純C語言打字遊戲源代碼及解析

# include “Typer.h”

# include stdio.h

# include stdlib.h

# include graphics.h

//download by

void main()

{

BOOL bQuit=FALSE; /* 是否退出 */

BOOL bPause=FALSE; /* 是否暫停 */

int tm1,tm2;

BYTE Key;

randomize(); /* 初始化隨機數種子 */

SetGraphMode();

SelectLevel();

ShowBar();

tm1=CreateTimer(1,MoveLetter); /* 創建移動字符對象時鐘 */

tm2=CreateTimer(Interval,CreateLetter); /* 創建產生字符對象時鐘 */

CreateLetter();

Key=AscKey();

while (!bQuit)

{

TimerEvent();

switch (Key)

{

case NULL:

break;

case KEY_ESC:

bQuit=TRUE;

break;

case KEY_SPACE:

bPause=!bPause;

tmTM[tm1].Enable=!bPause;

tmTM[tm2].Enable=!bPause;

break;

default:

if (!bPause) Check(Key);

}

Key=AscKey();

}

CloseGraphMode();

}

void SetGraphMode()

{

int Device=VGA,Mode=VGAHI;

initgraph(Device,Mode,””);

settextstyle(TRIPLEX_FONT,HORIZ_DIR,1);

setfillstyle(SOLID_FILL,0);

setcolor(7);

}

void CloseGraphMode()

{

restorecrtmode();

}

/* 從鍵盤緩衝區內直接讀出ASC碼 */

BYTE AscKey(void)

{

int start,end;

WORD key=0;

start=peek(0,0x41a);

end=peek(0,0x41c);

if (start==end) return(0);

else

{

key=peek(0x40,start);

start+=2;

if (start==0x3e) start=0x1e;

poke(0x40,0x1a,start);

return(key0xff);

}

}

void MoveLetter(void)

{

int i;

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

{

if (Letter[i].Used)

{

HideLetter(i);

Letter[i].y+=Step;

ShowLetter(i);

/* 字符對象下落到最底部 */

if (Letter[i].yMAX_HEIGHT) KillLetter(i);

}

}

}

void KillLetter(int LetterID)

{

if (Letter[LetterID].Used)

{

Letter[LetterID].Used=FALSE;

LetterUsed–;

HideLetter(LetterID);

}

/* 刪除字符對象後馬上再創建一個 */

CreateLetter();

}

void CreateLetter()

{

int i=0;

int x;

BYTE val;

if (LetterUsed==MAX_LETTER) return; /* 無字符對象可用則返回 */

while (Letter[++i].Used); /* 找到第一個空閑的字符對象,產生一個字符對象 */

x=i;

Letter[i].x=x*640/MAX_LETTER;

Letter[i].y=0;

Letter[i].val=random(26)+’A’;

Letter[i].Used=TRUE;

LetterUsed++;

}

void HideLetter(int ID)

{

/* 用填充矩形來消隱字符 */

bar(Letter[ID].x,Letter[ID].y,Letter[ID].x+16,Letter[ID].y+20);

}

void ShowLetter(int ID)

{

char str[2]={0,0};

str[0]=Letter[ID].val;

outtextxy(Letter[ID].x,Letter[ID].y,str);

}

void Check(BYTE Key)

{

int i;

char str[6];

Hits++;

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

/* 擊中 */

if (Letter[i].UsedLetter[i].val==toupper(Key))

{

sound(1000);

delay(10);

KillLetter(i);

Right++;

nosound();

}

/* 顯示狀態 */

setfillstyle(SOLID_FILL,5);

bar(260,430,320,450);

bar(410,430,470,450);

setcolor(2);

sprintf(str,” %4ld”,Hits);

outtextxy(260,430,str);

sprintf(str,” %4ld”,Right);

outtextxy(410,430,str);

setcolor(7);

setfillstyle(SOLID_FILL,0);

}

void ShowBar()

{

FILE *bmp;

BYTE r,g,b,t;

int i,x,y;

bmp=fopen(“bar.bmp”,”rb”);

fseek(bmp,54,SEEK_SET);

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

{

setpalette(i,i);

b=fgetc(bmp)2;

g=fgetc(bmp)2;

r=fgetc(bmp)2;

t=fgetc(bmp)2;

setrgbpalette(i,r,g,b);

}

for (y=0;y80;y++)

for (x=0;x320;x++)

{

t=fgetc(bmp);

putpixel(x*2,479-y,t4);

putpixel(x*2+1,479-y,t15);

}

fclose(bmp);

}

void SelectLevel()

{

int Steps[3]={1,2,4};

int Intervals[3]={18,9,5};

int Sel=0;

FILE *bmp;

BYTE r,g,b,t,Key;

int i,x,y;

bmp=fopen(“sel.bmp”,”rb”);

fseek(bmp,54,SEEK_SET);

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

{

setpalette(i,i);

b=fgetc(bmp)2;

g=fgetc(bmp)2;

r=fgetc(bmp)2;

t=fgetc(bmp)2;

setrgbpalette(i,r,g,b);

}

for (y=0;y200;y++)

for (x=0;x160;x++)

{

t=fgetc(bmp);

putpixel(x*2+160,339-y,t4);

putpixel(x*2+161,339-y,t15);

}

fclose(bmp);

while (TRUE)

{

Key=toupper(AscKey());

if (Key==’A’) Sel=1;

if (Key==’B’) Sel=2;

if (Key==’C’) Sel=3;

if (Sel) break;

}

Step=Steps[Sel-1];

Interval=Intervals[Sel-1];

cleardevice();

}

/*********************************************************/

/* 文件:TIMER.H */

/*********************************************************/

/*********************************************************/

/* 系統可用計時器的最大數目 */

# define MAXTIMER 10

# ifndef NULL

# define NULL 0

# endif

/* 計時器結構 */

struct TM

{

DWORD Interval; /* 間隔 */

DWORD LastTimer; /* 上次事件發生時間*/

BOOL Enable; /* 活動 */

BOOL Used; /* 可用 */

void (*Pointer)(); /* 事件遠指針 */

};

struct TM tmTM[MAXTIMER+1];

int TimerUsed=0;

/* 獲取BIOS計數器數值 */

DWORD BiosTimer(void)

{

DWORD BIOSTIMER=0;

BIOSTIMER=peek(0x0,0x46e);

BIOSTIMER=8;

BIOSTIMER+=peek(0x0,0x46c);

return (BIOSTIMER);

}

/* 時間事件(時鐘系統核心) */

void TimerEvent()

{

int i;

DWORD TimerDiff;

for (i=1;i=MAXTIMER;i++)

{

if (tmTM[i].UsedtmTM[i].Enable)

{

TimerDiff=BiosTimer()-tmTM[i].LastTimer;

if (tmTM[i].Interval=TimerDiff)

{

tmTM[i].Pointer();

tmTM[i].LastTimer=BiosTimer();

}

}

}

}

/* 創建一個時鐘(成功返回時鐘的句柄,否則返回NULL) */

int CreateTimer(DWORD Interval,void (*Pointer)())

{

int i=0;

if (TimerUsed==MAXTIMER) return NULL;

while (tmTM[++i].Used);

tmTM[i].Pointer=Pointer;

tmTM[i].Interval=Interval;

tmTM[i].Enable=TRUE;

tmTM[i].Used=TRUE;

tmTM[i].LastTimer=BiosTimer();

TimerUsed++;

return i;

}

/* 刪除一個時鐘 */

void KillTimer(int *TimerID)

{

if (tmTM[*TimerID].Used)

{

TimerUsed–;

tmTM[*TimerID].Used=FALSE;

}

*TimerID=0;

}

/* 刪除所有時鐘 */

void KillAllTimer()

{

int i;

for (i=0;i=MAXTIMER;i++) tmTM[i].Used=FALSE;

TimerUsed=0;

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/159123.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-19 18:57
下一篇 2024-11-19 18:58

相關推薦

  • 為什麼不用Python開發遊戲

    Python是一種高級編程語言,擁有簡單易學、代碼簡潔等優點。同時,Python也是一種多用途的語言,可以用於Web開發、數據分析以及機器學習等領域。然而,對於遊戲開發領域,Pyt…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • 使用Python製作遊戲代碼

    Python是一種高級編程語言,因其簡潔明了的代碼風格、易於學習和使用而備受青睞。Python已經成為遊戲製作的熱門選擇之一,可以通過Pygame、Panda3D等工具來實現遊戲制…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28

發表回復

登錄後才能評論