# 202_08邱泓諭Greenfoot遊戲(個人版打磚塊)
:::info
* 遊戲重點功能
- [x] 畫面大小為800*600
- [x] 更新背景、磚塊、球、板子四種角色
- [x] 球碰到磚塊及板子時,加入音效
- [x] 所有磚塊打完時會出現過關畫面
- [x] 板子沒接到球時出現遊戲結束訊息。
* 額外功能
- [x] 背景音樂
- [x] 關卡切換
- [x] 計分功能
以下自行增刪
:::
## 遊戲情境(擷圖)

## 程式碼整理
* 場景-星空
```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>