我是编程新手。我正在尝试制作一个非常基本的Ncurses游戏。我的问题是我有一些非常重复的代码,我拿一个字符串,计算它的长度,除以2,然后减去列的数量。我这样做,所以我可以将我的文字放在屏幕上。我希望通过创建一个函数来使这更容易,但我不知道如何创建一个返回Ncurses函数的函数mvprintw(y,x,string)
这是我的代码,您可以更好地理解:
#include <iostream>
#include <ncurses.h>
#include <string.h>
int main(){
initscr();
int x,y;
getmaxyx(stdscr, y, x);
mvprintw(0,x/2-(strlen("************")/2), "************");
mvprintw(1,x/2-(strlen("Welcome")/2), "Welcome");
mvprintw(2,x/2-(strlen("************")/2), "************");
refresh();
getch();
endwin();
return 0;
}
答案 0 :(得分:2)
你弄清楚你想要执行的操作取决于参数,所以你知道要传递什么。然后它就像编写操作一样简单,同时用参数名替换实际参数。
void center_text(int y, int x, char const* text) {
mvprintw(0,x/2-(strlen(text)/2), text);
}
完成后,只需使用它:
getmaxyx(stdscr, y, x);
center_text(0, x, "************");
center_text(1, x, "Welcome");
center_text(2, x, "************");
答案 1 :(得分:1)
我相信,这就是你所需要的:
void centered(const char* str, int &x){
static int count = 0;
mvprintw(count,x/2-(strlen(str)/2), str);
count++;
}
....
centered("************", x)
centered("Welcome", x)
centered("************", x)
但是你应该在尝试编写函数之前了解它们(显然)
答案 2 :(得分:1)
这是一个能完成这项工作的功能:
static void printCentered(int y, int x, char * text) {
mvprintw(y, x - (strlen(text) / 2), text);
}
我修改了居中计算,假设x代表中心线。 然后,您可以使用此功能,而不是直接调用mvprintw。
printCentered(0, x, "***************");
printCentered(1, x, "Welcome");
printCentered(2, x, "***************");