week14 20220524
小葉老師上課要點:
* fopen() 開檔 ( 開啟檔案 )1. 寫檔、讀檔
2. 關節、做動畫
3. 計時器 glutTimerFunc(時間, timer, 參數t)
4. 播放聲音
主題: 寫檔、讀檔
* fprintf() 寫檔
2.5 再回到codeblocks 按綠三角形加齒輪執行,就可以成功!! 動動機器人的關節,
* fclose() 關檔 ( 關閉檔案 )
1. 在桌面上建立一個 week14-1_fprintf 資料夾
2. 開啟 codeblocks 建立一個新檔 ( File > New > Empty File ) : 在 week14-1_fprintf 目錄下
建立 week14.cpp
**寫檔 File Output ( 紀錄 ) : 為了記錄動畫的動作
程式碼: FILE * fout = fopen( "file.txt" , "w+" );
檔案 指標 開啟檔案 檔名 write模式
** FILE:檔案 *:指標 fopen:開啟檔案(檔名, write模式)
打完後先按齒輪,和檔案所在的同目錄會迸出 .exe 和 .o 兩個檔案
再按綠色三角加齒輪 執行 : 小黑會印出 Hello World 目錄會再迸出 .txt 檔案 (第4行code)
3. 開啟 codeblocks 建立一個新檔 ( File > New > Empty File ) : 在 week14-2_fprintf_fscanf
目錄下建立 week14-2.cpp
**讀檔 File Input ( 紀錄 ) :複製 week14.cpp 來用
*用 讀檔,寫檔 將動作紀錄在小黑
2. 但是可讀性太差 , 改良!!
*加上兩行跳行 ( 小黑跳行、檔案也跳行
每印出一堆數字就跳行
1. 開啟 codeblocks 建新的 GLUT 專案 : week14_angles_fprintf_fscanf
從上一個程式( week14_angle_fprintf ) 做修改
目標: 使用 void myRead() ,在 keyboard() , 按下 ' r ' 呼叫 myRead()
* myWrite() 結尾沒有 fclose 所以在 myRead()一開始先 fclose() 做收尾
* 當做好一連串動作,長按 r ,便會開始播出剛剛做的一連串動作
為什麼專案產生的檔案 file.txt 放在奇怪的目錄 (in C:\Users\USER\OneDrive\桌面\freeglut\bin) ?
被設定在 freeglut\bin 裡面
怎麼做能夠讓 file.txt 和專案放在同一個目錄?
2.1 將專案目錄裡的 .cbp 檔案使用 Notepad++ 開啟,
找到 working_dir="C:/Users/USER/OneDrive/桌面/freeglut/bin"
都改成 working_dir="." (小數點)
記得按 ctrl +s 存檔
2.2 回到 codeblocks 會詢問是否 Reload Project , 按 Yes
2.3 按下綠色三角形齒輪執行看看,會出現系統錯誤找不到 freeglut.dll
會記錄在小黑視窗,開啟的txt檔也會出現再專案目錄資料夾。
( txt 檔內同樣紀錄小黑視窗中的動作紀錄)
主題: 計時器 glutTimerFunc(時間, timer, 參數t)
* 持續按 r 可以播出動畫,但是友人的速度可能有點慢,這是要看每一台電腦 keyboard 設定的速度
為了解決這樣的問題,可以使用計時器 glutTimerFunc
1. 開啟 codeblocks 建新的 GLUT 專案 : week14_timer
* void timer(int t) 寫 timer 函式
* glutTimerFunc ( 等多久 , timer , t 參數 );
2. * 但是期末作品30秒,每秒30格,需要設900個timer太麻煩了
> 使用 函式呼叫函式 讓程式自動能夠 timer 接著 timer 設
開啟 codeblocks 建新的 GLUT 專案 : week14_timer_one_by_one
* 設定5秒後 第0個timer開始起床,然後接下來函式會自己呼叫函式,每一秒建立一個t+1個timer
主題: 播放聲音
* 播放聲音用 PlaySound ,要先下載 音檔 "do.wav"
1. 使用 week14_timer_one_by_one 繼續改程式碼
*要加標頭檔 #include <mmsystem.h>
*播聲音函式: PlaySound("do.wav" , NULL , SND_ASYNC );
音檔 , 空指標(沒有指定要把音樂掛哪裡) , 非同步播出














沒有留言:
張貼留言