Esempio n. 1
0
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));
}
Esempio n. 2
0
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();
}