Hey, so im trying to make a memory game using 2d arrays.

This is my code to randomly generate the rows and columns but its not giving me pairs, could someone tell me why, i really dont know.

``````for (int r=0; r<4; r++)
{
for (int c=0; c<4; c++)
{
cards[r][c]=rand()%8+1;
cout<<cards[r][c];
}
cout<<endl;
}``````

## All 8 Replies

You forget to initialize random seed:

``srand ( time(NULL) );``

and this:

``cards[r][c]=rand()%8+1;``

gives you just one random number.

pecet is correct. Also, don't forget to #include <ctime> so that you can use the time() function.

-D

so i have

``srand((unsigned)time(NULL));``

so what would be the easiest way to generate pairs of random numbers (single digit from 1-9) then?

yep i have ctime already as well, this is just a snippit of my code for generating pairs but im really not sure why it doesnt work

OK first off I would like to say this is not that great of a way to do it but it works. This generates pairs of numbers from 1-8 at random locations in your matrix (I picked 1-8 because you have a 4x4 matrix) and thats pretty much it.

``````#include <iostream>
#include <time.h>

using namespace std;

int main()
{
int cards[4][4];
bool makeNext = false;
memset(cards, 0, sizeof(cards));
srand(time(NULL));

for( int i = 1; i < 9; i++ )
{
makeNext = false;
while(!makeNext)
{
int x1, y1, x2, y2;
x1 = rand()%4;
y1 = rand()%4;
x2 = rand()%4;
y2 = rand()%4;
if( (x1 != x2 || y1 != y2) && (cards[x1][y1] == 0 && cards[x2][y2] == 0) )
{
cards[x1][y1] = i;
cards[x2][y2] = i;
makeNext = true;;
}
}
}

for( int i = 0; i < 4; i++ )
{
for( int c = 0; c < 4; c++ )
{
cout << cards[i][c] << " ";
}
cout << endl;
}

system("PAUSE");
return 0;
}``````

why not do something like this:

``````#include<iostream>
#include<time.h>
using namespace std;
int main()
{
int random[2];
srand ((unsigned)time(0));
for(int x=0;x<2;x++)
{
random[x] = (rand() % 8) + 1;
cout << random[x] << " ";
}
cout << endl;
}``````

Edit: Oops, I read it to fast, you want random PAIRS, sorry. Here is the modified code that will print out pairs.

``````#include<iostream>
#include<time.h>
using namespace std;
int main()
{
int random[2];
for(int x=0;x<2;x++)
{
srand ((unsigned)time(0));
random[x] = (rand() % 8) + 1;
cout << random[x] << " ";
}
cout << endl;
}``````

In this code random[0] and random[1] are two different numbers. If you would like more pairs simply copy and past with random2[0] and random2[1].

So i have the thing almost completed but since i have been looking at it for the past 12 hours i know im missing something stupid....

Why is it that the code just outputs zeros even when you pick two matching values

``````#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main()
{
char comma;
int row1, column1, row2, column2, cards[4][4], cards_unflipped[4][4] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} , counter(0);

srand((unsigned)time(NULL));

//fill board with pairs
bool makeNext = false;
bool nullexists = true;
memset(cards, 0, sizeof(cards));
srand(time(NULL));

for( int i = 1; i < 9; i++ )
{
makeNext = false;
while(!makeNext)
{
int x1, y1, x2, y2;
x1 = rand()%4;
y1 = rand()%4;
x2 = rand()%4;
y2 = rand()%4;
if( (x1 != x2 || y1 != y2) && (cards[x1][y1] == 0 && cards[x2][y2] == 0) )
{
cards[x1][y1] = i;
cards[x2][y2] = i;
makeNext = true;;
}
}
}
for( int i = 0; i < 4; i++ )
{
for( int c = 0; c < 4; c++ )
{
cout << cards[i][c] << " ";
}
cout << endl;
}
//display board
while (nullexists = true)

{
//selection
cout<<"Please select the first card row and column seperated by a comma.\n";
cin>>row1>>comma>>column1;

cout<<"Please select the second card row and column seperated by a comma.\n";
cin>>row2>>comma>>column2;

if (cards[row1][column1]==cards[row2][column2])

{
cards_unflipped[row1][column1] = cards[row1][column1];
cards_unflipped[row2][column2] = cards[row2][column2];

counter = counter++;
if (counter == 8)
{
bool nullexists = false;
}

}

//reveal the flipped cards
cout<<"    1 2 3 4\n";
cout<<"  ";
for (int i=0; i<=8; i++)
{
cout<<"-";
}
cout<<endl;
for (int r=0; r<4; r++)
{
cout<<r+1<<" | ";
for (int c=0; c<4; c++)
{

cout<<cards_unflipped[r][c]<<" ";
}
cout<<endl;
}

}

cout << "You Won!" << endl;

return 0;
}``````

quoting restrictment

1.
#include<iostream>
2.
#include<time.h>
3.
using namespace std;
4.
int main()
5.
{
6.
int random[2];
7.
for(int x=0;x<2;x++)
8.
{
9.
srand ((unsigned)time(0));
10.
random[x] = (rand() % 8) + 1;
11.
cout << random[x] << " ";
12.
}
13.
cout << endl;
14.
}

thanx for that source ... it works fine in dev c++ beta 5
though for a console app ... is there any way i could know about keeping the console window open until a key is pressed to close it
and a key to toggle the random number ? thanx in advance.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, learning, and sharing knowledge.