---
# System prepended metadata

title: 20208邱泓諭_Greenfoot遊戲(個人版打磚塊)
tags: [Greenfoot遊戲設計]

---

# 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>


