Monday, November 27, 2017

Sliding Puzzle - A C++ console game on Dev C++

// Sliding puzzle. A C++ console game.  
// Slide the numbers till they are in the correct order.
// Instructions for keyboard keys given on output screen.

#include <iostream>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
#include <iomanip>
#include <time.h>
using namespace std;

char Verify(int A[][4])
{ int val = 0;
  
  for(int i=0; i<4; i++)
  { for(int j=0; j<4; j++)
      if(A[i][j] == (i*4)+(j+1))
        val++;
  }
  if(val == 16)
    return 'Y';
  else
    return 'N';
}

void Display(int A[][4])
{ for(int i=0; i<4; i++)
  { for(int j=0; j<4; j++)
      if(A[i][j] == 16)
        cout << setw(4) << "";
      else
        cout << setw(4) << A[i][j];
    cout << "\n\n";
  }
  cout << "\n\n";
}

void Shuffle(int A[][4],int r, int c, int R, int C)
{ int temp = A[r][c];
  A[r][c] = A[R][C];
  A[R][C] = temp;
}

void Check(int A[][4], int r, int c)
{ if(r == 0)
  { if(c == 0)
    { int Random = rand() % 2;
      (Random == 0)? Shuffle(A, r, c, 0, 1): Shuffle(A, r, c, 1, 0);
    }
    else if(c == 1)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 0, 0): (Random == 1)? Shuffle(A, r, c, 0, 2): Shuffle(A, r, c, 1, 1);
    }
    else if(c == 2)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 0, 1): (Random == 1)? Shuffle(A, r, c, 0, 3): Shuffle(A, r, c, 1, 2);
    }
    else if(c == 3)
    { int Random = rand() % 2;
      (Random == 0)? Shuffle(A, r, c, 0, 2): Shuffle(A, r, c, 1, 3);
    }
  }
  else if(r == 1)
  { if(c == 0)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 0, 0): (Random == 1)? Shuffle(A, r, c, 1, 1): Shuffle(A, r, c, 2, 0);
    }
    else if(c == 1)
    { int Random = rand() % 4;
      (Random == 0)? Shuffle(A, r, c, 0, 1): (Random == 1)? Shuffle(A, r, c, 1, 0): (Random == 2)? Shuffle(A, r, c, 1, 2): Shuffle(A, r, c, 2, 1);
    }
    else if(c == 2)
    { int Random = rand() % 4;
      (Random == 0)? Shuffle(A, r, c, 0, 2): (Random == 1)? Shuffle(A, r, c, 1, 1): (Random == 2)? Shuffle(A, r, c, 1, 3): Shuffle(A, r, c, 2, 2);
    }
    else if(c == 3)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 0, 3): (Random == 1)? Shuffle(A, r, c, 1, 2): Shuffle(A, r, c, 2, 3);
    }
  }
  else if(r == 2)
  { if(c == 0)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 1, 0): (Random == 1)? Shuffle(A, r, c, 2, 1): Shuffle(A, r, c, 3, 0);
    }
    else if(c == 1)
    { int Random = rand() % 4;
      (Random == 0)? Shuffle(A, r, c, 1, 1): (Random == 1)? Shuffle(A, r, c, 2, 0): (Random == 2)? Shuffle(A, r, c, 2, 2): Shuffle(A, r, c, 3, 2);
    }
    else if(c == 2)
    { int Random = rand() % 4;
      (Random == 0)? Shuffle(A, r, c, 1, 2): (Random == 1)? Shuffle(A, r, c, 2, 1): (Random == 2)? Shuffle(A, r, c, 2, 3): Shuffle(A, r, c, 3, 2);
    }
    else if(c == 3)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 1, 3): (Random == 1)? Shuffle(A, r, c, 2, 2): Shuffle(A, r, c, 3, 3);
    }
  }
  else if(r == 3)
  { if(c == 0)
    { int Random = rand() % 2;
      (Random == 0)? Shuffle(A, r, c, 2, 0): Shuffle(A, r, c, 3, 1);
    }
    else if(c == 1)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 2, 1): (Random == 1)? Shuffle(A, r, c, 3, 0): Shuffle(A, r, c, 3, 2);
    }
    else if(c == 2)
    { int Random = rand() % 3;
      (Random == 0)? Shuffle(A, r, c, 2, 2): (Random == 1)? Shuffle(A, r, c, 3, 1): Shuffle(A, r, c, 3, 3);
    }
    else if(c == 3)
    { int Random = rand() % 2;
      (Random == 0)? Shuffle(A, r, c, 2, 3): Shuffle(A, r, c, 3, 2);
    }
  }
}

int main()
{ char ch;
  int A[4][4] = { {  1,  2,  3,  4 },
                  {  5,  6,  7,  8 },
                  {  9, 10, 11, 12 },
                  { 13, 14, 15, 16 },
                };
  
  int AtRow, AtCol;
  srand(time(NULL));
  
  for(int ctr=0; ctr<100; ctr++)
  { for(AtRow=0; AtRow<4; AtRow++)
    { for(AtCol=0; AtCol<4; AtCol++)
       { if(A[AtRow][AtCol] == 16)
           Check(A, AtRow, AtCol);
       }
    }
  }
  Display(A);
  cout << "This is your starting grid\n\n";
  cout << "Press 'I' to move number up.\n";
  cout << "Press \'J\' to move number left.\n";
  cout << "Press \'L\' to move number right.\n";
  cout << "Press \'K\' to move number down.\n\n";
  cout << "Press any key to start game.\n\n\n";
  getch();
   
  system("CLS");
  int FoundAtRow, FoundAtCol;
  
  while(1)
  { Display(A);
    char ch = getch();
    for(int i=0; i<4; i++)
    { for(int j=0; j<4; j++)
        if(A[i][j] == 16)
        { FoundAtRow = i;
          FoundAtCol = j;
        }
    }

    if(toupper(ch) == 'I')  // UP
    { if(FoundAtRow != 3)
        Shuffle(A, FoundAtRow+1, FoundAtCol, FoundAtRow, FoundAtCol);
    }
    else if(toupper(ch) == 'K')  // DOWN
    { if(FoundAtRow != 0)
        Shuffle(A, FoundAtRow-1, FoundAtCol, FoundAtRow, FoundAtCol);
    }
    else if(toupper(ch) == 'J')  // LEFT
    { if(FoundAtCol != 3)
        Shuffle(A, FoundAtRow, FoundAtCol+1, FoundAtRow, FoundAtCol);
    }
    else if(toupper(ch) == 'L')  // RIGHT
    { if(FoundAtCol != 0)
        Shuffle(A, FoundAtRow, FoundAtCol-1, FoundAtRow, FoundAtCol);
    }
    
    system("CLS");

    char val = Verify(A);
    if(val == 'Y')
    { Display(A);
      cout << "CONGRATULATIONS!!";
      getch();
      break;
    }
  }
  
  getch();
}

No comments:

Post a Comment