Liburan Produktif??

13.51

Apa yang gua lakukan saat liburan? Liburan pertama sebagai mahasiswa tentu ga bakal gua sia-siakan. "Gua harus produktif!", kata gua buat diri gua sendiri. Oleh karena itu, gua udah buat To-do khusus buat liburan. Ini dia!





eh, bukan, bukan yang itu. To-do gua simpel (karena terlalu males buat to-do yang ribet), yaitu : FINISH SOMETHING. Selama liburan gua pengen ngebuat sesuatu, terutama program, dan gua selesein. Pengen belajar HTML5, udah mulai belajarnya, nyoba buat game dengan liat tutorial (liat posting sebelumnya), dan ya! Ini kayaknya yang bakal gua selesein. Harus fokus!!

Tapi ternyata Allah berkehendak lain,



Semua berubah semenjak negara api menyerang, eh, maksudnya semenjak tugas open recruitment CompFest 2013 menyerang.. Compfest, Computer Festival, merupakan acara terbesar Fasilkom UI tiap tahunnya. Gua juga pengen ikut jadi panitia, dan ikut open recruitment-nya. Gua milih divisi IT-Support dan dekor, dan ternyata tugasnya banyak, terutama IT-Support : Bikin halaman web dan satu class dengan bahasa PHP!

Masalahnya gua udah lupa sama yang namanya php, dan baru tau PHP jaman sekarang udah mendukung OOP. Akhirnya, gua lepas belajar HTML5 demi mempelajari PHP...

Dan sekarang, tugas oprek udah selesai semua, udah dikumpulin. Liburan sisa 7 hari lagi. Yah, setidaknya gua udah menyelesaikan sesuatu, dan gua jadi ngerti sedikit tentang PHP terbaru. Jadi, apa aja sih yang udah gua hasilin selama liburan ini?

1. MinesweeperBoard.php

Hasil kerjaan oprek, sebuah kelas sederhana untuk data papan minesweeper.

<?php
/**
 * Menciptakan objek papan minesweeper sederhana. Menyimpan data tiap-tiap 
 * sel dalam array 2D.
 *
 * @author Thirafi Dide
 */
class MinesweeperBoard {

 private $board;    //menyimpan data papan
 private $width = 0;   //lebar papan
 private $height = 0;  //tinggi papan
 
 const boardWidth = 10;  //default ukuran papan
 const boardHeight = 10;
 
 const cellEmpty = "0";  //melambangkan sel kosong
 const cellMined = "x";  //melambangkan sel berisi bom
 
 /**
  * Membangun sebuah papan minesweeper kosong dengan ukuran default
  */
 function __construct() {
  //atur panjang dan lebar dengan ukuran default
  $this->width = self::boardWidth;
  $this->height = self::boardHeight;
  
  //menciptakan papan kosong
  $this->resetBoard();
 }
 
 /**
  * Mengkosongkan papan minesweeper
  */
 public function resetBoard() {
  //menciptakan papan kosong
  $this->board = array();
  for ($i = 0; $i < $this->height; $i++) {
   $this->board[$i] = array();
   for ($j = 0; $j < $this->width; $j++) {
    $this->board[$i][$j] = self::cellEmpty;
   }
  }
 }
 
 /**
  * Validasi koordinat yang dimasukkan. Kordinat yang valid adalah kordinat
  * yang terdapat di dalam papan
  *
  * @param row koordinat baris (ordinat)
  * @param col koordinat kolom (axis)
  * @return true jika koordinat valid, false jika tidak valid
  */
 public function isValidCoord($row, $col) {
  return ($row >= 0) && ($row < $this->height) && ($col >= 0) && ($col < $this->width);
 }
 
 public function placeMine($row, $col) {
  //cek apakah koordinat valid
  if ($this->isValidCoord($row, $col)) {
   //menaruh bom
   $this->board[$row][$col] = self::cellMined;
   
   //menambahkan angka 'hint' di sekeliling bom (3x3)
   $row--;
   $col--;
   for ($i = $row; $i < $row + 3; $i++) {
    for ($j = $col; $j < $col + 3; $j++) {
     //koordinat harus valid
     if ($this->isValidCoord($i, $j)) {
      if($this->board[$i][$j] != self::cellMined) {
       $this->board[$i][$j]++;
      }
     }
    }
   }
  }
 }
 
 public function placeRandomMine($num) {
  //menaruh bom sebanyak $num
  for ($i = 0; $i < $num; $i++) {
   placingSection:
   //mengambil koordinat dalam papan secara acak
   $row = rand(0, $this->height - 1);
   $col = rand(0, $this->width - 1);
   //jika di koordinat sudah ada bom, ambil koordinat lain
   if ($this->board[$row][$col] == self::cellMined) {
    goto placingSection;
   } 
   //menaurh bom di koordinat yang sudah diambil
   $this->placeMine($row, $col);
  }
 }
 
 /**
  * Menggambarkan data papan dalam bentuk string. Setiap sel dilambangkan dengan
  * kurung kotak ('[]') dan isi sel berada diantaranya. Contoh :
  * * [0] menunjukkan sel kosong
  * * [1] menunjukkan ada satu bom di sekitarnya
  * * [x] menunjukkan sel berisi bom
  *
  * Contoh output :
  * [x] [2] [1] [0] [0] [0] [0] [0] [1] [1]<br />
  * [2] [x] [2] [1] [0] [0] [0] [0] [1] [x]<br />
  * [2] [3] [x] [1] [0] [0] [0] [0] [1] [1]<br />
  * [x] [3] [1] [1] [1] [1] [1] [0] [0] [0]<br />
  * [x] [2] [0] [0] [1] [x] [1] [0] [0] [0]<br />
  * [1] [1] [0] [0] [1] [1] [1] [0] [1] [1]<br />
  * [1] [1] [0] [0] [0] [0] [0] [0] [2] [x]<br />
  * [x] [2] [0] [0] [0] [0] [0] [0] [2] [x]<br />
  * [x] [3] [1] [0] [0] [0] [0] [0] [1] [1]<br />
  * [2] [x] [1] [0] [0] [0] [0] [0] [0] [0]<br />
  * 
  *
  * @return penggambaran papan dalam bentuk string
  */
 public function buildBoard() {
  //menaruh data papan di dalam string
  $boardString = "";
  for ($i = 0; $i < $this->height; $i++) {
   for ($j = 0; $j < $this->width; $j++) {
    //data tiap sel ditaruh dalam kurung kotak ('[]')
    $boardString = $boardString . " [" . $this->board[$i][$j] . "]";
   }
   $boardString = $boardString . "<br />";
  }
  //kembalikan data papan dalam bentuk string
  return $boardString;
 }
}

/* FOR TEST ONLY 
$tester = new MinesweeperBoard();
echo $tester->buildBoard() . "<br />";
$tester->placeMine(0,0);
echo $tester->buildBoard() . "<br />";
$tester->placeMine(1,1);
echo $tester->buildBoard() . "<br />";
$tester->placeRandomMine(10);
echo $tester->buildBoard() . "<br />";
*/

Ada yang mau make? Silahkan~~ ga yakin juga sih ada yang butuh ginian

2. Halaman Web

Tugas oprek juga, halaman web mengenai prinsip user interface yang efektif. Gua ga punya web hosting, jadi ga bisa gua share :((

3. Pixel Art

Iseng-iseng, tadinya mau buat jadi grafik di game HTML5, cuma ga jadi. Here my first pixel art ever :3




4. Papercraft

Templatenya bukan buatan gua, gua cuma ngerakit. Tugas oprek dekor compfest. Model atom, maskot compfest tahun lalu.



5. Poster dan CV grafis

Tugas oprek juga, tapi oprek staff BEM Fasilkom UI. Posternya tentang #SavePedagangStasiun, males gua share soalnya jelek gara-gara buatnya dikejar deadline :(( CV-nya juga sederhana karena dikejar deadline juga :((
CV bagaikan surga buat orang kepo


6. Belajar HTML5

Belajar HTML5 masih gua lanjutin, walau jadi lambat gara-gara tugas oprek. Sekarang orangnya udah bisa loncat, udah ada platform-nya, dan backgroundnya gua modif biar makin asoy.

Dengan sangat kreatif gua kasih nama game-nya "Loncat Loncatan"

7. Non-Produktif

Gua berhasil namatin CnC4! Gua berhasil baca habis 188 chapter Beelzebub dalam waktu 1,5 hari! Udah ah ga penting.

Ah iya, gua juga buat blog pribadi dengan isi sangat random. Untungnya masih gua update sampe sekarang.

Ga terlalu produktif sih, tapi lumayan lah. Masih harus belajar banyak untuk memanajemen waktu juga. Tapi yang penting..

Ganbatte!

You Might Also Like

0 komentar

When you think 11 and 12 is close, remember that there is infinite real numbers between them

Still, it's close enough
Diberdayakan oleh Blogger.