1

对不起,如果标题很差,我想不出更好的。

我最近看到一个用 C++ 编写的小型控制台记忆游戏程序,它启发了我(只是为了它)在 C 中进行复制(主要是因为这个程序的某些方面对我来说很突出)。

当我看到控制台窗口如何产生某种静态效果时,我很感兴趣,例如,如果你翻转了一张“卡片”:

//Console Screen Before "Card Flip"     
  1 2 3 
1 * * *
2 * * *
3 * * * 
Flip Which Card? (x,y): _

可以说我输入1,1的程序可能的输出可能是:

//Console Screen After "Card Flip"
   1 2 3 
 1 9 * *
 2 * * *
 3 * * *
 Flip Which Card? (x,y): _

这实际上是促使我复制程序的原因,老实说,我唯一的目标是复制这种静态控制台。我的猜测是这个程序的作者只是在每次用户输入后清除屏幕并重新打印更新的矩阵(在本例中为未屏蔽的值 1,1)。

所以我决定为类似程序的初始化编写一种设置屏幕:

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

int main(void)
{
    int flips, x, y;
    do
{
    printf("*****Game Setup*****");
    printf("\n\tGrid Size (x):_");
    printf("\nGrid Size (y): ");
    printf("\nAmount of Flips (0 is Unlimited): \n");
    scanf("%d", &x);
    system("cls");
}
while(x <= 0);
do
{
    printf("*****Game Setup*****");
    printf("\nGrid Size(x): %d", x);
    printf("\n\tGrid Size(y):_");
    printf("\nAmount of Flips (0 is Unlmited): \n");
    scanf("%d", &y);
    system("cls");
}
while(y <= 0);
do
{
    printf("*****Game Setup*****");
    printf("\nGrid Size(x): %d", x);
    printf("\nGrid Size(y): %d", y);
    printf("\n\tAmount of Flips (0 is Unlmited):_\n");
    scanf("%d", &flips);
    system("cls");
}
while(flips < 0);
if(!flips) printf("Beginning %d by %d Memory Game with Unlimited Flips...", x ,y);
else printf("Beginning %d by %d Memory Game with %d Flips...", x, y, flips);

return 0;
}

它按预期工作,但我觉得可能有更好的方法来实现同样的效果,这样做会成倍地增加我的代码长度,而且效率不高。不仅如此,而且通过使用这种方法,“UI”充其量是糟糕的,我认为如果我能以某种方式适当地移动闪烁的输入光标会更好

例如:

*****Game Setup*****
Grid Size (x): _
Grid Size (y): 
...

然后我会输入1例如,光标会简单地“移动”到下一个区域:

*****Game Setup*****
Grid Size(x): 1
Grid Size(y): _
...

%n我正在考虑以某种方式使用说明符完成后者,printf尽管我不太确定这是否可能(我对 知之甚少%n)。

那么有没有更好的方法来做到这一点(更有效)?如果是这样,有没有办法如上所述“移动”光标?你会怎么做这样的事情?

这整个概念真的让我的好奇心达到了顶峰。

4

0 回答 0