Advertisement
Guest User

Untitled

a guest
Aug 25th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.55 KB | None | 0 0
  1. // LEARN SUBCLASSES. WOULD HAVE SAVED A GOOD PORTION OF TIME AND WOULD HAVE RESULTED IN A LOT LESS LINES   
  2.  
  3. /*
  4.  
  5. TODO:
  6. - Allow user to make pawn turn into any other piece should the pawn reach the opposite side of the board.
  7. - Put 2 rooks on each side of the board and allow for them to kill/be killed.
  8.  
  9. */
  10.  
  11. #include <SDL.h>
  12. #include <SDL_image.h>
  13. #include <iostream>
  14. #include <string>
  15. #include "pawn.h"
  16. #include "rook.h"
  17.  
  18. using namespace std;
  19.  
  20. const int WINDOW_WIDTH = 800;
  21. const int WINDOW_HEIGHT = 800;
  22. SDL_Window* gWindow = nullptr;
  23. SDL_Renderer* gRenderer = nullptr;
  24.  
  25. bool init()
  26. {
  27.     bool success = true;
  28.     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
  29.     {
  30.         cout << "SDL failed to initialize! SDL error: " << SDL_GetError() << endl;
  31.         success = false;
  32.     }
  33.     else
  34.     {
  35.         gWindow = SDL_CreateWindow("Chess", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
  36.         if (gWindow == nullptr)
  37.         {
  38.             cout << "SDL failed to create the window! SDL error: " << SDL_GetError() << endl;
  39.             success = false;
  40.         }
  41.         gRenderer = SDL_CreateRenderer(gWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  42.         if (gRenderer == nullptr)
  43.         {
  44.             success = false;
  45.             cout << "SDL failed to create the renderer! SDL error: " << SDL_GetError() << endl;
  46.         }
  47.         if (IMG_Init(IMG_INIT_PNG) < 0)
  48.         {
  49.             cout << "IMG failed to initialize PNG! IMG error: " << IMG_GetError() << endl;
  50.             success = false;
  51.         }
  52.     }
  53.  
  54.     return success;
  55. }
  56.  
  57. SDL_Texture* loadTexture(string path)
  58. {
  59.     SDL_Surface* loadedSurface = IMG_Load(path.c_str());
  60.     if (loadedSurface == nullptr)
  61.         cout << "Error loading surface! IMG error: " << IMG_GetError() << endl;
  62.     SDL_Texture* finalSurface = SDL_CreateTextureFromSurface(gRenderer, loadedSurface);
  63.     return finalSurface;
  64. }
  65.  
  66. SDL_Texture* spritesheet;
  67. // 8x8 are the dimensions of a chess board
  68. SDL_Rect tileRects[8 * 8];
  69. Pawn whitePieces[10]; // 8 pawns + 2 rooks
  70. Pawn blackPieces[10];
  71.  
  72. // currently 16 pieces. each piece has 2 positions (x, y).
  73. int poses[16][2];
  74. bool loadMedia()
  75. {
  76.     bool success = true;
  77.     spritesheet = loadTexture("spritesheet.png");
  78.  
  79.     int counter = 0;
  80.     int counter2 = 0;
  81.     for (int i = 0; i < sizeof(tileRects) / sizeof(tileRects[0]); i++)
  82.     {
  83.         tileRects[i].w = 100;
  84.         tileRects[i].h = 100;
  85.  
  86.         if (counter2 >= 8)
  87.             counter2 = 0;
  88.         if (i % 8 == 0 && i != 0)
  89.         {
  90.             counter2++;
  91.             counter++;
  92.         }
  93.         tileRects[i].x = 100 * counter2;
  94.  
  95.         if (counter > 0)
  96.             tileRects[i].y = 100 * counter;
  97.  
  98.         counter2++;
  99.     }
  100.  
  101.     for (int i = 0; i < sizeof(whitePieces) / sizeof(whitePieces[0]); i++)
  102.         whitePieces[i] = Pawn(i, "white");
  103.  
  104.     for (int i = 0; i < sizeof(blackPieces) / sizeof(blackPieces[0]); i++)
  105.         blackPieces[i] = Pawn(i, "black");
  106.  
  107.     return success;
  108. }
  109.  
  110. int gMouseX = 0;
  111. int gMouseY = 0;
  112.  
  113. bool clicked = false;
  114. Rook rook(0, "white");
  115. int main(int argc, char* argv[])
  116. {
  117.     init();
  118.     loadMedia();
  119.  
  120.     string turn = "white";
  121.  
  122.     SDL_Event events;
  123.     bool running = true;
  124.     while (running)
  125.     {
  126.         int posesCounter = 0;
  127.         while (SDL_PollEvent(&events) != 0)
  128.         {
  129.             if (events.type == SDL_QUIT)
  130.                 running = false;
  131.  
  132.             if (events.type == SDL_MOUSEBUTTONDOWN)
  133.                 clicked = true;
  134.             else
  135.                 clicked = false;
  136.  
  137.             if (turn == "white")
  138.             {
  139.                 for (int i = 0; i < sizeof(whitePieces) / sizeof(whitePieces[0]); i++)
  140.                     whitePieces[i].handleEvents(events);
  141.                 rook.handleEvents(events);
  142.             }
  143.             else
  144.                 for (int i = 0; i < sizeof(blackPieces) / sizeof(blackPieces[0]); i++)
  145.                     blackPieces[i].handleEvents(events);
  146.         }
  147.        
  148.         SDL_GetMouseState(&gMouseX, &gMouseY);
  149.         gMouseX /= 100;
  150.         gMouseY /= 100;
  151.  
  152.         SDL_SetRenderDrawColor(gRenderer, 0, 0, 0, 255);
  153.         SDL_RenderClear(gRenderer);
  154.  
  155.         for (int i = 0; i < sizeof(tileRects) / sizeof(tileRects[0]); i++)
  156.         {
  157.             if (i % 2 == 0)
  158.             {
  159.                 SDL_SetRenderDrawColor(gRenderer, 84, 168, 9, 255);
  160.                 SDL_RenderFillRect(gRenderer, &tileRects[i]);
  161.             }
  162.             else
  163.             {
  164.                 SDL_SetRenderDrawColor(gRenderer, 255, 255, 255, 255);
  165.                 SDL_RenderFillRect(gRenderer, &tileRects[i]);
  166.             }
  167.         }
  168.  
  169.         for (int i = 0; i < sizeof(whitePieces) / sizeof(whitePieces[0]); i++)
  170.         {
  171.             poses[i][0] = whitePieces[i].getX();
  172.             poses[i][1] = whitePieces[i].getY();
  173.             whitePieces[i].move(gMouseX, gMouseY, clicked, turn, poses);
  174.             SDL_SetRenderDrawColor(gRenderer, 255, 0, 0, 255);
  175.             SDL_RenderFillRect(gRenderer, &whitePieces[i].getRect());
  176.             posesCounter++;
  177.  
  178.             if (whitePieces[i].killedPiece)
  179.             {
  180.                 for (int j = 0; j < sizeof(blackPieces) / sizeof(blackPieces[0]); j++)
  181.                 {
  182.                     if (blackPieces[j].getX() == whitePieces[i].getX() && blackPieces[j].getY() == whitePieces[i].getY())
  183.                     {
  184.                         blackPieces[j].killed = true;
  185.                         turn = "black";
  186.                     }
  187.                 }
  188.             }
  189.         }
  190.  
  191.         // OI FUTURE ME. YOU'RE GOING TO HAVE TO MAKE THE POSESCOUNTER INCREMENT IN THIS FOR LOOP OR ELSE IT WON'T WORK!!
  192.         for (int i = 0; i < sizeof(blackPieces) / sizeof(blackPieces[0]); i++)
  193.         {
  194.             poses[i + posesCounter][0] = blackPieces[i].getX();
  195.             poses[i + posesCounter][1] = blackPieces[i].getY();
  196.             blackPieces[i].move(gMouseX, gMouseY, clicked, turn, poses);
  197.             SDL_SetRenderDrawColor(gRenderer, 0, 0, 255, 255);
  198.             SDL_RenderFillRect(gRenderer, &blackPieces[i].getRect());
  199.  
  200.             if (blackPieces[i].killedPiece)
  201.             {
  202.                 for (int j = 0; j < sizeof(whitePieces) / sizeof(whitePieces[0]); j++)
  203.                 {
  204.                     if (blackPieces[i].getX() == whitePieces[j].getX() && blackPieces[i].getY() == whitePieces[j].getY())
  205.                     {
  206.                         whitePieces[j].killed = true;
  207.                         turn = "white";
  208.                     }
  209.                 }
  210.             }
  211.         }
  212.  
  213.         SDL_RenderPresent(gRenderer);
  214.     }
  215.  
  216.     return 0;
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement