From 00f00b980a05bd65af127d4bb62a0c2ec52d7ece Mon Sep 17 00:00:00 2001 From: Barry Kane Date: Tue, 21 Mar 2023 21:39:35 +0000 Subject: [PATCH] Added a starfield which scrolls with player movement. --- Images/Starfield.png | Bin 0 -> 6104 bytes Spacewar.c | 65 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 Images/Starfield.png diff --git a/Images/Starfield.png b/Images/Starfield.png new file mode 100644 index 0000000000000000000000000000000000000000..0029dcb801a69b9f02e4e972afdffb32aec76049 GIT binary patch literal 6104 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 K&A!T(n*Kl3z-`O` literal 0 HcmV?d00001 diff --git a/Spacewar.c b/Spacewar.c index 6ffce5c..8a754d6 100644 --- a/Spacewar.c +++ b/Spacewar.c @@ -80,7 +80,10 @@ int main(int argc, char ** argv) // Initialize image loading: IMG_Init(IMG_INIT_PNG); + + // Initialize font support: TTF_Init(); + SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "2"); SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1"); @@ -90,6 +93,8 @@ int main(int argc, char ** argv) // Create an SDL window and rendering context in that window: SDL_Window * window = SDL_CreateWindow("SDL_TEST", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 700, 700, 0); SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, rendererFlags); + + // Set some properties for the window: SDL_SetWindowResizable(window, SDL_TRUE); SDL_SetWindowTitle(window, "Spacewar!"); @@ -99,10 +104,14 @@ int main(int argc, char ** argv) // Load the title screen: SDL_Texture * titleTexture = IMG_LoadTexture(renderer, "./Images/Title.png"); SDL_Rect titleRect; - titleRect.w = 317; - titleRect.h = 51; + SDL_QueryTexture(titleTexture, NULL, NULL, NULL, &titleRect.h); + SDL_QueryTexture(titleTexture, NULL, NULL, &titleRect.w, NULL); + + SDL_Texture * starfieldTexture = IMG_LoadTexture(renderer, "./Images/Starfield.png"); + SDL_Rect starfieldRect; + SDL_QueryTexture(starfieldTexture, NULL, NULL, NULL, &starfieldRect.h); + SDL_QueryTexture(starfieldTexture, NULL, NULL, &starfieldRect.w, NULL); - // TTF_Font * font = TTF_OpenFont("./Robtronika.ttf", 12); SDL_Color white = {255, 255, 255}; @@ -116,6 +125,7 @@ int main(int argc, char ** argv) SDL_Rect textDestination = {0, 0, text->w, text->h}; SDL_Texture * textTexture = SDL_CreateTextureFromSurface(renderer, text); + int scrollX = 0; // Render the title text: while(!inputSelected) { @@ -132,6 +142,23 @@ int main(int argc, char ** argv) // Clear the screen, filling it with black: SDL_RenderClear(renderer); + starfieldRect.x = 0 - scrollX++; + starfieldRect.y = 0; + while(starfieldRect.x <= (width + 800)) + { + while(starfieldRect.y <= (height + 800)) + { + SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect); + starfieldRect.y += 800; + } + starfieldRect.y = 0; + starfieldRect.x += 800; + } + + if(scrollX == 801) + { + scrollX = 0; + } SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect); SDL_RenderCopy(renderer, textTexture, NULL, &textDestination); SDL_RenderPresent(renderer); @@ -166,6 +193,7 @@ int main(int argc, char ** argv) bool inputSelected = false; // Render the title text: + int scrollX = 0; while(!inputSelected) { // Draw the title screen: @@ -181,6 +209,24 @@ int main(int argc, char ** argv) // Clear the screen, filling it with black: SDL_RenderClear(renderer); + starfieldRect.x = 0 - scrollX++; + starfieldRect.y = 0; + while(starfieldRect.x <= (width + 800)) + { + while(starfieldRect.y <= (height + 800)) + { + SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect); + starfieldRect.y += 800; + } + starfieldRect.y = 0; + starfieldRect.x += 800; + } + + if(scrollX == 801) + { + scrollX = 0; + } + SDL_RenderCopy(renderer, titleTexture, NULL, &titleRect); SDL_RenderCopy(renderer, textTexture, NULL, &textDestination); SDL_RenderPresent(renderer); @@ -312,6 +358,19 @@ int main(int argc, char ** argv) // Clear the screen, filling it with black: SDL_RenderClear(renderer); + starfieldRect.x = -900 - (long)shipA.position.xComponent % 800 - (shipA.velocity.xComponent * 15); + starfieldRect.y = -900 - (long)shipA.position.yComponent % 800 - (shipA.velocity.yComponent * 15); + while(starfieldRect.x <= (width + 800)) + { + while(starfieldRect.y <= (height + 800)) + { + SDL_RenderCopy(renderer, starfieldTexture, NULL, &starfieldRect); + starfieldRect.y += 800; + } + starfieldRect.y = -900 - (long)shipA.position.yComponent % 800 - (shipA.velocity.yComponent * 15); + starfieldRect.x += 800; + } + // Draw the ship: SDL_RenderCopyEx(renderer, currentTexture, NULL, &shipA.rectangle, angleBetweenVectors(&shipA.engine, &upVector) + 90, NULL, 0);