Tworzenie mapy.

0

Witam mam pewnie problem otoz musze napisac mape ktora bedzie sie rozszerzac. chcialabym zadeklarowac mape na starcie o wymiarach nxn wypelniona zerami. nastepnie podczas rogrywki mapa bedzie wypelniana jedynkami i dwojkami gdy osiagnie wymiary poczatkowe powinna sie poszerzac a do zakonczenia rozgrywki.
bylabym wdzieczna za wszelka pomoc lub poradniki

Prosciej czy dalby rade ktos przetlumaczyc na c++

TXOMap = class
public
Map : array[0..19,0..19] of byte;
LastMove : TMove;
constructor Create();
destructor Destroy(); override;
function CanPut(X,Y : byte):boolean;
function Put(X,Y : byte):boolean;
function WinnerExists():TWinner;
private
Token : byte;
function Sum(X1,Y1,X2,Y2 : byte):byte;
end;

0

http://www.cplusplus.com/reference/map/map/

rozszerza się dynamicznie. Ale chyba o to Ci nie chodziło. Chyba bardziej chodziło Ci po prostu o dwuwymiarową tablicę. Możesz zrobić vector vectorów

http://www.cplusplus.com/reference/vector/vector/

i też się rozszerza dynamicznie.

Jeżeli chcesz sama coś takiego napisać to jak będziesz wychodzić po za zakres to stwórz większą tablicę starą przepisz do większej i starą usuń.
Jeżeli to ma być do gry to też możesz zrobić tak że wszystkie indeksy przesunąć o -1 (przez co to co masz na indeksie 0 usuwasz) i masz wolną ostatnią kolumnę.

Jak widzisz możliwości jest wiele, ale zależy o co Tobie chodzi.

0

udalo mi sie zrobic vector vectorow n-elementowy wypelniony zerami. chcialabym teraz dla dowolnego miejsca w wektorze przypisać wartość jeden. a nastepnie dla innego miejsca dwa

0
 
#include <iostream>
#include <cstdlib>
#include <vector>

using namespace std;


int main()
{
	vector< vector<int> > buff(10,vector<int>(10));

	for(int i=0; i<10; i++){
		int y = rand()%10; //gen random num to test operability
                for(int j = 0; j < 10; j++)
                {
                     if(buff[y][j] == 0) //assign the value if the value is 0, so you're simulating a push_back
                     {
                          buff[y][j] = 1;
                          break;
                     }
                }
	}

	for(int i=0; i<10; i++)
		for(int p=0; p<10; p++)
		cout << buff[i][p] << " ";


return 0;
}
 #include <iostream>
#include <vector>
using namespace std;  

int main()
{
	vector< vector<int> > buff;

	// To set values
	for(int i = 0; i < 10; i++)
	{
		vector<int> temp; // create an array, don't work directly on buff yet.
		for(int j = 0; j < 10; j++)
			temp.push_back(i); 
 
		buff.push_back(temp); // Store the array in the buffer
	}

	//To access values
	for(vector<vector<int> >::iterator it = buff.begin(); it != buff.end(); ++it)
	{
		//it is now a pointer to a vector<int>
		for(vector<int>::iterator jt = it->begin(); jt != it->end(); ++jt)
		{
			// jt is now a pointer to an integer.
			cout << *jt;
		}
		cout << endl;
	}

	return 0;
}

masz dwa przykładowe uzupełnienia vectora vectorów. Jedno z iteratorami drugie ze zwykłym []. Chyba powinnaś już sobie dać radę z tym co potrzebujesz

0

dokldanie o cos takiego mi chodzilo tylko chcialam stworzyc mape w ksztalcie kwadratu a zgodnie z tym kodem wychodzi mi prostokat o bokach n na 2n, gdzie jest kruczek by wyswietlalo n na n. dodam ze zmienilam cout << *jt; na cout << 0; by dostac tablice samych zer

0

? Przecież oba listningi które wkleiłem to właśnie 10x10 więc żadne n na 2n.

NIE możesz zrobić cout << 0. Przypisz do danego vectora po prostu zero. Nie wiem czy tworząc vector int to czy jego elementy będę automatycznie zawierać zero (musisz sprawdzić w dokumentacji). Jeżeli Ci się nie chcę sprawdzać (a warto) to możesz po prostu wyzerować ją ręcznie.

Nadal nie rozumiem jaki masz problem.

Nie wiem co Ty zrobiłaś u siebie że masz 2n x n. Pokaż kod który to obsługuje

0

faktycznie cos tam namocilam teraz juz wszystko dziala, dzieki wielkie :) jak teraz mozna dla dowolnego elementu tego vectora przypisac konkretna wartosc? tzn jest on wypelniony teraz liczbami a chialabym zeby dla buff[x][y]; przypisac np 2 ale tylko dla jednego miejsca?

1 użytkowników online, w tym zalogowanych: 0, gości: 1