All pastes #25623 Raw Edit

Mine

public text v1 · immutable
#25623 ·published 2005-10-15 19:51 UTC
rendered paste body
#include <stdlib.h>
#include "SDL/SDL.h"
#include <math.h>
#include <vector>
//SDL screen pointer
SDL_Surface *screen;

//computer specific constants
const int horizontalRez = 800;
const int verticalRez = 600;

//star constants
const int maxStars = 500;
const int layers = 3;

//star object
struct star { 
	int x,y;
	int layer;
};

//array of Stars
star starField[maxStars];

void initStars(void){
	int i;
	for (i=0;i<maxStars;i++){
		starField[i].x=rand()%horizontalRez; // 0-1399 [x]
		starField[i].y=rand()%verticalRez; // 0-1049 [y]
		starField[i].layer=rand()%layers;// [0-2] [layer]
	}
}

void putpixel(int x, int y, int color){
	unsigned int *ptr = (unsigned int*)screen->pixels;
	int lineoffset = y * (screen->pitch / 4);
	ptr[lineoffset + x] = color;
}

int layerColor(int layer){
	if (layer == 0){
		return 0xff0000;
	}
	if (layer == 1){
		return 0x00ff00;
	}
	if (layer == 2){
		return 0x0000ff;
	}
	return 0xffffff;
}

void drawStar(void){
	// Declare a couple of variables
	int i, j, yofs, ofs;
	// Draw to screen
	yofs = 0;
	for (i = 0; i < verticalRez; i++){
		for (j = 0, ofs = yofs; j < horizontalRez; j++, ofs++){
			((unsigned int*)screen->pixels)[ofs] = 0;
		}
		yofs += screen->pitch / 4;
	}
	int s;
	for (s=0;s<maxStars;s++){
		putpixel(starField[s].x, starField[s].y, 0xffffff / (3 / (starField[s].layer + 1)));
	}
	SDL_UpdateRect(screen, 0, 0, horizontalRez, verticalRez);
}

void updateStars(void){
	int i;
	for (i=0;i<maxStars;i++){
		// drop the particel down - depending on layer
		// [plus one - since layer zero would result in no motion otherwize]
		starField[i].x+=starField[i].layer+1;
		// check for wrap around
		if (starField[i].x>(horizontalRez - 1)){
			starField[i].y=rand()%verticalRez;
			starField[i].x=0;
			starField[i].layer=rand()%layers;
		}
	}
}


// BEGIN PROGRAM EXECUTION
int main(int argc, char *argv[]){
	// Initialize SDL's subsystems - in this case, only video.
	if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
		fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
		exit(1);
	}

	// Register SDL_Quit to be called at exit; makes sure things are
	// cleaned up when we quit.
	atexit(SDL_Quit);
    
	screen = SDL_SetVideoMode(horizontalRez, verticalRez, 32, SDL_SWSURFACE);
  
	// If we fail, return error.
	if ( screen == NULL ) {
		fprintf(stderr, "Unable to set video: %s\n", SDL_GetError());
		exit(1);
	}
	initStars();
	// Main loop: loop forever.
	while (1){
		//Update Star Field
		updateStars();
		drawStar();
		// Poll for events, and handle the ones we care about.
		SDL_Event event;
		while (SDL_PollEvent(&event)) {
			switch (event.type) {
				case SDL_KEYDOWN:
					break;
				case SDL_KEYUP:
					// If escape is pressed, return (and thus, quit)
					if (event.key.keysym.sym == SDLK_ESCAPE)
					return 0;
					break;
				case SDL_QUIT:
					return(0);
			}
		}
	}
	return 0;
}