{Kurung Kurawal}

Menggambar Monas

Post ini sebenarnya bukan berisi tutorial atau sejenisnya. Hanya sekedar penasaran aja. Ada kenalan yang bertanya mengenai algoritma pemrograman menggambar Monas dengan barisan karakter bintang ‘*’.

Gambar di atas adalah hasil yang diinginkan. Dari situ saya tertarik mencoba membuatnya. Namun saya tidak akan mengikuti aturan main dari gambar di atas, karena saya menulis ini bukan untuk mengerjakan tugas kuliah.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package whatever.name;
 
/**
 * Created with IntelliJ IDEA.
 * Author   : ali LIM ( konglie@outlook.com )
 * Website  : http://www.konglie.web.id
 * Date     : 1/8/2015
 * Time     : 11:03 PM
 * PERIZINAN
 * Saya bukan Pengacara yang mengerti Bahasa Hukum,
 * Namun, program ini saya berikan untuk tujuan pembelajaran
 * dan bagian atau seluruh code di file ini
 * TIDAK BOLEH didistribusikan untuk tujuan komersil atau
 * berbayar, tanpa izin tertulis dari saya.
 * LICENSE
 * I am not a lawyer, but part of or all of this source code
 * MAY NOT be distributed for commercial purpose, without
 * written permission from me.
 */
public class Monas {
    private static final char fillChar = '*';
    private static final int BaseLength = 64;
 
    public static void render(){
        int i;
 
        // puncak
        for(i = 2; i <= 6; i+=2){
            centerize(i);
        }
 
        // bawah puncak
        for(i = 24; i >= 20; i-=2){
            centerize(i);
        }
 
        // tiang
        for(i = 0; i < 24; i++){
            centerize(6);
        }
 
        // dasar tiang
        for(i = 62; i >= 26; i -= 6){
            centerize(i);
        }
 
        // dasar tiang dengan bolongan tengah
        for(i = 16; i >= 10; i -= 6){
            centerize(BaseLength, i, 4);
        }
 
        // pondasi bawah
        for(i = 62; i <= 64; i +=2 ){
            centerize(i);
        }
    }
 
    public static void centerize(int fill){
        centerize(BaseLength, fill, 0);
    }
 
    public static void centerize(int length, int fill, int centerspace){
        int fillLen = fill + centerspace;
        int paddLen = (length - fillLen) / 2;
 
        String padd = (paddLen == 0) ? "" : String.format("%" + paddLen + "s", " ");
        String print = "";
        if(centerspace == 0) {
            print = String.format("%" + fill + "s", fillChar).replace(' ', fillChar);
        } else {
            String centerFill = String.format("%" + centerspace + "s", " ");
            print = String.format("%" + (fill/2) + "s", fillChar).replace(' ', fillChar);
            print = String.format("%s%s%s", print, centerFill, print);
        }
 
        System.out.println(padd + print + padd);
    }
}

Hasilnya dapat dilihat di sini.
Semoga tulisan ini ada gunanya.