所以我試圖在我的終端上顯示遊戲板,並讓玩家輸入他們的下一步行動(在我的情況下是4連勝)。每次玩家進行輸入時,我都會再次畫板。C - 在終端上顯示信息的方法更快
不幸的是,這些插入牆壁和棋子時,每個字符分別,你基本上可以看到我的電腦變慢顯示每一個字符一個接一個。
爲了簡化這裏的事情,我會假裝我只想顯示一大串字符。我已經有大部分的邏輯和輸入工作,所以我只是尋找優化。
所以這是我第一次方法。只需通過循環並逐一打印。
// Rows
for(int x = 0; x < 10; x++) {
// Columns
for(int y = 0; y < 10; y++) {
// Note: to keep evererything neatly in-line, I'll just use if-statements
if((y % 3) == 0) printf(" ");
if((y % 3) == 1) printf("X");
if((y % 3) == 2) printf("O");
}
printf("\n"); // Add line-break at the end
}
所以我的猜測是,每一個我打電話printf
時間,計算機分析和打印出來我的屏幕上之前相應編輯字符串。這可能是它如此緩慢的原因。 (如果我錯了,請糾正我)。
作爲第二種方法,我試圖將一個字符數組內的所有信件保存在打印之前。
char text[500]; // Note: In my program I don't know how long the text is.
int index = 0;
// Rows
for(int x = 0; x < 10; x++) {
// Columns
for(int y = 0; y < 10; y++) {
if((y % 3) == 0) text[index] = ' '; // Set text index accordingly
if((y % 3) == 1) text[index] = 'X';
if((y % 3) == 2) text[index] = 'O';
index++; // Increase index
}
text[index] = '\n'; // Add line-break
index++;
}
text[index] = '\0'; // End of string
printf(text);
雖然起初有點勢不可擋,此代碼的工作perfectally我居然設法打印字符串很多,很多更快。
這樣做的問題是,(1)你很快就會失去跟蹤你的指數(所以調試是一個真正的痛苦),並且(2)你不得不忍受恐懼,你的文字會更長超過500個字符(或者你只需要100個字符並浪費了大量的空閒空間)。
我現在的問題是:是否有任何快速和更一致的方式來顯示終端屏幕上的信息?而不是每輪都顯示遊戲板,我是否也可以刪除最後幾個字符,直到找到需要編輯的部分?我還可以凍結屏幕直到內容準備好嗎?
對於那些有興趣,這裏是(幾乎是)我的全C代碼:http://pastebin.com/Emffgsdd
爲此使用'curses'庫。 – Linus
你有沒有考慮過使用[* ncurses *](https://en.wikipedia.org/wiki/Ncurses)庫? – lurker
@Linnus好吧,我會研究它! –