详细讲解C语言单机小游戏——打字母游戏
生活随笔
收集整理的這篇文章主要介紹了
详细讲解C语言单机小游戏——打字母游戏
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
要用C語言編寫一個單機(jī)小游戲,首先得安裝一個圖形庫。在這里我用的是EasyX 圖形庫,EasyX 是針對 C++ 的圖形庫,可以幫助 C++語言初學(xué)者快速上手圖形和游戲編程。 比如,可以用 VC + EasyX 很快的用幾何圖形畫一個房子,或者一輛移動的小車,可以編寫俄羅斯方塊、貪吃蛇、黑白棋等小游戲,可以練習(xí)圖形學(xué)的各種算法,等等。 后續(xù)我也會間斷性編寫一些小游戲,主要目的還是昨天說的,為了更快的得到正反饋,讓初學(xué)者提高編程興趣。 這是圖形庫的下載地址: http://pan.baidu.com/s/1qYfWJne安裝好后就可以用了。 #define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<time.h>
我用的開發(fā)環(huán)境是Microsoft Visual Studio 當(dāng)用到scanf()輸入函數(shù)或sprintf()字符串格式化輸入函數(shù)時會有安全警告。 第一句:#define _CRT_SECURE_NO_WARNINGS??? 作用是去掉vs的這個安全警告,具體原因?qū)诤竺娓碌牟┛椭薪庹f。 第三句:#include<graphics.h>?? 這就是調(diào)用我們安裝的easyX圖形庫了。 第四句:#include<conio.h>??? srand();rand();兩個函數(shù)所在的頭文件,srand()是初始化隨機(jī)種子,srand()配合time(NULL)用從而達(dá)到產(chǎn)生不重復(fù)的隨機(jī)數(shù)的目的,rand()是產(chǎn)生隨機(jī)數(shù),srand()和rand()函數(shù)的具體解釋也在后面的博客中解說,現(xiàn)在只需依樣畫葫蘆便可。 第五句:#include<time.h>?? 是time()函數(shù)所在的頭文件。
int main() {initgraph(600, 400);//初始畫布600*400像素,和closegraph()成對出現(xiàn)int x, y;//字母隨機(jī)出現(xiàn)的坐標(biāo)char target;//字母int key;//記錄用戶按鍵char s[10] = { 0 };//score:顯示得分char f[10] = { 0 };//wrong:顯示失敗分?jǐn)?shù)int score = 0;int wrong = 0;sprintf(s,"SCORE:%d",score);//將整型score轉(zhuǎn)換成字符串,格式化寫入到字符型s中。outtextxy(0,350,s);//將s字符串得分在0*350的位置輸出sprintf(f, "WRONG:%d", wrong);//格式化輸入失分outtextxy(0, 375, f);//丟分輸出srand((unsigned int)time(NULL));//生成隨機(jī)種子//循環(huán)出現(xiàn)字母while (1){target = 65 + rand() % 26;//隨機(jī)生成大寫字母,65-90是大寫字母的ASCII碼,在標(biāo)準(zhǔn)的C庫中函數(shù)rand()可以生成0~RAND_MAX之間的一個 //隨機(jī)數(shù),其中RAND_MAX 是stdlib.h 中定義的一個整數(shù),故這句取值范圍:65-90x = 30 + rand() % 540;//字母在x軸出現(xiàn)的位置//判斷是否結(jié)束游戲if (wrong == 10){cleardevice();//清屏settextstyle(40,0,"宋體");//設(shè)置字體樣式settextcolor(RGB(177, 174, 46));//字體顏色sprintf(s, "SCORE:%d", score);//格式化輸入得分outtextxy(210,130,"GAME OVER");//輸出GAME OVERouttextxy(210, 180, s);//輸出得分break;//退出while循環(huán)}//字母掉落效果for (y = 0; y < 400; y++){settextcolor(RGB(177,174,46));//設(shè)置字母顏色outtextxy(x,y,target);//輸出字母//字母調(diào)到底部扣分if (y >= 390){wrong++;//扣分setfillcolor(BLACK);//填充顏色bar(x, y, x + 20, y + 20);//黑色矩形遮蓋字母settextcolor(WHITE);sprintf(f, "WRONG:%d", wrong);outtextxy(0, 375, f);//覆蓋上次計分break;//退出for循環(huán)}//判斷用戶是否按鍵else if (_kbhit()){key = _getch();//記錄按鍵//打字正確if (key == target || key == target + 32){score++;//加分setfillcolor(BLACK);bar(x,y,x+20,y+20);//遮蓋字母settextcolor(WHITE);sprintf(s, "SCORE:%d", score);outtextxy(0, 350, s);//覆蓋上次分?jǐn)?shù)break;//退出for循環(huán)}//打字錯誤else {wrong++;//丟分setfillcolor(BLACK);bar(x, y, x + 20, y + 20);//遮蓋字母settextcolor(WHITE);sprintf(f, "WRONG:%d", wrong);outtextxy(0, 375, f);//覆蓋分?jǐn)?shù)break;//退出for循環(huán)}}Sleep(8);//設(shè)置字母下落速度//防止字母掉落時遮蓋得得分輸出處//y++一次就輸出一次得分settextcolor(WHITE);outtextxy(0, 350, s);outtextxy(0, 375, f);}}getchar();//防止閃屏closegraph();//關(guān)閉畫布return 0; } 運行后的效果:
在后面的博客中我將會加上貼圖技術(shù),和音樂,大致效果:
我用的開發(fā)環(huán)境是Microsoft Visual Studio 當(dāng)用到scanf()輸入函數(shù)或sprintf()字符串格式化輸入函數(shù)時會有安全警告。 第一句:#define _CRT_SECURE_NO_WARNINGS??? 作用是去掉vs的這個安全警告,具體原因?qū)诤竺娓碌牟┛椭薪庹f。 第三句:#include<graphics.h>?? 這就是調(diào)用我們安裝的easyX圖形庫了。 第四句:#include<conio.h>??? srand();rand();兩個函數(shù)所在的頭文件,srand()是初始化隨機(jī)種子,srand()配合time(NULL)用從而達(dá)到產(chǎn)生不重復(fù)的隨機(jī)數(shù)的目的,rand()是產(chǎn)生隨機(jī)數(shù),srand()和rand()函數(shù)的具體解釋也在后面的博客中解說,現(xiàn)在只需依樣畫葫蘆便可。 第五句:#include<time.h>?? 是time()函數(shù)所在的頭文件。
int main() {initgraph(600, 400);//初始畫布600*400像素,和closegraph()成對出現(xiàn)int x, y;//字母隨機(jī)出現(xiàn)的坐標(biāo)char target;//字母int key;//記錄用戶按鍵char s[10] = { 0 };//score:顯示得分char f[10] = { 0 };//wrong:顯示失敗分?jǐn)?shù)int score = 0;int wrong = 0;sprintf(s,"SCORE:%d",score);//將整型score轉(zhuǎn)換成字符串,格式化寫入到字符型s中。outtextxy(0,350,s);//將s字符串得分在0*350的位置輸出sprintf(f, "WRONG:%d", wrong);//格式化輸入失分outtextxy(0, 375, f);//丟分輸出srand((unsigned int)time(NULL));//生成隨機(jī)種子//循環(huán)出現(xiàn)字母while (1){target = 65 + rand() % 26;//隨機(jī)生成大寫字母,65-90是大寫字母的ASCII碼,在標(biāo)準(zhǔn)的C庫中函數(shù)rand()可以生成0~RAND_MAX之間的一個 //隨機(jī)數(shù),其中RAND_MAX 是stdlib.h 中定義的一個整數(shù),故這句取值范圍:65-90x = 30 + rand() % 540;//字母在x軸出現(xiàn)的位置//判斷是否結(jié)束游戲if (wrong == 10){cleardevice();//清屏settextstyle(40,0,"宋體");//設(shè)置字體樣式settextcolor(RGB(177, 174, 46));//字體顏色sprintf(s, "SCORE:%d", score);//格式化輸入得分outtextxy(210,130,"GAME OVER");//輸出GAME OVERouttextxy(210, 180, s);//輸出得分break;//退出while循環(huán)}//字母掉落效果for (y = 0; y < 400; y++){settextcolor(RGB(177,174,46));//設(shè)置字母顏色outtextxy(x,y,target);//輸出字母//字母調(diào)到底部扣分if (y >= 390){wrong++;//扣分setfillcolor(BLACK);//填充顏色bar(x, y, x + 20, y + 20);//黑色矩形遮蓋字母settextcolor(WHITE);sprintf(f, "WRONG:%d", wrong);outtextxy(0, 375, f);//覆蓋上次計分break;//退出for循環(huán)}//判斷用戶是否按鍵else if (_kbhit()){key = _getch();//記錄按鍵//打字正確if (key == target || key == target + 32){score++;//加分setfillcolor(BLACK);bar(x,y,x+20,y+20);//遮蓋字母settextcolor(WHITE);sprintf(s, "SCORE:%d", score);outtextxy(0, 350, s);//覆蓋上次分?jǐn)?shù)break;//退出for循環(huán)}//打字錯誤else {wrong++;//丟分setfillcolor(BLACK);bar(x, y, x + 20, y + 20);//遮蓋字母settextcolor(WHITE);sprintf(f, "WRONG:%d", wrong);outtextxy(0, 375, f);//覆蓋分?jǐn)?shù)break;//退出for循環(huán)}}Sleep(8);//設(shè)置字母下落速度//防止字母掉落時遮蓋得得分輸出處//y++一次就輸出一次得分settextcolor(WHITE);outtextxy(0, 350, s);outtextxy(0, 375, f);}}getchar();//防止閃屏closegraph();//關(guān)閉畫布return 0; } 運行后的效果:
在后面的博客中我將會加上貼圖技術(shù),和音樂,大致效果:
總結(jié)
以上是生活随笔為你收集整理的详细讲解C语言单机小游戏——打字母游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路由拓扑表中AD和FD以及FD的计算
- 下一篇: FLASH时钟(www.lancu.co