用C

时间:2015-12-16 14:59:36

标签: c coordinates 2d-games coordinate-systems

好吧,正如标题所说,我正试图画一个游戏板。好吧,我做的董事会本身,它看起来像他的:

4 |
3 |
2 |
1 |
0 |
   - - - - -
   0 1 2 3 4

但这不是问题。我觉得难以找到的是我想在棋盘上画出星形(*)的图标,坐标是这样的数组

posX {2,4,2,1}
posY {2,3,4,4}

所以在这种情况下我应该在坐标(2,2),(4,3),(2,4),(1,4)等中绘制*。有什么想法吗?

2 个答案:

答案 0 :(得分:4)

如果要在termial(控制台)上打印这些,则不能简单地打印坐标轴和返回并放置坐标,但是如果坐标系足够小,则不应该重新绘制整个坐标系。每次添加新点时都会登上。

一种简单的方法是保留一个二维char数组,并根据坐标放置“”或“*”。这样,每次将新点添加到坐标时,您都可以逐行打印2D数组。

当然,您还负责打印轴,但该部分应该是直接的。

char points [4][4] ={
       {' ',' ',' ',' '},
       {' ',' ',' ',' '},
       {' ',' ',' ',' '},
       {' ',' ',' ',' '},
       };

你将拥有一块空板。现在,如果你想在坐标(1,2)处输入内容,你需要做的就是说points[1][2]='*';

要打印整个数组,您需要一个嵌套循环,外部遍历行,内部遍历列。像这样的东西:

int i,j;

for (i=0; i<4; ++i)
    {
        for (j=0; j<4; ++j) printf("%c ", points[i][j]);

     printf("\n");
     }

这样坐标值将从左到右,从上到下增加。如果你不想要,你应该改变for循环边界。

刷新屏幕我建议您打印一大堆换行符以有效清除屏幕。还有其他方法可以做到这一点(比如系统(“cls”),但不是没有痛苦的

答案 1 :(得分:1)

这说明了我在评论中的意思,也许它有所帮助。在打印之前,它会准备一组表示游戏板的字符串。

#include <stdio.h>
#include <stdlib.h>

#define BOARDX  5
#define BOARDY  5
#define BOARDW  (BOARDX*2)              // length of text line

char board [BOARDY][BOARDW+1];          // allow for string terminator

void print_board(void)
{
    int y, x;
    for(y=BOARDY-1; y>=0; y--) {
        printf("%-2d|%s\n", y, board[y]);
    }

    printf("   ");
    for(x=0; x<BOARDX; x++)
        printf(" -");
    printf("\n");

    printf("   ");
    for(x=0; x<BOARDX; x++)
        printf("%2d", x);
    printf("\n");
}

void empty_board(void)
{
    int y, x;
    for(y=0; y<BOARDY; y++) {
        for(x=0; x<BOARDW; x++) {
            board[y][x] = ' ';
        }
        board[y][x] = '\0';
    }
}

void poke_board(int x, int y, char c)
{
    if (y >= 0 && y < BOARDY && x >= 0 && x < BOARDX)
       board[y][x*2+1] = c;               // correctly spaced
}

int main(void)
{
    int posX[]= {2,4,2,1};
    int posY[]= {2,3,4,4};
    int len = sizeof(posX) / sizeof(posX[0]);
    int n;
    empty_board();
    for(n=0; n<len; n++) {
        poke_board(posX[n], posY[n], '*');
    }
    print_board();
    return 0;
}

节目输出:

4 |   * *
3 |         *
2 |     *
1 |
0 |
    - - - - -
    0 1 2 3 4