20200522 UVA1583&簡易版憤怒鳥
今天老師教了一個CPE的題目(UVA1583_digit_generator)
因為是英文 所以先看Sample Input/Output
然後找Input跟Output的關係
然後找題目裡的關鍵字(generator) 再看關鍵字的意思
///技巧1:看Sample Input/Output,有幾筆資料,寫出迴圈
///技巧2:找關係&答案(Input變成Output),找關鍵字(generator)
///技巧3:generator的意思
#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);///測試資料(Text case),有T筆資料
for(int t=0;t<T;t++)
{
int N;
scanf("%d",&N);
printf("%d\n",ans);
}
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
知道generator的意思是245+2+4+5=256之後就可以解題了!
原本是把每個數字拆開後相加再加上自己(從小的數字變成大的數字)
但題目要求從大的數字回去找小的數字 所以只好一個一個去試
///技巧1:看Sample Input/Output,有幾筆資料,寫出迴圈
///技巧2:找關係&答案(Input變成Output),找關鍵字(generator)
///技巧3:generator的意思 245+2+4+5=256
///技巧4:原本是從小的找大的,反過來問,變成從大的找小的,用暴力法(從1試到N)
///技巧5:generator 把小的i變成大的N
#include <stdio.h>
int main()
{
int T;
scanf("%d",&T);///測試資料(Text case),有T筆資料
for(int t=0;t<T;t++)
{
int N;
scanf("%d",&N);
int ans=0;
for(int i=1;i<=N;i++)
{
if(???==N)///小的i=大的N,找到答案
{
ans=i;
break;
}
}
printf("%d\n",ans);
}
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
最後用函式來簡化程式碼
///技巧1:看Sample Input/Output,有幾筆資料,寫出迴圈
///技巧2:找關係&答案(Input變成Output),找關鍵字(generator)
///技巧3:generator的意思 245+2+4+5=256
///技巧4:原本是從小的找大的,反過來問,變成從大的找小的,用暴力法(從1試到N)
///技巧5:generator 把小的i變成大的N
///技巧6:用函式簡化程式碼
#include <stdio.h>
int genBig(int n)
{
int ans=n;
while(n>0)
{
ans+=n%10;///把每個位數加進來
n/=10;
}
return ans;
}
int main()
{
int T;
scanf("%d",&T);///測試資料(Text case),有T筆資料
for(int t=0;t<T;t++)
{
int N;
scanf("%d",&N);
int ans=0;
for(int i=1;i<=N;i++)
{
if(genBig(i)==N)///小的i=大的N,找到答案
{
ans=i;
break;
}
}
printf("%d\n",ans);
}
return 0;
}
--------------------------------------------------------------------------------------------------------------------------
再來要繼續做上次的憤怒鳥遊戲
先複習一下上次的進度
PImage imgBird;
void setup()
{
size(500,400);
imgBird=loadImage("bird.png");
imageMode(CENTER);//讓滑鼠在圖片中間
}
void draw()
{
background(255);//清背景,才不會有殘影
image(imgBird,mouseX,mouseY,100,100);//image(照片,x坐標,y坐標,寬,高);
}
--------------------------------------------------------------------------------------------------------------------------
再來要讓憤怒鳥可以跟著滑鼠移動
PImage imgBird;
void setup()
{
size(500,400);
imgBird=loadImage("bird.png");
imageMode(CENTER);//讓滑鼠在圖片中間
}
float birdX=100,birdY=300,oldX,oldY;
//oldX=舊的x坐標 oldY=舊的y坐標
//if(boolen變數) 成立(true)or不成立(false)
boolean bMoving=false;//一開始bMoving不成立(bird不移動)
void draw()
{
background(255);//清背景,才不會有殘影
image(imgBird,birdX,birdY,100,100);//image(照片,x坐標,y坐標,寬,高);
if(bMoving) line(mouseX,mouseY,oldX,oldY);
//如果bMoving成立(bird移動) 就從(mouseX,mouseY)畫線到(oldX,oldY)
}
void mousePressed()//滑鼠按下
{
if(dist(mouseX,mouseY,birdX,birdY)<50)//如果滑鼠有點到bird(距離夠近)
{
bMoving=true;//bMoving成立(bird移動)
oldX=birdX;//舊的x坐標=現在bird的x坐標
oldY=birdY;//舊的y坐標=現在bird的y坐標
}
}
void mouseDragged()//滑鼠拖曳
{
if(bMoving)//如果bMoving成立
{
birdX=mouseX;//bird的x坐標=滑鼠的x坐標
birdY=mouseY;//bird的y坐標=滑鼠的y坐標
}
}
--------------------------------------------------------------------------------------------------------------------------
最後要讓憤怒鳥可以發射出去
PImage imgBird;
void setup()
{
size(500,400);
imgBird=loadImage("bird.png");
imageMode(CENTER);//讓滑鼠在圖片中間
}
float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0;
//oldX=舊的x坐標 oldY=舊的y坐標
//一開始x方向的速度=0(vx=0) 一開始y方向的速度=0(vy=0)
//if(boolen變數) 成立(true)or不成立(false)
boolean bMoving=false;//一開始bMoving不成立(bird不移動)
void draw()
{
background(255);//清背景,才不會有殘影
image(imgBird,birdX,birdY,100,100);//image(照片,x坐標,y坐標,寬,高);
if(bMoving) line(mouseX,mouseY,oldX,oldY);
//如果bMoving成立(bird移動) 就從(mouseX,mouseY)畫線到(oldX,oldY)
birdX+=vx;//x方向的速度=vx
birdY+=vy;//y方向的速度=vy
if(birdX>500-50||birdX<50) vx=-vx;//如果撞到牆就反彈
if(birdY>400-50||birdY<50) vy=-vy;//如果撞到牆就反彈
}
void mouseReleased()//滑鼠放開
{
bMoving=false;//bMoving不成立(bird不移動)
vx=(oldX-mouseX)/10;//vx(x方向的速度)=舊的x坐標-滑鼠的x坐標
vy=(oldY-mouseY)/10;//vy(y方向的速度)=舊的y坐標-滑鼠的y坐標
}
void mousePressed()//滑鼠按下
{
if(dist(mouseX,mouseY,birdX,birdY)<50)//如果滑鼠有點到bird(距離夠近)
{
bMoving=true;//bMoving成立(bird移動)
oldX=birdX;//舊的x坐標=現在bird的x坐標
oldY=birdY;//舊的y坐標=現在bird的y坐標
}
}
void mouseDragged()//滑鼠拖曳
{
if(bMoving)//如果bMoving成立
{
birdX=mouseX;//bird的x坐標=滑鼠的x坐標
birdY=mouseY;//bird的y坐標=滑鼠的y坐標
}
}
--------------------------------------------------------------------------------------------------------------------------
來看一下沒清背景會發生什麼事情(可以看到憤怒鳥的移動軌跡)
--------------------------------------------------------------------------------------------------------------------------
心得
今天老師先教了一題CPE的題目,因為題目都是英文,一開始看真的覺得很困難,但看完Sample Input/Output後,大致上就能了解題目的要求,感覺就沒那麼困難了!不過CPE的題目要用到的觀念真的很多,感覺很複雜,雖然都是我們學過的觀念,但要好好的組合使用真的滿困難的,看來之後要多多練習才能考過CPE檢定!然後今天繼續做了上次的憤怒鳥遊戲,還是做遊戲最有趣了,雖然是模仿其他的遊戲,但可以看到自己做的遊戲跑起來的樣子真的很神奇!











沒有留言:
張貼留言