c語言打字母游戲
A. C語言打字練習游戲中怎樣實現字母掉落,不用換行和隨機坐標還有別的方法嗎
可以指定游標位置進行printf輸出字元,多字元同時出現,最好使用多線程,下面是個簡單的例子,希望對你有幫助
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
voidsetxy(intx,inty)
{
COORDcoord={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
intmain()
{
CONSOLE_CURSOR_INFOcci;
cci.bVisible=FALSE;
cci.dwSize=sizeof(cci);
HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle,&cci);
srand((unsigned)time(0));
intx,y;
intc;
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;
}
}
}
return0;
}
B. C璇璦鎵撳瓧娓告垙vc鐜澧
棣栧厛錛岃緭鍏ュ瓧姣嶇殑鏃跺欙紝浣犺佽В鍐寵緭鍏ヨ繘浜╃炴潵錛岀劧鍚庝笉鏄劇ず鍦ㄥ睆騫曚笂錛涙帴鐫錛屽垽鏂鐫佽愬矓榪欎釜瀛楁瘝絎︿笉絎﹀悎瑕佹眰錛岀劧鍚庤劇疆瀛楃殑棰滆壊錛屽苟鏄劇ず錛岃屼笖鎾鏀懼0闊熾傚綋瀛楁瘝杈撳叆瀹屼箣鍚庯紝灝辮$畻姝e父鐜囷紝絎﹀悎瑕佹眰榪涘叆涓嬩竴鍏籌紝涓嶇﹀悎灝遍噸鏉ヨ繖涓鍏熾傚湪娓告垙榪囩▼涓錛岃緭鍏ヤ竴涓鐗瑰畾鐨勬寜閿錛岄鍑烘父鎴忋
鎵浠ワ紝瑙e喅闂棰橈細鈶犳寜閿鍚庯紝鐣岄潰鎮夎╀笉鏄劇ず錛屽苟涓旇兘鎺ユ敹瀛楃(鐢╣etch())
鈶″湪鎺у埗鍙扮晫闈涓婅劇疆瀛椾綋棰滆壊(SetConsoleTextAttribute())
鈶㈡挱鏀懼0闊(playsound())
C. c璇璦緙栫▼鎵撳瓧姣嶆父鎴忥紝鎬庝箞璁劇疆瑙勫畾鏃墮棿錛
# include
# include
# include
# include
# pragma comment(lib,鈥漌inmm.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; // 褰撳仛鏍囪幫紝鐢ㄤ簬鏍囪版槸鍚﹀脊鍑篗essageBox瀵硅瘽妗
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)
D. 用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--; //計數
}
}