加了setXY
unknown
plain_text
2 years ago
4.4 kB
21
Indexable
#include <iostream>
#include <vector>
#include <cmath>
#include <string> 
using namespace std;
class Map;
class character
{
protected:
    //名字、血量、攻擊、防禦、速度
    char symbol;
    string name;
    int healthPoints;
    int attackPoints;
    int defensePoints;
    int speedPoints;
    int x;  // 角色在方格地圖上的x、y座標 
    int y;
public:
    //Constructor
    character(const char charSymbol, const string& charName, int charHP, int charAttack, int charDefense, int charSpeed, int x, int y) : symbol(charSymbol), name(charName), healthPoints(charHP), attackPoints(charAttack), defensePoints(charDefense), speedPoints(charSpeed), x(x), y(y) {}
    //取得基本資料函數
    char getSymbol() const { return symbol; }
    string getName() const { return name; }
    int getHealthPoints() const { return healthPoints; }
    int getAttackPoints() const { return attackPoints; }
    int getDefensePoints() const { return defensePoints; }
    int getSpeedPoints() const { return speedPoints; }
    int getX() const { return x; }
    int getY() const { return y; }
    //顯示基本資料
    void displayInfo() const {
        cout << "Name: " << name << endl;
        cout << "HP: " << healthPoints << endl;
        cout << "Attack: " << attackPoints << endl;
        cout << "Defence: " << defensePoints << endl;
    }
    
    //傷害
    void takeDamage(int damage) {
        healthPoints -= damage;
        if (healthPoints < 0) {
            healthPoints = 0;
            cout << name << " 被擊敗了!" << endl;
        }
        else {
            cout << name << " 受到 " << damage << " 點傷害,剩餘生命值:" << healthPoints << endl;
        }
    }
    //設置角色X、Y
    void setXY(int newX, int newY) {
        x = newX;
        y = newY;
    }
    // 移動角色
    void move(Map& chessBoard);
};
class Map {
private:
    int rows;   // 地圖的行數
    int cols;   // 地圖的列數
    vector<std::vector<char>> map;  // 地圖的表示
public:
    Map(int rows, int cols)
        : rows(rows), cols(cols), map(rows, vector<char>(cols, '.')) {}
    void draw() const {
        for (const auto& row : map) {
            for (char cell : row) {
                std::cout << cell << ' ';
            }
            cout << endl;
        }
    }
     void placeCharacter(const character& character) {
        int row = character.getY();
        int col = character.getX();
        // 檢查座標是否合法
        if (row >= 0 && row < rows && col >= 0 && col < cols) {
            map[row][col] = character.getSymbol();
        }
    }
    void cleanCharacter(character& character) {
        int row = character.getY();
        int col = character.getX();
        // 檢查座標是否合法
        if (row >= 0 && row < rows && col >= 0 && col < cols) {
            map[row][col] = ' ';
        }
    }
        
};
void character::move(Map& chessBoard) {
        int moveX = 0;  
        int moveY = 0;
        chessBoard.cleanCharacter( *this);  // 將原先位置設為空格
        cout << "Your Move(Enter your movement): " << endl;
        cin >> moveX >> moveY;
        x += moveX;
        y += moveY;
        chessBoard.placeCharacter(*this);  // 更新新位置
        cout << x << " " << y << endl;
}
int main() {
    // 初始化地圖
    Map chessBoard(20, 20);
    // 初始化玩家
    // 玩家的隊伍
    vector<character> team = {
        character('W', "Wizard", 100, 50, 30, 10, 5, 0),
        character('K', "Knight", 120, 40, 25, 15, 7, 2),
        // Add more characters to the team...
    };
    // 放置隊伍進地圖
    for (const auto& character : team) {
        chessBoard.placeCharacter(character);
    }
    //遊戲剛開始時地圖
    cout << "Initial Chess Board:" << endl;
    chessBoard.draw();
    // Game loop (回合制)
    for (auto& character : team) {
        // 顯示角色基本資料
        character.displayInfo();
        // 移動角色
        character.move(chessBoard);
    }
    // 繪製移動後的地圖
    cout << "Chess Board after moving player:" << std::endl;
    chessBoard.draw();
    return 0;
}
Editor is loading...
Leave a Comment