This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
notes:comporg:spring2024:projects:mpg0 [2024/02/02 19:51] – [Gamepad input] cmazzara | notes:comporg:spring2024:projects:mpg0 [2024/02/08 02:32] (current) – [Game loop] rspringe | ||
---|---|---|---|
Line 7: | Line 7: | ||
====Game loop==== | ====Game loop==== | ||
+ | For this project, you will be making a Snake game. | ||
+ | The game loop for Snake is simple: you will control a snake around the screen to eat pieces of food. Once a piece of food has been eaten, your score will increase, and the snake will get longer. | ||
+ | |||
+ | The game ends when the head of the snake runs into either a wall, or another part of its body. | ||
====Sprites==== | ====Sprites==== | ||
+ | * There should be a sprite for at least a background, the snake' | ||
+ | * Some good free sprite software' | ||
+ | * A link to GIMP download: https:// | ||
+ | * You could also have a death screen for when your snake dies. | ||
+ | |||
+ | Another good option for designing your snake is downloading a photo off the internet(probably an animated/ | ||
====Gamepad input==== | ====Gamepad input==== | ||
There is obviously your arrow key inputs but there are other buttons available as well. At least for gamepad(0) we have button_?_ = ? for the average keyboard: | There is obviously your arrow key inputs but there are other buttons available as well. At least for gamepad(0) we have button_?_ = ? for the average keyboard: | ||
Line 19: | Line 29: | ||
* R = W | * R = W | ||
* Start = Enter Key | * Start = Enter Key | ||
+ | |||
+ | ==Using controller== | ||
+ | For those out there who want the whole experience of gaming, therein lies the ability to plug in a real video game controller, if your system allows (some laptops will at least). To that end, the controls are pretty straight-forward. Either console controller will rely upon the D-pad for movement, and the buttons should map to the controllers as well. For example, ' | ||
+ | |||
+ | ==Arrow Key Setup== | ||
+ | If you are just trying to make the input based off of your arrow keys, you can simply copy the same setup: | ||
+ | <code C> | ||
+ | // Buttons to move up, down, left, and right | ||
+ | bool mRight = (gamepad_right() == 1); | ||
+ | bool mLeft = (gamepad_left() == 1); | ||
+ | bool mUp = (gamepad_up() == 1); | ||
+ | bool mDown = (gamepad_down() == 1); | ||
+ | </ | ||
+ | |||
+ | NOTE: You'll want to do this in your game loop (the while loop) and make sure it is inside of main but outside of you game loop have the following: | ||
+ | <code C> | ||
+ | // Selects keyboard as gamepad to use for input | ||
+ | select_gamepad(0); | ||
+ | </ | ||
+ | |||
+ | When making you gamepad you'll make gamepad_direction values, WalkX and WalkY for example purposes. | ||
+ | * If WalkX < 0 then that mean you're going left. | ||
+ | * If WalkX > 0 then that mean you're going right. | ||
+ | * If WalkY < 0 then that mean you're going up. | ||
+ | * If WalkY > 0 then that mean you're going down. | ||
+ | |||
+ | With those you would probably make it so that when WalkX < 0 var = 1. And then do: | ||
+ | <code bash> | ||
+ | if( var == 1 ) { | ||
+ | Snake[0].X -= PlayerSpeed; | ||
+ | } | ||
+ | </ | ||
+ | to make your snake constantly move after pressing an arrow key. | ||
+ | |||
+ | ==Alternate way of making endless mvoement== | ||
+ | you could also set up a switch and do something like the following: | ||
+ | <code C> | ||
+ | case RIGHT: | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Things to note before doing the above. Youll need to create global variables LEFT, RIGHT, UP, and DOWN. In the given example there is a struct named Shead (Stands for snake head). You will also need the following: | ||
+ | <code C> | ||
+ | // The direction is updated based on given input | ||
+ | if (mRight && SHead.Direction != LEFT) | ||
+ | { | ||
+ | SHead.Direction = RIGHT; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The "&& | ||
+ | |||
====Bounds checking==== | ====Bounds checking==== | ||
+ | The screen on vircon32 is 640 by 360, however, you do not have to type these out every time you make a game in vircon32 as they are stored in the screen_width and screen_height variables respectively. One way of bounds checking is to see where you are about to spawn the snake' | ||
====Handling motion==== | ====Handling motion==== | ||
+ | To handle motion you could do: | ||
+ | <code c> | ||
+ | int SnakeX; | ||
+ | |||
+ | if( Right) | ||
+ | { | ||
+ | |||
+ | SnakeX = SnakeX + 20; | ||
+ | |||
+ | |||
+ | } | ||
+ | </ | ||
====Score Display==== | ====Score Display==== | ||
+ | |||
+ | you need the string.h header file | ||
+ | |||
+ | make a variable for the score | ||
+ | |||
+ | make an array to display the score | ||
+ | |||
+ | use the itoa function to convert the data, then use the print_at function to print it on the screen. | ||
+ | |||
+ | you can use the Vircon32 tutorials as a guide to help build and display the strings: https:// |