# 202_08邱泓諭Greenfoot遊戲(個人版打磚塊) :::info * 遊戲重點功能 - [x] 畫面大小為800*600 - [x] 更新背景、磚塊、球、板子四種角色 - [x] 球碰到磚塊及板子時,加入音效 - [x] 所有磚塊打完時會出現過關畫面 - [x] 板子沒接到球時出現遊戲結束訊息。 * 額外功能 - [x] 背景音樂 - [x] 關卡切換 - [x] 計分功能 以下自行增刪 ::: ## 遊戲情境(擷圖) ![image](https://hackmd.io/_uploads/ByHhDAn_a.png) ## 程式碼整理 * 場景-星空 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 Space 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class Space extends World { GreenfootSound backgroundMusic = new GreenfootSound("whistle-baby.mp3"); /** * Space 類別的物件建構子。 * */ public Space() { // 建立600x400方格的新場景,方格大小為1x1像素。 super(800,600, 1); addObject(new Ball(), 400, 500); addObject(new Paddle(), 400, 550); //產生8*5(40顆磚塊) for (int a=0;a<15;a++) { for (int j=0;j<8;j++) { addObject(new Brick(), 40+52*a,20+50*j); } } backgroundMusic.play(); //播放音樂 } } ``` * 球 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 Ball 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class Ball extends Actor { /** * Act - 隨便 Ball 想做什麼。 * 每次按下「單步執行」或「執行」按鈕,都會呼叫這個方法。 */ private int motionX=2; private int motionY=2; private int brickHit=0; GreenfootSound backgroundMusic = new GreenfootSound("hrxz.com-sumwygbl5wa24985.mp3"); public void act() { // 在這裏寫程式。 int newX; int newY; newX = getX() + motionX; newY = getY() + motionY; if (newX > 800) { motionX = -2; } else if (newX < 0) { motionX = 2; } if (newY > 600) { motionY = -2; } else if (newY < 0) { motionY = 2; } setLocation(newX, newY); Actor brick = getOneIntersectingObject(Brick.class); if (brick != null) { motionY = -motionY; brickHit++; getWorld().removeObject(brick); } Actor paddle = getOneIntersectingObject(Paddle.class); if (paddle != null) { motionY = -motionY; backgroundMusic.play(); } if (brickHit ==120) { getWorld().addObject(new over(), 400, 300); Greenfoot.stop(); } if (newY ==600) { getWorld().addObject(new LOSE(), 400, 300); Greenfoot.stop(); } } } ``` * 方塊 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 Brick 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class Brick extends Actor { /** * Act - 隨便 Brick 想做什麼。 * 每次按下「單步執行」或「執行」按鈕,都會呼叫這個方法。 */ public void act() { // 在這裏寫程式。 } } ``` * 板子 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 Paddle 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class Paddle extends Actor { /** * Act - 隨便 Paddle 想做什麼。 * 每次按下「單步執行」或「執行」按鈕,都會呼叫這個方法。 */ public void act() { // 在這裏寫程式。 MouseInfo mouse = Greenfoot.getMouseInfo(); if (mouse!= null) { setLocation(mouse.getX(), getY()); } } } ``` * 失敗畫面 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 LOSE 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class LOSE extends Actor { /** * Act - 隨便 LOSE 想做什麼。 * 每次按下「單步執行」或「執行」按鈕,都會呼叫這個方法。 */ public void act() { // 在這裏寫程式。 } } ``` * 成功畫面 ```cpp= import greenfoot.*; // (World、Actor、GreenfootImage、GreenfootSound、Greenfoot及MouseInfo) /** * 請在此撰寫 over 類別的說明。 * * @author (你的名字) * @version (日期或版號) */ public class over extends Actor { /** * Act - 隨便 over 想做什麼。 * 每次按下「單步執行」或「執行」按鈕,都會呼叫這個方法。 */ public void act() { // 在這裏寫程式。 } } ``` ### 特色/功能介紹 * 有背景音樂。 * 撞到板子有音效。 * 通關有過關畫面遊戲會暫停不會繼續自動進行。 * 特殊的造型以及音樂 ## 遊戲連結 * [官方連結](https://www.greenfoot.org/scenarios/32658) ## 遊戲玩法 * 操控滑鼠控制板子將球反彈擊碎磚塊,擊破所有磚塊即可獲勝,若不慎漏接了球遊戲將失敗。 ## 開始玩遊戲(embed嵌入 ) <iframe src="https://www.greenfoot.org/scenarios/32658?embed=true""width="800"height="600"></iframe>