无法使用ascii表显示带有数组的棋盘格

时间:2015-02-13 08:59:29

标签: c++ arrays visual-studio-2013 ascii

我是c ++的新手。我有这个功课,我不能用for循环显示我的棋盘!该板必须如下图所示 每个案例8个字符在4个colomn和2行:

enter image description here

#include "iostream"
#include "string"
#include <conio.h>
#include <time.h>

const int up = 80, down = 72, left = 77, right = 75, HD = 73, HG = 71, BG = 79, BD = 81;
const int NB_COL = 12, NB_LIG = 8;

using namespace std;

struct Mat_Pos_s 
{
    int lig;
    int Col;
};


// Matrice composant le damier du jeu :
// 0==Normal(white), 1==$$$$ hidden, 2==$$$$ visible, 3==grey, 4== black wall

int Mat[NB_LIG][NB_COL] =
{
    { 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1 },
    { 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 0, 4 },
    { 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 1 },
    { 0, 0, 4, 1, 4, 0, 0, 4, 4, 0, 4, 1 },
    { 1, 0, 4, 4, 4, 1, 4, 0, 4, 0, 4, 0 },
    { 1, 0, 1, 1, 0, 1, 4, 1, 4, 0, 4, 0 },
    { 1, 0, 1, 0, 0, 0, 4, 4, 4, 0, 4, 0 },
    { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

void main(void)
{
    Mat_Pos_s Depart; 
    Mat_Pos_s Arrive; 

    char piece = 178, q = 176;
    char a = 201, b = 200, c = 203, d = 202, e = 187, f = 188 ;

    gotoxy(10, 2);
    for (int y = 0; y < NB_LIG; y++)
    {
        cout << endl ;

        for (int x = 0; x < NB_COL; x++)
        {

            if (Mat[y][x] == 0)

            {
                cvm_SetColor(BLEU);

                cout << piece << piece << piece << piece << " " <<endl;

                cout << piece << piece << piece << piece << " ";
            }
            else if (Mat[y][x] == 1)
            {
                cvm_SetColor(BLEU); 
                cout << piece << piece << piece << piece << " " <<endl ;
                cout << piece << piece << piece << piece << " ";
            }
            else
            {
                cvm_SetColor(NOIR);

                cout << piece << piece << piece << piece << " " <<endl;
                cout << piece << piece << piece << piece << " ";
            }
        }

        cout << endl ;
    }
    _getch()
}

1 个答案:

答案 0 :(得分:0)

如果每个单元格宽四个字符,两行高,那么你将不得不做一些比这更棘手的事情:

cout << piece << piece << piece << piece << " " <<endl;
cout << piece << piece << piece << piece << " ";

对于每个单元格,因为您需要执行每个,并且一行只有半个单元格高。

因此你的循环需要像(伪代码):

for row = 1 to maxrow:
    for height = 1 to 2:
        for col = 1 to maxcol:
            set color
            output four copies of piece, no newline.
        output newline

这样,你可以分两行进行每一行,每行一行,就像这样(对于使用小写的3x2矩阵,然后使用大写进行排序):

+----+----+----+
|abcd|efgh|ijkl|
|mnop|qrst|uvwx|
+----+----+----+
|yzAB|CDEF|GHIJ|
|KLMN|OPQR|STUV|
+----+----+----+

以下代码显示了更类似于您需要的内容,每个两行高行之间有一个空行以强调传播:

#include <iostream>
using namespace std;

#define NB_ROW 8
#define NB_COL 12
int Mat[NB_ROW][NB_COL] = {
    { 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 1 },
    { 0, 0, 4, 4, 0, 0, 0, 0, 0, 4, 0, 4 },
    { 0, 0, 4, 1, 4, 0, 0, 0, 0, 0, 4, 1 },
    { 0, 0, 4, 1, 4, 0, 0, 4, 4, 0, 4, 1 },
    { 1, 0, 4, 4, 4, 1, 4, 0, 4, 0, 4, 0 },
    { 1, 0, 1, 1, 0, 1, 4, 1, 4, 0, 4, 0 },
    { 1, 0, 1, 0, 0, 0, 4, 4, 4, 0, 4, 0 },
    { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};

int main(){
    for (int row = 0; row < NB_ROW; row++) {
        for (int line = 0; line < 2; line++) {
            for (int col = 0; col < NB_COL; col++) {
                switch (Mat[row][col]) {
                    case 0: cout << "WHIT "; break;
                    case 1: cout << "HIDN "; break;
                    case 2: cout << "VSBL "; break;
                    case 3: cout << "GREY "; break;
                    case 4: cout << "BLAK "; break;
                }
            }
            cout << '\n';
        }
        cout << '\n'; // This one's for the spread.
    }
    return 0;
}

输出结果为:

WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT BLAK WHIT WHIT HIDN 
WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT BLAK WHIT WHIT HIDN 

WHIT WHIT BLAK BLAK WHIT WHIT WHIT WHIT WHIT BLAK WHIT BLAK 
WHIT WHIT BLAK BLAK WHIT WHIT WHIT WHIT WHIT BLAK WHIT BLAK 

WHIT WHIT BLAK HIDN BLAK WHIT WHIT WHIT WHIT WHIT BLAK HIDN 
WHIT WHIT BLAK HIDN BLAK WHIT WHIT WHIT WHIT WHIT BLAK HIDN 

WHIT WHIT BLAK HIDN BLAK WHIT WHIT BLAK BLAK WHIT BLAK HIDN 
WHIT WHIT BLAK HIDN BLAK WHIT WHIT BLAK BLAK WHIT BLAK HIDN 

HIDN WHIT BLAK BLAK BLAK HIDN BLAK WHIT BLAK WHIT BLAK WHIT 
HIDN WHIT BLAK BLAK BLAK HIDN BLAK WHIT BLAK WHIT BLAK WHIT 

HIDN WHIT HIDN HIDN WHIT HIDN BLAK HIDN BLAK WHIT BLAK WHIT 
HIDN WHIT HIDN HIDN WHIT HIDN BLAK HIDN BLAK WHIT BLAK WHIT 

HIDN WHIT HIDN WHIT WHIT WHIT BLAK BLAK BLAK WHIT BLAK WHIT 
HIDN WHIT HIDN WHIT WHIT WHIT BLAK BLAK BLAK WHIT BLAK WHIT 

HIDN HIDN WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT 
HIDN HIDN WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT WHIT