Newb Help: Full Arrays and Functions
Hey,
I'm trying to make a simple game that has a 6x6 grid of numbers 1-36, it asks the player to submit 6 numbers, and for each number it will eliminate the row and column that number was in so none of those numbers can be selected after that.
I'm having trouble understanding how to transfer or reference an entire array as opposed to just a single number out of one (if that's possible at all), and how to get those to work with functions.
My coding does load up for me, and it works more or less correctly except it doesn't do the elimination part, which is where the full arrays are being used.
Here's the coding as I have it now, any and all feedback is greatly appreciated.
Code:
/* simple little math game that takes six numbers,
each selection eliminates the row and column from which it was selected.
This project was begun mid-morning Jan 18, 2008 */
#include <stdio.h>
void elim( int *subNum, int *row1, int *row2, int *row3, int *row4, int *row5, int *row6, int *col1, int *col2, int *col3, int *col4, int *col5, int *col6 );
void show_grid ( int *r1, int *r2, int *r3, int *r4, int *r5, int *r6 );
int main()
{
int currentNumber, number1, number2, number3, number4, number5, number6, guess, total, x;
char name[256];
/* This is setting up the grid, so that each number is a member of a column and a row. */
int row1[6] = {1, 2, 3, 4, 5, 6};
int row2[6] = {7, 8, 9, 10, 11, 12};
int row3[6] = {13, 14, 15, 16, 17, 18};
int row4[6] = {19, 20, 21, 22, 23, 24};
int row5[6] = {25, 26, 27, 28, 29, 30};
int row6[6] = {31, 32, 33, 34, 35, 36};
int col1[6] = {1, 7, 13, 19, 25, 31};
int col2[6] = {2, 8, 14, 20, 26, 32};
int col3[6] = {3, 9, 15, 21, 27, 33};
int col4[6] = {4, 10, 16, 22, 28, 34};
int col5[6] = {5, 11, 17, 23, 29, 35};
int col6[6] = {6, 12, 18, 24, 30, 36};
/* This is the number that the game will guess. It isn't supposed to change. */
guess = 111;
/* This section introduces the idea of the game */
printf( "Hi, What is your name?\n" );
fgets ( name, 256, stdin );
/* Just getting rid of the default \n at the end for later */
for ( x = 0; x < 256; x++ )
{
if ( name[x] == '\n' )
{
name[x] = '\0';
break;
}
}
printf( "I want to play a game.\n" );
getchar();
printf( "I will show you a grid of numbers; you pick any number, and I will eliminate the row and column that number was in.\n" );
getchar();
printf( "you choose six numbers, and I will guess the sum of those numbers before you even pick the first, okay? \n" );
show_grid(row1, row2, row3, row4, row5, row6);
printf( "I think that the total of your six numbers will be %d.\n", guess );
getchar();
printf( "So enter your first number, cowboy.\n" );
scanf( "%d", &number1 );
currentNumber = number1;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
/* This is to make sure the correct number is stored in memory for later (ref: elim loop) */
number1 = currentNumber;
show_grid( row1, row2, row3, row4, row5, row6);
printf( "Enter your second number\n" );
scanf( "%d", &number2 );
currentNumber = number2;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
number2 = currentNumber;
show_grid( row1, row2, row3, row4, row5, row6);
printf( "Enter your third number\n" );
scanf( "%d", &number3 );
currentNumber = number3;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
number3 = currentNumber;
show_grid( row1, row2, row3, row4, row5, row6);
printf( "Enter your fourth number\n" );
scanf( "%d", &number4 );
currentNumber = number4;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
number4 = currentNumber;
show_grid( row1, row2, row3, row4, row5, row6);
printf( "Enter your fifth number\n" );
scanf( "%d", &number5 );
currentNumber = number5;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
number5 = currentNumber;
show_grid( row1, row2, row3, row4, row5, row6);
printf( "Enter your final number\n" );
scanf( "%d", &number6 );
currentNumber = number6;
elim(¤tNumber, row1, row2, row3, row4, row5, row6, col1, col2, col3, col4, col5, col6);
number6 = currentNumber;
/* This part just adds the numbers together, and shows the player the numbers
they chose so they can do it themselves if they'd like */
total = number1 + number2 + number3 + number4 + number5 + number6;
printf( "well %s\n", name );
printf( "you chose the numbers %d, %d, %d, %d, %d and %d", number1, number2, number3, number4, number5, number6 );
getchar();
printf( "The total of those numbers are %d\n", total );
getchar();
if(total == guess)
printf( "Ha! I guessed right! I win!\n" );
else
printf( "Wow, I guess I'm not as good at this game as I thought I was.\n Good Job %s, you beat me.\n", name );
getchar();
return 0;
}
/* This is the function to display the grid. It should update itself based on what numbers have been eliminated. */
void show_grid (int *r1, int *r2, int *r3, int *r4, int *r5, int *r6)
{
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r1[0], r1[1], r1[2], r1[3], r1[4], r1[5]);
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r2[0], r2[1], r2[2], r2[3], r2[4], r2[5] );
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r3[0], r3[1], r3[2], r3[3], r3[4], r3[5] );
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r4[0], r4[1], r4[2], r4[3], r4[4], r4[5] );
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r5[0], r5[1], r5[2], r5[3], r5[4], r5[5] );
printf( "-------------------------------\n" );
printf( "| %d | %d | %d | %d | %d | %d |\n", r6[0], r6[1], r6[2], r6[3], r6[4], r6[5] );
printf( "-------------------------------\n" );
}
/* This eliminates the rows and columns of numbers based on what the player has selected */
void elim( int *subNum, int *row1, int *row2, int *row3, int *row4, int *row5, int *row6, int *col1, int *col2, int *col3, int *col4, int *col5, int *col6 )
{
int validNum = 0, number, counter;
while (validNum != 1) {
if( *subNum == *col1 ) {
*col1 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *col2 ) {
*col2 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *col3 ) {
*col3 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *col4 ) {
*col4 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *col5 ) {
*col5 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *col6 ) {
*col6 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else {
printf( "That number is not a valid selection. Pick a new one\n" );
getchar();
printf( "Enter your number\n" );
scanf( "%d", &number );
*subNum = number;
}
}
validNum = 0;
while (validNum != 1) {
if( *subNum == *row1 ) {
*row1 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *row2 ) {
*row2 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *row3 ) {
*row3 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *row4 ) {
*row4 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *row5 ) {
*row5 = 0, 0, 0, 0, 0, 0;
validNum = 1;
}
else if( *subNum == *row6 ) {
*row6 = 0, 0, 0, 0, 0, 0;
validNum = 1;
break;
}
else {
printf( "That number is not a valid selection. Pick a new one\n" );
getchar();
printf( "Enter your number\n" );
scanf( "%d", &number );
*subNum = number;
}
}
validNum = 0;
}
Nothing like jumping in headfirst in the deep end to learn a programming language. Heh.