# Week14
Step01-1:練習寫檔
-FILE * fin=fopen("file.txt","w+");
-printf()改裝成fprintf()
-關閉檔案 `fclose(fin)`
Step01-2:練習開檔+寫檔+關檔&練習開檔+讀檔+關檔
-把printf()刪掉
-程式碼做開檔->寫檔->關檔的動作:
-FILE * fin=fopen("file.txt","w+");
-printf()改裝成fprintf()
-關閉檔案 `fclose(fin)`
-開檔
-讀入字串並列印字串
-fscanf(fin,"%s %d",line,&a);//讀入字串
-printf()//印出字串
-關檔
Step01-3A:把上週寫的week13_rect_many_TRT拿來繼續改
-打開新的GLUT專案,專案名稱取名為week14_TRT_angle_write
-貼上week13_rect_many_TRT程式
-要開檔&寫檔,最後做關檔的動作。
1.程式最前面先宣告要使用到的函式庫
```cpp
#include <stdio.h> //為了要可以使用printf,fprintf,fopen,fclose
```
2.先寫一個新程式:myWrite()//20個關節,所以for迴圈做20次
```cpp
FILE * fout = NULL;
void myWrite()
{
if(fout==NULL) fout=fopen("file.txt","w+");
for(int i=0;i<20;i++)
{
fprintf(fout,"%.2f",angle[i]);
}
}
```
3.motion()裡加入myWrite(),就會執行myWrite()
```cpp
myWrite();
```
Step01-3B:加點程式碼,讓我們可以看到關節轉動的數值,並找到程式碼產生的file.txt檔
-在myWrite(),fprintf()前加上:printf( "%.2f",angle[i]);//顯示關節旋轉角度
-在myWrite()的for迴圈外面加上
printf("\n");
fprintf(fout,"\n");
//印出的數字看起來比較整齊
-view/Log,找到專案執行位置:\Users\雨涵\Desktop\freeglut\bin// 搜尋電腦->找出file檔
Step02-1:模仿動作
-打開新的GLUT專案,檔案名稱取名為week14_TRT_angle_write_and_read
-程式最前面加上新的空指標:`FILE * fin = NULL;`
-寫一個void myRead()
```cpp
void myRead()
{
if(fout!=NULL){
fclose(fout);fout=NULL;
}
if(fin==NULL) fin=fopen("file.txt","r");
for(int i=0;i<20;i++)
{
fscanf(fin,"%f",&angle[i]);
}
glutPostRedisplay();
}
```
-keyboard()函式中,加上一個新的按鍵,按下可以呼叫myRead()並更新畫面
執行時,先讓模型做一些動作。
之後再長按"r"鍵,模型就會重複剛剛做的動作。
Step02-2:修改專案的工作目錄
-目前的工作目錄:\Users\雨涵\Desktop\freeglut\bin
-要把專案的工作目錄改放在自己想要的位置(專案的資料夾)
方法程序:
-利用Notepad++去修改程式專案的.cbp檔
-打開.cbp檔,找到working_dir
-把working_dir後的位置改成: "." (雙引號裡面有小數點)
-再打開CodeBlocks:會詢問->重新讀檔:按yes
-手動把freeglut/bin 裡的freeglut.dll複製到目前專案目錄中
-完成後的專案工作目錄為:\Users\雨涵\Desktop\week14_TRT_angle_write_and_read\.
-設定timer:glutTimerFunc(時間,timer,參數t)
-宣告void timer(int t)
Step03-2:讓鬧鐘發出聲音
-下載do.wav(音檔)
-宣告:#include <mmsystem.h>
-void timer(int t)裡加上PlaySound("do.wav",NULL,SND_ASYNC);
鬧鐘響一次,就發出聲音一次。
沒有留言:
張貼留言