我知道这很业余,但是我有一个任务是画一个8x8的国际象棋桌子,侧面有通常的“ 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


您是否知道现在该怎么做?

如果没有,请阅读以下内容。

为此,您需要两个循环,一个用于行,一个用于列。你说对了。接下来,您需要进行以下观察:


所有偶数行均以“白色”单元格开头,而所有奇数行均以“黑色”单元格开头。 (即使在行号中-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';
}


这是我制作的一款游戏,具有与您相似的游戏板。我相信您可以从这里找出其余的内容。

10-06 03:04