一
1.開啟一個新檔案(非開啟一個新專案)
打出下列程式(讀檔)
///
#include <stdio.h>
int main()
{///檔案指標 fout 開啟檔案(檔名, write模式)
FILE * fout = fopen("file.txt", "w+");
printf( "Hello World");
fprintf(fout,"Hello World");
fclose(fout);///關閉檔案
}
///
紅色為正確程式碼
執行程式後再資料夾可以找到以下檔案
新增一個資料夾,新增一個檔案
打出下列程式
///
#include <stdio.h>
int main()
{///檔案指標 fout 開啟檔案(檔名, write模式)
FILE * fout = fopen("file.txt", "w+");
printf( "Hello World");
fprintf(fout,"Hello World");
fclose(fout);///關閉檔案
float angle=0;
FILE * fin = fopen("file.txt", "r");
fscanf(fin,"%f", &angle );
printf("讀到了角度:%f", angle);
fclose(fin);
}
///
紅色為讀檔,寫出去
橘色為讀資料
變成以下結果
///
///week14_angle_fprintf改自 week13_rect_many_TRT
#include <GL/glut.h>
#include <stdio.h>
float angle[20], oldX= 0;
int angleID=0;///0、1、2、3號關節
FILE *fout = NULL;
void myWrite(){
if(fout == NULL ) fout = fopen("file.txt", "w+");
for(int i=0;i<20; i++){
printf("%.1f ", angle[i]);///從小黑印出來
fprintf(fout, "%.1f ", angle[i]);///檔案印出來
}///不用加fclose
}
void keyboard(unsigned char key, int x, int y){
if( key=='0') angleID=0;
if( key=='1') angleID=1;
if( key=='2') angleID=2;
if( key=='3') angleID=3;
}
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle[angleID] += (x-oldX);
myWrite();
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();///右半邊
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[0], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[1], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glPushMatrix();///左半邊
glTranslatef(-0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[2], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[3], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(-0.7, 0.5, -1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
這樣執行時小黑就會在轉時顯示角度
///
///week14_angle_fprintf改自 week13_rect_many_TRT
#include <GL/glut.h>
#include <stdio.h>
float angle[20], oldX= 0;
int angleID=0;///0、1、2、3號關節
FILE *fout = NULL, * fin =NULL;
void myWrite(){
if(fout == NULL ) fout = fopen("file.txt", "w+");
for(int i=0;i<20; i++){
printf("%.1f ", angle[i]);///從小黑印出來
fprintf(fout, "%.1f ", angle[i]);///檔案印出來
}///不用加fclose
printf("\n");///每呼叫一次,小黑跳行
fprintf(fout, "\n");///每呼叫一次,檔案也跳行
}
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();///重畫畫面
}
void keyboard(unsigned char key, int x, int y){
if( key=='r') myRead();
if( key=='0') angleID=0;
if( key=='1') angleID=1;
if( key=='2') angleID=2;
if( key=='3') angleID=3;
}
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle[angleID] += (x-oldX);
myWrite();
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();///右半邊
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[0], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[1], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glPushMatrix();///左半邊
glTranslatef(-0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[2], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[3], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(-0.7, 0.5, -1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
把這個專案的資料夾的cbp檔用nitepad++打開,把dir的位置改成".",分別是第11行跟第21行
變成以下
改完後為了正常運行,把桌面freeglut.dll複製到這個專案的資料夾中
就可以正常執行了時鐘時鐘
時鐘
一次把時鐘設好
///
#include <GL/glut.h>
#include <stdio.h>
void timer (int t){
printf("起床,現在時間: %d\n", t);
}
void display(){
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14_timer");
glutTimerFunc(1000, timer, 1);
glutTimerFunc(2000, timer, 2);
glutTimerFunc(3000, timer, 3);
glutTimerFunc(4000, timer, 4);
}
///
自動設定Timer+聲音///
#include <GL/glut.h>
#include <stdio.h>
#include <mmsystem.h>
void timer (int t){
printf("起床,現在時間: %d\n", t);
PlaySound("do.wav", NULL, SND_ASYNC);
glutTimerFunc(2000, timer, t+1);
}
void display(){
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week14_timer");
glutTimerFunc(5000, timer, 0);///設定:5秒後
glutDisplayFunc(display);
glutMainLoop();
}
///










沒有留言:
張貼留言