神山で伝える神言語!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: