static void display_grid_static(t_game *game, t_pos pos) { int i; if (!pos.col) return (ft_putchar('|')); if (!pos.row) { i = game->wide + 1; while (i--) { if (pos.col == game->pos.col && !i) ft_putchar('|'); else ft_putchar('-'); } return ; } if (pos.row == game->pos.row + 1) return (display_col_number(game, pos)); if (pos.row) return (display_pawn(game, pos)); }
void display_chessboard(Chessboard *cboard) { glPushMatrix(); glTranslatef(cboard->pos[0], cboard->pos[1], cboard->pos[2]); GLdouble x, y; int color = 0; int xcell = -1; int ycell; GLdouble step = cboard->cell_width; for (x=-0.5f; x<0.5f; x+=step){ xcell++; ycell = NUM_CELLS; color = 1 - color; for (y=-0.5f; y<0.5f; y+=step){ ycell--; /* flip color */ color = 1 - color; /* choose material color */ if (CELL_NONE != cboard->cells_highlighted[CELL(xcell, ycell)]) { glMaterialfv(GL_FRONT, GL_AMBIENT, cboard->color_highlighted); glMaterialfv(GL_FRONT, GL_DIFFUSE, cboard->color_highlighted); glMaterialfv(GL_FRONT, GL_SPECULAR, cboard->color_specular); glMaterialf(GL_FRONT, GL_SHININESS, 10.0f); } else { if (cboard->cell_highlighted == CELL(xcell, ycell)) { glMaterialfv(GL_FRONT, GL_AMBIENT, cboard->color_selected); glMaterialfv(GL_FRONT, GL_DIFFUSE, cboard->color_selected); glMaterialfv(GL_FRONT, GL_SPECULAR, cboard->color_specular); glMaterialf(GL_FRONT, GL_SHININESS, 10.0f); } else { if (color) { glMaterialfv(GL_FRONT, GL_AMBIENT, cboard->color_dark); glMaterialfv(GL_FRONT, GL_DIFFUSE, cboard->color_dark); glMaterialfv(GL_FRONT, GL_SPECULAR, cboard->color_specular); glMaterialf(GL_FRONT, GL_SHININESS, 60.0f); } else { glMaterialfv(GL_FRONT, GL_AMBIENT, cboard->color_clear); glMaterialfv(GL_FRONT, GL_DIFFUSE, cboard->color_clear); glMaterialfv(GL_FRONT, GL_SPECULAR, cboard->color_specular); glMaterialf(GL_FRONT, GL_SHININESS, 40.0f); } } } /* draw cell */ glBegin(GL_QUADS); glNormal3f(0.0,0.0,1.0); glVertex3d(x, 0, y); glVertex3d(x+step, 0, y); glVertex3d(x+step, 0, y+step); glVertex3d(x, 0, y+step); glEnd(); /* draw pawn at cell */ void *p = get_piece_addr(cboard->bitboard, xcell, ycell); if (p != NULL) { Pawn *pawn = *((Pawn **) p); chessboard_set_piece_at_cell(cboard, pawn, CELL(xcell, ycell)); display_pawn(pawn, CELL(xcell, ycell) == cboard->cell_selected ? PAWN_SELECTED : PAWN_NORMAL ); } } } glPopMatrix(); }