2023年5月3日 星期三

rita - week12 -檔案讀寫、鍵盤、滑鼠控制角度

     第一個程式(開檔案)

     開一個空白檔案 / file / new / empty file   

     ///week12-1_printf_fprintf.cpp
    ///要能寫檔案
    #include <stdio.h>
    int main()
         /// 檔案指標 fout = 開檔案("檔名,"用什麼模式")
            FILE * fout = fopen("file.txt","w");///w:write

            printf("Hello World\n");
            fprintf(fout,"Hello World在檔案裡\n");
    }


   第二個程式(讀入檔案)

    開一個空白檔案 / file / new / empty file

    #include <stdio.h>
    int main()
    {
        FILE * fin =fopen("file.txt","r");///讀前一個範例

        char line[100];
        fscanf(fin,"%s",line);
        printf("從file.txt讀到了:%s\n",line);

        fscanf(fin,"%s",line);
        printf("從file.txt讀到了:%s\n",line);
    }


    第三個程式(開檔案+讀入檔案)

    開一個空白檔案 / file / new / empty file

    #include <stdio.h>
    int main()
    {
        int a[10]={10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
        int b[10]={};

        FILE * fout = fopen("file3.txt","w");
        for(int i=0;i<10;i++)
        {
            printf("%d ",a[i]);
            fprintf(fout,"%d ",a[i]);
        }
        printf("\n");
        fprintf(fout, "\n");
        fclose(fout);

        FILE * fin = fopen("file3.txt","r");
        for(int i=0;i<10;i++)
        {
            fscanf(fin,"%d",&b[i]);
            printf("b%d:%d ",i,b[i]);
        }
        fclose(fin);
    }


    第四個程式(用滑鼠mouse移動茶壺)

    開一個glut專案 / file / new / project / glut file

    下載葉老師上課用軟體freeglut壓縮檔
    將裡面的freeglut檔案複製到桌面
    再將裡頭lib的libfreeglut.a複製並貼上
    將複製的改檔名為libglut32.a

    ///要用keyboard mouse來控制茶壺,可存檔,可自己動
    #include <stdio.h>
    #include <GL/glut.h>
    float teapotX=0,teapotY=0;
    void display()
    {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
            glTranslatef(teapotX,teapotY,0);
            glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();
    }
    void mouse(int button, int state, int x, int y)
    {
        if(state==GLUT_DOWN)
        {
            teapotX = (x-150)/150.0;
            teapotY = (150-y)/150.0;
        }
        display();
    }
     int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week12");

        glutDisplayFunc(display);
        glutMouseFunc(mouse);

        glutMainLoop();
    }



    第四個程式版本2(用滑鼠移動茶壺,留下檔案和移動座標,按keyboard會重複       執行滑鼠路徑)

    ///要用keyboard mouse來控制茶壺,可存檔,可自己動
    #include <stdio.h>
    #include <GL/glut.h>
    FILE * fout = NULL;///一開始,檔案沒有開 NULL
    FILE * fin = NULL;///要讀檔用的指標,一開始也是NULL
    float teapotX=0,teapotY=0;
    void display()
    {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
            glTranslatef(teapotX,teapotY,0);
            glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();
    }
    void mouse(int button, int state, int x, int y)
    {
        if(state==GLUT_DOWN)
        {
            teapotX = (x-150)/150.0;
            teapotY = (150-y)/150.0;
            if(fout==NULL) fout=fopen("file4.txt","w");///沒開檔就開檔
            fprintf(fout,"%f %f\n",teapotX, teapotY);///要再存座標
        }
        display();
    }
    void keyboard(unsigned char key, int x, int y)
    {
        if(fin==NULL)///如果檔案還沒fopen(),就開它
        {
            fclose(fout);///要關掉前面mouse開的fout指標
            fin = fopen("file4.txt","r");///沒開檔就開檔
        }
        fscanf(fin, "%f %f",&teapotX, &teapotY);///讀檔
        display();
    }
     int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week12");

        glutDisplayFunc(display);
        glutMouseFunc(mouse);
        glutKeyboardFunc(keyboard);///keyboard要開檔,讀檔

        glutMainLoop();
    }





    第四個程式版本3(用滑鼠keyboard移動茶壺,留下檔案和移動座標)

    程式跟上一個一樣
    專案(有四格小方方的圖案)按右鍵


(debug)共三步驟!

將bin裡頭的dull檔按複製到week12-4專案裡頭

最後run我們的程式後 week12-4專案裡頭也有file4.txt檔案了

release 也要改!

最後要save everything才會該改檔案的改變!!!
freeglut / bin 的那路徑才會消失

    第五個程式(尚未完成)

    ///要用keyboard mouse來控制茶壺,可存檔,可自己動
    #include <stdio.h>
    #include <GL/glut.h>
    FILE * fout = NULL;///一開始,檔案沒有開 NULL
    FILE * fin = NULL;///要讀檔用的指標,一開始也是NULL
    float teapotX=0,teapotY=0;
    float angle=0, angle2=0, angle3=0;
    void display()
    {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glPushMatrix();
            glTranslatef(teapotX,teapotY,0);
            glutSolidTeapot(0.3);
        glPopMatrix();
        glutSwapBuffers();
    }
    void mouse(int button, int state, int x, int y)
    {
        if(state==GLUT_DOWN)
        {
            teapotX = (x-150)/150.0;
            teapotY = (150-y)/150.0;
            if(fout==NULL) fout=fopen("file4.txt","w");///沒開檔就開檔
            fprintf(fout,"%f %f\n",teapotX, teapotY);///要再存座標
        }
        display();
    }
    void keyboard(unsigned char key, int x, int y)
    {
        if(fin==NULL)///如果檔案還沒fopen(),就開它
        {
            fclose(fout);///要關掉前面mouse開的fout指標
            fin = fopen("file4.txt","r");///沒開檔就開檔
        }
        fscanf(fin, "%f %f",&teapotX, &teapotY);///讀檔
        display();
    }
     int main(int argc, char *argv[])
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
        glutCreateWindow("week12");

        glutDisplayFunc(display);
        glutMouseFunc(mouse);
        glutKeyboardFunc(keyboard);///keyboard要開檔,讀檔

        glutMainLoop();
    }

    上面的步驟也要重複 改debug release 都要改
   最後要save everything才會該改檔案的改變!!!
    檔案名稱可以這樣改↓





















        



沒有留言:

張貼留言