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;
    }

Recommended Answers

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));

already

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, networking, learning, and sharing knowledge.