Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SDL.h>
- #include <SDL_image.h>
- typedef enum Type {
- PLAYER1, PLAYER2, BULLET
- } Type;
- typedef struct Entity {
- SDL_Texture *texture;
- Type type;
- float x, y, w, h;
- } Entity;
- typedef struct Bullet {
- Entity e;
- int lifeTime;
- } Bullet;
- typedef struct Node {
- Entity e;
- struct Node *next;
- } Node;
- Entity* addEntity(Node **head, float x, float y, float w, float h, SDL_Texture *texture, Type type) {
- Node *new;
- new = malloc(sizeof(Node));
- new->e.x = x;
- new->e.y = y;
- new->e.w = w;
- new->e.h = h;
- new->e.type = type;
- new->e.texture = texture;
- new->next = *head;
- if (type == BULLET) {
- ((Bullet*)new)->lifeTime = 500;
- }
- *head = new;
- return &(*head)->e;
- }
- void removeEntity(Node **head, Entity *e) {
- if (*head == NULL) {
- return;
- }
- if (&(*head)->e == e) {
- Node *tempnext = (*head)->next;
- SDL_DestroyTexture((*head)->e.texture);
- free(*head);
- *head = tempnext;
- return;
- }
- Node *temp = *head;
- Node *previous = *head;
- while (temp != NULL) {
- if (&temp->e == e) {
- previous->next = temp->next;
- SDL_DestroyTexture(temp->e.texture);
- free(&(*temp));
- return;
- }
- previous = temp;
- temp = temp->next;
- }
- }
- int main(int argc, char **argv) {
- int running = 1;
- SDL_Event event;
- SDL_Init(SDL_INIT_EVERYTHING);
- IMG_Init(IMG_INIT_PNG);
- SDL_Window *window = SDL_CreateWindow("Hello, SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_OPENGL);
- SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
- SDL_Surface *crab = IMG_Load("crab.png");
- SDL_Surface *cmder = IMG_Load("cmder.png");
- SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
- Node *head = NULL;
- addEntity(&head, 32, 32, 160, 128, SDL_CreateTextureFromSurface(renderer, crab), PLAYER1);
- addEntity(&head, 256, 256, 160, 128, SDL_CreateTextureFromSurface(renderer, cmder), PLAYER2);
- while (running) {
- while (SDL_PollEvent(&event)) {
- if (event.type == SDL_QUIT) {
- running = 0;
- }
- }
- SDL_RenderClear(renderer);
- const Uint8 *state = SDL_GetKeyboardState(NULL);
- if (state[SDL_SCANCODE_ESCAPE]) {
- running = 0;
- }
- Node *tmp = head;
- while (tmp != NULL) {
- if (state[SDL_SCANCODE_SPACE]) {
- if (tmp->e.type == PLAYER1) {
- addEntity(&head, tmp->e.x, tmp->e.y, 16, 16, SDL_CreateTextureFromSurface(renderer, cmder), BULLET);
- }
- }
- if (tmp->e.type == BULLET) {
- tmp->e.x += 4;
- SDL_Log("%d", ((Bullet*) (&tmp->e))->lifeTime);
- }
- SDL_Rect dst = {tmp->e.x, tmp->e.y, tmp->e.w, tmp->e.h};
- SDL_RenderCopy(renderer, tmp->e.texture, NULL, &dst);
- tmp = tmp->next;
- }
- SDL_RenderPresent(renderer);
- }
- SDL_FreeSurface(crab);
- SDL_FreeSurface(cmder);
- SDL_DestroyRenderer(renderer);
- SDL_DestroyWindow(window);
- IMG_Quit();
- SDL_Quit();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement