我正在写一个小型的学校项目。 这是一个下滑的游戏 – 这个词正在从上到下。 我有一个想法,使两个窗口(一个界面和第二个移动对象)。 单词是随机的,你可以在代码中看到。 问题是input。 我正在使用mvwsacanw来写这个词。 当这个词在不同的窗口中移动时,有什么方法可以在第二个窗口中写入任何东西? 现在这个词正在下降,当它到达底部时,第二个窗口打开,我可以input单词。
希望有人能帮助我。
#include <stdio.h> #include <ncurses.h> #include <stdlib.h> #include <time.h> #include <unistd.h> void moving(WINDOW *move) { int j,random; char *cmp=(char*)malloc(10*sizeof(char)); char word[6]; wclear(move); box(move, 0, 0); mvwprintw(move, 1, 1, "PIS"); wrefresh(move); srand (time (NULL)); random=2+rand()%7; for(j=0; j< random ; j++) //random word { word[j]= rand()%26+'a'; } int poz = 2+rand()%24; //random position of moving word for(int i=1; i<18; i++) { wclear(move); box(move,0,0); mvwprintw(move,i, poz, word); wrefresh(move); usleep(300000); } } void interface(WINDOW *ui) { wclear(ui); char *cmp=(char*)malloc(10*sizeof(char)); box(ui, 0, 0); mvwprintw(ui,1,1,"wpisz wyraz: "); mvwscanw(ui,2,1, "%s",cmp); mvwprintw(ui, 3, 1, "->%s",cmp); wrefresh(ui); } int main(int argc, char *argv[])//int argc, const char * argv[]) { int x,y; int sc = 3; initscr(); noecho(); curs_set(FALSE); getmaxyx(stdscr, y,x); WINDOW *move = newwin(y-5, x-1, 0, 0); WINDOW *ui = newwin(sc+2, x, y-5, 0); while(1) { moving(move); interface(ui); wclear(move); wclear(ui); } delwin(move); delwin(ui); endwin(); return 0; }
你不能用你当前的代码结构来做到这一点。 您将单词落下阶段和输入阶段保留在单独的函数中,因此使它们同时工作的唯一方法是某种多线程。 假设这不是你想要做的,你可以尝试在一个函数中合并这两个特性。 在伪代码中:
pick random word pick random position set i = 0 set input = {} //empty array do > print word at (i, pos) > set stoptime = time() + DELAY > do >> set c = getch() >> append c to input >> print interface > while (time() < stoptime) > i++ while (i < 18)
这个timeout()被设置为一个合适的延迟,会给人一种同时发生的印象。 这绝对不是最有效的解决方案,但是简单明了,考虑到你在学校项目上工作,应该没问题
尝试使用以下代码:
nodelay(your_window, TRUE);
这将使您的输入无阻塞给定的窗口!