這樣子的表現在本程式中並不適合, 如果在程式執行到了讀取按鍵的時候, 操作的人沒有按下任何按鍵的話, 程式就停在那兒等待, 也就不會往下執行到 "向前走一步" 的動作了, 螢幕上的 "*" 符號就不會依照原方向往前走了。
這個問題在 TURBO C/Borland C 環境中有兩種解決的方法, 在 Visual C++ 中可以用下面的第一個方法:
上面的程式還有一些問題, 當操作者按下功能鍵 F1, F2, ... F10 或是上下左右鍵時, 得到的 c 值是 0,(在 VC 環境下是 0xe0) 但是如果再呼叫一次 getch() 則可以得到按鍵的值, 請參考:
請注意: 上面的作法是假設你的主程式是 xxxx.c, 如果你的程式檔案名稱的副檔名用 xxxx.cpp 的話, 請將 utilwin32.c 檔案改名為 utilwin32.cpp 如此在連結的時候才可以順利地用到 gotoxy(), clrscr() 等函式, 否則 linker 在工作的時候會找不到 gotoxy() 及 clrscr() 這些 C 的函式, 另外一種方法是更改 utilwin32.h 內容如下:
(VC6 / Win32 環境中對於 console mode 的支援請參考 MSDN Library "Console sample (console functions)" 這個完整的範例程式)
提示與要求:
記錄的方法至少有兩種:
要求:
請運用 FILE 及 fopen()/fclose() 開啟記錄排名表的文字檔案, 排名最主要是顯示成績、姓名、以及時間三個資料, 時間資料可以用 time() 函式求得自 1970 年 1 月 1 日 0 時 0 分 0 秒到現在的秒數, 以長整數表示, 並且存放起來, 列印在螢幕上的時候可以藉由 ctime() 函式來顯示文字格式的時間。
使用文字檔案來記錄排名表時, 請特別注意有些使用者會輸入 "空白字元" 作為姓名的一部分, 這可能導致你的程式在重新讀入時的錯誤, 請小心處理。
當然你也可以嘗試使用二進位的方式來存取檔案。
在上面的範例執行程式中, 你可以注意到每隔一段 (不固定長度) 的時間, 會出現一種 "@" 的目標物, 這種目標物在一段時間內如果沒有被 snake 吃掉的話就會自動消失, 如果被吃掉的話可以加一些分數。 或是某一種目標物一旦被吃掉以後貪食蛇的速度會突然加快, 讓使用者比較難控制...。
如下圖你也可以增加一些障礙:
回
C++ 程式設計課程
首頁
製作日期: 2/19/2003
by 丁培毅 (Pei-yih Ting)
E-mail: [email protected]
TEL: 02 24622192x6615
海洋大學
理工學院
資訊科學系