2020年5月22日 星期五

孤獨月宮的花園

200522 week13


 CPE題目*1
~Digit Generator~

題目的部分

















先來個雛形











///技巧1:(不看英文)看sample Imput/Output,有幾筆
                ///把程式的迴圈寫出來
///技巧2:找關係/答案 Q:I/O , How???
///技巧3:甚麼是generator?
         
#include <stdio.h>
int main()
{
    int T;///Test Case測試資料,有幾筆
    scanf("%d",&T);
    for(int t=0;t<T;t++)
    {
        int N;
        scanf("%d",&N);

        printf("%d\n",ans);
    }
}


打了好多程式碼後...
就成功了呢!!!
一起來試試看吧!!!

///技巧1:(不看英文)看sample Imput/Output,有幾筆
///把程式的迴圈寫出來
///技巧2:找關係/答案 Q:I/O , How???
///技巧3:甚麼是generator? 245+2+4+5=256
///技巧4:暴力去試:N試1,2,3,4...N全部試 小到大
///技巧5:generator把小的i變大的
///技巧6:用函式,來簡化程式,不要太多在一起
#include <stdio.h>
int genBig(int n)
{///技巧6:用函式,來簡化程式,不要太多在一起
    int ans=n;
    while(n>0)
    {
        ans+=n%10;///用剝皮法,把每一位數加進來
        n/=10;///剩下的越來越少
    }
    return ans;
}
int main()
{
    int T;///Test Case測試資料,有幾筆
    scanf("%d",&T);
    for(int t=0;t<T;t++)
    {
        int N;
        scanf("%d",&N);
        int ans=0;///for迴圈前面,還不知道答案
        for(int i=1;i<=N;i++)///技巧4:暴力去試
        {
            if(genBig(i)==N)///小的i=大的,剛好就N,找到答案
            {
                ans=i;///for迴圈中間,找到答案
                break;
            }
        }

        printf("%d\n",ans);///for迴圈後面,把答案拿來用
    }
}

玩電玩學程式~angry birds

紅色(的鳥)跟著滑鼠動
PImage imgBird;
void  setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imageMode(CENTER);///以中心點為座標
}
void draw()
{
  background(255);///背景要清,不要殘影
  image(imgBird,mouseX,mouseY,100,100);///鳥的大小100*100
}


拉線+紅色(的鳥)飛出去
PImage imgBird;
void  setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imageMode(CENTER);///以中心點為座標
}
float birdX=100,birdY=300,oldX,oldY;
boolean bMoving=false;///if(boolean變數)成立or不成立
void draw()
{
  background(255);///以中心點為座標
  image(imgBird,birdX,birdY,100,100);///鳥的大小100*100
  if(bMoving)line(mouseX,mouseY,oldX,oldY);///如果有點到,再拉動~畫線!!!
}
void mousePressed()
{
  if(dist(mouseX,mouseY,birdX,birdY)<50)///距離夠近
  {
    bMoving=true;///開始移動鳥
    oldX=birdX; oldY=birdY;///拉線用的
  }
}
void mouseDragged()///判斷有沒有壓到它
{
    if(bMoving)///如果有點到,就開始移動鳥
    {
      birdX=mouseX;birdY=mouseY;
    }
}

飛出框外的殘影
PImage imgBird;
void  setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imageMode(CENTER);
}
float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0;
boolean bMoving=false;
void draw()
{
  ///background(255); ///讓你看到殘影
  image(imgBird,birdX,birdY,100,100);
  if(bMoving)line(mouseX,mouseY,oldX,oldY);
  birdX+=vx; birdY+=vy;
}
void mouseReleased()
{
  bMoving=false;///不再拉動、移動,要彈出去
                            ///vx,vy代表移動的速度
  vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;
}
void mousePressed()
{
  if(dist(mouseX,mouseY,birdX,birdY)<50)
  {
    bMoving=true;
    oldX=birdX; oldY=birdY;
  }
}
void mouseDragged()
{
    if(bMoving)
    {
      birdX=mouseX;birdY=mouseY;
    }
}


在方格內彈來彈去的紅色(的鳥)
PImage imgBird;
void  setup()
{
  size(500,400);
  imgBird=loadImage("bird.png");
  imageMode(CENTER);
}
float birdX=100,birdY=300,oldX,oldY,vx=0,vy=0;
boolean bMoving=false;
void draw()
{
  background(255);///不要殘影背景就要變回來
  image(imgBird,birdX,birdY,100,100);
  if(bMoving)line(mouseX,mouseY,oldX,oldY);
  birdX +=vx; birdY+=vy;
  if(birdX>500-50 || birdX<50) vx=-vx;
  if(birdY>400-50 || birdY<50) vy=-vy;
}
void mouseReleased()
{
  bMoving=false;
  vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;
}
void mousePressed()
{
  if(dist(mouseX,mouseY,birdX,birdY)<50)
  {
    bMoving=true;
    oldX=birdX; oldY=birdY;
  }
}


課堂心得:
這次又了解了一題困難的CPE,以及完成一半的angry birds遊戲,很開心呢!







沒有留言:

張貼留言