对不起,如果标题很差,我想不出更好的一个。
我最近看到一个用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
知之甚少。)< / p>
那么有更好的方法(更有效率)吗? 如果是这样,有一种方法可以“移动”光标,如上所述? 你会怎么做这样的事情?
这整个概念真的让我的好奇心达到了顶峰。