2020年3月29日 星期日

Processing課程 #03_Week04 發射子彈與簡單碰撞

2020/3/27 程式設計 Processing課程內容 08160741




一.發射子彈與簡單碰撞



發射子彈其實就只是在角色的位置繪製圖片或形狀模擬子彈的樣子,再將子彈重複執行往上移動,但我自己覺得既然都要模擬發射物了,目標是一定要有的,於是我想了一下碰撞的原理。


1.宣告


  1. PImage player,monster,boom;  //宣告玩家、怪物、爆炸特效的圖片
  2. int []x = {0,0,0,0,0,0,0,0};  //子彈的X座標
  3. int []y = {0,0,0,0,0,0,0,0};  //子彈的Y座標
  4. int n = 0;  //目前的發射次數
  5. int cd = 0;  //每顆子彈的間隔時間
  6. int posX = 134,posY = 450; //玩家的座標
  7. float MposX = 100,MposY = 24; //怪物的座標
  8. int ifcollision = 0; //是否有碰撞(會解釋)
  9. int timing1 = 0,timing2 = 0; //兩個計時器
  10. int looking = 0;  //控制怪物目前的左右移動方向

2.設定


  1. void setup() 
  2. {
  3.      size(300,500);  //視窗大小
  4.      player = loadImage("player.png");  //讀取玩家圖片
  5.      monster = loadImage("monster.png");  //讀取怪物圖片
  6.      boom = loadImage("boom.png");  //讀取爆炸特效圖片
  7. }

3.偵測碰撞的函數

這邊需要稍微解釋一下,我自己覺得最簡單的碰撞判斷,基本上就是以X和Y座標去做比較,達到條件就輸出結果,解釋如下:
現在有A跟B兩個矩形,分別有最大最小X座標。
若A往前移動與B重疊的話,則A的最大X會大於B的最小X:A_maxX > B_minX
反過來則是B的最小X會大於A的最大X:B_minX > A_maxX
Y軸則同理。
  1. void Collision(float posX,float posY)  //自訂義的函數名稱,輸入浮點數posX和posY
  2. {
  3.   //以下分為兩塊,上面為邊長為15的子彈
  4.   float minX1 = posX - 15 / 2;  //最小X為自身中心X減掉邊長除2
  5.   float maxX1 = posX + 15 / 2;  //最大X為自身中心X加上邊長除2
  6.   float minY1 = posY - 15 / 2;  //同X軸
  7.   float maxY1 = posY + 15 / 2;
  8.   //計算方式都一樣,下面為怪物的
  9.   float minX2 = MposX - 33 / 2;
  10.   float maxX2 = MposX + 33 / 2;
  11.   float minY2 = MposY - 24 / 2;
  12.   float maxY2 = MposY + 24 / 2;
  13.   //將上面圖文解釋的條件全部加上去的總條件,必須達成以下全部條件才會回傳
  14.   if (minX1 > minX2 && maxX2 > minX1 && maxY1 > minY2 && maxY2 > minY1)
  15.   {
  16.     ifcollision++;  //達成條件,回傳1
  17.   }
  18. }

4.描繪

  1. void draw()
  2. {
  3.   background(0);  //黑色背景
  4.   for (int i = 0;i < 8;i++)  //發射子彈
  5.   {
  6.      square(x[i],y[i],15);  //子彈為15X15的正方形
  7.      y[i] -= 8;  //重複往上移動8
  8.      Collision(x[i],y[i]);  //用函數判斷碰撞
  9.   }
  10.   image(player,posX,posY,33,24);  //繪製玩家圖片
  11.   //以下為繪製怪物圖片的條件
  12.   if (ifcollision == 0)  //如果沒有被子彈打到的話
  13.   {  
  14.      if (looking == 0 && timing1 < 50)  //看右邊和計時器1小於50
  15.      {
  16.        MposX += 2;  //怪物往右邊移動2
  17.        timing1++;  //計時器開始計時
  18.        if (timing1 == 50) looking = 1;  //如果計了50次,則轉向左邊
  19.      }
  20.      else if (looking == 1)  //如果轉向了左邊
  21.      {
  22.        MposX -= 2;  //怪物往左邊移動2
  23.        timing1--;  //計時器開始倒數
  24.       if (timing1 == 0) looking = 0;  //如果倒數完了,既怪物已回到原點,則轉向右邊
  25.      }
  26.      image(monster,MposX,MposY,33,24);  //如果沒有被子彈打到的話,繪製怪物圖片
  27.   }
  28.   else  //如果被子彈打到的話
  29.   {
  30.       if (timing2 < 100)  //計時器最多計時100次
  31.       {
  32.           if (timing2 % 20 > 10) image(boom,MposX,MposY,33,24);  //繪製爆炸特效
  33.           timing2++;  //計時一次
  34.       }
  35.   }
  36.   if (keyPressed && keyCode == RIGHT)  //按右鍵往右走
  37.   {
  38.       if ((posX + 5) < 267) posX += 5;
  39.   }
  40.   if (keyPressed && keyCode == LEFT)  //按左鍵往左走
  41.   {
  42.       if ((posX - 5) > 0) posX -= 5;
  43.   }
  44.   if (cd > 0) cd--;  //使用過子彈的話,則進行冷卻時間倒數
  45. }

4.鍵盤按壓

  1. void keyPressed()
  2. {
  3.   if (key == 'z' && cd == 0)  //如果按了鍵盤上的Z鍵且子彈沒有進入冷卻時間
  4.    {
  5.      x[n] = posX + 8;  //以玩家的座標為基準往上發射
  6.      y[n] = posY - 5;
  7.      n = (n+1)%8;  //回收子彈
  8.      cd = 10;  //進入CD時間
  9.    }
  10. }

5.最後成品



二.心得感想

雖然老師目前教的部分不多,但其實真的以目前所教過的東西就可以延伸成一個簡易的小遊戲,不過我認為應該還有更好的方式去縮短程式碼,程式最重要的不是寫得出來樣子,最重要的是要節省不必要的計算、減少計算的負擔



2020年3月28日 星期六

wk4


這個時候只有一發子彈


讓他有五發子彈

PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
  size(396,510);///一定要和背景圖一樣大,不然會出錯
  imgBG=loadImage("background.jpg");///載入背景圖
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle(x[i],y[i],40);
  }
}
void mousePressed(){
  if(n>=5) return;///保護程式不要當掉,讓他不超過5發
  x[n] = mouseX;
  y[n] = mouseY;
  n++;
}

讓子彈可以重複使用

void mousePressed(){
  if(n>=5) return;
  x[n] = mouseX;
  y[n] = mouseY;
  n=(n+1)%5;///這行可以讓子彈重複使用,並且回收最後一發
}
讓子彈變大顆

PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int []r={0,0,0,0,0};
int n=0;
void setup(){
  size(396,510);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle(x[i],y[i],r[i]);
  }
  if (mousePressed) r[now]++;///如果一直按,子彈就會變大顆
}
int now=0;
void mousePressed(){
  if(n>=5) return;
  x[n] = mouseX;
  y[n] = mouseY;
  r[n]=5;///讓子彈變回原本的大小
  now = n;
  n=(n+1)%5;
}

利用P語言來學習矩陣

1維陣列

int []a={0,1,0,1};
size(400,100);
for(int i=0;i<4;i++){///利用for迴圈來搭配陣列
  if (a[i]==1) fill(255,0,0);///陣列那一格如果為1,塗上紅色
  else fill(128);///不是則塗上灰色
  rect(i*100,0,100,100);
}///算出他所對應的座標



2維陣列

int [][]a={
{0,1,0,1},
{0,0,1,1},
{1,0,0,1},
{1,0,1,1},
{1,1,0,0}};
size(400,500);
 for(int i=0;i<5;i++){
  for(int j=0;j<4;j++){
    if (a[i][j]==1) fill(255,0,0);
    else fill(128);
    rect(j*100,i*100,100,100);///j為x座標,i為y座標
  }
}

2020年3月27日 星期五

PROCESSING-彩虹苦力怕

Processing

RGB彩虹射擊🌈;藝起來畫苦力怕

1.RGB彩虹射擊

那個字實在是太小惹所以請看下面的解釋💗
      1.首先需要宣告一些空間

      PImage img1,img2,img3,img4,img5;照片位置

      int []x=new int [1000];                       宣告陣列X(放子彈的X值)

      int []y=new int [1000];                       宣告陣列Y(放子彈的Y值)

      int []r=new int [1000];                       宣告陣列R(子彈的半徑)

      color []c=new color[1000];                宣告陣列C(子彈的顏色)

*new*這個讓陣列宣告可以直接指定值,不用一個一個打.✨

      int n=0;
      int now=0;
      int pX=300,pY=800;                         戰鬥機一開始的位置
      
1.函式

    void setup()
      {
                 size(740,1000);
                 img1=loadImage("pl01.png");      讀入照片✌

                 img2=loadImage("pl02.png");

                 img3=loadImage("pl03.png");

                 img4=loadImage("pl04.png");

                 img5=loadImage("5.jpg");            讀入背景

                 這裡需要注意的是要注意照片檔案類型不然會ㄛ💩
      }

2.函式

   void draw()
     {
                     background(img5);

                     for(int i=0;i<1000;i++){

                     circle(x[i],y[i],r[i]);         畫出圓形的子彈(子彈的X值,子彈的Y值,子彈的半徑r)

                     fill(c[i]);                           幫C(子彈)上色

                     y[i]-=10;                           讓子彈向前
    }

    if(mousePressed)r[now]++;            滑鼠按下時子彈的半徑增加❤

接下來也是在同一個函式裡面 (指定按鍵跟顯示圖片)

if(keyPressed && keyCode==UP){     按下箭頭上的時候戰鬥機☝

               pY-=10;                                    向前移動     

               image(img4,pX,pY,138,120); 並顯示向前的圖片
   }
   else if(keyPressed && keyCode==RIGHT) {  按下右鍵的時候戰鬥機👉

               pX+=10;                                                  向右移動     

               image(img2,pX,pY,138,120);                 並顯示向右的圖片

   }
   else if(keyPressed && keyCode==DOWN) {  按下向下鍵的時候戰鬥機👇

               pY+=10;                                                  向下移動

               image(img1,pX,pY,138,120);                並顯示向下的圖片

   }
   else if(keyPressed && keyCode==LEFT){     按下左鍵的時候戰鬥機👈

               pX-=10;                                                   向左移動

               image(img3,pX,pY,138,120);                 並顯示向左的圖片

}
   else image(img1,pX,pY,138,120);                如果都沒按下任何按鍵時顯示不動的圖片
}

3.函式

void mousePressed(){滑鼠按下時

  x[n]=pX;                   指定球從戰機的X發射

  y[n]=pY;                   指定球從戰機的Y發射

  r[n]=10;                    子彈的初始直徑

  c[n]=color(random(255),random(255),random(255));

  now=n;

  n++;
  }
解釋完之後來快速的看一下GIF吧~~~
登登
飛吧小火箭蹦蹦蹦💣💣💣

2.藝起來畫CREEPER🎃

int [][]a={        1,2,3,4,5,p行,
   f列  1            {3,2,1,1,2},                       這裡是在建構2D陣列.
          2             {1,0,1,0,1},                       用換行的方式提高辨別度.🎏
          3             {2,1,0,1,2},
          4             {3,0,0,0,1},
                     {1,0,1,0,3},
  };
  void setup()
  {
    size(500,500);(有5行,5列)所以大小是500*500
  }
  void draw()
  {
     for(int p=0;p<5;p++){                        用陣列的方式指定位置
       for(int f=0;f<5;f++){
        if(a[f][p]==1)fill(80,250,112);         fill(填滿的顏色)是個填滿的函式 
        else if(a[f][p]==2)fill(230,250,230);
        else if(a[f][p]==3)fill(200,250,200);
        else fill(0);
        rect(p*100,f*100,100,100);填滿的形狀是矩形🏁
        }
      }
  }
         
(也可以用別的形狀)可似那樣就不向苦力怕惹😬
以上就是這周的內容了喔~~~
快樂😜
  

week04

1D陣列(1*4)

2D陣列(4*4)

2D陣列(5*5)

week04陣列

1D陣列(1*4)

2D陣列(4*4)

2D陣列(5*5)

week04發射子彈,陣列示範


發射子彈
1.一顆子彈

2.五顆子彈

3.按下滑鼠子彈會越來越大

4.子彈往上飄有不一樣的顏色

PImage imgBG;
int []x=new int[1000];
int []y=new int[1000];
int []r=new int[1000];
color []c=new color[1000];//準備陣列
int n=0;//子彈數目
void setup()
{
    size(550,346);//要與背景size相同
    imgBG=loadImage("1234.png");
}
void draw()
{
  background(imgBG);
  for(int i=0;i<n;i++)//5顆子彈
  {
    fill(c[i]);
    circle(x[i],y[i],r[i]);//circle(x[i],y[i],40);
    y[i]--;
  }
  if(mousePressed)r[now]+=2;//如果按著就會變大
}
int now=0;
void mousePressed()
{
    //if(n>=5)return;//當按下第6顆時直接出去迴圈,不要讓程式當掉
    x[n]=mouseX;//x[0]=mouseX;//陣列不夠大
    y[n]=mouseY;//y=[0]=mouseY;
    r[n]=10;//設回原來大小
    now=n;//現在用的
    c[n]=color(random(255),random(255),random(255));
    n++;
    //n++;//for迴圈裡才放i,其他地方不要用ex:x[i]=mouseX
    //n=(n+1)%5;//可以回收子彈,下次用到最舊的那顆

}


陣列示範









week04

畫圓形


PImage imgBG;
int []x={0,0,0,0,0}; ///Java 陣列
int []y={0,0,0,0,0}; ///Java 陣列
void setup(){
   size(261,435); ///注意! size要與背景圖相同
   imgBG=loadImage("background.png");
}
void draw(){
   background(imgBG);
   circle(x[0],y[0],40);
}
void mousePressed(){
   x[0]=mouseX;
   y[0]=mouseY;
}
==============================================================

點擊出現圓形(五次)



PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
   size(261,435);
   imgBG=loadImage("background.png");
}
void draw(){
   background(imgBG);
   for(int i=0;i<5;i++){
   circle(x[i],y[i],40);
   }
}
void mousePressed(){
   if(n>=5) return;
   x[n]=mouseX;
   y[n]=mouseY;
   n=n+1%5;
}

==============================================================

點擊出現圓形(連續)


PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0; ///子彈數目,現在用了0顆子彈
void setup(){
   size(261,435); ///size要與背景圖相同
   imgBG=loadImage("background.png");
}
void draw(){
   background(imgBG);
   for(int i=0;i<5;i++){
   circle(x[i],y[i],40); 
   }
}
void mousePressed(){
   if(n>=5) return; ///保護一下,不要超過5顆!
   x[n]=mouseX; ///x[0]=mouseX;
   y[n]=mouseY; ///y[0]=mouseY;
   n=(n+1)%5; ///可回收子彈,下次用到舊的那顆
}

==============================================================


陣列示範



int [ ]a={0,0,0,1};
size (400,100);
for(int i=0;i<4;i++){ ///for 迴圈配陣列
   if(a[i]==0) fill(255,0,0); ///陣列那格是1,為紅色
   else fill(128); ///灰色
   rect(i*100,0,100,100); ///算出他對應的座標

}

==============================================================

陣列示範--2



int [][]a={
   {1,0,0,0},
   {1,1,0,0},
   {1,0,1,0},
   {0,1,1,1}
};
   
size (400,400);
for(int i=0;i<4;i++){
   for(int j=0;j<4;j++){
   if(a[i][j]==1) fill(255,0,0); ///陣列那格是1,為紅色
   else fill(128); ///灰色
   rect(j*100,i*100,100,100);
   }
}

==============================================================

發射子彈


PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int []r={5,5,5,5,5}; ///表示圓的大小
int n=0; ///子彈數目,現在用了0顆子彈
void setup(){
   size(261,435); ///size要與背景圖相同
   imgBG=loadImage("background.png");
}
void draw(){
   background(imgBG);
   for(int i=0;i<5;i++){
   circle(x[i],y[i],r[i]); 
   }
   if(mousePressed) r[now]++; ///如果一直按,那顆球就會變大
}
int now=0;
void mousePressed(){
   //if(n>=5) return; ///保護一下,不要超過5顆!
   x[n]=mouseX;  ///x[0]=mouseX;
   y[n]=mouseY;  ///y[0]=mouseY;
   r[n]=5; ///設回原來的大小
   now=n; ///現在用的那顆球是誰
   n=(n+1)%5; ///可回收子彈,下次用到舊的那顆
}



Week04-陣列與指標,發射子彈

W04-01---發射子彈

~~程式碼~~
PImage imgBG;
int []x = new int[1000];///另一種陣列宣告的方法
int []y = new int[1000];
int []r = new int[1000];
color []c = new color[1000];
int n=0;///子彈下一次要更新誰
void setup(){
  size(337,600);///Size要跟圖片大小一樣
  imgBG=loadImage("BG.png");
}
void draw(){
  background(imgBG);
  for(int i=0; i<n; i++){///設變數從i到"n"
  fill(c[i]);
  circle(x[i], y[i], r[i]);///球的大小變成r[i]
    y[i]--;///球往上飛
  }
  if(mousePressed) r[now]++;//如果一直按,球會變大(i)
}
int now=0;
void mousePressed(){
 ///if(n>=5) return;保護子彈不超過5顆
  x[n] = mouseX;///陣列位置
  y[n] = mouseY;
  r[n] = 10;
  c[n] = color( random(255), random(255), random(255));///分別從255裡面去挑一個顏色
  now = n;
  n++; ///讓球不斷出現
}

找到一張圖片放進裡面
注意 : 背景Size的大小要跟圖片一樣


宣告陣列、宣告n子彈數目、設定球的大小、陣列位置

加入這行程式碼~~
n = (n+1)%5; ///回收子彈再利用最舊的那顆補到新的

加入r陣列一直按住球會變大

加入y[i]--; 讓球往上飛起來

陣列宣告成 " Int[1000] " ~~
讓每顆球變不同隨機顏色~~

W04-02---複習陣列用法 -> 2D陣列、物件


1D陣列(1*4)

2D陣列(4*4)

2D陣列(5*5)




week_04


豬排飯

今天上課內容
int [][]a={
  {1,1,1,0},
  {0,1,0,1},
  {0,0,1,1},
  {1,1,0,1}
};
size(400,400);
for(int i=0;i<4;i++){
  for(int j=0;j<4;j++){
    if(a[i][j]==1) fill(255,0,0);
    else fill(128);
    rect (j*100,i*100,100,100 );
  }
}

week05 08160360 陳彥瑜


今天一上課老師就利用p語言幫我們複習陣列,並且接續上周沒有交到的發射子彈的進度
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  circle( x[0], y[0], 40);
}
void mousePressed(){
  x[0] = mouseX;
  y[0] = mouseY;
}
我希望一次可以發射很多個子彈,所以我們用陣列搭配for迴圈,讓它可以同時讓多個子彈存在在銀幕上。
可是如果做超過陣列設定的數值的次數的話,程式會壞掉,所以用return來當保護程式碼。
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i], 40);
  }
}
void mousePressed(){
  if(n>=5) return;
  x[n] = mouseX;
  y[n] = mouseY;
  n++;
}
但是只要修改一下其中一行的程式碼就能讓子彈不斷發射。
把return拿掉,再誠心設定n的值,讓他不斷回收再利用就行了

程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i], 40);
  }
}
void mousePressed(){
  x[n] = mouseX;
  y[n] = mouseY;
  n = (n+1)%5;
}
為了更好理解陣列,老師打了這個程式碼
程式碼
int []a={1,1,1,0};
size(400,100);
for(int i=0;i<4;i++){
  if(a[i]==1)fill(255,0,0);
  else fill(128);
  rect(i*100,0,100,100);
}
2D的陣列會長成這個樣子
程式碼
int [][]a={
  {1,0,1,0,1},
  {0,1,0,1,1},
  {1,0,0,1,0},
  {0,1,1,0,1},
  {1,1,0,0,1} };
size(500,500);
for(int i=0;i<5;i++){
  for(int j=0;j<5;j++){
    if(a[i][j] == 1 )fill(255,0,0);
    else fill(128);
    rect(j*100,i*100,100,100);
  }
}
然後我想讓求能夠放大縮小,所以我們新增了一個r的陣列,r就是球的半徑。
因為每次都會拿舊的球來用,所以每一次都要讓球的大小恢復原狀
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int []r={5,5,5,5,5};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i],r[i]);
  }
  if(mousePressed)r[now]++;
}
int now=0;
void mousePressed(){
  x[n] = mouseX;
  y[n] = mouseY;
  r[n]=5;
  now=n;
  n = (n+1)%5;
}

week04

1.放圖片
PImage img;
void setup()
{
  size(226,400);
  img=loadImage("1.jpg");
}
void draw()
{
  background(img);
}
2.加一個子彈
PImage img;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
void setup()
{
  size(226,400);
  img=loadImage("1.jpg");
}
void draw()
{
  background(img);
  circle(x[0],y[0],10);
}
void mousePressed()
{
  x[0]=mouseX;
  y[0]=mouseY;
}

3.子彈便五個
PImage img;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup()
{
  size(226,400);
  img=loadImage("1.jpg");
}
void draw()
{
  background(img);
  for(int i=0;i<5;i++)
    circle(x[i],y[i],10);
}
void mousePressed()
{
  if(n>=5)return;
  x[n]=mouseX;
  y[n]=mouseY;
  n++;
}

4.讓子彈重複利用
PImage img;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup()
{
  size(226,400);
  img=loadImage("1.jpg");
}
void draw()
{
  background(img);
  for(int i=0;i<5;i++)
    circle(x[i],y[i],10);
}
void mousePressed()
{
  x[n]=mouseX;
  y[n]=mouseY;
  n++;
  n=(n+1)%5;
}
5.瘋狂程設題目:找最大數
#include <string>
#include<iostream>
using namespace std;
int max_digit(int a)
{
 int b=0,c;
 while(a>0)
 {
  c=a%10;
  if(b<c)b=c;
  a/=10;
 }
 return b;
}
int main(){
  int n;cin>>n;
  cout<<"["<<max_digit(n)<<"]";
  return 0;
}
/* 上方C++ 的 main 函數 等價於 下方 C 的 main 函數
int main(void){
  int n;
  scanf("%d", &n);
  printf("[%d]", max_digit(n));
  return 0;
}
*/
6.函數判斷質數 
#include <iostream>
using namespace std;
int prime(int a)
{
 int b=0;
 for(int i=2;i<a;i++)
 {
  if(a%i==0)b=1;
 }
 if(b==1)return 0;
 else return 1;
}
int main(){
  int n;cin>>n;
  cout<<"["<<prime(n)<<"]";
  return 0;
}
/* 上方 C++ 的 main 函數 等價於 下方 C 的 main 函數
int main(void){
    int n;
    scanf("%d", &n);
    printf("[%d]", prime(n));
    return 0;
}
*/
7.擲骰統計 
 #include <stdio.h>
int main()
{
 int a=0,b=0,c=0,d=0,e=0,f=0;
 char g;
 while(scanf("%c",&g)==1)
 {
  if(g=='1')a++;
  if(g=='2')b++;
  if(g=='3')c++;
  if(g=='4')d++;
  if(g=='5')e++;
  if(g=='6')f++;
 }
 printf("1:%d\n",a);
 printf("2:%d\n",b);
 printf("3:%d\n",c);
 printf("4:%d\n",d);
 printf("5:%d\n",e);
 printf("6:%d\n",f);
}
8.for 的擲骰統計
9.跑回圈
int []a={0,0,0,1};
size(400,100);
for(int i=0;i<4;i++)
{
  if(a[i]==1) fill(255,0,0);
  else fill(128);
  rect(i*100,0,100,100);
}
10.變2D
int [][]a={
  {1,0,1,0,1,0},
  {0,1,0,1,0,1},
  {1,0,1,0,1,0},
  {0,1,0,1,0,1},
  {1,0,1,0,1,0},
  {0,1,0,1,0,1}};
size(600,600);
for(int i=0;i<6;i++)
{
  for(int j=0;j<6;j++)
  {
    if(a[i][j]==1) fill(255,0,0);
    else fill(128);
    rect(j*100,i*100,100,100);
  }
}
11.子彈能變大變小
int n=0;
void setup()
{
  size(226,400);
  img=loadImage("1.jpg");
}
void draw()
{
  background(img);
  for(int i=0;i<5;i++)
  {
    circle(x[i],y[i],r[i]);
  }
  if(mousePressed)r[now]++;
}
int now=0;
void mousePressed()
{
  x[n]=mouseX;
  y[n]=mouseY;
  r[n]=5;
  now=n;
  n=(n+1)%5;
}