public void draw(Graphics g){
	final STATE state = this.now_state;
	switch(state){
	    
	case STATE_NORMAL:
	
	    int frame_count = player.get_frame_count();
	
	    int chip_size = MapChip.CHIP_SIZE;//1チップの大きさ
	
	    /* 移動アニメーションのためにオフセットを計算する */
	    double one_frame = (double)chip_size / (double)Frame_Of_Move;
	    double frame_offset = 0;
	
	    if(frame_count < 0) frame_offset = 0;
	    else frame_offset = one_frame * ((double)Frame_Of_Move - (double)frame_count - 1);

	    int dx = Object.DirectionVector[player.get_now_dir().ordinal()][0];
	    int dy = Object.DirectionVector[player.get_now_dir().ordinal()][1];

	    /* 描画する位置は、通常座標から1フレームごとに近づけていく(アニメーション) */
	    int pX = player.get_posX() * chip_size - (int)frame_offset * dx;
	    int pY = player.get_posY() * chip_size - (int)frame_offset * dy;
	

	    /* 左上(原点)とする座標を(offsetX,offsetY)を決定する */
	    int offsetX = Math.min(player.get_start_x() * chip_size - pX,0);
	    offsetX = Math.max(offsetX, MainPanel.WIDTH - ROW * chip_size);
	
	    int offsetY = Math.min(player.get_start_y() * chip_size - pY,0);
	    offsetY = Math.max(offsetY, MainPanel.HEIGHT - COL * chip_size);

	    /* 左上をタイルに変換 */
	    int sx = -offsetX / chip_size;
	    int sy = -offsetY / chip_size;
	    //System.out.println(new Point(sx,sy));
	
	    //画面の範囲内にあるマップチップを描画
	    for(int y = sy; y <= Math.min(sy + DISPLAY_COL,COL - 1); y++){
	    	for(int x = sx; x <= Math.min(sx + DISPLAY_ROW,ROW - 1); x++){
	    	    map_chips[y][x].draw(offsetX,offsetY,g);
	    	}
	    }

	
	    /* 画面の範囲内にあるオブジェクトを描画 */
	    for(int i = 0; i < objects.size(); i++){
		objects.get(i).draw(offsetX,offsetY,g);
	    }

	    break;

	case STATE_STOP://ロード中
	    break;

	}

    }