c语言 倒计时不清屏_打字游戏超细讲解(C语言基础小游戏)
首先我們會發現我們網上看到的打字游戲都是上來就敲代碼,小白看的一臉懵,所以鑫哥在這給大家送上一份超級詳細的打字游戲編寫流程及對應的結果展示,希望可以幫到小白進行入門學習。
話不多說,我們先看一下什么叫做打字游戲:
運行效果很簡單的一個C語言的小游戲,接下來鑫哥將帶領大家進行編寫運行。
一、開發環境:
本次使用的環境為:Ubuntu系統云+sublime進行開發的。
二、框架分析:
最外層時一個大循環:----------while
打印游戲規則
按下任意鍵打印生成的隨機字符串(20字母的字符串)
先生成一個隨機的字符串----按下任意鍵----打印出來
按下任意鍵----生成一個隨機的字符串----打印出來
按下任意鍵(需要做出一個沒有回顯的)----------獲取鍵盤輸入
生成一個隨機的字符串(生成 隨機數->字母->數組)(已知次數循環)--for-函數的調用
打印出來--------輸出
按照上面的字符串進行敲鍵盤
同時進行判斷,如果正確就原樣輸出,如果錯誤就_輸出-------if ---else
在第0次按下時開始計時、最后結束計時--------調用時間函數獲取當前系統時間
如果按下的按鍵和對應的數組中的字母相同---原樣輸出(同時k++)
如果不一樣-----打印_
最后完成了,打印用時、正確個數(正確個數由k表示)
用時 = 結束時間-開始時間 正確個數 = k
按下esc退出、按下空格鍵繼續
判斷按下的是什么
ESC退出: retrun 0;//結束當前函數并返回一個0
空格繼續:清屏繼續玩
三、開始編程:
1.能玩一次的打字游戲
1.1打印游戲規則:
#include <stdio.h> int main() {//1.打印游戲規則printf("按下任意鍵開始游戲,按下首字母開始計時,正確原樣輸出,錯誤_表示n");//2.按下任意鍵,生成一個隨機的字符串,打印輸出 }運行效果1.2.按下任意鍵
提供給大家一個源碼:mygetch 無回顯的getchar(不需要回車)
//------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;} //----------------------------------------------------- 復制粘貼在main函數上方進行使用正常代碼:(按下任意鍵不需要知道按了什么,所以不需要用變量去接返回值)
#include <stdio.h> //------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;} //----------------------------------------------------- int main() {//1.打印游戲規則printf("按下任意鍵開始游戲,按下首字母開始計時,正確原樣輸出,錯誤_表示n");//2.按下任意鍵,生成一個隨機的字符串,打印輸出mygetch();//函數名+( );就表示函數的調用 按下任意鍵return 0; }運行效果將隨機數->字母
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() {srand(time(NULL));//設置隨機數種子,使用的是時間(當前的系統時間)int a =rand();printf("%dn",a);char b = a%26+'a';//一個很大的數%26取余就變成了0-25//一個0-25的數+‘a’就變成了‘a’-‘z’隨機字母(ASCII碼)printf("%cn",b);return 0; }運行效果創建數組,將生成好的字母(字符)放入數組的對應位置中
#include <stdio.h> //------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> #include <stdlib.h> #include <time.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;} // //-----------------------------------------------------int main() {char haha[20] = "";//20 表示的是數組的長度srand(time(NULL));//設置隨機數種子,使用的是時間(當前的系統時間)//循環的生成、放入、生成、放入//因為一共20次,因此我們使用已知循環次數的循環forint i;mygetch();//按下任意鍵for (i = 0; i < 20; ++i)//要將int i= 0;的int去掉{// char b = rand()%26+'a';//生成一個隨機的字母// haha[i] = b;//給數組中的第i個賦值haha[i] = rand()%26+'a';}printf("%sn", haha);//打印生成好的隨機字符串// int a =rand();// printf("%dn",a);// char b = a%26+'a';// //一個很大的數%26取余就變成了0-25// //一個0-25的數+‘a’就變成了‘a’-‘z’隨機字母// printf("%cn",b);return 0; }按照你上面有的字符進行敲擊鍵盤
#include <stdio.h> //------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> #include <stdlib.h> #include <time.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;} // //----------------------------------------------------- int main() {char haha[20] = "";//20 表示的是數組的長度srand(time(NULL));//設置隨機數種子,使用的是時間(當前的系統時間)int i;mygetch();//按下任意鍵for (i = 0; i < 20; ++i)//要將int i= 0;的int去掉{haha[i] = rand()%26+'a';}printf("%sn", haha);//打印生成好的隨機字符串int time_s = 0,time_e = 0,k = 0;for (i = 0; i < 20; ++i){char a = mygetch();//獲取鍵盤輸入的一個字符if (i == 0){time_s = time(NULL);//如果第0次按下就獲取下當前的時間}if (a == haha[i]){printf("%c", a);k++;}elseprintf("_");}time_e = time(NULL);printf("n");printf("用時:%ds,正確個數%d個n",time_e - time_s ,k);return 0; }運行效果3.如何做成可以玩多次的打字游戲:
按下空格就打印haha,按下esc就退出
#include <stdio.h> //------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> #include <stdlib.h> #include <time.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;} int main(int argc, char const *argv[]) {int r = 1;while(1)//死循環{printf("hahahahahan");r = 1;while(r){printf("esc退出,空格繼續,其他不好使n");char ch = mygetch();if (ch == 27){return 0;}else if (ch ==32){r = 0;}elser = 1;}}return 0; }將上面進行合并最后就是整個小項目:
#include <stdio.h> //------------------封裝好的mygetch------------------ #include <termios.h> #include <unistd.h> #include <stdlib.h> #include <time.h> char mygetch(){struct termios oldt, newt;char ch;tcgetattr( STDIN_FILENO, &oldt );newt = oldt;newt.c_lflag &= ~( ICANON | ECHO );tcsetattr( STDIN_FILENO, TCSANOW, &newt );ch = getchar();tcsetattr( STDIN_FILENO, TCSANOW, &oldt );return ch;}int main(int argc, char const *argv[]) {int r = 1;while(1)//死循環{system("clear");//清空屏幕printf("按下任意鍵開始游戲,按下首字母開始計時,正確原樣輸出,錯誤_表示n");char haha[21] = "";//20 表示的是數組的長度srand(time(NULL));//設置隨機數種子,使用的是時間(當前的系統時間)int i;mygetch();//按下任意鍵for (i = 0; i < 20; ++i)//要將int i= 0;的int去掉{haha[i] = rand()%26+'a';}printf("%sn", haha);//打印生成好的隨機字符串int time_s = 0,time_e = 0,k = 0;for (i = 0; i < 20; ++i){char a = mygetch();//獲取鍵盤輸入的一個字符if (i == 0){time_s = time(NULL);//如果第0次按下就獲取下當前的時間}if (a == haha[i]){printf("%c", a);k++;}elseprintf("_");}time_e = time(NULL);printf("n");printf("用時:%ds,正確個數%d個n",time_e - time_s ,k);r = 1;while(r){printf("esc退出,空格繼續,其他不好使n");char ch = mygetch();if (ch == 27){return 0;}else if (ch ==32){r = 0;}elser = 1;}}return 0; } 打字游戲最終的運行效果感謝各位小伙伴的支持歡迎點贊關注,謝謝,配合B站使用更佳
鑫哥B站:
千鋒項目體驗課-自制ipod-2打字游戲框架_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的c语言 倒计时不清屏_打字游戏超细讲解(C语言基础小游戏)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝牙a2dp硬件卸载是什么意思_索尼这项
- 下一篇: 开启ntp服务_Linux入门:Linu