邱 璇洛 (ゝ∀・)

邱 璇洛 (ゝ∀・)

你好哇(*゚∀゚*)~这里是邱璇洛的博客,常常用来记录一些技术文章和小日常~(σ゚∀゚)σ
twitter
tg_channel

簡単なコアウォーズを再現するためにC言語を使用する

起因#

約半月前、DBinaryさんがコードで勝敗を決めるプログラマーコンテスト、つまり磁芯大戦を開催しました。

私はまだ初心者ですが、自分でも遊んでみたいと思います。

コーディング#

磁芯大戦のロジックは非常にシンプルです。

ユーザーが自分のロボットのコードを編集する -> コードを実行する -> ゲームが終了し、誰がより多くの領土を占拠したか、または誰が誰を撃破したかを見る。

技術力が乏しいので、まずは領土の占拠を実装しましょう💦

まずは簡単な地図のレンダリングを実現します:

// マップのサイズを定義
int map_data[12][12];
/* マップデータをロード */
void base() {
    for (int i = 0; i < 12; i++) {
        for (int j = 0; j < 12; j++) {
            map_data[j][i] = 0;
        }
    }
}
/* マップをレンダリング */
void lod_map() {
    printf("\n");
    for (int i = 0; i < 12; i++) {
        for (int j = 0; j < 12; j++) {
            printf("[%d]", map_data[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

次に、2 人のプレイヤーを追加してレンダリングします:

int p1_data = 1;
int p2_data = 2;

/* 現在の座標 */
int p1_now[] = {0,0};
int p2_now[] = {11,11};
...

/* プレイヤーをレンダリング */
void lod_map() {
    map_data[p1_now[0]][p1_now[1]] = p1_data;
    map_data[p2_now[0]][p2_now[1]] = p2_data;
...

}

プレイヤーコントローラーとプレイヤーコードのロードを書きます:

/* モバイルコントロール */
void move(int direction, int player) {
    if (player==1) {
        switch (direction) {
            /* 下 */
            case 1:
                p1_now[0] = p1_now[0]+1;
                break;
            /* 上 */
            case 2:
                p1_now[0] = p1_now[0]-1;
                break;
            /* 左 */
            case 3:
                p1_now[0] = p1_now[1]-1;
                break;
            /* 右 */
            case 4:
                p1_now[0] = p1_now[1]+1;
                break;
            default:
                break;
        }
    } else {
        switch (direction) {
            /* 下 */
            case 1:
                p2_now[0] = p2_now[0]+1;
                break;
            /* 上 */
            case 2:
                p2_now[0] = p2_now[0]-1;
                break;
            /* 左 */
            case 3:
                p2_now[0] = p2_now[1]-1;
                break;
            /* 右 */
            case 4:
                p2_now[0] = p2_now[1]+1;
                break;
            default:
                break;
        }
    }
}

/* プレイヤーを制御 */
void player_1() {
    move(1, 1);
    move(1, 1);
}

void player_2() {
    move(2, 2);
}

/* プレイヤーデータを読み込む */
void lod_player() {
    player_1();
    player_2();
}

ゲームデータの統計を行います:

/* ゲームデータの統計 */
void lod_end() {
    int p1_num;
    int p2_num;
    for (int i = 0; i < 12; i++) {
        for (int j = 0; j < 12; j++) {
            if (map_data[i][j] == 1) {
                p1_num++;
            } else if (map_data[i][j] == 2) {
                p2_num++;
            }
        }
    }
    /* printf("[INFO]Game data: P1:%d, P2:%d\n", p1_num-12, p2_num-12); */
    if (p1_num<p2_num) {
        printf("[WIN]P2の勝利!\n");
    } else if (p1_num>p2_num) {
        printf("[WIN]P1の勝利!\n");
    } else {
        printf("[WIN]勝者なし。");
    }
    
}

最後に、ゲームを開始します!

int main() {
    printf("\n[INFO] ゲームを開始します\n\n");
    base();
    for (int i=0; i<12; i++) {
        printf("[INFO] ラウンド %d", i);
        lod_player();
        lod_map();
        sleep(1);
        
        /* 何かのモード(?) */
        //printf("\33[2J \033[0m");
        //printf("\007 \033[0m\n");
    }

    lod_end();

    return 0;
}

完全なコード: Github

好多鱼.png

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。