bulk data dump
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
/********************************
|
||||
Parallax sidescrolling starfield
|
||||
Jason Bou-Samra [ParagonSoft]
|
||||
28/03/2024
|
||||
to compile:
|
||||
cc -o stars stars.c -lSDL2
|
||||
********************************/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
int initSDL (void);
|
||||
int shutdownSDL (void);
|
||||
|
||||
bool quit = false; /* quit flag */
|
||||
|
||||
SDL_Window *window = NULL;
|
||||
SDL_Renderer *sr;
|
||||
SDL_Event event;
|
||||
|
||||
/* window paramaters */
|
||||
#define WIDTH 640 /* pixels */
|
||||
#define HEIGHT 512 /* pixels */
|
||||
#define TITLE "Starfield" /* window title */
|
||||
|
||||
int StarAmount = 256;
|
||||
int xres = 640;
|
||||
int yres = 512;
|
||||
|
||||
struct StarField { /* star structure */
|
||||
int x;
|
||||
int y;
|
||||
int speed;
|
||||
};
|
||||
|
||||
int main(int argc, char **argv) /* allow StarAmount as paramater */
|
||||
{
|
||||
|
||||
const char* filename = argv[1]; /* parse command line arguments */
|
||||
if (argc != 2){ /* display usage if less than 2 arguments passed */
|
||||
printf("Usage: stars [<quantity>]\n\
|
||||
stars --help for help\n");
|
||||
return 1;
|
||||
} // display usage, then exit
|
||||
|
||||
if(!strcmp(filename, "--about")) {
|
||||
printf("Paralax sidescrolling starfield\n\
|
||||
Jason Bou-Samra 20/03/2024.\n\n"); return 0;
|
||||
} /* display about, then exit */
|
||||
|
||||
if(!strcmp (filename, "--help")) {
|
||||
printf("Usage: stars [<quantity>]\n\n\
|
||||
OPTIONS\n\
|
||||
--about displays about message\n\
|
||||
--help displays this help message\n"); return 0;
|
||||
}
|
||||
|
||||
StarAmount = atoi(argv[1]);
|
||||
if (StarAmount == 0) {
|
||||
printf("invalid options\n\
|
||||
stars --help for help\n"); return 0;}
|
||||
initSDL ();
|
||||
|
||||
struct StarField stars[StarAmount]; /* array of StarField structs, named stars */
|
||||
|
||||
for (int x = 1; x < StarAmount; x++) /* setup initial values */
|
||||
{
|
||||
stars[x].x = rand() % (xres );
|
||||
stars[x].y = rand() % (yres );
|
||||
stars[x].speed = rand() % (5+1);
|
||||
}
|
||||
|
||||
while (quit == false) { /* poll for quit event */
|
||||
|
||||
while (SDL_PollEvent (&event))
|
||||
{
|
||||
if (event.type == SDL_QUIT || event.type == SDL_WINDOWEVENT_CLOSE)
|
||||
{
|
||||
quit = true;
|
||||
}
|
||||
}
|
||||
if (quit)
|
||||
{
|
||||
break; /* breakout of loop if quit is true */
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(sr, 0x00, 0x00, 0x00, 0xFF); /* set background colour for window */
|
||||
SDL_RenderClear(sr); /* clear window */
|
||||
|
||||
for (int x = 1; x < StarAmount; x++)
|
||||
{
|
||||
stars[x].x = stars[x].x + stars[x].speed;
|
||||
|
||||
if (stars[x].x > xres)
|
||||
{
|
||||
stars[x].x = 0;
|
||||
stars[x].y = rand() % (yres );
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(sr, 51*stars[x].speed, 51*stars[x].speed, 51*stars[x].speed, 0xFF); /* star color (R, G, B, A) */
|
||||
SDL_RenderDrawPoint(sr, stars[x].x, stars[x].y); /* plot star */
|
||||
}
|
||||
SDL_RenderPresent (sr);
|
||||
} // keep going until quit event
|
||||
|
||||
shutdownSDL (); /* bye */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* initialise SDL */
|
||||
int initSDL ()
|
||||
{
|
||||
SDL_Init (SDL_INIT_EVERYTHING);
|
||||
|
||||
/* new window */
|
||||
window = SDL_CreateWindow (TITLE, /* title */
|
||||
SDL_WINDOWPOS_UNDEFINED, /* x pos */
|
||||
SDL_WINDOWPOS_UNDEFINED, /* w pos */
|
||||
WIDTH, /* width */
|
||||
HEIGHT, /* height */
|
||||
0); /* Additional flag(s) */
|
||||
|
||||
/* deal with error */
|
||||
if (window == NULL)
|
||||
{
|
||||
fprintf (stderr, "SDL window failed to initialise: %s\n",
|
||||
SDL_GetError ());
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* creater renderer */
|
||||
sr = SDL_CreateRenderer (window, 0, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||
}
|
||||
|
||||
/* shutdown routine */
|
||||
int shutdownSDL ()
|
||||
{
|
||||
SDL_DestroyWindow (window); /* free memory */
|
||||
SDL_Quit (); /* shutdown entire sdl sub-systems */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* message */
|
||||
char message[] = { "Yes, Jesus loves you!" };
|
||||
Reference in New Issue
Block a user