Witam, probuje sam napisac gre pong korzystajac z biblioteki ncurses i znalazlem pewien kod w internecie chce isc dosc podobnym tropem ale nie wiem ktore linijki rysuja tam pada ? bo widze ze jest i dziala ale gdzie jest linia ktora go rysuje ? kod:

#include <ncurses.h>
#include <time.h>

#define PADDLE_WIDTH 5
#define MOVE_RATE 2
#define P_STEP 2

int twidth, theight;
int bally, ballx;
int paddlex;
int balldir;
WINDOW * win;

int updatewin();
int random(int l, int h);
int moveball();


int main () {
	srand(time(NULL));
	initscr();
	cbreak();
	halfdelay(MOVE_RATE);
	noecho();
	curs_set(0);
	twidth = random(PADDLE_WIDTH * 2 + P_STEP, COLS - 30);
	theight = random(5, ((twidth + 5 > LINES) ? (LINES - 4) : (twidth)));
	int winx, winy, wwidth, wheight;
	wwidth = twidth + 2;
	wheight = theight + 3;
	winy = (LINES - wheight) / 2;
	winx = (COLS - wwidth) / 2 + 10;
	paddlex = random(1, twidth + 2 - PADDLE_WIDTH);
	ballx = random(paddlex, paddlex + PADDLE_WIDTH);
	bally = theight;
	balldir = random(0, 2) * 2 + 7;
	win = newwin(wheight, wwidth, winy, winx);
//	printw("%d x %d\n", twidth, theight);
//	printw("%d x %d\n", COLS, LINES);
	refresh();
	updatewin();
	char ch;
	while (((ch = wgetch(win)) != 'x') && (bally < theight + 1)) {
		switch (ch) {
			case 'h':
				paddlex-= P_STEP;
				if (paddlex < 1) paddlex = 1;
				break;
			case 'l':
				paddlex+= P_STEP;
				if (paddlex > twidth + 1 - PADDLE_WIDTH) paddlex = twidth + 1 - PADDLE_WIDTH;
				break;
			default:
				break;

		}
		moveball();
		erase();
		mvprintw(0, 0, "(y, x): \t(%2d, %2d)", bally, ballx);
		mvprintw(1, 0, "Paddle: \t%2d to %d", paddlex, paddlex + PADDLE_WIDTH - 1); 
		mvprintw(2, 0, "Ball direction:\t %d", balldir);
		refresh();
		updatewin();
	}

//	halfdelay(0);
//	while (wgetch(win) != 'x') ;
	endwin();
	return 0;
}


int updatewin() {
	werase(win);
	box(win, 0, 0);
	mvwaddch(win, bally, ballx, '*');
	int i;
	for (i = 0; i < PADDLE_WIDTH; i++)
		mvwaddch(win, theight + 1, paddlex + i, '-');
	wrefresh(win);
	return 0;
}


int random(int l, int h) {
	return (rand() % (h - l)) + l;
}

int moveball() {
	//from bounce.c
	//note - no contact with bat yet
	if ((balldir < 4) && (bally == theight)) {
		switch (balldir) {
			case 1:
				if (ballx == 1) {
					if (paddlex < 3) balldir = 9;
					else balldir = 3;
				} else if ((ballx > paddlex) && (ballx <= paddlex + PADDLE_WIDTH)) balldir = 7;
				break;
			case 3:
				if (ballx == twidth) {
					if (paddlex + PADDLE_WIDTH > theight - 1) balldir = 7;
					else balldir = 1;
				} else if ((ballx + 2 > paddlex) && (ballx + 1 < paddlex + PADDLE_WIDTH)) balldir = 9;
				break;
			default:
				break;

		}
	} else if ((ballx < 2) && (bally < 2)) {
		balldir = 3;
	} else if ((ballx > twidth - 1) && (bally < 2)) {
		balldir = 1;
	} else if ((ballx < 2) && ((balldir % 3) == 1)) {
		balldir += 2;
	} else if ((ballx > twidth - 1) && ((balldir % 3) == 0)) {
		balldir -= 2;
	} else if ((bally < 2) && (balldir > 6)) {
		balldir -= 6;
	} else if ((bally > theight) && (balldir < 4)) {
		balldir += 6;
	}
	switch (balldir) {
		case 1:
			bally++;
			ballx--;
			break;
		case 2:
			bally++;
			break;
		case 3:
			bally++;
			ballx++;
			break;
		case 4:
			ballx--;
			break;
		case 5:
			break;
		case 6:
			ballx++;
			break;
		case 7:
			bally--;
			ballx--;
			break;
		case 8:
			bally--;
			break;
		case 9:
			bally--;
			ballx++;
			break;
		default:
			break;
	}
	return 0;
}

@Edit
aaa mam, funkcja update_win to chyba robi :)