20200619 虎克定律&讀寫檔案
老師今天教的東西是從這個會動的背景發想出來的
一開始要先畫出一組點跟線
void setup()
{
size(300,300);
}
void draw()
{
background(#002966);//背景設為藍色
stroke(#b7efff);//線&邊框設為淺藍色
line(100,150,200,150);//從(100,150)畫線到(200,150)
fill(#b7efff);//把圓形填滿淺藍色
ellipse(100,150,13,13);//畫圓形
ellipse(200,150,13,13);//畫圓形
}
--------------------------------------------------------------------------------------------------------------------------
再來要讓線可以移動
void setup()
{
size(300,300);
}
float x=100,y=150;
void draw()
{
background(#002966);//背景設為藍色
stroke(#b7efff);//線&邊框設為淺藍色
line(x,y,200,150);//從(100,150)畫線到(200,150)
fill(#b7efff);//把圓形填滿淺藍色
ellipse(x,y,13,13);//畫圓形
ellipse(200,150,13,13);//畫圓形
}
void mouseDragged()//滑鼠拖曳時
{
x=mouseX;//x坐標=滑鼠的x坐標
y=mouseY;//y坐標=滑鼠的y坐標
}
--------------------------------------------------------------------------------------------------------------------------
再來要讓線能在滑鼠放開後回到原本的長度
void setup()
{
size(300,300);
}
float x=100,y=150;
void draw()
{
background(#002966);//背景設為藍色
stroke(#b7efff);//線&邊框設為淺藍色
line(x,y,200,150);//從(100,150)畫線到(200,150)
fill(#b7efff);//把圓形填滿淺藍色
ellipse(x,y,13,13);//畫圓形
ellipse(200,150,13,13);//畫圓形
if(!mousePressed)//滑鼠放開時
{
float dx=x-200;//x的變化量
float dy=y-150;//y的變化量
float len=sqrt(dx*dx+dy*dy);//sqrt()開根號
x-=dx*(len-100)/len;//讓線回到原本的長度
y-=dy*(len-100)/len;//讓線回到原本的長度
}
}
void mouseDragged()//滑鼠拖曳時
{
x=mouseX;//x坐標=滑鼠的x坐標
y=mouseY;//y坐標=滑鼠的y坐標
}
--------------------------------------------------------------------------------------------------------------------------
因為線回去的速度太快了 所以要讓速度變慢(0.1倍)
void setup()
{
size(300,300);
}
float x=100,y=150;
void draw()
{
background(#002966);//背景設為藍色
stroke(#b7efff);//線&邊框設為淺藍色
line(x,y,200,150);//從(100,150)畫線到(200,150)
fill(#b7efff);//把圓形填滿淺藍色
ellipse(x,y,13,13);//畫圓形
ellipse(200,150,13,13);//畫圓形
if(!mousePressed)//滑鼠放開時
{
float dx=x-200;//x的變化量
float dy=y-150;//y的變化量
float len=sqrt(dx*dx+dy*dy);//sqrt()開根號
x-=dx*(len-100)/len*0.1;//讓線慢慢回到原本的長度
y-=dy*(len-100)/len*0.1;//讓線慢慢回到原本的長度
}
}
void mouseDragged()//滑鼠拖曳時
{
x=mouseX;//x坐標=滑鼠的x坐標
y=mouseY;//y坐標=滑鼠的y坐標
}
--------------------------------------------------------------------------------------------------------------------------
最後要讓球跟線可以在固定的距離內反覆跳動
void setup()
{
size(300,300);
}
float x=100,y=150;
float vx=0,vy=0;
void draw()
{
background(#002966);//背景設為藍色
stroke(#b7efff);//線&邊框設為淺藍色
line(x,y,200,150);//從(100,150)畫線到(200,150)
fill(#b7efff);//把圓形填滿淺藍色
ellipse(x,y,13,13);//畫圓形
ellipse(200,150,13,13);//畫圓形
if(!mousePressed)//滑鼠放開時
{
float dx=x-200;//x的變化量
float dy=y-150;//y的變化量
float len=sqrt(dx*dx+dy*dy);//sqrt()開根號
float f=(len-100);//拉力的大小
dx/=len;//單位長度
dy/=len;//單位長度
vx-=f*dx*0.01;//x坐標的速度 彈性係數(0.01)愈大,速度愈快
vy-=f*dy*0.01;//y坐標的速度 彈性係數(0.01)愈大,速度愈快
x+=vx;//x坐標以vx的速度移動
y+=vy;//y坐標以vy的速度移動
}
}
void mouseDragged()//滑鼠拖曳時
{
x=mouseX;//x坐標=滑鼠的x坐標
y=mouseY;//y坐標=滑鼠的y坐標
}
--------------------------------------------------------------------------------------------------------------------------
我們用另一個遊戲的概念再來看一下線移動的觀念
void setup()
{
size(400,300);
}
float x=100,y=150;
void draw()
{
background(#002966);//背景設為藍色
ellipse(x,y,50,50);//畫圓形
float dx=x-mouseX;//x的變化量
float dy=y-mouseY;//y的變化量
float len=sqrt(dx*dx+dy*dy);//sqrt()開根號
x-=dx*0.1;//x坐標接近
y-=dy*0.1;//y坐標接近
}
--------------------------------------------------------------------------------------------------------------------------
距離太遠會靠近 但距離太近就會退後
void setup()
{
size(400,300);
}
float x=100,y=150;
void draw()
{
background(#002966);//背景設為藍色
ellipse(x,y,50,50);//畫圓形
float dx=x-mouseX;//x的變化量
float dy=y-mouseY;//y的變化量
float len=sqrt(dx*dx+dy*dy);//sqrt()開根號
x-=dx*(len-100)/len*0.1;//如果太接近會退後
y-=dy*(len-100)/len*0.1;//如果太接近會退後
}
--------------------------------------------------------------------------------------------------------------------------
再來老師教了讀取檔案和寫入檔案
我們要把Hello World寫進檔案裡
#include <stdio.h>
int main()
{
FILE*fout=fopen("my_first_file.txt","w+");
printf("Hello World");
fprintf(fout,"Hello World");
}
--------------------------------------------------------------------------------------------------------------------------
執行之後就會多出一個叫做my_first_file的txt檔了
檔案裡面的內容就是我們剛剛寫入的Hello World
再來改成用陣列試試看
我們先輸入一段句子 然後印出來
#include <stdio.h>
char line[1000];
int main()
{
//FILE*fout=fopen("my_first_file.txt","w+");
//printf("Hello World");
//fprintf(fout,"Hello World");
scanf("%s",line);
printf("=%s=",line);
}
--------------------------------------------------------------------------------------------------------------------------
再來改成讀取剛剛寫好的檔案 並印出來
#include <stdio.h>
char line[1000];
int main()
{
//FILE*fout=fopen("my_first_file.txt","w+");
//printf("Hello World");
//fprintf(fout,"Hello World");
FILE*fin=fopen("my_first_file.txt","r");
fscanf(fin,"%s",line);
printf("=%s=",line);
}
--------------------------------------------------------------------------------------------------------------------------
心得
終於考完程設會考了!接下來的課就不用一直花時間複習和考試,可以學更多不一樣的東西,老師今天回顧了這學期學過的所有東西,有會飛的氣球、會掉落的石頭、人物彈跳、Different Color、Pacman、Angry Bird、Sprite,還有今天的虎克定律,不知不覺中也做了很多簡易的遊戲,希望之後如果有機會還能學其他的遊戲!













沒有留言:
張貼留言