⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 animate.c

📁 学习c++必备
💻 C
字号:
/* * animate.c - part of the chess demo in the glut distribution. * * (C) Henk Kok (kok@wins.uva.nl) * * This file can be freely copied, changed, redistributed, etc. as long as * this copyright notice stays intact. */#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>#include "chess.h"#define MOVE_FRAC 8int frac;int stage;int piece;int piece2;int X, Y, NX, NY, XD, YD;GLfloat CX1, CY1;GLfloat CX2, CY2, CZ2;FILE *inpf = NULL;extern int path[10][10];extern int board[10][10];extern int cycle[10][10], cyclem, cycle2;extern int stunt[10][10], stuntm, stunt2;void read_move(void){    char buf[256];    if (!inpf)	inpf = fopen("chess.inp", "r");    if (!inpf)    {	fprintf(stderr, "Could not open file chess.inp for reading.\n");	exit(1);    }    if (feof(inpf))	return;    fgets(buf, 200, inpf);    CX1 = NX = X = buf[0]-'a'+1;    CY1 = NY = Y = buf[1]-'0';    CX2 = XD = buf[2]-'a'+1;    CY2 = YD = buf[3]-'0';    piece = board[X][Y];    piece2 = board[XD][YD];    board[X][Y] = 0;    board[XD][YD] = 0;    solve_path(X, Y, XD, YD);    stage = 0;    frac = 0;    cyclem = cycle[X][Y];    cycle2 = cycle[XD][YD];    stuntm = stunt[X][Y];    stunt2 = stunt[XD][YD];    switch(path[X][Y])    {        case NORTH:	NY--; break;        case SOUTH:	NY++; break;        case WEST:	NX--; break;        case EAST:	NX++; break;        case NORTHWEST:	NX--; NY--; break;        case NORTHEAST:	NX++; NY--; break;        case SOUTHWEST:	NX--; NY++; break;        case SOUTHEAST:	NX++; NY++; break;    }    if (NY == YD && NX == XD)	stage = 1;}void proceed(void){    frac ++;    if (stage == 1)    {	if (piece2 && frac <= MOVE_FRAC * 2)	{	    CZ2 = -((GLfloat) frac)/MOVE_FRAC/1.8;	    return;	}	frac = 0;	piece2 = 0;	stage ++;	return;    }    else if (stage == 3)	return;    else	CZ2 = 0.0;    if (frac >= MOVE_FRAC)    {	frac = 0;	X = NX;	Y = NY;	if (NX == XD && NY == YD)	{	    board[XD][YD] = piece;	    cycle[XD][YD] = cyclem;	    stunt[XD][YD] = stuntm;	    piece = 0;	    read_move();	    return;	}        switch(path[X][Y])        {            case NORTH:		NY--; break;            case SOUTH:		NY++; break;            case WEST:		NX--; break;            case EAST:		NX++; break;            case NORTHWEST:	NX--; NY--; break;            case NORTHEAST:	NX++; NY--; break;            case SOUTHWEST:	NX--; NY++; break;            case SOUTHEAST:	NX++; NY++; break;        }	if (NX == XD && NY == YD)	    stage ++;    }    CX1 = ((GLfloat) (X*(MOVE_FRAC-frac) + NX*frac))/ MOVE_FRAC;    CY1 = ((GLfloat) (Y*(MOVE_FRAC-frac) + NY*frac))/ MOVE_FRAC;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -