一天練習一個小C/C++程式(一) 控制檯版“金山打字”遊戲
阿新 • • 發佈:2018-12-27
今天練習了一個C語言小程式,控制檯版的簡易“金山打字”小遊戲。
效果圖:
程式碼:
#include<stdio.h> #include<stdlib.h> #include<windows.h> #include <conio.h> void printfSpace(int num){ for(int i=0;i<num;i++){ printf(" "); } } void printfColumn(int num){ for(int i=0;i<num;i++){ printf("\r\n"); } } void printfRow(int num){ for(int i=0;i<num;i++){ printf("-"); } } void printfHead(int level,int score){ printfSpace(20); printf("levels:%d",level); printfSpace(10); printf("score:%d",score); //換行 printfColumn(1); printfSpace(20); printf("1--pause"); printfSpace(10); printf("0--exit"); //換行 printfColumn(1); //輸出橫線 printfRow(80); } int main(){ printfColumn(10); printfSpace(25); printf("press anykey to start"); //阻塞等待輸入 getchar(); //清螢幕 system("cls"); //C語言必須進行初始化 int level=0,score=0,random = 0; //初始化頭 printfHead(level,score); //生成字母 char firstC = 'A'; while(true){ //每一次迴圈先清屏,重新生成頭佈局 system("cls"); printfHead(level,score); //每次掉的時候先生成一個字母 random = rand() % 26; char word = firstC + random; //生成顯示在第幾列(字母顯示在第幾列) int rowCount = rand() % 80; int limit = 20,i; //開始掉 for(i = 0;i<limit;i++){ printfSpace(rowCount); printf("%c",word); Sleep(200); //回吃掉字母並且在當前行下移一行 printf("\b \n"); //使用kbhit來監聽鍵盤敲擊,防止使用getchar造成阻塞 if(kbhit()){ //使用getch會讀取一個字元,如果使用getchar會讀取輸入的所有內容 char answer = getch(); if(answer == word){ score += 10; break; }else if(answer == '1'){ //暫停函式,按任意鍵之後會再繼續執行程式 system("pause"); }else if(answer == '0'){ //退出程式 exit(0); } } } //能走到這說明直到底都沒有消除,所以減十分 if(i == limit){ score -= 10; if(score <= -30){ system("cls"); printfColumn(10); printfSpace(25); printf("game over!"); break; } } } return 0; }
很好玩,對於java基礎好的童鞋,寫這些沒什麼邏輯問題,最主要的就是找一找功能函式,還有C語言是不支援在for迴圈中定義變數的,這裡用的C++編譯器,OK的。所以看到如此程式碼,不要疑惑。