Showing posts with label Full Version Games in C Program. Show all posts
Showing posts with label Full Version Games in C Program. Show all posts

Sunday, December 27, 2015

15 Puzzle Game in C Program

Program #36

Description:
15 Puzzle Game with full source source.  By Default program will load 1-15 number in randomly in 4x4 matrix.  User can use Arrow Keys (Up, Left, Right and Down) to arrange the Number in a proper order starts from 1,1 to 4,3.  Once all the values are arranged then Program will ends. 

Help Option !!  Free Moves option introduced to help user when user stuck!! By pressing ENTER key system will arrange next SEQUENCE number and use can continue the game!!.  Free Move is present in Defined constant and By default as 3 free moves.

Invalid Arrow Option!!  Program will dynamically display the Current Keypress in a User friendly manner and if user press invalid Arrow Key it will display it accordingly !!

Move Count!!  Program will count the Total number of Valid Key press and it will show in a User friendly manner and in case Invalid Key pressed, system will not counter it!!  In case user uses Free Move then only the Move Counter will get incremented to 1.. That's not a Problem!!

/*
15 Puzzle Problem in C
15 Puzzle Game Online
15 Puzzle Game Source Code in C
15 Puzzle Game using C Program
15 Puzzle Simple Animation Program using C
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#include <dos.h>

/* Defined Constants */
#define true  1;
#define false 0;
#define FREE_MOVES 3;

/* Global Variable Declaration */
int puzArr[5][5], row=1, column=1;
int curRow=4, curCol=4, totalMoves=0, freeMoves=0;

/* Global Prototype Declaration */
int getRandVal();
int setRandVal(int);
void clearScreen(int);
void draw15PuzzleBox();
void movePosition(int);
void swapValue(int,int);
void printPosition(char *);
int IsDone(void);

void main(){
  char inputKey, arrowKey;

  /* Local Prototype Declaration */
  int loadDefaultData();
  void resetRowColumn();
  void printTotalMoves();
  void printTotalFREEMoves();
  int doFREEMove();

  /* Clear the Screen */
  clrscr();

  /* Randomize */
  randomize();

  /* Set Free Moves */
  freeMoves = FREE_MOVES;

  /* Load Default Data */
  gotoxy(1,1);
  printf("Please wait.. Loading Data !!");
  loadDefaultData();

  /* Print Loaded Data */
  draw15PuzzleBox();
  /* Detect Arrow Keys in C Program
     Press ESCAPE - 27
     Press ENTER  - 13
     Get out from the Indefinite loop
  */
  while ( (inputKey = getch()) != 27){

    /* Set Default Text color as WHITE */
    textcolor(15);
    clrscr();

    /* Find Arrow Key or not */
    if (inputKey == '\0'){

      /* Extract actual Arrow Key */
      arrowKey = getch();
      switch(arrowKey){
 case 72:
   movePosition(72);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 80:
   movePosition(80);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 75:
   movePosition(75);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

 case 77:
   movePosition(77);
   draw15PuzzleBox();
   printTotalMoves();
   printTotalFREEMoves();
   break;

      }
    } else if (inputKey == 13){
      //printf("Enter key pressed..");
      clrscr();
      if (freeMoves > 0){
 doFREEMove();

 /* Increment Moves */
 totalMoves++;
 draw15PuzzleBox();
 printTotalMoves();
 printTotalFREEMoves();
      } else {
 draw15PuzzleBox();
 printTotalMoves();
 printTotalFREEMoves();
      }
    }

    /* Check 15-Puzzle Completion */
    if (IsDone()) {

      /* Clear the Screen and Announce the Result */
      clrscr();

      /* Print Total Moves */
      printTotalMoves();
      gotoxy(35, 13);
      textcolor(2);
      printPosition("Great!!");
      getch();

      /* Smoothly End the Program Execution ;) */
      exit(1);
    }
  }
}
/* Assign Random Value */
int loadDefaultData(){
  int i=1, j=1, randVal;

  /* Custom Clear Screen
   0 - Row Wise Clear
   1 - Column Wise Clear
   */
  randVal = random(1);
  clearScreen(randVal);
  for (; i<=4;) {
    for (; j<=4;) {

      /* Draw Puzzle Box */
      draw15PuzzleBox();
      /* get Random value */
      randVal = getRandVal();
      if ( setRandVal(randVal) ){

 /* Set the Next Value */
 puzArr[i][j] = randVal;

 /* Increment next Column */
 column = j;
 j++;

 /* Check Is all 15 values set */
 if (i==4 && j==4) {

   /* Set Zero to Final Position */
   puzArr[i][j] = 0;
   movePosition(0);
   return 1;
 }
      }
    }

    /* increment to Next Row */
    row = i;
    i++;

    /* Re-initialize the Column value */
    j=1;
  }

  /* Normal Data Load Completion */
  return 1;
}

/* Get a Random Number from 1 to 15 */
int getRandVal(){
  int i, randVal;
  int dataArr[15];
  for (i=0; i<15; i++){
    dataArr[i] = i+1;
  }
  randVal = random(15);
  randVal = dataArr[randVal];
  return randVal;
}

/* Check and Set a Random Value to next EMPTY position */
int setRandVal(int checkVal){
   int i, j;
   for (i=1; i<=4; i++){
     for (j=1; j<=4; j++) {

 /* Is this value already present and Allocated */
 if (puzArr[i][j] == checkVal) {
   return false;
 }
     }
   }

   /* Yes, We got a next Rand value for Next position */
   return true;
}

/* Draw the Current Data */
void draw15PuzzleBox() {
  int i, j, charPos=177, row=3;
  //int charSmile=2;

  /* Make Position to Draw the 15-Puzzle Box */
  gotoxy(3, row++);
  for (i=1; i<=20;i++) printf("%c",charPos);
  gotoxy(3, row);
  printf("%c", charPos);
  gotoxy(4, row++);
  for (i=1; i<=18;i++) printf(" ");
  printf("%c", charPos);

  for(i=1; i<=4; i++){
    gotoxy(3, row++);
    printf("%c", charPos);
    for(j=1; j<=4; j++){
      if (puzArr[i][j]){
 printf("%4d", puzArr[i][j]);
      } else {

 //printf("%4c",charSmile);
 printf("    ");
      }
    }
    printf("  %c", charPos);
  }
  gotoxy(3, row);
  printf("%c", charPos);
  gotoxy(4, row++);
  for (i=1; i<=18;i++) printf(" ");
  printf("%c", charPos);
  gotoxy(3, row++);
  for (i=1; i<=20;i++) printf("%c",charPos);

  /* Show Current Position Information */
  gotoxy(35, 13);
}

/* Clear the Screen */
void clearScreen(int rowOrColumn){
 int i, j;
 for(i=1; i<= 25; i++){
  for (j=1; j<=80; j++){

    /* Row Wise - 0 */
    if (rowOrColumn == 0){
 gotoxy(i, j);
    }

    /* Column Wise - 1 */
    else if (rowOrColumn == 1){
 gotoxy(j, i);
    }
    printf(" ");
  }
  delay(10);
 }

 /* Show Current Position Information */
  gotoxy(35, 13);
}

/* Reset Global Row & Column */
void resetRowColumn(){
  row    = 1;
  column = 1;
}

/* Move position */
void movePosition(int pos){
  int iRow, iCol;

  /* Keep Current Row & Column Positions for SWAP */
  iRow = curRow;
  iCol = curCol;

  /* Show Current Position Information */
  gotoxy(35, 13);
  if (pos == 0) {

    /* Set Color as LightGreen */
    textcolor(10);
    printPosition("READY ?");
  }

  /* Up - 72 */
  else if (pos == 72) {
    if (curRow<4) {
      curRow++;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      //printf("UP (%d,%d)             ", curRow, curCol);
      printPosition("  UP   ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Down - 80 */
  else if (pos == 80) {
    if (curRow>1) {
      curRow--;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" DOWN  ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Left - 75 */
  else if (pos == 75) {
    if (curCol<4) {
      curCol++;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" LEFT  ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }

  }

  /* Right - 77 */
  else if (pos == 77) {
    if (curCol>1) {
      curCol--;

      /* Ok, Do Swap */
      swapValue(iRow, iCol);

      /* Increment Total Move */
      totalMoves++;
      printPosition(" RIGHT ");
    } else {

      /* Set Text color as RED */
      textcolor(4);
      printPosition("INVALID");
    }
  }
}

/* Swap the Value */
void swapValue(int prevRow, int prevCol){
  int prevValue, curValue;

  /* getCurrent Swap Value */
  prevValue = puzArr[prevRow][prevCol];
  curValue  = puzArr[curRow][curCol];

  /* Swap it, Simply !! */
  puzArr[prevRow][prevCol] = curValue;
  puzArr[curRow][curCol]  = prevValue;

  /* Draw Puzzle Box */
  draw15PuzzleBox();
}

/* Check 15-Puzzle Completion */
int IsDone(){
  int i, j, iSequence=1;
  for (i=1; i<=4; i++) {
    for (j=1; j<=4; j++) {
      if (puzArr[i][j] != iSequence) {
 return false;
      }

      /* Done, That's it!! */
      if (iSequence == 15){
 return true;
      }
      iSequence++;
    }
  }

  /* Yes, You have done the Magic !! */
  return true;
}

/* Print Total Moves */
void printTotalMoves(){
  int i, charPos=176, heart=3;
  gotoxy(38, 3);
  for (i=1; i<=18;i++) printf("%c",charPos);
  gotoxy(38, 4);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 5);
  printf("%c  T%ctal M%cves:  %c",charPos, heart, heart, charPos);
  gotoxy(38, 6);
  printf("%c     %4d       %c",charPos, totalMoves, charPos);
  gotoxy(38, 7);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 8);
  for (i=1; i<=18;i++) printf("%c",charPos);
}

/* Print Position in Text */
void printPosition(char *position){
  int i, charPos=176;
  gotoxy(38, 12);
  for (i=1; i<=18;i++) printf("%c",charPos);
  gotoxy(38, 13);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 14);
  cprintf("%c    %7s     %c",charPos, position, charPos);
  gotoxy(38, 15);
  printf("%c                %c",charPos, charPos);
  gotoxy(38, 16);
  for (i=1; i<=18;i++) printf("%c",charPos);
}

/* Total Free Moves */
void printTotalFREEMoves(){
  int i, row=14, charPos=176, smile=3;
  gotoxy(6, row++);
  for (i=1; i<=25;i++) printf("%c",charPos);
  gotoxy(6, row++);
  printf("%c                       %c",charPos, charPos);
  if (freeMoves > 0) {
    gotoxy(6, row++);
    printf("%c      Fr%c%c M%cves       %c",charPos, smile, smile, smile, charPos);
    gotoxy(6, row++);
    printf("%c%11d            %c",charPos, freeMoves, charPos);
  }
  if (freeMoves > 0) {
    gotoxy(6, row++);
    printf("%c      Press ENTER      %c",charPos, charPos);
    gotoxy(6, row++);
    printf("%c     Get FREE Move     %c",charPos, charPos);
  } else {
    gotoxy(6, row++);
    printf("%c     -NO FREE Move-    %c",charPos, charPos);
  }
  gotoxy(6, row++);
  printf("%c                       %c",charPos, charPos);
  gotoxy(6, row++);
  for (i=1; i<=25;i++) printf("%c",charPos);

}

/* Do FREE Move - Help When User Stuck!! */
int doFREEMove(){
  int i, j, k, l, iSequence=1, toSwap;
  for (i=1; i<=4; i++) {
    for (j=1; j<=4; j++) {
      if (puzArr[i][j] != iSequence) {

 /* get iSequence value's Row & Column */
 for (k=1; k<=4; k++){
   for (l=1; l<=4; l++) {
     if (puzArr[k][l] == iSequence){

       /* Do FREE Swap */
       toSwap = puzArr[i][j];
       puzArr[i][j]=iSequence;
       puzArr[k][l]=toSwap;
       freeMoves--;
       return true;
     }
   }
 }
      }
      iSequence++;
    }
  }

  /* Yes, You have done the Magic !! */
  return true;
}




 

Friday, December 18, 2015

DOT Magic Game using C Program


Program #32


/*
 **********************
 * DOT MAGIC GAME *
 **********************

 Make 5 dots randomly in different (x,y) positions in the Screen
 Also Program will dynamically show the progress using Progress Bar Logic

 1. Program will show the Dynamic Dots
 2. User need to touch the dots using Arrow Keys (UP, DOWN, LEFT and RIGHT)
 3. System will calculate time and
 4. Show the Time taken by the User to finish the Game

 ** C Program **
*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>

/* Defined constants */
#define MAXDOTS 10;
#define ASCII_POSITION  122;
#define PROGRESS_ROW     13
#define PROGRESS_COLUMN  28
#define DISPLAY_DOT_INPROGRESS 0

/* !Important!
This Program defines the Progress Bar ASCII Positions as
79, 80, 81 and 122
79  - illusion Progress Bar
122 - Completion Progress Bar
*/
/* Global variable declaration */
int row=1, col=1, remainingDots, rowTrack[10], colTrack[10];

/* Global function declaration */
char getAscii(int);
void initialMessage();
int main(){

  /* Local variable declaration */
  int counter=0, dupCheck=0, maxDots, flagDisplayDot;
  char asciiChar, inputKey, arrowKey;
  clock_t startTime, stopTime;

  /* Function Prototype declaration */
  void getX();
  void getY();
  int duplicateCheck(int, int);
  void printCoOrdinates();
  void drawProgressBar(int);
  void percentCompleted();
  void illusionProgressBar();
  void printExecutionTime(clock_t);
  void printDotsOnCoOrdinates();
  void moveUp();
  void moveDown();
  void moveLeft();
  void moveRight();

  /* Clear the Screen */
  clrscr();

  /* Start Execution Time */
  startTime = clock();

  /* Assign Remaining Dots using Defined value */
  remainingDots = MAXDOTS;

  /* Print Initial Message to the User */
  initialMessage(" ", 0, 0, 0);

  /* Print illusion Progress Bar */
  illusionProgressBar();

  /* Clear Inbut Buffer */
  //fflush(stdin);

  /* Indefinite loop */
  for (;!kbhit(); ){

    /* Randomize */
    randomize();

    /* get a next random (x,y) position */
    getX();
    getY();

    /* Initial value to Duplicate check */
    dupCheck = 0;

    /* Track Positions, avoid duplicate co-ordinates */
    if ( !duplicateCheck(row, col) ){

      /* no duplicate matched */
      dupCheck = 1;
    }

    if (dupCheck == 1){
      /* Sets current position to Positioning Array */
      rowTrack[counter] = row;
      colTrack[counter] = col;

      /* Increase DOT counter */
      counter++;
    }

    /* Draw Progress Bar about the Processing */
    drawProgressBar(counter);

    /* Print Percentage Completed */
    percentCompleted(counter);
    if (dupCheck == 1){
      flagDisplayDot = DISPLAY_DOT_INPROGRESS;
      if (flagDisplayDot == 1) {

 /* Move Cursor to random position */
 gotoxy(col, row);
 printf("*");
      }
    }
    maxDots = MAXDOTS;
    if (counter==maxDots){

      /* Clear the Screen and Print Dynamic Co-Ordinates */
      clrscr();
      initialMessage(" Processing Completed!", 30, 50, 0);
      initialMessage(" Your task to Clear all DOTS appear in the Screen!", 15, 50, 0);
      initialMessage(" Use KeyBoard Direction Keys (UP, DOWN, LEFT and RIGHT Arrows!!", 5, 50, 0);
      initialMessage(" Press ESCAPE to EXIT!!", 35, 50, 0);
      initialMessage(" Your time starts Now!!", 30, 50, 0);
      clrscr();
      printDotsOnCoOrdinates();
      //printCoOrdinates();

   /* Reset Row and Column Global Position and allow user to Start the Game */
   row = rowTrack[0];
   col = colTrack[0]-1;
   gotoxy(col, row);

   /* Start New Time before Game Starts */
   startTime = clock();

   /* Detect Arrow Keys in C Program
   Press ESCAPE - 27 to
   Get out from the Indefinite loop
   */
   while ( (inputKey = getch()) != 27){

  /* Display Execution time */
  printExecutionTime(startTime);

  /* Find Arrow Key or not */
  if (inputKey == '\0'){

    /* Extract actual Arrow Key */
    arrowKey = getch();
    switch(arrowKey){
  case 72:
     //printf("UP");
     moveUp();
     break;
  case 80:
     //printf("DOWN");
     moveDown();
     break;
  case 75:
     //printf("LEFT");
     moveLeft();
     break;
  case 77:
     //printf("RIGHT");
     moveRight();
     break;
    } /* End switch(arrowKey){ */
  } /* End if (inputKey == '\0'){ */
   } /* End of While loop */

   /* Once user press ESCAPE, Game Ends */
   break;

    } /* End if (counter==maxDots){ */
     /* Display Execution time */
     printExecutionTime(startTime);
  }
  return 1;
}

void checkDotsandMessage(){
  int i, maxDots;
  /* maxDots using Defined value */
  maxDots = MAXDOTS;
  for (i=0; i<maxDots; i++) {
    /* Check Task Completion Status */
    if (rowTrack[i] == 0 && colTrack[i] == 0) {
      //break;
    }
    if (rowTrack[i] == row && colTrack[i] == col){
      /* Decrement Remaining DOTS counter */
      remainingDots--;
      /* Print Specific Dot Completion */
      if (remainingDots <= 0) {
 /* Clear last DOT */
 gotoxy(col, row);
 printf(" ");
 initialMessage(" WOW !", 40, 200, 0);
 initialMessage("Game Ends, Bye !!", 33, 20, 0);
 /* Game ENDS on Completion of DOT tasks */
 getch();
 exit(0);
      }
      /* Clear Dynamic Position, once completed the Task */
      rowTrack[i] = 0;
      colTrack[i] = 0;
      break;
    }
  }
}

/* Move Up and Clear Data on the Position */
void moveUp(){
  gotoxy(col, row);
  printf(" ");
  if (row==1) {
    row = 25;
  } else if (row > 1) {
    row--;
  }
  /* Move to lastest */
  gotoxy(col, row);
  /* identify Right DOTS */
  checkDotsandMessage();
}

/* Move Down and Clear Data on the Position */
void moveDown(){
  gotoxy(col, row);
  printf(" ");
  if (row == 25) {
    row = 1;
  } else if (row <= 25) {
    row++;
  }
  /* Move to lastest */
  gotoxy(col, row);
  /* identify Right DOTS */
  checkDotsandMessage();
}

/* Move Left and Clear Data on the Position */
void moveLeft(){
  gotoxy(col, row);
  printf(" ");
  if (col == 1) {
    col = 80;
  } else if (col > 1) {
    col--;
  }
  /* Move to lastest */
  gotoxy(col, row);
  /* identify Right DOTS */
  checkDotsandMessage();
}

/* Move Right and Clear Data on the Position */
void moveRight(){
  gotoxy(col, row);
  printf(" ");
  if (col == 80) {
    col = 1;
  } else if (col < 80) {
    col++;
  }
  /* Move to lastest */
  gotoxy(col, row);
  /* identify Right DOTS */
  checkDotsandMessage();
}

/* Print Dots on dynamic co-ordinates */
void printDotsOnCoOrdinates(){
  int i=0, rowPos, colPos, maxDots;
  /* maxDots using Defined value */
  maxDots = MAXDOTS;
  /* Print the Result from 1st Row to 5th Row */
  for (; i<maxDots; i++) {
    rowPos = rowTrack[i];
    colPos = colTrack[i];
    gotoxy(colPos, rowPos);
    printf("*");
  }
}

/* Print Execution Time */
void printExecutionTime(clock_t startTime){
   double execTim;
   int i, finalSec, color;
   clock_t stopTime = clock();
   /* Convert Milliseconds into Seconds, for user friendly */
   execTim =  ((double)(stopTime-startTime))/CLOCKS_PER_SEC;
   finalSec = (int)execTim;
   /* Hide Time in case if is behaves wrongly */
   if(finalSec > 0){
     gotoxy(65, 1);
     /*  print execution message */
     printf("Time: %d sec(s)",finalSec);
     /* Draw underline to the Time */
     for(i=65; i< 80; i++){
       gotoxy(i, 2);
       printf("-");
     }
   }
}

/* Print illusion Progress Bar, for User Friendly ;) */
void illusionProgressBar(){
 int i, columnPos, rowPos, dynamicProgress;
 char asciiVal;
 /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN;
  rowPos    = PROGRESS_ROW;
  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = 30;
  /* Get Ascii character */
  asciiVal = getAscii(79);
  /* default progress bar position */
  for(i=0; i<dynamicProgress; i++){
   gotoxy(columnPos++, rowPos);
   printf("%c",asciiVal);
   /* Add delay to draw illusion progress bar, smoothly */
   delay(10);
  }
}

/* Print Percentage Completion */
void percentCompleted(int completion){
 int columnPos, rowPos, dynamicProgress;
 /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN + 27;
  rowPos    = PROGRESS_ROW;
  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = completion * 10;
  /* Positioning % completion */
  gotoxy(columnPos, rowPos);
  printf("%d% Completed", dynamicProgress);
}

/* Draw Progress Bar to show Current Completion status to the User */
void drawProgressBar(int completion){
  int i, columnPos, rowPos, dynamicProgress;
  char asciiVal;
  /* get Default Row, Column Position */
  columnPos = PROGRESS_COLUMN;
  rowPos    = PROGRESS_ROW;
  /* Dynamic Progress Bar length using Completion % */
  dynamicProgress = completion * 3;
  /* Get Ascii character */
  asciiVal = getAscii(0);
  /* default progress bar position */
  gotoxy(columnPos, rowPos);
  for(i=0; i<dynamicProgress; i++){
   gotoxy(columnPos++, 13);
   printf("%c",asciiVal);
   /* Add delay to draw progress bar, smoothly */
   delay(100);
  }
}

/* Print Intial Message to the User */
void initialMessage(char *messageToPrint, int newColumn, int messageDelay, int printRes){
  char *plsMessage = "Please wait ... (Press ANY Key to Exit)";
  int i, columnPos=20, timeDelay=50;
  /* Re-use the function to print different message purpose */
  if ( strcmp(messageToPrint, " ") != 0){
    plsMessage = messageToPrint;
  }
  /* Overwrite Column Position based on Text to make it Center */
  if (newColumn != 0){
    columnPos = newColumn;
  }
  /* Overwrite Delay based on Text to print in slow/fast */
  if (messageDelay != 0){
    timeDelay = messageDelay;
  }
  /* Blank out the whole row to print new text */
  for(i=1; i<=80; i++){
    gotoxy(i, 12);
    printf(" ");
  }

  /* print Remaining Dot Counter */
    if (printRes != 0 && remainingDots > 0){
      gotoxy(columnPos++,12);
      printf("%d ", remainingDots);
    }
  for(i=0; i<strlen(plsMessage); i++){
    gotoxy(columnPos++,12);
    printf("%c",plsMessage[i]);
    delay( timeDelay );
  }
}

/* Print dynamic co-ordinates */
void printCoOrdinates(){
  int i=0, maxDots;
  /* maxDots using Defined value */
  maxDots = MAXDOTS;
  /* Print the Result from 1st Row to 5th Row */
  for (; i<maxDots; i++) {
    gotoxy(1,(i+1));
    printf("Dynamic Position #%d: (%d,%d)", (i+1), colTrack[i], rowTrack[i]);
  }
}

/*
  get Random x position
  'x' means column value
*/
void getX() {
  int x=1;
  x = random(80);
  /* randVal range from 0 to 99
   but we are expecting COLUMN value
   but it ranges from 1 to 80 only */
  if (x<1 || x>80){
    getX();
  }
  col = x;
}

/*
  get Random y position
  'y' means row value
*/
void getY() {
  int y=1;
  /* get random for Row */
  y = random(25);
  /* randVal range from 0 to 99
   but we are expecting ROW value
   but it ranges from 3 to 25 only
   Row Number 1 and 2 - Used to Print
   a. Execution Time
   b. User time taken
   To avoid clashes.. !!
   */
  if (y<3 || y>25){
    getY();
  }
  row = y;
}

/* Duplicate Position Check */
int duplicateCheck(int r, int c) {
  int i, maxDots;
  int rowMatch=0, colMatch=0;
  /* maxDots using Defined value */
  maxDots = MAXDOTS;
  /* check Row Value match with Existing Value */
  for (i=0; i<maxDots; i++) {
     if (rowTrack[i] == r){
       rowMatch = 1;
     }
  }
  /* check Column Value match with Existing Value */
  for (i=0; i<maxDots; i++) {
     if (colTrack[i] == c){
       colMatch = 1;
     }
  }
  if (rowMatch == 0 && colMatch == 0) {
    return 0;
  }
  return 1;
}

/* Iterate the loop until expected ASCII character */
char getAscii(int overWritePos){
  int i, ascii_pos;
  /* Default position to the Ascii, !Important! */
  char cc='a';
  /* Assign default character position */
  ascii_pos = ASCII_POSITION;
  /* Overwrite Ascii Position, if function gets some position */
  if (overWritePos != 0){
    ascii_pos = overWritePos;
  }
  for (i=0; i<256; i++) {
    /*  Break the Loop, once we got the Character */
    if (i == ascii_pos)  break;
    cc = cc + 1;
  }
  return cc;
}








 

Popular Posts