C++ console application using double buffer size limitation -
# include "display.h" doublebuffer::doublebuffer() { coord size = { window_x_size , window_y_size }; small_rect rect; rect.left = 0; rect.right = window_x_size - 1; rect.top = 0; rect.bottom = window_y_size - 1; hbuffer[0] = createconsolescreenbuffer(generic_read | generic_write, 0, null, console_textmode_buffer, null); setconsolescreenbuffersize(hbuffer[0], size); setconsolewindowinfo(hbuffer[0], true, &rect); hbuffer[1] = createconsolescreenbuffer(generic_read | generic_write, 0, null, console_textmode_buffer, null); setconsolescreenbuffersize(hbuffer[1], size); setconsolewindowinfo(hbuffer[1], true, &rect); console_cursor_info cursorinfo; cursorinfo.dwsize = 1; cursorinfo.bvisible = false; setconsolecursorinfo(hbuffer[0], &cursorinfo); setconsolecursorinfo(hbuffer[1], &cursorinfo); nbufferindex = 0; } void doublebuffer::writebuffer(int x, int y, char *string) { dword dw; coord startposition = { x,y }; setconsolecursorposition(hbuffer[nbufferindex], startposition); writefile(hbuffer[nbufferindex], string, strlen(string), &dw, null); } void doublebuffer::flippbuffer() { sleep(1000); setconsoleactivescreenbuffer(hbuffer[nbufferindex]); nbufferindex = !nbufferindex; } void doublebuffer::clearbuffer() { coord coord = { 0,0 }; dword dw; fillconsoleoutputcharacter(hbuffer[nbufferindex], ' ', window_x_size*window_y_size, coord, &dw); } void doublebuffer::releasebuffer() { closehandle(hbuffer[0]); closehandle(hbuffer[1]); }
i used code construct double buffer.
the entire game map printed @ function 'writebuffer' designed 1d char array.
but big problem if length of string goes on 80, console shows 80 character in 1 line regardless of console window size.
i mean, example input string is
char 1d_map[90] = {'d'};
and console window size 5*20.
then no matter window size is, shows behind.
ddddd (.. left 70 characters hidden..)
ddddd (.. left 5 character hidden..)
as pull side bar of window maximum, shows behind.
dddddddddddddddd ... 80 characters ... ddddddddddddddddd
dddddddddd
so when use these codes, cannot adjust game map size. (concretely horizontal size.)
because whatever do, shows 80 characters in line!!
can fix problem? or should apply other double buffering method?
Comments
Post a Comment