Ejemplo n.º 1
0
void dealMouse(BALL* ball)
{
    static int iCapture = -1, mx, my;
    int i;
    mouse_msg mouse = {0};
    while (mousemsg())
    {
        double dx, dy;
        mouse = getmouse();
        dx = (mouse.x - mx) * 1.0f;
        dy = (mouse.y - my) * 1.0f;
        mx = mouse.x;
        my = mouse.y;

        if(iCapture == -1 && mouse.msg == mouse_msg_down)
        {
            for(i = MAXBALL - 1; i > -1; --i)
                if(ball[i].resmouse(mouse, dx, dy))
                {
                    iCapture = i;
                    break;
                }
        }
        else if (iCapture >= 0 && (mouse.msg == mouse_msg_up || mouse.msg == mouse_msg_move) )
        {
            if(ball[iCapture].resmouse(mouse, dx, dy) == 0)
                iCapture = -1;
        }
    }
    if (iCapture >= 0)
    {
        mouse.msg = (mouse_msg_e)0;
        ball[iCapture].resmouse(mouse, 0, 0);
    }
}
Ejemplo n.º 2
0
// 主函数
int main( int argc, char* argv[] ) {
    int i, ms_x = -1024, ms_y = -1024, exitflag = 0;
    int fps = 60;
    double dtime;

    int mode = preinit( argc, argv ); // 记录初始化模式
    if ( mode < 0 ) return 0;

    randomize(); // 初始化随机种子
    initgraph( -1, -1 ); // 打开图形窗口,以全屏模式

    showmouse( mode );
    sc_width = getwidth();
    sc_heigh = getheight();

    // 初始化所有星星
    for ( i = 0; i < g_max; i++ ) {
        InitStar( i );
        star[i].x = randomf();
    }
    // 绘制星空,按任意键或移动鼠标退出
    setfont( 12, 6, "宋体" );
    setrendermode( RENDER_MANUAL );
    dtime = fclock();
    while ( kbmsg() ) getkey();

    for ( ; !exitflag && is_run() && kbmsg() == 0; delay_fps( fps ) ) { //每秒画120帧,kbhit(1)是获取键盘任意键的消息,详见pdf
        // 如果有鼠标消息
        while ( mousemsg() ) {
            mouse_msg msg = getmouse();
            if ( ms_x <= -1024 ) {
                ms_x = msg.x;
                ms_y = msg.y;
            }
            // 处理鼠标,移动超出范围就退出
            if ( mode == 0 ) { // 仅全屏模式才处理鼠标
                int x = msg.x, y = msg.y;
                x -= ms_x;
                y -= ms_y;
                if ( x * x + y * y > 400 ) exitflag = 1;
            }
        }
        // 显示星星
        double dt = 1.0 / fps; //fclock() - dtime;
        dtime += dt;
        for ( int i = 0; i < g_max; i++ ) {
            MoveStar( i, dt );
        }
        // 显示FPS
        {
            char str[60];
            sprintf( str, "%8.2f FPS", getfps());
            outtextxy( 0, 0, str ); //显示fps
        }
    }
    closegraph(); // 关闭图形窗口
    return 0;
}
Ejemplo n.º 3
0
bool run_game(){

	mouse_msg msg = {0};

	gen_pos(pos);

	while(mousemsg()){
		msg = getmouse();

		if(msg.is_down() && get_current_status() == C_BLACK_S ){

			C_POS c_pos;
			int board_x,board_y;
			
			get_right_pos(msg.x,msg.y,&board_x,&board_y);

			c_pos.x = pos[board_x][board_y].x;
			c_pos.y = pos[board_x][board_y].y;

			draw_chess(&c_pos,BLACK);
			update_board_status(board_x,board_y,C_BLACK);
			if(is_win(board_x,board_y,C_BLACK)) xyprintf(480,120,black_win);
            
			update_status(white_status);
		}

		else if(msg.is_down() && get_current_status() == C_WHITE_S){
			C_POS c_pos;

			int board_x,board_y;

			get_right_pos(msg.x,msg.y,&board_x,&board_y);
			c_pos.x = pos[board_x][board_y].x;
			c_pos.y = pos[board_x][board_y].y;

			draw_chess(&c_pos,WHITE);
			update_board_status(board_x,board_y,C_WHITE);
			if(is_win(board_x,board_y,C_WHITE)) xyprintf(480,120,white_win);

			update_status(black_status);
		}


	}


	return true;
}