Moving a character in a table

时间:2015-06-30 13:51:52

标签: c

I just started learning programming languages and I want to make a character (point '*') in a table move.

This is my code

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

int main() {
    int v;
    int x = 50, y = 10;
    int i, j;
    char screen[80][25];

    // declare and initialize table
    for (i = 0; i < 80; i++)
        for (j = 0; j < 25; j++)
            screen[i][j] = ' ';

    // coordinate system
    for (i = 0; i < 80; i++) screen[i][12] =  '-';
    for (j = 0; j < 25; j++) screen[40][j] =  '|';

    // point, position
    screen[x][y] = '*';

    // print result
    for (j = 0; j < 25; j++) {
        for (i = 0; i < 80; i++)
            printf("%c", screen[i][j]);
        printf("\n");
    }
}

This prints a table of size 80x25 and a coordinate system with a centre in (40,12). I set the position of the character '*' on coordinates (x,y). I defined x and y as 50 and 10.

Now I want to move my star by changing x and y. How do I change x and y (position of the star)? Maybe with scanf function? I tried to use scanf like this:

int v;
...
scanf("%d", &v);
if(v == 1)
{
    y--;
}

but then everything (table, coordinate system and the character) disappeared. Please help.

Thanks.

1 个答案:

答案 0 :(得分:2)

请使用[n]curses(3)

如果您使用的是* nix或OS X,则应该已经安装了它。如果您使用的是Windows,则可以在

处获得PdCurses的分发

但是,从设计角度来看,您应该将模型(80 x 25阵列)与用户界面分开。你有两个任务:

  1. 通过响应用户事件来维护模型。
  2. 通过响应模型中的更改来维护用户界面。
  3. 这将引导您进入名为模型 - 视图 - 控制器 MVC 设计模式。在经典的MVC中,你有:

    • 模型,本质上是一个没有用户界面的无头应用程序。
    • view ,用户界面。在您的情况下,您有一个控制台/终端窗口作为输出,键盘作为输入,对吧?
    • 控制器。控制器的工作是将视图连接到模型。控制器将事件(例如输入事件,例如按键或输入一行文本)传递给模型。模型响应事件正确反应并通知控制器其视觉状态是否已经改变。反过来,控制器通过指示视图(或视图的所需部分)的状态已经改变来响应,以便它可以重新渲染。

    这种关注点分离使得(除其他事项外)更容易编写和测试代码。