---
# System prepended metadata

title: 小恐龍第三周進度
tags: [程式設計 III]

---

# 小恐龍第三周進度

## git clone
- cd "預存放資料夾位置"
    ![image](https://hackmd.io/_uploads/Sk1vUrdRa.png)
- git init
    ![image](https://hackmd.io/_uploads/rJED8ruCa.png)
- git clone "儲存庫的URL"
    ![image](https://hackmd.io/_uploads/SJjPISOCp.png)
- 這樣就完成了
    ![image](https://hackmd.io/_uploads/B1ZO8SdRa.png)
 
## 小恐龍第三周進度
1. 完成 is_bumped 的函式
    - 用於判斷小恐龍是否撞到牆壁 X
2. 分數增加
<!-- score -->


## 對 Github 的 push
發現大家不太會推送，
執行這些若使用學校電腦，則每次請記得告訴電腦 Github 的 username 以及 email
基本的操作，但可能大家操作不同，所以遇上的問題都會不一樣，像是要求你要 pull 之類的
![image](https://hackmd.io/_uploads/HkSxYB_A6.png =50%x)
- 基本指令
    - `cd "預存放資料夾位置"`
    - `git add .` (不用在 git init 了因為已經有執行過並有 .git 檔案了)
    - `git commit -m "is_bumped && score"`
    - `git remote add origin "Github 的 URL"`
    - `git push origin main`
- 刪除遠端分支
    - git push origin -\-delete "分支名字"
- 可參考的資料
    - [新手也能懂的Git教學](https://medium.com/@flyotlin/%E6%96%B0%E6%89%8B%E4%B9%9F%E8%83%BD%E6%87%82%E7%9A%84git%E6%95%99%E5%AD%B8-c5dc0639dd9)
    - [寫給 Git 初學者的入門 4 步驟](https://www.maxlist.xyz/2018/11/02/git_tutorial/)
    
## 課堂 Code
```c= 
//20240321
//標頭檔案
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <Windows.h>
#include <time.h>
//定義常數
#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;
//初始化一個物件
Dino* init(void) {
    //Dino MyDino;
    //Dino* MyDinoPtr = &MyDino;

    Dino* MyDinoPtr = (Dino*)malloc(sizeof(Dino));

    if (MyDinoPtr != NULL) {
        MyDinoPtr->jump_Time_Left = 0;
        MyDinoPtr->barrier_Chance = 10;
        MyDinoPtr->score = 0;
        MyDinoPtr->wait_Time = 150;
        for (int i = 0; i < ROAD_LENGTH; i++) {
            MyDinoPtr->road[i] = '_';
        }
        MyDinoPtr->road[ROAD_LENGTH - 1] = 'X';
        MyDinoPtr->road[ROAD_LENGTH] = '\0';
    }
    return MyDinoPtr;
}
//呈現畫面
void display(Dino* MyDinoPtr) {
    system("cls");

    printf("\n\n\t");
    for (int i = 0; i < ROAD_LENGTH; i++) {
        if (i == DINO_PLACE && MyDinoPtr->jump_Time_Left > 0)
            printf("o");
        else
            printf(" ");
    }
    printf("\n\t");

    //地面
    for (int i = 0; i < ROAD_LENGTH; i++) {
        if (i == DINO_PLACE && MyDinoPtr->jump_Time_Left == 0)
            printf("o");
        else
            printf("%c", MyDinoPtr->road[i]);
    }

    printf("\n\n\n");
    printf("\t\tyour socre is: %d", MyDinoPtr->score);
    return;
}
//小恐龍移動
void move(Dino* MyDinoPtr) {
    for (int i = 0; i < ROAD_LENGTH - 1; i++) {
        MyDinoPtr->road[i] = MyDinoPtr->road[i + 1];
    }
    MyDinoPtr->road[ROAD_LENGTH - 1] = '_';
}
//判斷按鍵是否有觸發
bool space_pressed(void) {
    return _kbhit() != 0 && _getch() == 32;
}
//判斷是否小恐龍撞到'X'
bool is_bumped(Dino* MyDinoPtr) {
    return MyDinoPtr->jump_Time_Left == 0 && MyDinoPtr->road[DINO_PLACE] == 'X';
}
//主程式
int main() {
    Dino* MyDinoPtr = init();
    display(MyDinoPtr);
    while (true) {
        if (space_pressed() && MyDinoPtr->jump_Time_Left == 0)
            MyDinoPtr->jump_Time_Left = 7;
        move(MyDinoPtr);

        if (MyDinoPtr->jump_Time_Left > 0)
            MyDinoPtr->jump_Time_Left -= 1;

        //如果撞到我們要離開迴圈
        if (is_bumped(MyDinoPtr)) {
            display(MyDinoPtr);
            break;
        }

        display(MyDinoPtr);
        MyDinoPtr->score++;
        Sleep(MyDinoPtr->wait_Time);
    }
    return 0;
}
```
