@@ -109,17 +109,19 @@ inline void output ()
109109 for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
110110 putchar (' \n ' );
111111 }
112+
113+ if (kline)
114+ {
115+ for (int i = 1 ; i < WINDOW_Y; i ++) putchar (' ' );
116+ putchar (' \n ' );
117+ }
112118 printf (" %s" , BOTTOM_LEFT_INFO);
113119 for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1 ; i ++)
114120 {
115121 putchar (' ' );
116122 }
117123 printf (" %s " , BOTTOM_RIGHT_INFO);
118- if (kline)
119- {
120- putchar (' \n ' );
121- for (int i = 1 ; i < WINDOW_Y; i ++) putchar (' ' );
122- }
124+
123125}
124126
125127
@@ -263,125 +265,251 @@ void dooutput ()
263265 }
264266}
265267
266- char middleout[50 ] = " Level Options" ;
267- int oneline, pid, PIDMAX;
268-
269- void select_print (int i, int j)
268+ namespace SelectOutput
270269{
271- int k = (i / 3 ) * oneline + j / 5 ;
272- if (i % 3 == 1 && k < PIDMAX)
270+ char middleout[50 ] = " Level Options" ;
271+ int oneline, pid, PIDMAX;
272+
273+ void select_print (int i, int j)
273274 {
274- if (j % 5 == 0 || j % 5 == 4 )
275+ int k = (i / 3 ) * oneline + j / 5 ;
276+ if (i % 3 == 1 && k < PIDMAX)
275277 {
276- if (pid != k) putchar (' ' );
277- else putchar (' |' );
278+ if (j % 5 == 0 || j % 5 == 4 )
279+ {
280+ if (pid != k) putchar (' ' );
281+ else putchar (' |' );
282+ }
283+ else
284+ {
285+ if (j % 5 == 1 && (k + 1 ) > 100 )
286+ {
287+ putchar ((k + 1 ) / 100 + ' 0' );
288+ }
289+ else if (j % 5 == 2 && (k + 1 ) > 10 )
290+ {
291+ putchar (((k + 1 ) % 100 ) / 10 + ' 0' );
292+ }
293+ else if (j % 5 == 3 )
294+ {
295+ putchar (((k + 1 ) % 10 ) + ' 0' );
296+ }
297+ else putchar (' ' );
298+ }
278299 }
279300 else
280301 {
281- if (j % 5 == 1 && (k + 1 ) > 100 )
302+ if (pid == k && j % 5 != 0 && j % 5 != 4 ) putchar (' -' );
303+ else putchar (' ' );
304+ }
305+ }
306+
307+ inline void select_output ()
308+ {
309+ if (WINDOW_X == 0 || WINDOW_Y == 0 ) return ;
310+ for (int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ' );
311+ printf (" %s" , middleout);
312+ for (int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ' );
313+
314+
315+ int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
316+ oneline = (WINDOW_Y - 2 ) / 5 ;
317+ if (WINDOW_X > (PIDMAX / oneline + 1 ) * 3 )
318+ {
319+ wstartx = 0 , wendx = (PIDMAX / oneline + 1 ) * 3 - 1 ;
320+ wwaitx = (WINDOW_X - (PIDMAX / oneline + 1 ) * 3 ) >> 1 ;
321+ if ((WINDOW_X - (PIDMAX / oneline + 1 ) * 3 ) & 1 )
282322 {
283- putchar ((k + 1 ) / 100 + ' 0' );
284- }
285- else if (j % 5 == 2 && (k + 1 ) > 10 )
323+ kline = true ;
324+ } else kline = false ;
325+ }
326+ else
327+ {
328+ wstartx = pid / oneline * 3 - (WINDOW_X >> 1 ), wendx = WINDOW_X + wstartx - 1 ;
329+ kline = false ;
330+ wwaitx = 0 ;
331+ }
332+
333+ {
334+ wstarty = 0 , wendy = oneline * 5 - 1 ;
335+ wwaity = (WINDOW_Y - oneline * 5 ) >> 1 ;
336+ }
337+
338+ for (int i = 1 ; i <= wwaitx; i ++) {
339+ for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
340+ putchar (' \n ' );
341+ }
342+ for (int i = wstartx; i <= wendx; i ++)
343+ {
344+ if (i < 0 || i >= (PIDMAX / oneline + 1 ) * 3 )
286345 {
287- putchar (((k + 1 ) % 100 ) / 10 + ' 0' );
288- }
289- else if (j % 5 == 3 )
346+ for (int j = 1 ; j < WINDOW_Y; j ++) putchar (' ' );
347+ putchar (' \n ' );
348+ continue ;
349+ }
350+ for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
351+ for (int j = wstarty; j <= wendy; j ++)
290352 {
291- putchar (((k + 1 ) % 10 ) + ' 0' );
353+ if (j < 0 || j >= oneline * 5 )
354+ {
355+ putchar (' ' );
356+ continue ;
357+ }
358+ select_print (i, j);
292359 }
293- else putchar (' ' );
360+ for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
361+ putchar (' \n ' );
294362 }
363+ for (int i = 1 ; i <= wwaitx; i ++) {
364+ for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
365+ putchar (' \n ' );
366+ }
367+
368+ if (kline)
369+ {
370+ for (int i = 1 ; i < WINDOW_Y; i ++) putchar (' ' );
371+ putchar (' \n ' );
372+ }
373+
374+ printf (" %s" , BOTTOM_LEFT_INFO);
375+ for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1 ; i ++)
376+ {
377+ putchar (' ' );
378+ }
379+ printf (" %s " , BOTTOM_RIGHT_INFO);
295380 }
296- else
381+
382+ void select_dooutput ()
297383 {
298- if (pid == k && j % 5 != 0 && j % 5 != 4 ) putchar (' -' );
299- else putchar (' ' );
384+ while (SEL_OUTPUT_STOP == 0 )
385+ {
386+ MOVETO (0 , 0 );
387+ select_output ();
388+ msleep (OUTPUT_TIME);
389+ }
300390 }
391+
301392}
302393
303- inline void select_output ()
394+ namespace ChapterOutput
304395{
305- if (WINDOW_X == 0 || WINDOW_Y == 0 ) return ;
306- for ( int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar ( ' ' ) ;
307- printf ( " %s " , middleout) ;
308- for ( int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar ( ' ' );
396+ const string chapter_name[ 5 ] = { " Adventure " , " Endless " } ;
397+ int CHAPTERMAX = 2 - 1 , CHAPID ;
398+ char middleout[ 50 ] = " Chapter Select " ;
399+ # define LEN 15
309400
310-
311- int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
312- oneline = (WINDOW_Y - 2 ) / 5 ;
313- if (WINDOW_X > (PIDMAX / oneline + 1 ) * 3 )
401+ void chapter_print (int i, int j)
314402 {
315- wstartx = 0 , wendx = (PIDMAX / oneline + 1 ) * 3 - 1 ;
316- wwaitx = (WINDOW_X - (PIDMAX / oneline + 1 ) * 3 ) >> 1 ;
317- if ((WINDOW_X - (PIDMAX / oneline + 1 ) * 3 ) & 1 )
403+ int k = (i / 5 );
404+ if (i % 5 == 2 && k <= CHAPTERMAX)
318405 {
319- kline = true ;
320- } else kline = false ;
321- }
322- else
323- {
324- wstartx = pid / oneline * 3 - (WINDOW_X >> 1 ), wendx = WINDOW_X + wstartx - 1 ;
325- kline = false ;
326- wwaitx = 0 ;
406+ if (j % LEN == 0 || j % LEN == LEN - 1 )
407+ {
408+ if (CHAPID != k) putchar (' ' );
409+ else putchar (' |' );
410+ }
411+ else
412+ {
413+ if (j < chapter_name[k].size ()) putchar (chapter_name[k][j]);
414+ else putchar (' ' );
415+ }
416+ }
417+ else if (i % 5 == 0 || i % 5 == 4 )
418+ {
419+ if (CHAPID == k && j % LEN != 0 && j % LEN != LEN - 1 ) putchar (' -' );
420+ else putchar (' ' );
421+ }
422+ else
423+ {
424+ if ((j % LEN == 0 || j % LEN == LEN - 1 ) && CHAPID == k) putchar (' |' );
425+ else putchar (' ' );
426+ }
327427 }
328428
429+ inline void chapter_output ()
329430 {
330- wstarty = 0 , wendy = oneline * 5 - 1 ;
331- wwaity = (WINDOW_Y - oneline * 5 ) >> 1 ;
332- }
333-
334- for (int i = 1 ; i <= wwaitx; i ++) {
335- for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
336- putchar (' \n ' );
337- }
338- for (int i = wstartx; i <= wendx; i ++)
339- {
340- if (i < 0 || i >= (PIDMAX / oneline + 1 ) * 3 )
431+ if (WINDOW_X == 0 || WINDOW_Y == 0 ) return ;
432+ for (int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ' );
433+ printf (" %s" , middleout);
434+ for (int i = 1 ; i * 2 <= WINDOW_Y - strlen (middleout); i ++) putchar (' ' );
435+
436+
437+ int wstartx, wstarty, wendx, wendy, wwaitx, wwaity;
438+ if (WINDOW_X > (CHAPTERMAX + 2 ) * 5 )
439+ {
440+ wstartx = 0 , wendx = (CHAPTERMAX + 1 ) * 5 - 1 ;
441+ wwaitx = (WINDOW_X - (CHAPTERMAX + 1 ) * 5 ) >> 1 ;
442+ if ((WINDOW_X - (CHAPTERMAX + 1 ) * 5 ) & 1 )
443+ {
444+ kline = true ;
445+ } else kline = false ;
446+ }
447+ else
448+ {
449+ wstartx = CHAPID * 5 - (WINDOW_X >> 1 ), wendx = WINDOW_X + wstartx - 1 ;
450+ kline = false ;
451+ wwaitx = 0 ;
452+ }
453+
341454 {
342- for (int j = 1 ; j < WINDOW_Y; j ++) putchar (' ' );
455+ wstarty = 0 , wendy = LEN - 1 ;
456+ wwaity = (WINDOW_Y - LEN) >> 1 ;
457+ }
458+
459+ for (int i = 1 ; i <= wwaitx; i ++) {
460+ for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
343461 putchar (' \n ' );
344- continue ;
345- }
346- for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
347- for (int j = wstarty; j <= wendy; j ++)
462+ }
463+ for (int i = wstartx; i <= wendx; i ++)
348464 {
349- if (j < 0 || j >= oneline * 5 )
465+ if (i < 0 || i >= (CHAPTERMAX + 1 ) * 5 )
350466 {
351- putchar (' ' );
467+ for (int j = 1 ; j < WINDOW_Y; j ++) putchar (' ' );
468+ putchar (' \n ' );
352469 continue ;
470+ }
471+ for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
472+ for (int j = wstarty; j <= wendy; j ++)
473+ {
474+ if (j < 0 || j >= LEN)
475+ {
476+ putchar (' ' );
477+ continue ;
478+ }
479+ chapter_print (i, j);
353480 }
354- select_print (i, j);
481+ for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
482+ putchar (' \n ' );
483+ }
484+ for (int i = 1 ; i <= wwaitx; i ++) {
485+ for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
486+ putchar (' \n ' );
487+ }
488+
489+ if (kline)
490+ {
491+ putchar (' \n ' );
492+ for (int i = 1 ; i < WINDOW_Y; i ++) putchar (' ' );
355493 }
356- for (int j = 1 ; j <= wwaity; j ++) putchar (' ' );
357- putchar (' \n ' );
358- }
359- for (int i = 1 ; i <= wwaitx; i ++) {
360- for (int j = 1 ; j <= WINDOW_Y; j ++) putchar (' ' );
361- putchar (' \n ' );
362- }
363494
364- printf (" %s" , BOTTOM_LEFT_INFO);
365- for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1 ; i ++)
366- {
367- putchar (' ' );
368- }
369- printf (" %s " , BOTTOM_RIGHT_INFO);
370- if (kline)
371- {
372- putchar (' \n ' );
373- for (int i = 1 ; i < WINDOW_Y; i ++) putchar (' ' );
495+ printf (" %s" , BOTTOM_LEFT_INFO);
496+ for (int i = strlen (BOTTOM_LEFT_INFO); i < WINDOW_Y - strlen (BOTTOM_RIGHT_INFO) - 1 ; i ++)
497+ {
498+ putchar (' ' );
499+ }
500+ printf (" %s " , BOTTOM_RIGHT_INFO);
374501 }
375- }
376502
377- void select_dooutput ()
378- {
379- while (SEL_OUTPUT_STOP == 0 )
503+ void chapter_dooutput ()
380504 {
381- MOVETO (0 , 0 );
382- select_output ();
383- msleep (OUTPUT_TIME);
505+ while (CHAPTER_OUTPUT_STOP == 0 )
506+ {
507+ MOVETO (0 , 0 );
508+ chapter_output ();
509+ msleep (OUTPUT_TIME);
510+ }
384511 }
512+
385513}
386514
387515#endif
0 commit comments