1. 程式人生 > >一天練習一個小C/C++程式(一) 控制檯版“金山打字”遊戲

一天練習一個小C/C++程式(一) 控制檯版“金山打字”遊戲

今天練習了一個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的。所以看到如此程式碼,不要疑惑。