---
# System prepended metadata

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

---

# 小恐龍第二周進度

## git clone
- cd "預存放資料夾位置"
    ![image](https://hackmd.io/_uploads/HJgGhTNkCp.png)
- git init
    ![image](https://hackmd.io/_uploads/rJ2iaNk0p.png)
- git clone "儲存庫的URL"
    ![image](https://hackmd.io/_uploads/B1DsaNJCp.png)
- 這樣就完成了
    ![image](https://hackmd.io/_uploads/SJgsa41Ra.png)
    
[clone && pull](https://ithelp.ithome.com.tw/m/articles/10272256)
[clone && pull差別可參考](https://gitbook.tw/chapters/github/clone-vs-pull)

## 第二周進度
1. 完成 move
    - 讓road的每個字元向前一格，這樣看起來會像是小恐龍在動
2. 在 init 中新增障礙物 'X'
    - X 當作障礙物
4. 完成 space_pressed
    - 判斷鍵盤是否有按下 space 鍵
6. 放入 main中使用
7. 加上註解

### 本周使用的函式
怕各位對於用到的函式不知道是做甚麼用的，而提供可參考的相關資料
1. [_kbhit()](https://learn.microsoft.com/zh-tw/cpp/c-runtime-library/reference/kbhit?view=msvc-170)
2. [_getch()](https://learn.microsoft.com/zh-tw/cpp/c-runtime-library/reference/getch-getwch?view=msvc-170)
3. [ASCII](https://zh.wikipedia.org/zh-tw/ASCII)

## 對 Github 的 push
參考之前的講義自行 push 上去看看



![image](https://hackmd.io/_uploads/Syu5aE1Rp.png)

## 課堂 Code
``` c=
#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;
}

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;
        display(MyDinoPtr);

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