神山で伝える神言語!15歳のための特別講座「Love C」in まるごと高専!

春といえば、

徳島、神山まるごと高専。

今年も新一年生にC言語を好きになってもらうべく、

特別講座「LoveC」でC言語を伝道、C言家(Cげんが)yrm。

夜は寮をジャックして全学生対象に特別講座「C言語でゲームづくり講座」。

宣伝ディスプレイありがとう!

vim好きがいるという会場のため、急遽vimで講座、さすが高専!

C言語はロボットやゲーム作り、OSやプログラミング言語作りとなんでもこなせる神言語。

#include "raylib.h"

//------------------------------
struct Hero{
    int x;
    int y;
    int r;
};

void Hero_do(struct Hero* self){
    if(IsKeyDown(KEY_LEFT)){
        self->x = self->x - 3;
    }
    if(IsKeyDown(KEY_RIGHT)){
        self->x = self->x + 3;
    }
}

void Hero_draw(struct Hero* self){
    DrawCircle(self->x, self->y, self->r, WHITE);
}

//------------------------------
struct Tama{
    int x;
    int y;
    int sx;
    int sy;
    int r;
};

void Tama_do(struct Tama* self){
    self->x = self->x + self->sx;
    self->y = self->y + self->sy;
}

int  Tama_checkColl(struct Tama* self, struct Hero* hero){
    return CheckCollisionCircles(
        (Vector2){self->x, self->y},
        self->r,
        (Vector2){hero->x, hero->y}, 
        hero->r
    );
}

void Tama_draw(struct Tama* self){
    DrawCircle(self->x, self->y, self->r, BLACK);
}

//------------------------------
struct Teki{
    int x;
    int y;
    int r;
    int 銃口x;
    int 銃口y;
    int 銃口sx;
    struct Tama tama[1000];
    int tama_i;
};

void Teki_hassha(struct Teki* self){
    int i = self->tama_i;
    if(i < 1000){
        self->tama[i].x = self->x;
        self->tama[i].y = self->y;
        self->tama[i].sx = self->銃口x;
        self->tama[i].sy = self->銃口y;
        self->tama[i].r = 5;
        self->tama_i = self->tama_i + 1;
    }
    self->銃口x = self->銃口x + self->銃口sx;
    if(self->銃口x < -9){
        self->銃口sx = -self->銃口sx;
    }
    if(+9 < self->銃口x){
        self->銃口sx = -self->銃口sx;
    }
}

void Teki_do(struct Teki* self){
    Teki_hassha(self);

    int i = 0;
    while(i < self->tama_i){
        Tama_do(&self->tama[i]);
        i = i + 1;
    }
}

int Teki_tamaColl(struct Teki* self, struct Hero* hero){
    int i = 0;
    while(i < self->tama_i){
        if(Tama_checkColl(&self->tama[i], hero) == 1) return 1;
        i = i + 1;
    }
    return 0;
}

void Teki_draw(struct Teki* self){
    DrawCircle(self->x, self->y, self->r, RED);
    int i = 0;
    while(i < self->tama_i){
        Tama_draw(&self->tama[i]);
        i = i + 1;
    }
}

//------------------------------
int main(){
    InitWindow(800, 450, "Oresama no GAME");
    SetTargetFPS(60);

    struct Hero hero0;
    hero0.x = 400;
    hero0.y = 400;
    hero0.r = 15;

    struct Teki teki0;
    teki0.x = 400;
    teki0.y = 50;
    teki0.r = 20;
    teki0.tama_i = 0;
    teki0.銃口x = +10;
    teki0.銃口y =  +3;
    teki0.銃口sx = -1;

    while(! WindowShouldClose() ){
        Hero_do(&hero0);
        Teki_do(&teki0);

        if(Teki_tamaColl(&teki0, &hero0) == 1){
            break;// game over
        }

        BeginDrawing();
            ClearBackground(BLUE);
            Teki_draw(&teki0);
            Hero_draw(&hero0);
        EndDrawing();
    }

    CloseWindow();
    return 0;
}

敵が動くと避けゲーとして成立するかも?みんなも改造して遊んでみてね!

% #for macos
% cc game.c libraylib.a -framework Cocoa -framework IOKit

C言語用ゲームライブラリ「raylib」はこちら、ありがとうraysan5

私服が同じ学生発見、もしやC言家!?

今年も楽しい会をありがとう、C言語、楽しんでね!


ref: