Advertisement
Guest User

All methods, not working

a guest
Jan 29th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.18 KB | None | 0 0
  1. #include <SDL2/SDL_image.h>
  2. #include <SDL2/SDL_mixer.h>
  3. #include <SDL2/SDL_ttf.h>
  4. #include <iostream>
  5. using namespace std;
  6. typedef unsigned int uint;
  7. const int size = 4;
  8. enum movDir {UP, DOWN, LEFT, RIGHT, FORWARD, BACK};
  9.  
  10. bool win, done, moved;
  11. uint score;
  12.  
  13. class tile
  14. {
  15. public:
  16.     tile() : val(0), blocked(false) {}
  17.     uint val;
  18.     bool blocked;
  19. };
  20.  
  21. tile board[size][size][size];
  22.  
  23.  
  24.  
  25.  
  26.  
  27. #define Texture SDL_Texture*
  28.  
  29. unsigned window_x = 1330;
  30. unsigned window_y = 340;
  31.  
  32. unsigned window_start_x = 0;
  33. unsigned window_start_y = 0;
  34.  
  35. SDL_Renderer *renderer;
  36. //CSDL_Setup* csdl_setup;
  37.      
  38. Texture background;
  39. Texture grid;
  40. Texture tile_2;
  41. Texture tile_4;
  42. Texture tile_8;
  43. Texture tile_16;
  44. Texture tile_32;
  45. Texture tile_64;
  46. Texture tile_128;
  47. Texture tile_256;
  48. Texture tile_512;
  49. Texture tile_1024;
  50. Texture tile_2048;
  51.  
  52. Texture loadImage(char* image){
  53.    SDL_Surface *loadedImage = IMG_Load(image);
  54.    if(!loadedImage) {
  55.       printf("Failed to load image: %s\n", SDL_GetError() );
  56.       SDL_Quit();
  57.       exit(1);
  58.    }
  59.    Texture texture = SDL_CreateTextureFromSurface(renderer, loadedImage);
  60.    SDL_FreeSurface(loadedImage);
  61.    if(!texture) {
  62.       printf("Failed to create texture: %s\n", SDL_GetError() );
  63.       SDL_Quit();
  64.       exit(1);
  65.    }
  66.    return texture;
  67. }
  68.  
  69. TTF_Font* font;
  70. void init_sdl(){
  71.    static bool init=false;
  72.    if(init) return;
  73.    init = true;
  74.       if (SDL_Init(SDL_INIT_EVERYTHING) != 0){
  75.          printf("SDL_Init failed: %s\n", SDL_GetError());
  76.          exit(1);
  77.       }
  78.  
  79.       SDL_Window *window = SDL_CreateWindow("2048",window_start_x,window_start_y, window_x,window_y,SDL_WINDOW_SHOWN);
  80.       if (!window){
  81.          printf("Window creation failed: %s\n", SDL_GetError());
  82.          SDL_Quit();
  83.          exit(1);
  84.       }
  85.      
  86.       renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
  87.       if (!renderer){
  88.          printf("Renderer creation failed: %s\n", SDL_GetError());
  89.          SDL_Quit();
  90.          exit(1);
  91.       }
  92.  
  93.  
  94.       background = loadImage("background.png");
  95.       grid = loadImage("grid.png");
  96.       tile_2 = loadImage("2.png");
  97.       tile_4 = loadImage("4.png");
  98.       tile_8 = loadImage("8.png");
  99.       tile_16 = loadImage("16.png");
  100.       tile_32= loadImage("32.png");
  101.       tile_64 = loadImage("64.png");
  102.       tile_128 = loadImage("128.png");
  103.       tile_256 = loadImage("256.png");
  104.       tile_512 = loadImage("512.png");
  105.       tile_1024 = loadImage("1024.png");
  106.       tile_2048 = loadImage("2048.png");
  107.  
  108.       /*if(TTF_Init()==-1){
  109.          printf("Font error %s\n", TTF_GetError());
  110.          exit(1);
  111.       }
  112.       font = TTF_OpenFont("CS.ttf", 48);
  113.       if(!font){
  114.          printf("Font error %s\n", TTF_GetError());
  115.          exit(1);
  116.       }*/
  117. }
  118.  
  119. /*Texture r(string message){
  120.    init_sdl();
  121.    SDL_Surface* s = TTF_RenderText_Blended(font, message.c_str(), (SDL_Color){.r=0,.g=0,.b=0,.a=255});
  122.    if(!s){
  123.       printf("Error creating surface %s\n", SDL_GetError());
  124.       exit(1);
  125.    }
  126.    auto tex =SDL_CreateTextureFromSurface(renderer, s);
  127.    if(!tex){
  128.       printf("Error creating surface %s\n", SDL_GetError());
  129.       exit(1);
  130.    }
  131.    SDL_FreeSurface(s);
  132.    return tex;
  133. }*/
  134.  
  135. void displayTexture(Texture t, unsigned x, unsigned y, unsigned width, unsigned height, SDL_RendererFlip flip = SDL_FLIP_NONE){
  136.    SDL_Rect tex_size;
  137.    tex_size.x = 0;
  138.    tex_size.y = 0;
  139.    SDL_Rect toplace;
  140.    toplace.x = x;
  141.    toplace.y = y;
  142.    toplace.w = width;
  143.    toplace.h = height;
  144.    SDL_QueryTexture(t, NULL, NULL, &tex_size.w, &tex_size.h);
  145.    SDL_RenderCopyEx(renderer,t,&tex_size,&toplace,0,NULL,flip);
  146. }
  147.  
  148. //Texture background_image, player_image;
  149.  
  150. /*int array[9];
  151. Texture display[] = {r(" "), r("2"), r("4"), r("8"), r("16"), r("32"), r("64"), r("128"), r("256"), r("512"), r("1024"), r("2048"), r("4096"), r("8192")};
  152. unsigned char colors[][3] = {
  153.    {0,0,0}, // none
  154.    {200, 0, 200}, // 2
  155.    {200, 0, 200}, // 4
  156.    {200, 0, 200}, // 8
  157.    {200, 0, 200}, // 16
  158.    {200, 0, 200}, // 32
  159.    {200, 0, 200}, // 64
  160.    {200, 0, 200}, // 128
  161.    {200, 0, 200}, // 256
  162.    {200, 0, 200}, // 512
  163.    {200, 0, 200}, // 1024
  164.    {200, 0, 200}, // 2048
  165.    {200, 0, 200}, // 4096
  166.    {200, 0, 200}, // 8192
  167. };*/
  168.  
  169. bool testAdd(int x, int y, int z, uint v){
  170.    if (x < 0 || x > 3 || y < 0 || y > 3 || z < 0 || z > 3) return false;
  171.    return board[x][y][z].val == v;
  172. }
  173.  
  174. bool canMove(){
  175. for (int y = 0; y < size; y++){
  176.    for (int x = 0; x < size; x++){
  177.       for (int z = 0; z < size; z++){
  178.          if (!board[x][y][z].val) return true;
  179.       }
  180.    }
  181. }
  182. for (int x = 0; x < size; x++){
  183.    for (int y = 0; y < size; y++){
  184.       for (int z = 0; z < size; z++){
  185.          if (testAdd(x + 1, y, z, board[x][y][z].val)) return true;
  186.          if (testAdd(x - 1, y, z, board[x][y][z].val)) return true;
  187.          if (testAdd(x, y + 1, z, board[x][y][z].val)) return true;
  188.          if (testAdd(x, y - 1, z, board[x][y][z].val)) return true;
  189.          if (testAdd(x, y, z + 1, board[x][y][z].val)) return true;
  190.          if (testAdd(x, y, z - 1, board[x][y][z].val)) return true;
  191.       }
  192.    }
  193. }
  194. return false;
  195. }
  196.  
  197. void addTile(){
  198.    for (int y = 0; y < size; y++){
  199.       for (int x = 0; x < size; x++){
  200.          for (int z = 0; z < size; z++){
  201.             if (!board[x][y][z].val)
  202.             {
  203.                uint a, b, c;
  204.                for (int i = 0; i < 3; i++){
  205.                   do
  206.                   {a = rand() % size; b = rand() % size; c = rand() % size;}
  207.                   while (board[a][b][c].val);
  208.  
  209.                   int s = rand() % 100;
  210.                   if (s > 89) board[a][b][c].val = size;
  211.                   else board[a][b][c].val = 2;
  212.                }
  213.                if (canMove()) return;
  214.             }
  215.          }
  216.       }
  217.    }
  218.    done = true;
  219. }
  220.  
  221. void moveVert(int x, int y, int z, int d){
  222.    if (board[x][y + d][z].val && board[x][y + d][z].val == board[x][y][z].val && !board[x][y][z].blocked && !board[x][y + d][z].blocked )
  223.    {
  224.       board[x][y][z].val = 0;
  225.       board[x][y + d][z].val *= 2;
  226.       score += board[x][y + d][z].val;
  227.       board[x][y + d][z].blocked = true;
  228.       moved = true;
  229.    }
  230.    else if (!board[x][y + d][z].val && board[x][y][z].val)
  231.    {
  232.       board[x][y + d][z].val = board[x][y][z].val;
  233.       board[x][y][z].val = 0;
  234.       moved = true;
  235.    }
  236.    if (d > 0) {if (y + d < 3) moveVert(x, y + d, z,  1);}
  237.    else        {if (y + d > 0) moveVert(x, y + d, z, -1);}
  238.    }
  239.  
  240. void moveHori(int x, int y, int z, int d){
  241.    if (board[x + d][y][z].val && board[x + d][y][z].val == board[x][y][z].val && !board[x][y][z].blocked && !board[x + d][y][z].blocked )
  242.    {
  243.       board[x][y][z].val = 0;
  244.       board[x + d][y][z].val *= 2;
  245.       score += board[x + d][y][z].val;
  246.       board[x + d][y][z].blocked = true;
  247.       moved = true;
  248.    }
  249.    else if (!board[x + d][y][z].val && board[x][y][z].val)
  250.    {
  251.       board[x + d][y][z].val = board[x][y][z].val;
  252.       board[x][y][z].val = 0;
  253.       moved = true;
  254.    }
  255.    if (d > 0) {if (x + d < 3) moveHori(x + d, y, z,  1);}
  256.    else        {if (x + d > 0) moveHori(x + d, y, z, -1);}
  257.    }
  258.  
  259. void movePlane(int x, int y, int z, int d){
  260.    if (board[x][y][z + d].val && board[x][y][z + d].val == board[x][y][z].val && !board[x][y][z].blocked && !board[x][y][z + d].blocked )
  261.    {
  262.       board[x][y][z].val = 0;
  263.       board[x][y][z + d].val *= 2;
  264.       score += board[x][y][z + d].val;
  265.       board[x][y][z + d].blocked = true;
  266.       moved = true;
  267.    }
  268.    else if (!board[x][y][z + d].val && board[x][y][z].val)
  269.    {
  270.       board[x][y][z + d].val = board[x][y][z].val;
  271.       board[x][y][z].val = 0;
  272.       moved = true;
  273.    }
  274.    if (d > 0) {if (z + d < 3) movePlane(x, y, z + d,  1);}
  275.    else        {if (z + d > 0) movePlane(x, y, z + d, -1);}
  276. }
  277.  
  278. void move(movDir d){
  279.    switch(d)
  280.    {
  281.       case UP:
  282.       for (int x = 0; x < size; x++){
  283.          for (int z = 0; z < size; z++){
  284.             int y = 1;
  285.             while (y < size)
  286.             {if (board[x][y][z].val) moveVert(x, y, z, -1); y++;}
  287.          }
  288.       }
  289.       break;
  290.       case DOWN:
  291.       for (int x = 0; x < size; x++){
  292.          for (int z = 0; z < size; z++){
  293.             int y = 2;
  294.             while (y >= 0)
  295.             {if (board[x][y][z].val) moveVert(x, y, z, 1); y--;}
  296.          }
  297.       }
  298.       break;
  299.       case LEFT:
  300.       for (int y = 0; y < size; y++){
  301.          for (int z = 0; z < size; z++){
  302.             int x = 1;
  303.             while (x < size)
  304.             {if (board[x][y][z].val) moveHori(x, y, z, -1); x++;}
  305.          }
  306.       }
  307.       break;
  308.       case RIGHT:
  309.       for (int y = 0; y < size; y++){
  310.          for (int z = 0; z < size; z++){
  311.             int x = 2;
  312.             while (x >= 0)
  313.             {if (board[x][y][z].val) moveHori(x, y, z, 1); x--;}
  314.          }
  315.       }
  316.       break;
  317.       case FORWARD:
  318.       for (int x = 0; x < size; x++){
  319.          for (int y = 0; y < size; y++){
  320.             int z = 1;
  321.             while (z < size)
  322.             {if (board[x][y][z].val) movePlane(x, y, z, -1); z++;}
  323.          }
  324.       }
  325.       break;
  326.       case BACK:
  327.       for (int x = 0; x < size; x++){
  328.          for (int y = 0; y < size; y++){
  329.             int z = 2;
  330.             while (z >= 0)
  331.             {if (board[x][y][z].val) movePlane(x, y, z, 1); z--;}
  332.          }
  333.       }
  334.    }
  335. }
  336.  
  337. void checkKeys(int key){
  338.    switch(key){
  339.       case SDLK_UP:
  340.          printf("up\n"); fflush(0);
  341.          //do up stuff
  342.          move(UP);
  343.          break;
  344.       case SDLK_DOWN:
  345.          printf("down\n"); fflush(0);
  346.          //do down stuff
  347.          move(DOWN);
  348.          break;
  349.       case SDLK_RIGHT:
  350.          printf("right\n"); fflush(0);
  351.          //do right stuff
  352.          move(RIGHT);
  353.          break;
  354.       case SDLK_LEFT:
  355.          printf("left\n"); fflush(0);
  356.          //do left stuff
  357.          move(LEFT);
  358.          break;
  359.       case SDLK_f:
  360.          printf("forward\n"); fflush(0);
  361.          //do left stuff
  362.          move(FORWARD);
  363.          break;
  364.       case SDLK_r:
  365.          printf("back\n"); fflush(0);
  366.          //do left stuff
  367.          move(BACK);
  368.          break;
  369.    }
  370. }
  371.  
  372.  
  373.  
  374. void initialize() {
  375.    done = false;
  376.    win = false;
  377.    moved = true;
  378.    score = 0;
  379.    /*for(int i=0; i<9; i++) array[i] = 0;
  380.    array[rand()%9] = 1;
  381.    do{
  382.       int temp = rand()%9;
  383.       if(array[temp]!=0) continue;
  384.       array[temp] = 1;
  385.    }while(false);*/
  386. //}
  387.  
  388. //int& get(int x, int y){
  389. //   return array[x*3+y];
  390. }
  391.  
  392.  
  393. void render(){
  394.    SDL_RenderClear(renderer);
  395.  
  396.    SDL_SetRenderDrawColor(renderer,255,255,0,255);
  397.    SDL_Rect rectangle;
  398.    rectangle.x = 0;
  399.    rectangle.y = 0;
  400.    rectangle.w = window_x;
  401.    rectangle.h = window_y;
  402.    SDL_RenderFillRect(renderer, &rectangle);
  403.  
  404.  
  405.    /*for(int i=0; i<3; i++)
  406.       for(int j=0; j<3; j++){
  407.          //SDL_SetRenderDrawColor(renderer,colors[array[i*3+j]][0],colors[array[i*3+j]][1],colors[array[i*3+j]][2],255);
  408.          SDL_Rect rectangle;
  409.          rectangle.x = i*window_x/3;
  410.          rectangle.y = j*window_y/3;
  411.          rectangle.w = (i+1)*window_x/3;
  412.          rectangle.h = (j+1)*window_y/3;
  413.          SDL_RenderFillRect(renderer, &rectangle);
  414.  
  415.          SDL_Rect tex_size;
  416.          tex_size.x = 0;
  417.          tex_size.y = 0;
  418.          SDL_Rect toplace;
  419.          //SDL_QueryTexture(display[array[i*3+j]], NULL, NULL, &tex_size.w, &tex_size.h);
  420.          toplace.x = i*window_x/3;
  421.          toplace.y = j*window_y/3;
  422.          toplace.w = window_x/3;
  423.          toplace.h = window_y/3;
  424.          //SDL_RenderCopyEx(renderer,display[array[i*3+j]],&tex_size,&toplace,0,NULL,SDL_FLIP_NONE);
  425.       }*/
  426.    
  427.    /*SDL_SetRenderDrawColor(renderer,0,0,0,255);
  428.    for(int i=1; i<3; i++){
  429.       SDL_RenderDrawLine(renderer, i*window_x/3, 0, i*window_x/3, window_y);
  430.       SDL_RenderDrawLine(renderer, 0, i*window_y/3, window_x, i*window_y/3);
  431.    }*/
  432.    displayTexture(background, 0, 0, window_x, window_y);
  433.    displayTexture(grid, 19, 49, 556, 557);
  434.    displayTexture(grid, 19+556, 49+557, 556, 557);
  435.    displayTexture(grid, 19+2*556, 49+2*557, 556, 557);
  436.    displayTexture(grid, 19+3*556, 49+3*557, 556, 557);
  437.    //displayTexture(player_image, 0, (int)((player1)*window_y),(int)(player_width*window_x), (int)(player_height*window_y));
  438.    //displayTexture(player_image, window_x-(int)(player_width*window_x), (int)((player2)*window_y),(int)(player_width*window_x), (int)(player_height*window_y),SDL_FLIP_HORIZONTAL);
  439.    SDL_RenderPresent(renderer);
  440. }
  441.  
  442. void loop(){
  443.    //addTile();
  444.    SDL_Event e;
  445.    //csdl_setup->Begin();
  446.    int quit = 0;
  447.    //addTile();
  448.    while (!quit){
  449.       while(!done){
  450.          //if (moved) addTile();
  451.  
  452.          while (SDL_PollEvent(&e)){
  453.             if (e.type == SDL_QUIT) quit = 1;
  454.             else if (e.key.state == SDL_PRESSED) {
  455.                moved = false;
  456.                
  457.                for (int x = 0; x < size; x++)
  458.                   for (int y = 0; y < size; y++)
  459.                      for (int z = 0; z < size; z++)
  460.                         board[x][y][z].blocked = false;
  461.  
  462.                checkKeys(e.key.keysym.sym);
  463.             }
  464.          }
  465.          render();
  466.       }
  467.    }
  468.  
  469. }
  470.  
  471. int main(int argc, char** argv){
  472.    //Our event structure
  473.    init_sdl();
  474.    initialize();
  475.    loop();
  476.  
  477.    return 0;
  478. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement