class MyBall {
    public static void main (String[] args) {
	// 枠のサイズの指定
	int width = 46;
	int height = 20;
	
	// ボールの座標
	int x = 0;
	int y = 0;
	
	// ボールの速度 (x方向とy方向)
	int vx = 1;
	int vy = 1;
	
	// ボールの移動をくり返し続ける (プログラムを止めるにはCtrl+Cを押す)
	while(true) {
	    
	    // ボールを移動
	    x = x + vx;
	    y = y + vy;
	    
	    // 枠外にはみでたら進む方向を逆にする (速度の正負を反転させる)
	    if (x < 0 || x > width) {
		x = x - vx;
		vx = -vx;
		x = x + vx;
	    }
	    if (y < 0 || y > height) {
		y = y - vy;
		vy = -vy;
		y = y + vy;
	    }
	    
	    // 画面をクリアするおまじない
	    System.out.print("\u001b[H\u001b[2J");
	    
	    // 枠を書き、ボールを表示する
	    for (int i = 0; i <= width+2; i++)
		System.out.print("-");
	    System.out.println();
	    for (int i = 0; i <= height; i++) {
		System.out.print("|");		
		for(int j = 0; j <= width; j++) {
		    // 座標 i,j の位置にボールがあるならば o を表示、
		    // なければ空白を表示
		    if (i == y && j == x)
			System.out.print("o");
		    else
			System.out.print(" ");
		}
		System.out.print("|");		
		System.out.println();		
	    }
	    for (int i = 0; i <= width+2; i++)
		System.out.print("-");
	    System.out.println();
	    
	    // 時間稼ぎ (0.2秒) をするためのおまじない
	    try {
		Thread.sleep(200);
	    }
	    catch(Exception e) {
	    }
	}
    }
}
