Я знаю, что это довольно любитель, но у меня есть задача нарисовать шахматный стол 8×8 с обычным текстом «A B C …» «1 2 3» на стороне. Я должен использовать 2 для циклов, но я застрял, я могу отобразить только одну строку с 8 барами, вот мой код:
#include<iostream>
#include<cstdio>
using namespace std;
#include<graphics.h>
int main()
{
int i,j=0;
int upperline=50;
int widthline=50;
double godown=500/8;
double goright=700/8;
initwindow(800,600,"Chessboard");
setbkcolor(LIGHTGRAY);
cleardevice();
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
if(i % 2==0) setfillstyle(SOLID_FILL,BLACK);
else setfillstyle(SOLID_FILL,WHITE);
bar(widthline,upperline,widthline+goright,upperline+godown);
outtextxy(widthline+goright/2-5,upperline/2,"A");
outtextxy(widthline+goright/2-5,600-upperline/2,"B");
}
widthline=widthline+goright;
}
getch();
closegraph();
}
Кстати, я использую CodeBlocks. Любая помощь приветствуется, просто будьте проще. 🙂
ура
Рассмотрим следующую доску
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
W B W B W B W B
B W B W B W B W
Это то, что вы хотите, но теперь рассмотрим это:
H G F E D C B A
-----------------
1|W B W B W B W B|1
2|B W B W B W B W|2
3|W B W B W B W B|3
4|B W B W B W B W|4
5|W B W B W B W B|5
6|B W B W B W B W|6
7|W B W B W B W B|7
8|B W B W B W B W|8
-----------------
H G F E D C B A
У вас есть идея, как это сделать сейчас?
Если нет, прочитайте ниже.
Для этого вам понадобятся два цикла: один для строк и один для столбцов. Вы правильно поняли эту часть. Далее необходимо сделать следующее наблюдение:
Если вы можете сделать это, легко увидеть, как ваши циклы должны иметь свои условия. (строка% 2 и столбец% 2 должны дать вам представление) Следующее довольно просто увидеть, но я все равно это укажу:
Образец кода:
void Grid::display_top() const {
uint widthmax = width << 1;
cout << " ";
for (uint i = 0; i < 2; ++i) {
for (uint j = 0; j < widthmax; ++j) {
if (!i) {
if (!(j % 2))
cout << ' ';
else
cout << (j >> 1);
}
else {
if (!j)
cout << " *-";
else if (j == widthmax - 1)
cout << "-*";
else
cout << "-";
}
}
cout << '\n';
}
}
void Grid::display_bottom() const {
uint widthmax = width << 1;
for (uint i = 0; i < 2; ++i) {
if (i)
cout << " ";
for (uint j = 0; j < widthmax; ++j) {
if (i) {
if (!(j % 2))
cout << ' ';
else
cout << (j >> 1);
}
else {
if (!j)
cout << " *-";
else if (j == widthmax - 1)
cout << "-*";
else
cout << "-";
}
}
cout << '\n';
}
}
void Grid::display(const Player& P1, const Player& P2) const {
cout << '\n';
display_top();
uint scorepos = (height >> 1) - 2;
for (uint i = 0; i < height; ++i) {
for (uint j = 0; j < width + 4; ++j) {
if (!j || j == width + 3)
cout << i;
else if (j == 1 || j == width + 2)
cout << '|';
else {
cout << " ";
spots[i][j - 2].display();
}
}
cout << '\n';
}
display_bottom();
cout << '\n';
}
Это было для игры, которую я сделал, у которой есть доска, похожая на вашу. Я уверен, что вы можете выяснить остальное отсюда.
Других решений пока нет …