---
# System prepended metadata

title: 專案-小恐龍
tags: [程式設計 III]

---

# 專案-小恐龍
![image](https://hackmd.io/_uploads/SyRMck8pa.png)

程式設計三，我們將利用所學的 C 語言實作出一個小恐龍
類似`chrome://dino`

## 小恐龍需求
下面會列出專案需要的函式以及物件（結構）及參數等，由各位實作出來

## define 
define 一些經常會用到的數字，藉由 define 增加程式碼的可讀性
```c=
#define ROAD_LENGTH 50 //路面長度
#define DINO_PLACE 6   //小恐龍在路面上的第幾格
```

## 結構(物件) 
一個經常會使用到的物件
```ｃ=
struct dino {
	char road[ROAD_LENGTH + 1];	//字串結尾需要'\0'
	int  jump_Time_Left;		//小恐龍掉到地面的時間
	int  score;					//得到的分數
	int  wait_Time;				//每次迴圈等待的時間
	int  barrier_Chance;		//放置障礙物的機率
	//剩下看各位有需要甚麼
};
typedef struct dino Dino;
```

## init
這邊將會運用到 malloc ，將可以避免當我們離開函式時，物件的記憶體被清除掉
因為動態配置的記憶體是由我們去控制他的生命週期。
```ｃ=
Dino* init(void)
```
[可參考](https://learn.microsoft.com/zh-tw/cpp/c-runtime-library/reference/malloc?view=msvc-170)

## display
呈現出小恐龍的畫面
```c=
void display(Dino* MyDino)
```

## main
進入 main 首先做初始化 -> 進入迴圈 [邏輯運算(是否有撞到、是否有按跳躍) -> 呈現畫面]
```c=
int main() {
    /*初始化*/
    while (true) {
        /* 邏輯運算 */
        
        /* 渲染呈現 */
    }
    return 0;
}
```

## move
實際上在移動的是路面，因此我們要寫一個移動路面的函式
```c=
void move(Dino *MyDino)
```

## space_pressed
判斷鍵盤是否有按下跳躍
```c=
bool space_pressed(void)
```

## is_bumped
判斷小恐龍是否撞到'X'
```c=
bool is_bumped(Dino* MyDinoPtr)
```

## spawn_barrier
隨機產生障礙物'X'
```c=
bool spawn_barrier(Dino* MyDinoPtr)
```
