петли — C ++ шахматная таблица BGI графика

Я знаю, что это довольно любитель, но у меня есть задача нарисовать шахматный стол 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. Любая помощь приветствуется, просто будьте проще. 🙂
ура

0

Решение

Рассмотрим следующую доску

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

У вас есть идея, как это сделать сейчас?

Если нет, прочитайте ниже.

Для этого вам понадобятся два цикла: один для строк и один для столбцов. Вы правильно поняли эту часть. Далее необходимо сделать следующее наблюдение:

  • Все четные строки имеют первую ячейку «Белый», тогда как все нечетные строки имеют первую ячейку «Черный». (Даже как в ряду номер — 1 четный, я начал с 0. Привычки: P)

Если вы можете сделать это, легко увидеть, как ваши циклы должны иметь свои условия. (строка% 2 и столбец% 2 должны дать вам представление) Следующее довольно просто увидеть, но я все равно это укажу:

  • 0-ая строка имеет 1 рядом с ней, но 0-й столбец имеет H, связанный с ним. (Я думаю, что такова должна быть доска, но вы можете легко исправить ее, если нет) Итак, теперь вы видите, что вам нужен какой-то дополнительный процесс рисования, или вы можете быть умнее и смещать свои циклы на 2 (Почему 2? Подумайте о симметрии платы). Теперь, если вы немного подумаете, вы можете выяснить, как вы можете обрабатывать циклы со смещением 2. Если вы не можете понять это, вы всегда можете использовать дополнительные рисовать функции вне циклов, ведь вы используете графику, и вы не ограничены просто ‘\ n’ и порядком печати: p

Образец кода:

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

Это было для игры, которую я сделал, у которой есть доска, похожая на вашу. Я уверен, что вы можете выяснить остальное отсюда.

1

Другие решения

Других решений пока нет …