/*************************************************************************** * _ _ * * /_\ Chess Board /_\ * * \_/ ------------------- \_/ * * /_\ Menu /_\ * * |_| ------------------- |_| * * /___\ GNU GPL Version 2 /___\ * * * ***************************************************************************/ /* Header Files */ #include "cbmenu.h" /* Window */ WINDOW **item; float ver; float hor; /*---------------------------------------------------------------------------*/ /* Color Chess Board */ void colorMenu() { /* Colors */ initscr(); start_color(); /* Transparent Color Pairs */ init_pair(10,COLOR_BLUE,-1); init_pair(11,COLOR_YELLOW,-1); init_pair(12,COLOR_GREEN,-1); init_pair(13,COLOR_YELLOW,COLOR_BLACK); curs_set(0); keypad(stdscr,TRUE); } /*---------------------------------------------------------------------------*/ /* Delete Menu */ void deleteMenu(WINDOW **item,int count) { int it; for(it = 0; it < count; it++) { delwin(item[it]); } clear(); refresh(); free(item); } /*---------------------------------------------------------------------------*/ /* Draw Menu */ WINDOW **drawMenu(int start_col) { /* Chess Board Menu */ clear(); initscr(); bkgd(use_default_colors()); item = (WINDOW **)calloc(9, sizeof(WINDOW *)); getmaxyx(stdscr, ver, hor); /* Chess Board Box */ item[0] = newwin(13,36, (ver/4), (hor/3.5)); wbkgd(item[0],use_default_colors()); box(item[0],ACS_VLINE,ACS_HLINE); /* Subwindows */ item[1] = subwin(item[0],1,30,(ver/4)+3,(hor/3.5)+3); item[2] = subwin(item[0],1,30,(ver/4)+4,(hor/3.5)+3); item[3] = subwin(item[0],1,30,(ver/4)+6,(hor/3.5)+3); item[4] = subwin(item[0],1,30,(ver/4)+8,(hor/3.5)+3); item[5] = subwin(item[0],1,30,(ver/4)+9,(hor/3.5)+3); item[6] = subwin(item[0],1,30,(ver/4)+11,(hor/3.5)+3); /* Lines */ mvwhline(item[0],2,1,ACS_HLINE,34); mvwhline(item[0],5,1,ACS_HLINE,34); mvwhline(item[0],7,1,ACS_HLINE,34); mvwhline(item[0],10,1,ACS_HLINE,34); /* Title */ colorMenu(); wattrset(item[0],A_BOLD); mvwprintw(item[0], 1, 9, "<<< CHESS BOARD >>>"); /* Game Mode */ wattrset(item[0],A_NORMAL); mvwprintw(item[0],3, 4,"White vs Engine"); mvwprintw(item[0],4, 4,"Black vs Engine"); mvwprintw(item[0],6, 4,"Chess vs Human"); mvwprintw(item[0],8, 4,"Network Server"); mvwprintw(item[0],9, 4,"Network Client"); mvwprintw(item[0],11,4,"Game Settings"); /* Letters */ wattrset(item[0],COLOR_PAIR(11)); mvwprintw(item[0],3, 4, "W"); mvwprintw(item[0],3, 31, "W"); mvwprintw(item[0],4, 4, "B"); mvwprintw(item[0],4, 31, "B"); mvwprintw(item[0],6, 6, "e"); mvwprintw(item[0],6, 31, "e"); mvwprintw(item[0],8, 12, "S"); mvwprintw(item[0],8, 31, "S"); mvwprintw(item[0],9, 12, "C"); mvwprintw(item[0],9, 31, "C"); mvwprintw(item[0],11, 4, "G"); mvwprintw(item[0],11,31, "G"); refresh(); wrefresh(item[0]); curs_set(0); keypad(stdscr,1); return item; } /*---------------------------------------------------------------------------*/ /* Scroll Menu */ int scrollMenu(WINDOW **item,int count,int menu_start_col) { int selected = 0; colorMenu(); while(TRUE) { switch(getch()) { case KEY_DOWN: wbkgd(item[selected+1],A_NORMAL); wattrset(item[0],COLOR_PAIR(11)); mvwprintw(item[0],3, 4, "W"); mvwprintw(item[0],3, 31, "W"); mvwprintw(item[0],4, 4, "B"); mvwprintw(item[0],4, 31, "B"); mvwprintw(item[0],6, 6, "e"); mvwprintw(item[0],6, 31, "e"); mvwprintw(item[0],8, 12, "S"); mvwprintw(item[0],8, 31, "S"); mvwprintw(item[0],9, 12, "C"); mvwprintw(item[0],9, 31, "C"); mvwprintw(item[0],11, 4, "G"); mvwprintw(item[0],11,31, "G"); wrefresh(item[selected+1]); selected=(selected+count+1) % count; wbkgd(item[selected+1],A_REVERSE|A_BOLD|COLOR_PAIR(13)); wrefresh(item[selected+1]); doupdate(); break; case KEY_UP: wbkgd(item[selected+1],A_NORMAL); wattrset(item[0],COLOR_PAIR(11)); mvwprintw(item[0],3, 4, "W"); mvwprintw(item[0],3, 31, "W"); mvwprintw(item[0],4, 4, "B"); mvwprintw(item[0],4, 31, "B"); mvwprintw(item[0],6, 6, "e"); mvwprintw(item[0],6, 31, "e"); mvwprintw(item[0],8, 12, "S"); mvwprintw(item[0],8, 31, "S"); mvwprintw(item[0],9, 12, "C"); mvwprintw(item[0],9, 31, "C"); mvwprintw(item[0],11, 4, "G"); mvwprintw(item[0],11,31, "G"); wrefresh(item[selected+1]); selected=(selected+count-1) % count; wbkgd(item[selected+1],A_REVERSE|A_BOLD|COLOR_PAIR(13)); wrefresh(item[selected+1]); doupdate(); break; case ESCAPE: clear(); endwin(); exit(1); return -1; break; case ENTER: return selected; break; case XW: selected = 0; return selected; break; case XB: selected = 1; return selected; break; case Xe: selected = 2; return selected; break; case XS: selected = 3; return selected; break; case XC: selected = 4; return selected; break; case XG: selected = 5; return selected; break; }} } /*---------------------------------------------------------------------------*/