2023年5月3日 星期三

Code Talker Week12 開檔讀檔,鍵盤滑鼠

 STEP01

1.打開CodeBlock,開啟一個空白檔案(week12-1)

2.打上程式碼:

#include <stdio.h>

int main()

{

    FILE * fout = fopen("file.txt", "w");///w:write


    printf("Hello World\n");

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

}

注:fout是檔案指標,fopen開檔案(檔名, 用什麼模式)

3.執行除了跳出Hello World的小黑,另外會開啟file.txt,內容結果如下:

STEP02

1.再開啟一個新的空白檔案(week12-2)

2.打上程式碼:

#include <stdio.h>
int main()
{
    FILE * fin = fopen("file.txt", "r");///r:read

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

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

3.執行得到結果:
因為中間有間隔,所以分開印兩次

STEP03

1.開啟一個新的空白檔案(week12-3)

2.week12-3程式碼如下:

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

    FILE*fout=fopen("file2.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("file2.txt","r");
    for(int i=0;i<10;i++){
        fscanf(fin," %d",&b[i]);
        printf("b%d:%d ",i,b[i]);
    }
    fclose(fin);
}

3.執行結果如下:


STEP04

1.開啟一個GLUT專案(week12-4)

2.改造Week05-2的程式碼變成:

#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[])//main()主函式 進階版

{

    glutInit(&argc,argv);//把參數送給glutInit初始化

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);//雙緩衝區+3D深度功能

    glutCreateWindow("week12");//開GLUT視窗



    glutDisplayFunc(display);//顯示用的函式

    glutMouseFunc(mouse);



    glutMainLoop();

}

得到根據滑鼠點擊位置移動的茶壺

STEP05

1.在week12-4程式碼的基礎上,加上一些程式,程式碼結果:

#include <stdio.h>
#include <GL/glut.h>
FILE * fout = NULL;
FILE * fin = 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){
        fclose(fout);
        fin = fopen("file4.txt","r");
    }
    fscanf(fin, "%f %f", &teapotX, &teapotY);
    display();
}
int main(int argc, char *argv[])//main()主函式 進階版用

{

    glutInit(&argc,argv);//把參數送給glutInit初始化

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);//雙緩衝區+3D深度功能

    glutCreateWindow("week12");//開GLUT視窗



    glutDisplayFunc(display);//顯示用的函式

    glutMouseFunc(mouse);
    glutKeyboardFunc(keyboard);



    glutMainLoop();

}

2.執行結果測試:先用滑鼠點擊一個軌跡,按空白鍵確認是否照著剛才的軌跡再跑一次

3.在CodeBlocks project-properties 裡第二個Build target中工作執行目錄改成.
注:debug和release都要改,並記得save everything

4.把freeglut.dll複製到資料夾內

5.再執行是否成功



沒有留言:

張貼留言