arrokh
arrokh
arrokh.
9 posts
self-determination. write content in Ind-Eng.
Don't wanna be here? Send us removal request.
arrokh · 8 years ago
Text
Simpi more Simply - BETA [OUTDATE]
“Simpi more Simply” adalah aplikasi berbasis desktop yang digunakan untuk memudahkan pengelolahan data Logbook yang ada di http://elektro.um.ac.id/simpi/. Aplikasi ini BUKAN APLIKASI RESMI dari Jurusan Teknik Elktro UM, sehingga kalian tidak harus menggunakan aplikasi ini.
Tumblr media
Update 28-06-2017
Update 29-06-2017
Update 26-02-2020
“Aplikasi ini sudah tidak dapat digunakan, karena telah dilakukan pembaruan pada aplikasi simpi yang baru, hehe :)”
CARA PENGGUNAAN
Tutorial Simpi more Simply
youtube
Menambahkan, merubah dan menghapus data
[VIDEO]
Import dan Export data [VIDEO]
Download
FAQ
Apa itu “Simpi more Simply”?
“Simpi more Simply” adalah aplikasi berbasis desktop yang digunakan untuk memudahkan pengelolahan data Logbook yang ada di http://elektro.um.ac.id/simpi/. Aplikasi ini BUKAN APLIKASI RESMI dari Jurusan Teknik Elktro UM, sehingga kalian tidak harus menggunakan aplikasi ini.
Kenapa mengembangkan “Simpi more Simply”?
Pengembangan aplikasi ini awalnya untuk memudahkan kami mengelola data logbook yang ada di web SIMPI. Kami biasa mengisi data kegiatan (lampiran) di dokumen word (di Google Drive), lalu kami share alamatnya ke pembimbing. Cukup merepotkan bagi kami jika harus mengisi dua kali, yaitu di web SIMPI dan dokumen word dengan data yang sama (kecuali data Kendala dan Solusi), tiap hari, minggu atau mungkin bulan. Selain itu, pada web SIMPI kita tidak dapat meng-edit data yang telah ditambahkan.
Jadi, aplikasi ini kami gunakan untuk import/export data format excel dan csv serta edit data yang ada di web Simpi, karena kami tidak bisa (dan biasa) rutin mengisi data di Log Book.
Dengan dibagikannya aplikasi ini, kami berharap dapat memudahkan teman-teman yang (mungkin) memiliki kendala yang sama dengan kami.
Siapa yang mengembangkan?
Noor Octavian Anwar - S1 Pend. TI 2014 Off E 
Rahadyan Fannani Arif - S1 Pend. TI 2014 Off C
Apa saja fiturnya?
Dengan aplikasi ini, kalian dapat:
-  Import dan Export data LogBook dalam format Excel dan CSV -  CRUD data LogBook -  Tidak perlu berulang kali (simpi > konsultasi > logbook)
Bagaimana cara menggunakannya?
1. Kalian harus mendaftar di alamat : http://max-edu.pe.hu/register/ 2. Dengan mendaftar maka kami (Pengembang) dan kamu (Pengguna) bersedia dengan Peraturan dan Persetujuan Penggunaan yang tercantum di bagian bawah halaman ini. 3. Selesai download, silahkan instal atau extract lalu buka aplikasi. 4. Masukkan email yang sudah kalian daftarkan di poin 1. 5. Masukkan NIM dan Password yang kamu gunakan login di http://elektro.um.ac.id/simpi/ 6. Selamat menggunakan “Simpi more Simply”
Apakah saat login, NIM dan Password kami akan tersimpan di aplikasi?
Iya, aplikasi ini otomatis akan menyimpan NIM dan Password pengguna dalam file setting.txt yang ada di directory yang sama dengan file .exe, dengan maksud memudahkan pengguna agar tidak perlu mengetikkan NIM dan Password tiap kali akan login. Namun, Pengembang tidak menyimpan NIM dan Password pengguna dalam bentuk apapun.
Kenapa kami harus mendaftar terlebih dahulu di http://max-edu.pe.hu/register/index.php?
Kami ingin melakukan pendataan siapa saja dan berapa banyak pengguna aplikasi ini. 
Bagaimana konsep kerja “Simpi more Simply”?
Keterangan : Simpi more Simply = SMS Sistem Informasi Mahasisa Praktik Indsutri = SIMPI Mahasiswa = MHS
Login : MHS > Login > SMS > Melakukan konfirmasi > SIMPI > Memberikan session > SMS
CRUD : MHS > Memilih operasi CRUD > SMS > Melakukan operasi CRUD > SIMPI > Merespon > SMS > Ditampilkan > MHS
Proses import-nya kok rumit yah -.-a ?
Proses import pada dasarnya hanya akan di lakukan oleh pengguna yang sebelumnya belum pernah mengisi data di web SIMPI, dan telah mengisi data di dokumen (seperti lampiran), sehingga data yang diinputkan relatif lebih banyak. Tapi, bila dibandingkan dengan proses input manual, input data dengan import jauh lebih banyak memangkas waktu, jadi lebih cepat.
Proses import tersebut mungkin akan lebih kami simplifikasi lagi bila ternyata banyak teman-teman yang menggunakan request hal tersebut.
Apakah saya harus selalu import data tiap menggunakan aplikasi ini?
Tentu saja tidak. Proses import digunakan hanya untuk memudahkan meng-inputkan data yang banyak ke simpi. Bila kalian termasuk anak-anak rajin dan rutin mengisi Logbook di web SIMPI (Subhanallah), kalian bisa skip proses import dan langsung ke menu Logbook.
Berarti saya dapat langsung mengolah data yang sudah ada tanpa harus melakukan import?
Yeeess!
Kapan menggunakan export?
Export digunakan bila kalian ingin menambahkan data kegiatan yang di Web SIMPI ke lampiran laporan kalian. Sama seperti import, untuk memudahkan pengguna, kalian cukup copy-paste data yang ada di file hasil export, tidak perlu (mungkin) copy-paste dari halaman Logbbok di Web SIMPI.
Apa yang pelu saya perhatikan saat menggunakan aplikasi ini?
-  Kami menghimbau untuk tidak melakukan perubahan data pada Web SIMPI dan konsisten hanya melakukan perubahan data pada aplikasi ini. -   Aplikasi ini memastikan bahwa tidak terdapat tanggal yang sama dalam data yang diolah, oleh karena itu, pastikan bahwa data yang di import tidak terdapat duplikasi tanggal. -   Saat melakukan import, aplikasi tidak akan menambahkan data bila data dengan tanggal yang sama telah ada. -   Aplikasi hanya akan berjalan saat terdapat koneksi internet. -   Aplikasi ini akan menyimpan NIM dan Password untuk memudahkan proses login. -   Aplikasi memiliki database local untuk backup data server.
PERATURAN DAN PERSETUJUAN PENGGUNAAN
Dengan menggunakan aplikasi ini (Pengembang sebagai Kami), maka pengguna setuju bahwa:
Pengguna terlebih dahulu mendaftarkan alamat email di alamat berikut ini: http://max-edu.pe.hu/register/
Pengembang tidak akan membocorkan data yang didaftarkan di alamat berikut : http://max-edu.pe.hu/register/
Tidak akan menyalahgunakan aplikasi ini untuk tindakan yang tidak bertanggung jawab.
Pengembang tidak bertanggung jawab dengan data yang diinputkan oleh pengguna.
Pengguna sadar bahwa aplikasi ini masih dalam tahap Beta, sehingga siap dengan resiko yang mungkin terjadi.
Pengguna setuju untuk menyimpan NIM dan Password pada file setting.txt untuk memudahkan proses Login.
KRITIK, SARAN DAN INFO?
Kamu bisa komentar di bawah post ini atau mengirim email ke: alv1n[at]live.com atau rahadyan.fn [at] outlook.com
0 notes
arrokh · 8 years ago
Photo
Tumblr media
GDL #1 – Kenalan dengan C#
Halo Semua! Kali ini kita akan kenalan dengan salah satu bahasa pemrograman yang menurut survei tiobe.com (hingga bulan Juni 2017) masuk jajaran 5 besar bahasa pemrograman terpopuler di dunia, yaitu... C#!. 
Tumblr media
C# atau dibaca ‘see sharp’ (jangan ‘ce pager’ yaa), merupakan bahasa pemrograman yang dikembangkan oleh Microsoft pada tahun 2000 silam. C# termasuk bahasa pemrograman yang mendukung multi-paradigm, atau mendukung lebih dari satu paradigma (cara pandang pemrograman dalam menyelesaikan suatu permasalahan) pemrograman, diantaranya strong typing, imperative, declarative, functional, generic, object-oriented dan component-oriented programming. Berikut ini garis besar maksud dari paradigma-paradigma tersebut.
Tumblr media
Strong typing
Yang dimaksud dengan strong typing disini adalah kita harus menuliskan kode kita secara konsisten, baik saat mendeklarasikannya atau menggunakannya, harus memiliki tipe data dan memberikan nilai yang sesuai dengan tipe data variabel tersebut. Contoh nya seperti kode dibawah ini:
int tinggi = 120 + “cm”;
Kode diatas error, karena kita mencoba menggabungkan nilai numerik dengan teks pada variabel numerik.
String nama = “Eceng Gondok”; Nama = “Nasi Goreng”
Kode diatas error, karena kita memanggil variabel yang belum dideklarasikan. Kalau kalian perhatian ‘nama’ dan ‘Nama’ tidak dianggap sama walaupun karakternya sama.
Masih ada banyak contoh lainnya, lanjutkan saja baca dan ngodingnya agar makin rutin menemukan error ini :p.
Tumblr media
Imperative
Pada paradigma ini, kita akan menuliskan kode program yang mendeskripsikan dengan jelas alur program, setiap tahap-tahapnya secara detil, yang harus diproses komputer untuk menyelesaikan suatu problem. Hal ini mengacu ke algoritma pemrograman. Contoh kode disadur dari https://timross.wordpress.com/2010/04/05/an-example-of-functional-vs-imperative-programming-in-c/ .
public int[] Translate(string word) { ArrayList numbers = new ArrayList(); foreach (char character in word) { foreach(KeyValuePair key in keys) { foreach(char c in key.Value) { if(c == character) { numbers.Add(key.Key); } } } } return (int[]) numbers.ToArray(typeof (int)); }
Tumblr media
Declarative
Paradigma ini memiliki kesamaan seperti Imperativ, hanya saja kita dapat lebih ringkas saat mendeskripsikan tindakan yang akan dilakukan program.
Pada paradigma ini, kode program diatas (yang ada di imperative) ditulis dengan pendekatan visual atau bahasa manusia, seperti menggunakan LINQ atau XAML saat menggunakan .NET. Konsepnya sama seperti saat kita ingin mengambil data dari data base menggunakan bahasa SQL. Kode program disadur dari http://www.informit.com/articles/article.aspx?p=1330154&seqNum=4
Contoh kode imperative
List newList = new List(); foreach (var item in lists) { foreach (var number in item) { if (number % 2 == 0) { newList.Add(number); } } } newList.Reverse();
Contoh kode declarative
var query = from list in lists from num in list where num % 2 == 0 orderby num descending select num;
Jadi declarative lebih condong menggunakan LINQ. Karena memang pada dasarnya LINQ sendiri menggunakan paradigma declarative.
Tumblr media
Functional
Merupakan paradigma yang memperlakukan proses komputasi sebagai fungsi matematika. Dengan paradigma ini, programmer akan melibatkan penyusunan problem sebagai suatu fungsi yang nantinya dieksekusi. Programmer juga  mendefinsikan dengan tepat inputan fungsi serta tipe data dan nilai kembali dari pemanggilan fungsi tersebut. Functional biasa menggunakan rekursif atau pemanggilan fungsi dalam fungsi sebagai perulangan dalam menemukan solusi dari problem yang ada. Jadi, definisikan inputnya, prosesnya lalu outputnya.
Contoh kode menggunakan perulangan rekursif
static int Factorial(int n) { return n < 1 ? 1 : n * Factorial(n - 1); }
Generic
Paradigma ini memungkinkan kita mendefinisikan struktur data atau class tanpa terpaku pada tipe data yang digunakan atau diolah. Hal ini serupa dengan template yang ada di C++. Contohnya seperti class List, yaitu suatu class struktur data yang dapat menampung data dengan tipe data apa saja, hanya saja operasinya tetap sama, seperti mengakses array, menghapus, atau menambah. Jadi, kita dapat membuat suatu class atau fungsi yang dapat mengolah berbagai macam tipe data. Paradigma ini akan sering kita jumpai dalam proses pembuatan game. Berikut ini contoh kode yang disadur dari https://www.tutorialspoint.com/csharp/csharp_generics.htm
public class MyGenericArray { private T[] array; public MyGenericArray(int size) { array = new T[size + 1]; } public T getItem(int index) { return array[index]; } public void setItem(int index, T value) { array[index] = value; } }
Tumblr media
Object-oriented
Paradigma ini pada dasarnya meng-object-kan segala sesuatu yang ada di program kita sebagai pendekatan dalam menyelesaikan problem yang ada. Object ini memiliki field dan behaviour. Bila kita ambil contoh manusia sebagai object, maka ia memiliki field tinggi dengan nilai 170, nama dengan nilai Resa, dsbnya. Sedangkan behaviour yang dimiliki seperti berjalan, makan, berlari, tidur dsb. Paradigma ini akan kita bahas lebih detail di post-post berikutnya.
Component-oriented programming
Paradigma ini menggunakan pendekatan reuse-based dalam mendefinisikan, mengimplementasi serta menyusun komponen yang independen yang nanti digunakan dalam system. Kita akan banyak menggunakan paradigma ini karena konsep ini digunakan Unity3D dalam pemberian behaviour kepada object-object yang ada dalam game.
Oh iya, kalian ndak perlu gundah bila belum betul-betul memahami paradigma-paradigma diatas. Lanjutkan saja proses belajar kalian, lama-lama juga paham.
Arsitektur dan Kompilasi
C# juga salah satu bahasa yang didesain untuk CLI atau Common Language Infrastructure, yaitu standarisasi  teknis yang dikembangkan oleh Microsoft yang intinya bahasa yang dicompile dapat berjalan di platform komputer lain tanpa harus di tulis ulang. Beberapa framework yang mengimplementasikan CLI diantaranya .NET Framework, Mono, DotGNU dan Portable.NET. Kita akan bahas beberapa framework barusan.
.NET Framework adalah software framework yang didevelop Microsoft untuk mengembangkan software yang berjalan di platform Windows. Framework ini sudah terintegrasi dalam Visual Studio, sehingga seluruh bahasa yang didukung seperti C#, C++, VB, F# dan J# dapat menggunakannya. Jadi hal ini semacam paket lengkap dari Microsoft untuk developer yang ingin mengembangkan software untuk platform Windows atau Windows Phone.
Tumblr media
https://en.wikipedia.org/wiki/File:Overview_of_the_Common_Language_Infrastructure.svg
Sedangkan, Mono Framework adalah proyek open-source Xamarin dengan tujuan mengembangkan Ecma standard-compilant yang compatible dengan .NET Framework. Hal ini menjadikan aplikasi yang dikembangkan dengan .NET Framework dapat berjalan cross-platform. Dengan dukukan Mono Framework, kita bisa mengembangkan aplikasi hybrid rasa native untuk platform Android dan IOS menggunakan C# di IDE Visual Studio 2015 keatas. Hal tersebut terjadi berkat kerja sama Microsoft dengan Xamarin (baca: akusisi). Dan... Gratis. Yeay!
Unity3D merupakan game-engine yang dikembangkan menggunakan bahasa C++. Kode yang kita tulis menggunakan C# (atau JavaScript) akan berjalan diatas framework Mono atau .NET., dalam arti yang menjalan kan kode kita bukan kode Unity3D sendiri. Saat kita menjalankan game kita di Editor Unity, kode kita akan di compiled menggunakan Mono versi 3.5, yang memiliki kompabilitas dengan .NET Framework 3.5 atau CLR 2.0. Kode tersebut akan di compile berdasarkan target platformnya. Target platform Windows dan Android akan dikompilasi dengan JIT (Just-in-time) sedangkan IOS dengan kompilasi AOT oleh Mono.
Jadi, arsitektur dan model kompilasi tersebut yang menjadikan Unity3D dapat berjalan diberbagai platform (syarat dan ketentuan berlaku).
Oke, sekian untuk post kali ini. Sampai jumpa di post berikutnya!
Tumblr media
Referensi
http://dekodex.com/2016/01/17/mengenal-c-untuk-pemula/
https://timross.wordpress.com/2010/04/05/an-example-of-functional-vs-imperative-programming-in-c/
http://www.informit.com/articles/article.aspx?p=1330154&seqNum=4
https://www.codeproject.com/Articles/375166/Functional-programming-in-Csharp
https://www.tutorialspoint.com/csharp/csharp_generics.htm
https://en.wikipedia.org/wiki/C_Sharp_(programming_language)
https://en.wikipedia.org/wiki/Strong_and_weak_typing
https://en.wikipedia.org/wiki/Imperative_programming
https://en.wikipedia.org/wiki/Declarative_programming
https://en.wikipedia.org/wiki/Functional_programming
https://en.wikipedia.org/wiki/Generic_programming
https://en.wikipedia.org/wiki/Object-oriented_programming
https://en.wikipedia.org/wiki/.NET_Framework
https://en.wikipedia.org/wiki/Common_Language_Infrastructure
https://en.wikipedia.org/wiki/Mono_(software)
http://www.mono-project.com/docs/about-mono/dotnet-integration/
 /****** READ ME ******/
Ada kritik dan saran? Silahkan isi komentar dibawah ya J   Yow! Terimakasih telah berkunjung!
/****** BACA YA ******/
0 notes
arrokh · 8 years ago
Photo
Tumblr media
GDL #0 – Announcement for Gem Dev Log Series
Halo semua! Setelah sekian lama ndak ngemong blog ini, kali ini saya bermaksud ngasih announcement tentang series baru yang berjudul “Gem Dev Log” (yeah!). Rencananya, series ini akan berisi tentang sharing pengalaman dan sedikit pengetahuan yang saya dapat sejak memutuskan jadi Game Developer (ea~~~). Jadi mohon maklumi kalau kontennya kadang melebar, Sebenarnya udah lama kepingin nyusun series dengan topik ini, tapi ndak pernah sempet. Sekarang, mumpung lagi liburan (baca: magang), dan punya cukup banyak waktu luang, akhirnya saya putuskan sekarang lah saatnya. Hehe.
Dalam series ini, kita akan belajar membuat game menggunakan Unity3D sebagai engine gamenya, dan C# sebagai bahasa pemrogramannya. Tapi, bagi kalian yang merasa belum cukup jago codingnya, tenang aja, series ini akan di mulai dengan pengenalan C# dari awal hingga ke tahap yang saya rasa cukup untuk basic membuat logic di game yang akan kita buat nantinya :)
Kenapa menggunakan Unity3D?
Tumblr media
So far, Unity3D merupakan game engine yang paling pas untuk belajar mengembangankan game atau bahkan untuk kalian yang berminat masuk ke industri game (at least in my opinion :p). Sebenarnya ada banyak sekali game engine yang bisa kita digunakan, seperti: Adobe Animate (Flash), Unreal Engine, GameMaker, Haxe, Phaser.JS, Construct, dan lain lain. Lalu kenapa kok pakai Unity3D? Selain 2 hal diatas, Unity3D punya banyak keunggulan, diantaranya :
Gratis
Yap, game engine ini gratis...tis, walaupun ada juga versi berbayarnya. Tapi dengan free version pun, kita sudah bisa membuat game sekelas AAA Game loh (Syarat dan ketentuan berlaku).
Didukung pengembang maupun komunitas
Pengembangnya Unity3D ini loman (baca: baik) banget ke game developer. Di situsnya ada banyak resource baik berupa video, asset dan blog yang dapat kita gunakan untuk belajar. Kalian wajib lah ya belajar-belajar dari sana. Nah, kalao bedanya sama series ini, series ini pakai bahasa Indonesia dan dibumbuhi pengalaman penulis :p. Ya, carilah ilmu dari mana saja, bahkan dari blog reot ini, hhe. Selain itu Unity3D juga menyediakan forum buat penggunanya, mantep betul. Oh iya, kamu juga bisa masuk group Facebook UNITY 3D Developers Indonesia loh, group ini termasuk yang paling aktif berdiskusi terkait game development pake Unity3D.
Sangat terdokumentasi
Masih di situs Unity3D, kamu bisa baca dokumentasi yang lengkap banget, mulai dari manual penggunaanya sampai dokumentasi classnya.
Multi-platform
Dengan Unity3D, kalian bisa dengan mudah (Syarat dan ketentuan berlaku, lagi :p) me-deploy game kalian ke PC (Windows atau Mac), Web, Android, IOS bahkan console. Unity3D terbaru juga support platform VR dan Hololens nya Microsoft. 
Integrasi dengan software lain
Unity3D juga terintegrasi dengan software-software semacam Blender, Photoshop. Jadi kamu bisa mengolah model 3d atau file psd, dan setelah di save, Unity3D akan mengenalinya. Selain itu Unity3D support macam-macam format image, audio, video dan text. 
Editor yang (super duper) powerfull
Ini salah satu keunggulannya yang jarang ada di Game Engine lain. Jadi Editornya Unity3D ini bisa kita rancang sedemikian rupa sehingga dapat meningkatkan produktivitas selama ngembangin game. Hal ini sangat berfungsi saat kalian ingin membuat level editor atau item editor yang ada di game kalian. 
Asset Store
Atau bisa disebut Pasarnya Unity3D. Di sini kamu bisa cari assets dengan berbagai macam rupa dan harga. Unity3D juga menyediakan assets gratis (+ keren) buat kita gunakan selama belajar atau membuat prototype game. Jadi programmer bisa fokus sama mekanik game sembari menunggur artis membuat art game. 
C#!
Unity3D menggunakan bahasa C# dan JavaScript (serta Boo, dulu) sebagai bahasa scripting untuk membuat logic dalam game engine ini. Kita akan fokus ke C# yang keunggulannya akan dijelas di bagian berikutnya. Yang jelas ini jadi keunggulan Unity3D :v. #wkwkwkLand 
Kenapa menggunakan C#? 
Tumblr media
Dulu, waktu memutuskan menjadi Game Developer dan fokus di role Game Programmer, hal yangpertama kali kulalukan adalah mencari bahasa pemrograman yang biasa di gunakan oleh Game Programmer. Maklumin ya, :v programmer mencari jati diri. Dan tebak bahasa apakah itu? Yap, C++. Bahasa ini umum digunakan oleh hardcore Game Programmer yang target platformnya untuk console (Seperti Playstatsion dan X-Box). Kenapa menggunakan C++? Jadi, bisa disebut, secara de facto, C++ sudah jadi bahasa yang umum digunakan dalam industri game. Selain itu, tidak seperti aplikasi umumnya, game atau aplikasi permainan punya struktur pengembangan perangkat lunak yang berbeda. Grafis ciamik baik 2D/3D, manajemen memory, update logic, AI dan sebagainya menuntut program harus memberikan performa yang baik saat game dijalankan. Artinya, game dapat berjalan dengan batas minimal fps atau frame per second, dulu di Flash 30 fps, tapi game-game modern biasanya mengambil standar 60 fps.
C++ ini bahasa yang ampuh dalam hal memaksimalkan perform hardware. Namun, belajar C++ tidak mudah. Ada banyak topik-topik yang perlu dipelajari hingga mendalam. Selain itu, pesatnya perkembangan teknologi di era modern ini (:v macam pembukaan paragraf tugas makalah right?), menjadikan Game Developer mencari cara yang lebih efisien dan efektif untuk sekedar menggerakkan objek. Developer ndak perlu menuliskan koding yang njelimet (baca: rumit) dengan C++ untuk menjalan operasi seperti percakapan NPC (Non-Playable Character, karakter di game yang tidak bisa dimainin, eaaa), menggerakkan karakter atau logic-logic game yang ternyata dapat dikerjakan dengan lebih mudah, baik saat di baca manusia maupun di tulis manusia bila menggunakan bahasa scripting. Sehingga dalam Game Development, peran programmer bisa dipecah menjadi Game Programmer Logic dan Game Programmer Engine/Architectur, dengan peran untuk membuat game logic dan satunya mengembangkan engine dan memastikan dapat berjalan dengan baik dalam proses pengembangan game. Perlu diketahui kalau role game programmer sebenarnya ndak cuma itu aja, masih ada banyak lagi yang lainnya. Mungkin akan dibahas di post lainnya.
Tumblr media
Jadi, pada dasarnya C# dan JavaScript (also know as UnityScript) dalam Unity3D adalah bahasa pemrograman yang berperan sebagai bahasa scripting, sehingga developer dapat fokus dalam membuat game keren, ketimbang mengantisipasi pengembangan game engine itu sendiri. 
Kembali ke pertanyaan diatas, C# merupakan bahasa yang dikembangkan oleh Microsoft yang memiliki paradigma object oriented atau berorientasi objek. Paradigma ini sangat lumrah dalam pengembangan game. C# juga relatif jauh lebih mudah dipelajari bila dibandungkan dengan C++. Syntax penulisannya mirip dengan C++, Java). Jadi kalau kalian punya dasar dengan C++, Java, AS3, atau bahasa dengan style penulisan tuturan dari C++, pasti ndak akan kesulitan belajar bahasa ini. Untuk teknisnya, C# ini punya nullable value types, enumerations, delegats, ekspresi lambda dan akses langsung ke memory. Oh iya, dalam penggunakan C# ini, kita ndak perlu pusing dengan manajemen memori seperti saat kita menggunakan C++, karena C# memiliki manajemen memory sendiri yang namanya GC atau Garbage Collector, yang fungsinya membersihkan memory yang sudah ndak digunakan. Selain itu belajar C# juga memudahkan kita bila ingin belajar teknologi lain, karena pada dasarnya, C# punya konsep pemrograman yang umumnya dimiliki bahasa pemrograman yang lain. 
Oke, sekian dulu untuk post hari ini. Semoga dengan adanya series ini, dapat meningkatkan motivasi kita untuk belajar pemrograman atau bahkan menjadi game developer. Jangan pernah berhenti belajar! 
Tumblr media
Referensi
https://www.quora.com/Is-C-good-for-game-development
https://www.quora.com/Is-C-better-than-C++-in-game-development
https://mva.microsoft.com/en-US/training-courses/developing-2d-3d-games-with-unity-for-windows-jump-start-8350?l=gA67AvEz_8104984382
https://unity3d.com/unity
/****** READ ME ******/
Ada kritik dan saran? Silahkan isi komentar dibawah ya! Terimakasih telah berkunjung!
/****** BACA YA ******/
0 notes
arrokh · 8 years ago
Video
youtube
Marhaban ya Ramadhan! Selamat hari puasa pertama semua. Hari ini Arrokh on Channel ke datangan tamu, si Ojik dari @pentiume14_ . Si Ojik akan share ke kita tentang dasar pemrograman C++ dengan topik Variabel, Konstanta dan Tipe Data. Teman-teman bisa tonton videonya di sini:  https://www.youtube.com/watch?v=zYwV-53oCMg 😁 Sering-sering mampir yah Jik!
0 notes
arrokh · 12 years ago
Photo
Tumblr media
#kathaRAJA – View on Path.
0 notes
arrokh · 12 years ago
Text
Membuat Mini Game dengan XML dan Actionscript 3
Hai, kali ini kita akan mencoba membuat mini gama (yang sangat simpel) menggunakan file xml, dimana data didalamnya berisi kumpulan kata-kata yang akan kita gunakan sebagai sumber data yang akan di munculkan nanti didalam game.
Game ini hasil rombak post
Create a XML Driven, dynamic Word Jumble Puzzle
yang masih menggunakan Actionscript 2, jadi file xmlnya kita ambil dari situ juga. hehe. Oke, pertama, kalian buat dulu project di Flashdevelop seperti biasa, atau jika kamu menggunakan Adobe Flash Professional (CS3 keatas), kamu bisa menyambungkan file class utama yang kita buat pada panel Properties. Sekarang buat file xml dengan nama MyDictionary.xml yang berisi data seperti dibawah ini:
----- XML -----
<?xml version="1.0" encoding="utf-8" ?> <data>         <word>raffle</word>         <word>elephant</word>         <word>diamond</word>         <word>centre</word>         <word>giraffe</word>         <word>papyrus</word>         <word>dominate</word>         <word>raccoon</word>         <word>lizard</word>         <word>monitor</word>         <word>country</word>         <word>forest</word>         <word>bottle</word>         <word>carton</word>         <word>transfer</word>         <word>calendar</word>         <word>cricket</word>         <word>football</word>         <word>spoken</word>         <word>terminate</word>         <word>trailer</word>         <word>acoustic</word>         <word>bubble</word>         <word>yellow</word>         <word>national</word>         <word>language</word>         <word>shampoo</word> </data>
----- end -----
Maaf bila tampilan code xml-nya gak enak di pandang, -_- padahal aku menggunakan SyntaxHighlighter dan tampilannya fine fine aja waktu digunankan bahasa lain. Kalau ada yang bisa kasih solusi, tolong kasih tahu ya :).
Oke, file xmlnya udah siap. sekarang kita siapkan class utama tempat kita menaruh script. Disini kita membuat Main.as dengan ukuran stage 300x200 dan kita setting sebagai default document yang akan di eksekusi waktu program dijalan. Didalam Main class ini, pertama kita buat struktur fungsi sebagai berikut (biar lebih mudah dimengerti, hehe):
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * ... * @author alvin */ [SWF(width="300", height="200", backgroundColor="#99CC99")] public class Main extends Sprite { public function Main() { // untuk menambahkan script kita kedalam stage #CMIIW addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { // membuat tampilan label, inpu, dan button createDisplay(); // mengatur varibel xml createXML(); } private function createDisplay():void { } private function createXML():void { } private function showWord():void { } private function clickHandler(e:MouseEvent):void { } } }
Selesai, coba test dan pastikan tidak ada error. Oh iya, sebelum kita lanjutkan lebih jauh, disini kita akan membuat sebuah game dimana pemain harus memasukkan kata sama persis dengan kata yang muncul pada layar, lalu menekan tombol check untuk melakukan pengecekan apakah teks yang di masukkan sama dengan teks yang dimunculkan. Bila salah, akan muncul peringantan, bila benar, tombol next akan tampil dan begitu seterusnya. Siap, kita lanjutkan, file xml yang kita buat tadi, kita embed kedalam Main class kita, lalu buat beberapa variabel yang akan digunakan,
// mengembed file xml kedalam class [Embed(source = "MyXMLData.xml", mimeType="application/octet-stream")] static private const myWordsXml:Class; private const w:int = stage.stageWidth; private const h:int = stage.stageHeight; private var myWords:XML; private var outWord:TextField; // tempat munculnya kata private var outWordText:String; // teks yang di load var diatas private var inWord:TextField; // tempat memasukkan kata private var checkButton:Sprite; private var nextButton:Sprite;
Setelah itu, kita definisikan variabel text field dan button pada fungsi createDisplay() berikut:
private function createDisplay():void { var labelQues_txt:TextField = new TextField(); labelQues_txt.autoSize = TextFieldAutoSize.CENTER; labelQues_txt.text = "Try and unjumble this word!"; labelQues_txt.width = 200; labelQues_txt.height = 20; labelQues_txt.selectable = false; labelQues_txt.x = (w >> 1) - (labelQues_txt.width >> 1); addChild(labelQues_txt); var labelAnswer_txt:TextField = new TextField(); labelAnswer_txt.autoSize = TextFieldAutoSize.CENTER; labelAnswer_txt.text = "Type your answer here!"; labelAnswer_txt.width = 200; labelAnswer_txt.height = 20; labelAnswer_txt.selectable = false; labelAnswer_txt.x = (w >> 1) - (labelAnswer_txt.width >> 1); labelAnswer_txt.y = 60; addChild(labelAnswer_txt); var textFormat:TextFormat = new TextFormat(); textFormat.align = TextFormatAlign.CENTER; outWord = new TextField(); outWord.defaultTextFormat = textFormat; outWord.width = 200; outWord.height = 20; outWord.border = true; outWord.selectable = false; outWord.type = TextFieldType.DYNAMIC; outWord.x = (w >> 1) - (outWord.width >> 1); outWord.y = 30; addChild(outWord); inWord = new TextField(); inWord.defaultTextFormat = textFormat; inWord.width = 200; inWord.height = 20; inWord.border = true; inWord.type = TextFieldType.INPUT; inWord.x = (w >> 1) - (inWord.width >> 1); inWord.y = 90; addChild(inWord); checkButton = new Sprite(); checkButton.buttonMode = true; checkButton.graphics.beginFill(0xff9900); checkButton.graphics.drawRect( -20, -20, 40, 40); checkButton.graphics.endFill(); checkButton.x = 75; checkButton.y = 155; addChild(checkButton); var checkAgain:int = 0; checkButton.addEventListener(MouseEvent.CLICK, clickHandler); nextButton = new Sprite(); nextButton.buttonMode = true; nextButton.graphics.beginFill(0xcc3300); nextButton.graphics.drawRect( -20, -20, 40, 40); nextButton.graphics.endFill(); nextButton.x = 225; nextButton.y = 155; addChild(nextButton); nextButton.addEventListener(MouseEvent.CLICK, clickHandler); }
Coba test, maka tampilan telah siap. Sekarang kita buat file xml pada fungsi createXML() seperti dibawah ini
private function createXML():void { myWords = XML(new myWordsXml()); showWord(); }
Pada fungsi ini, kita membuat var myWords dengan sumber myWordsXML class yang aslinya file xml yang kita embed sebelumnya. Mudah bukan? Yang harus kamu teliti saat meng-embed file xml dalam document class adalah, kamu harus menambahkan mimeType="application/octet-stream" seperti diatas agar tidak terjadi error saat inisialisasi var xml dan saat menjalankan progam. Seletah var xml telah terinisialiasasi, kita memanggil fungsi showWords() yang berfungsi untuk menampilkan seacara acak kata dalam file xml kita kedalam var outWord. Disini, kita menyembunyikan nextButton agar pemain tidak dapat menjawab kata selanjutnya sebelum menyelesaikan kata sebelumnya.
private function showWord():void { var randomWords:int = Math.random() * myWords.word.length(); outWordText = String(myWords.word[randomWords]); outWord.text = outWordText; checkButton.visible = true; nextButton.visible = false; }
Dan yang terakhir, fungsi clickHandler(e:MouseEvent) berfungsi untuk melakukan pengecekan dan pemilihan kembali teks secara acak dengan menekan tombol nextButton. Disini kita membuat switch statement dimana bila kita menekan tombol checkButton, maka akan di lakukannya penymaan teks anatara variabel outWord dan inWord, dan nextButton untuk menampilkan teks secara acak kembali, atau sama saja dengan memanggil fungsi showWord().
private function clickHandler(e:MouseEvent):void { switch(e.currentTarget) { case checkButton: if (outWord.text == inWord.text) { nextButton.visible = true; } else { outWord.text = "You Wrong! Lets try again"; } break; case nextButton: showWord(); nextButton.visible = false; inWord.text = ""; break; } }
Yap, kita hampir selesai. Disini bila kita salah memasukkan kata, maka var outWord akan memnuculkan kata peringatan dan tak lagi menampilkan kata yang benar. Disini kita tinggal membuat variabel lagi dengan nama countClik yang bergunaka untuk menghitung, bila saat melakaukan pengecekkan, maka countClick akan ditambah 1, bila benar, user akan melanjutkan permainan dengan mengklik tombol nextButton, bila slah, pemain tinggal mengklik checkButton kembali. Bila countClick bernilai lebih dari dua, maka outWord akan menampilkan kembali kata sesuai dengan outWordText. :) dan ini merupakan Main class final setelah ditambahkan countClick diatas. Semoga bermanfaat. Sekian.
package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFieldType; import flash.text.TextFormat; import flash.text.TextFormatAlign; /** * ... * @author alvin */ [SWF(width="300", height="200", backgroundColor="#99CC99")] public class Main extends Sprite { // mengembed file xml kedalam class [Embed(source = "MyDictionary.xml", mimeType="application/octet-stream")] static private const myWordsXml:Class; private const w:int = stage.stageWidth; private const h:int = stage.stageHeight; private var myWords:XML; private var outWord:TextField; // tempat munculnya kata private var outWordText:String; // teks yang di load var diatas private var inWord:TextField; // tempat memasukkan kata private var checkButton:Sprite; private var nextButton:Sprite; private var countClick:int = 0; public function Main() { // untuk menambahkan script kita kedalam stage #CMIIW addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event):void { // membuat tampilan label, inpu, dan button createDisplay(); // mengatur varibel xml createXML(); } private function createDisplay():void { var labelQues_txt:TextField = new TextField(); labelQues_txt.autoSize = TextFieldAutoSize.CENTER; labelQues_txt.text = "Try and unjumble this word!"; labelQues_txt.width = 200; labelQues_txt.height = 20; labelQues_txt.selectable = false; labelQues_txt.x = (w >> 1) - (labelQues_txt.width >> 1); addChild(labelQues_txt); var labelAnswer_txt:TextField = new TextField(); labelAnswer_txt.autoSize = TextFieldAutoSize.CENTER; labelAnswer_txt.text = "Type your answer here!"; labelAnswer_txt.width = 200; labelAnswer_txt.height = 20; labelAnswer_txt.selectable = false; labelAnswer_txt.x = (w >> 1) - (labelAnswer_txt.width >> 1); labelAnswer_txt.y = 60; addChild(labelAnswer_txt); var textFormat:TextFormat = new TextFormat(); textFormat.align = TextFormatAlign.CENTER; outWord = new TextField(); outWord.defaultTextFormat = textFormat; outWord.width = 200; outWord.height = 20; outWord.border = true; outWord.selectable = false; outWord.type = TextFieldType.DYNAMIC; outWord.x = (w >> 1) - (outWord.width >> 1); outWord.y = 30; addChild(outWord); inWord = new TextField(); inWord.defaultTextFormat = textFormat; inWord.width = 200; inWord.height = 20; inWord.border = true; inWord.type = TextFieldType.INPUT; inWord.x = (w >> 1) - (inWord.width >> 1); inWord.y = 90; addChild(inWord); checkButton = new Sprite(); checkButton.buttonMode = true; checkButton.graphics.beginFill(0xff9900); checkButton.graphics.drawRect( -20, -20, 40, 40); checkButton.graphics.endFill(); checkButton.x = 75; checkButton.y = 155; addChild(checkButton); var checkAgain:int = 0; checkButton.addEventListener(MouseEvent.CLICK, clickHandler); nextButton = new Sprite(); nextButton.buttonMode = true; nextButton.graphics.beginFill(0xcc3300); nextButton.graphics.drawRect( -20, -20, 40, 40); nextButton.graphics.endFill(); nextButton.x = 225; nextButton.y = 155; addChild(nextButton); nextButton.addEventListener(MouseEvent.CLICK, clickHandler); } private function createXML():void { myWords = XML(new myWordsXml()); var words:Array = new Array(); for (var i:int = 0; i < myWords.word.length(); i++) { words[i] = myWords.word[i]; showWord(); } } private function showWord():void { var randomWords:int = Math.random() * myWords.word.length(); outWordText = String(myWords.word[randomWords]); outWord.text = outWordText; checkButton.visible = true; nextButton.visible = false; } private function clickHandler(e:MouseEvent):void { switch(e.currentTarget) { case checkButton: countClick++; if (outWord.text == inWord.text) { nextButton.visible = true; } else { outWord.text = "You Wrong! Lets try again"; } if (countClick > 1) outWord.text = outWordText; break; case nextButton: showWord(); nextButton.visible = false; inWord.text = ""; countClick = 0; break; } } } }
0 notes
arrokh · 12 years ago
Quote
Yang teringat gagah, pergi terkulai lemah Di antar angan angan sejagat, lalu berpindah pundak Ke pundak kita, di pundak kita
Kutipan ku diatas muncul tiba-tiba setelah membaca artikel tentang detik detik kematian Presiden Soekarnao. Entah kenapa, tapi berbagai cerita akhir hayat pemimpin dunia selalu khas. Tentu saja, mereka bukan orang biasa.
0 notes
arrokh · 12 years ago
Text
Physic Engine Nape di Flash (Actionscript 3) - Nape Physic Engine on Flash
1. Mempersiapkan Nape
Oh iya, disini aku melakukan coding menggunakan FlashDevelop, jadi aku harap pembaca bisa menyesuaikannya. Kamu bisa mendownload file swc Nape disini, aku menggunakan library yang "nape-dev.swc". Selesai unduh, taruh di project FlashDevelop lalu tambahkan ke library dengan cara klik kanan - Add To Library.
2. Mempersiapkan class
package TutorialNape.tn1 { import flash.display.Sprite; import flash.events.Event; import nape.geom.Vec2; import nape.space.Space; import nape.util.Debug; /** * ... * @author alvin */ [SWF(width="800", height="600", frameRate="60")] public class Main extends Sprite { // tempat dimana simulasi physic berjalan private var space:Space // bertanggung jawab menampilkan bentuk simulasi private var debug:Debug; public function Main() { addEventListener(Event.ADDED_TO_STAGE, Initilize); } private function Initilize(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, Initilize); setupSpaceDebug(); setupObject(); addEventListener(Event.ENTER_FRAME, update); } private function update(e:Event):void { updateSpaceDebug(); } private function updateSpaceDebug():void { } private function setupSpaceDebug():void { } private function setupObject():void { } } }
Disini, setelah kita membuat variabel space dan debug, kita mempersiapkan 3 function, diantaranya:
setupSpaceDebug() untuk mempersiapkan dan mengatur property space dan debug,
private function setupSpaceDebug():void { // membuat variabel gravitasi (x, y) // besar kecil nilai mempengaruhi daya tarik gravitasi var gravity:Vec2 = new Vec2(0, 800); space = new Space(gravity); // membuat debug dengan ukuran viewport sesuai dengan ukuran layar stage // lalu menambahkannya ke dalam display list debug = new BitmapDebug(stage.stageWidth, stage.stageHeight); debug.drawConstraints = true; addChild(debug.display); }
updateSpaceDebug() yang kita tambahkan di event ENTER_FRAME untuk mengupdate simulasi physic yang terjadi di space, dan
private function updateSpaceDebug():void { space.step(1 / stage.frameRate); debug.clear(); debug.draw(space); debug.flush(); }
setupObject() untuk membuat objek physic yang akan kita simulasikan di space.
private function setupObject():void { // step detail var ballMaterial:Material = Material.rubber(); var ballShape:Circle = new Circle(35, null, ballMaterial); var type:BodyType = BodyType.DYNAMIC var ball:Body = new Body(type); ball.shapes.add(ballShape); ball.position.setxy(400, 300); ball.space = space; // step short var floor:Body = new Body(BodyType.STATIC); floor.shapes.add(new Polygon(Polygon.box(800, 10), Material.steel())) floor.position.setxy(400, 600); floor.space = space; }
Coba kamu test project kamu, disini akan muncul bola di tengah-tengah stage dan lantai pada bagian bawah stage. Lalu bola aku terjatuh dan memantul beberapa kali. Sekian pengenalan singkat saya tentang Nape. Lain waktu kita akan mencoba membuat mini game menggunakan Nape. hehe, maaf bila penjelasan tentang Napenya kurang yah, masih belajar juga. Bila masih terjadi error, kamu bisa samakan class yang kamu buat dengan class di bawah ini, tapi ingat, kamu harus mencoba mengetiknya sendiri. Selamat mencoba.
package TutorialNape.tn1 { import flash.display.Sprite; import flash.events.Event; import nape.geom.Vec2; import nape.phys.Body; import nape.phys.BodyType; import nape.phys.Material; import nape.shape.Circle; import nape.shape.Polygon; import nape.space.Space; import nape.util.BitmapDebug; import nape.util.Debug; import nape.util.ShapeDebug; /** * ... * @author alvin */ [SWF(width="800", height="600", frameRate="60")] public class Main extends Sprite { // tempat dimana simulasi physic berjalan private var space:Space // bertanggung jawab menampilkan bentuk simulasi private var debug:Debug; public function Main() { addEventListener(Event.ADDED_TO_STAGE, Initilize); } private function Initilize(e:Event):void { removeEventListener(Event.ADDED_TO_STAGE, Initilize); setupSpaceDebug(); setupObject(); addEventListener(Event.ENTER_FRAME, update); } private function update(e:Event):void { updateSpaceDebug(); } private function updateSpaceDebug():void { space.step(1 / stage.frameRate); debug.clear(); debug.draw(space); debug.flush(); } private function setupSpaceDebug():void { // membuat variabel gravitasi (x, y) // besar kecil nilai mempengaruhi daya tarik gravitasi var gravity:Vec2 = new Vec2(0, 800); space = new Space(gravity); // membuat debug dengan ukuran viewport sesuai dengan ukuran layar stage // lalu menambahkannya ke dalam display list debug = new BitmapDebug(stage.stageWidth, stage.stageHeight); debug.drawConstraints = true; addChild(debug.display); } private function setupObject():void { // step detail var ballMaterial:Material = Material.rubber(); var ballShape:Circle = new Circle(35, null, ballMaterial); var type:BodyType = BodyType.DYNAMIC var ball:Body = new Body(type); ball.shapes.add(ballShape); ball.position.setxy(400, 300); ball.space = space; // step short var floor:Body = new Body(BodyType.STATIC); floor.shapes.add(new Polygon(Polygon.box(800, 10), Material.steel())) floor.position.setxy(400, 600); floor.space = space; } } }
1 note · View note
arrokh · 12 years ago
Text
Tempat Baru, Kesibukan Baru (45 Bersatu)
Awalnya, aku sendiri enggak pernah menyangka, kembalinya aku ke Malang akan membuat kesibukan bertambah, yang ku maksud tidak hanya kesibukan di rumah, ._. tapi kesibukan ku atas pilihanku, dan mungkin sebagai pemudah yang tinggal dalam suatu lingkungan.
Target beberapa bulan lalu dimana aku harus bisa menyelesaikan game ku yang menjadikan ku memiliki 2 game mini buat protofoolio nyatanya tak kungjung terjadi, yah, tentu dengan kesibukan yang ada.
Tapi, kesibukanku sebagai seorang pemuda di lingkungan sungguh ku nimati, mungkin sudah jalannya. Semua serasa berlalu begitu saja. Yah, mungkin ada beberapa hal yang tidak membuatku 'sreg' untuk terlalu mementingkannya, tapi, yah, semua ini nyatanya memang harus ku lalui, dan kesibukanku sebagai
pemuda di lingkungan ku pikir akan segera berakhir, tidak, bukan karena aku akan pindah, karena sabtu depan akan diadakan acara pembubaran panitia. Sebut saja, "45 Bersatu". Yah, nama yang bagus buat ku. 45 bersatu itu sendiri berdasarkan singkatan, dimana pemuda pemudi RW 4 dan RW 5 kembali bersatu, mengadakan acara dan kegiatan bersama-sama demi keramaian dan kepentingan bersama dalam satu desa.
Menyambung dari tulisan diatas bahwa ini mungkin takdir yang memang baiknya aku jalani (dan tentu saja harus kunikmati), aku di beri tugas untuk mendesain 2 buah banner, kaos, dan membuat video hasil tugas yang di berikan padaku untuk mendokumentasikan acara dan kegiatan yang sedang berlangsung. Berikut aku adalah foto fotonya, :p nggak jelek jelek amat kan (?) haha. hingga 3 hari kedepan akan menjadi hari yang sibuk juga.
Tumblr media Tumblr media Tumblr media
0 notes