2022年5月23日 星期一

*嗚嗚* Week14

 # 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\.
Step03-1:先學習glutTimerFunc( )
-設定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);
鬧鐘響一次,就發出聲音一次。
The End












沒有留言:

張貼留言