154 lines
4.4 KiB
C
154 lines
4.4 KiB
C
#include <raylib.h>
|
|
#include <raymath.h>
|
|
#include <math.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
#include <stdlib.h>
|
|
|
|
/*
|
|
Jedan oblik, jedna boja. Ovo je program koji mozda generise takvu sliku, mozda ne.
|
|
Radi na sansu, preko `chance` promenljive se kontrolise da li ce sansa da svi
|
|
budu isti oblici i boja, a verovatno nece biti.
|
|
|
|
Svake sekunde se dodaje novi, svake sekunde postoji sansa da resenje ovog zadatka
|
|
propadne.
|
|
|
|
Sada kada razmislim, ovo bas i ne radi tako, ali u nekom sirem smislu radi. Samo
|
|
sanse nisu to sto se misli da jesu. Bice neki bugfix.
|
|
|
|
Dostupna je i 2D kamera. Tako da sto duze traje, ako se dovoljno odzumira greske
|
|
se i ne vide iako ce se kad tad pojaviti.
|
|
|
|
Nisam se setio necega kreativnijeg
|
|
pod ovim ogranicenjima.
|
|
|
|
EN:
|
|
One shape, one color.
|
|
This is a program that might generate such an image, maybe not.
|
|
It works based on chance, with the chance variable controlling whether everything will be the same shape and color, though it's unlikely.
|
|
|
|
Every second, a new object is added, and each second there's a chance that the solution to this task will fail.
|
|
|
|
Now that I think about it, this doesn't quite work as expected, but in a broader sense, it does. It's just that the chances aren't quite what one would think. There will be a bugfix.
|
|
|
|
2D camera is also available. So the longer it lasts, if it's zoomed out enough mistakes
|
|
won't be seen even though they will eventually show up.
|
|
|
|
I couldn't come up with something more creative under these constraints.
|
|
*/
|
|
|
|
|
|
typedef struct Circle {
|
|
int radius;
|
|
int x;
|
|
int y;
|
|
} Circle;
|
|
|
|
|
|
int main(int argc, char *argv[]) {
|
|
const int SCREEN_WIDTH = 500;
|
|
const int SCREEN_HEIGHT = 500;
|
|
|
|
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "one color one shape");
|
|
SetTargetFPS(60);
|
|
|
|
Rectangle rects[100] = {0};
|
|
Circle circles[100] = {0};
|
|
|
|
double previous_time = GetTime();
|
|
double current_time = 0.0;
|
|
double update_draw_time = 0.0;
|
|
double wait_time = 0.0;
|
|
float delta_time = 0.0f;
|
|
float time_counter = 0.0f;
|
|
int target_fps = 60;
|
|
|
|
Camera2D camera = {0};
|
|
camera.target = (Vector2){ 0.0f, 0.0f };
|
|
camera.offset = (Vector2){250.0f, 250.0f};
|
|
camera.rotation = 0.0f;
|
|
camera.zoom = 1.0f;
|
|
|
|
Vector2 prevMousePos = GetMousePosition();
|
|
|
|
srand(time(NULL));
|
|
int rand_int = rand() % 101 + 1;
|
|
int chance = 10;
|
|
if(argc == 2) {
|
|
chance = atoi(argv[1]);
|
|
}
|
|
int current_objects=0;
|
|
|
|
while(!WindowShouldClose()) {
|
|
float mouseDelta = GetMouseWheelMove();
|
|
|
|
float newZoom = camera.zoom + mouseDelta * 0.01f;
|
|
if (newZoom <= 0)
|
|
newZoom = 0.01f;
|
|
|
|
camera.zoom = newZoom;
|
|
// Kod za 2D kameru od:
|
|
//https://gist.github.com/JeffM2501/3c7da5c2b7e078e254d673f91489c78f
|
|
// arhivirano: https://archive.is/dZCVe
|
|
Vector2 thisPos = GetMousePosition();
|
|
|
|
Vector2 delta = Vector2Subtract(prevMousePos, thisPos);
|
|
prevMousePos = thisPos;
|
|
|
|
if (IsMouseButtonDown(0))
|
|
camera.target = GetScreenToWorld2D(Vector2Add(camera.offset, delta),camera);
|
|
|
|
time_counter += delta_time;
|
|
camera.zoom = expf(logf(camera.zoom) + ((float)GetMouseWheelMove()*0.1f));
|
|
rand_int = rand() % 101 + 1;
|
|
|
|
if(time_counter >= 1.0f) {
|
|
rand_int = rand() % 100 + 1;
|
|
if(rand_int < chance) {
|
|
rects[current_objects] =(Rectangle){current_objects*30, 0, 30, 30};
|
|
} else {
|
|
circles[current_objects] = (Circle){.radius=30, .x=current_objects*30, 0};
|
|
}
|
|
time_counter = 0.0f;
|
|
current_objects++;
|
|
}
|
|
|
|
BeginDrawing();
|
|
ClearBackground(RAYWHITE);
|
|
BeginMode2D(camera);
|
|
for(int i = 0; i <current_objects; i++) {
|
|
for(int j = 0; j < 10; j++) {
|
|
if(rects[i].x!=0) {
|
|
DrawRectangle(i*30, i*50, 30, 30,MAROON);
|
|
DrawRectangle(i*30, -i*50, 30, 30,MAROON);
|
|
DrawRectangle(-i*30, -i*50, 30, 30,MAROON);
|
|
DrawRectangle(-i*30, i*50, 30, 30,MAROON);
|
|
|
|
} else if(circles[i].radius !=0) {
|
|
DrawCircle(i*30, i*50, 30, GREEN);
|
|
DrawCircle(-i*30, i*50, 30, GREEN);
|
|
DrawCircle(-i*30, -i*50, 30, GREEN);
|
|
DrawCircle(i*30, -i*50, 30, GREEN);
|
|
|
|
}
|
|
}
|
|
}
|
|
EndMode2D();
|
|
EndDrawing();
|
|
current_time = GetTime();
|
|
update_draw_time = current_time - previous_time;
|
|
if (target_fps > 0) {
|
|
wait_time = (1.0f/(float)target_fps) - update_draw_time;
|
|
if (wait_time > 0.0) {
|
|
WaitTime((float)wait_time);
|
|
current_time = GetTime();
|
|
delta_time = (float)(current_time - previous_time);
|
|
}
|
|
}
|
|
else {
|
|
delta_time = (float)update_draw_time;
|
|
}
|
|
previous_time = current_time;
|
|
}
|
|
}
|