Drukowanie szachownicy z wieloznakowymi komórkami

0

Mam problem z szachownicą, żeby było po 3x i po 3 kropki. Użytkownik sam podaje długość i szerokość. Mam kod na zwykłą szachownice, ale nie wiem jak go przekształcić na "po 3".

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}
0
AnZo napisał(a):

Mam problem z szachownicą, żeby było po 3x i po 3 kropki. Użytkownik sam podaje długość i szerokość. Mam kod na zwykłą szachownice, ale nie wiem jak go przekształcić na "po 3".

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}

Spróbuj zamienić i oraz p na 3:

for (int a = 0; a < 3; a++)
{
    for (int b = 0; b < 3; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}
0
Riddle napisał(a):
AnZo napisał(a):

Mam problem z szachownicą, żeby było po 3x i po 3 kropki. Użytkownik sam podaje długość i szerokość. Mam kod na zwykłą szachownice, ale nie wiem jak go przekształcić na "po 3".

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}

Spróbuj zamienić i oraz p na 3:

for (int a = 0; a < 3; a++)
{
    for (int b = 0; b < 3; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}

Nic to nie zmienia

0
AnZo napisał(a):

Spróbuj zamienić i oraz p na 3:

for (int a = 0; a < 3; a++)
{
    for (int b = 0; b < 3; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}

Nic to nie zmienia

Czy mógłbyś dokładniej opisać jaki byłby spodziewany efekt?

PS: Czy chodzi Ci o to żeby pojedyncza komórka składała się z 9 znaków? Np coś takiego?

xxx ... xxx ... ...
xxx ... xxx ... ...
xxx ... xxx ... ...
... xxx ... ... xxx
... xxx ... ... xxx
... xxx ... ... xxx
... ... ... xxx ...
... ... ... xxx ...
... ... ... xxx ...
0
Riddle napisał(a):
AnZo napisał(a):

Spróbuj zamienić i oraz p na 3:

for (int a = 0; a < 3; a++)
{
    for (int b = 0; b < 3; b++)
    {
        if ((a + b) % 2 == 0) std:: cout << "X";
        else std::cout << '.'; 
    }
    std::cout << std::endl;
}

Nic to nie zmienia

Czy mógłbyś dokładniej opisać jaki byłby spodziewany efekt?

PS: Czy chodzi Ci o to żeby pojedyncza komórka składała się z 9 znaków? Np coś takiego?

xxx ... xxx ... ...
xxx ... xxx ... ...
xxx ... xxx ... ...
... xxx ... ... xxx
... xxx ... ... xxx
... xxx ... ... xxx
... ... ... xxx ...
... ... ... xxx ...
... ... ... xxx ...

Tak, dokładnie o to, dodałam jedną linijkę z if. Teraz rysuje po trzy "X", ale po jednej "."

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if (b < p) std::cout << "X";
        if ((a + b) % 2 == 0) std::cout << "X";
        else std::cout << '.';
    }
    std::cout << std::endl;
}
0
AnZo napisał(a):

Tak, dokładnie o to, dodałam jedną linijkę z if. Teraz rysuje po trzy "X", ale po jednej "."

for (int a = 0; a < i; a++)
{
    for (int b = 0; b < p; b++)
    {
        if (b < p) std::cout << "X";
        if ((a + b) % 2 == 0) std::cout << "X";
        else std::cout << '.';
    }
    std::cout << std::endl;
}

To co musisz zrobić to tak:

  • Powiedzmy że chcesz zrobić szachownicę o szerokość 8, i wysokości 8 - czyli standardowa
    int width = 8;
    int height = 8;
    
  • Chcemy też żeby każda komórka miała rozmiar 3:
    int cellSize = 3;
    
  • To znaczy, że tak na prawdę chcesz wyrenderować całość która ma 24 znaki wysokości, i 24 znaki szerokości:
    int width = 8;
    int height = 8;
    
    int cellSize = 3;
    
    for (int x = 0; x < cellSize * width; x++) {
        for (int y = 0; y < cellSize * height; y++) {
            // tutaj umieśc następny kawałek kodu
        }
        std::cout << std::endl;
    }
    
  • Teraz możemy wyrenderować szachownicę, więc Twój kod mógłby zadziałać if ((a + b) % 2 == 0) std::cout << "X";, tylko że pierwsze trzy x chcemy traktować jak 0, kolejne trzy x chcemy traktować jak 1, jeszcze kolejne trzy x jako 2. To znaczy że musimy podzielić x przez trzy (bez reszty i bez miejsc po przecinku)
    if ((x/cellSize + y/cellSize) % 2 == 0) std::cout << "X"; else std::cout << ".";
    

Całość:

int width = 8;
int height = 8;

int cellSize = 3;

for (int x = 0; x < cellSize * width; x++) {
  for (int y = 0; y < cellSize * height; y++) {
      if ((x/cellSize + y/cellSize) % 2 == 0) std::cout << "X"; else std::cout << ".";
  }
  std::cout << std::endl;
}
1
const int size=8,xcell=5,ycell=3;
for(int Y=0;Y<size;++Y) for(int y=0;y<ycell;++y,cout<<endl) for(int X=0;X<size;++X) for(int x=0;x<xcell;++x) cout<<"X "[(X+Y)&1];

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