Belajar Membuat Mesin Slot untuk Android
Dalam tutorial ini, Anda akan belajar cara membuat Mesin Slot untuk Android dengan Android Studio. Mesin Slot, juga dikenal sebagai one-armed bandit, adalah mesin judi kasino dengan tiga atau lebih gulungan yang berputar saat tombol ditekan. Mesin Slot kita akan memiliki tiga gulungan. Gulungan akan menampilkan enam gambar buah yang berbeda.
Untuk memulai, kita menulis kode tata letak Mesin Slot. Tata letak terdiri dari tiga gambar untuk setiap gulungan, tombol untuk mulai memutar gulungan, dan TextView untuk menampilkan pesan kepada pengguna seperti: Anda memenangkan hadiah besar!
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://android; xmlns:tools="http://android; android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="slotmachinetivity" android:background="#FFFFFF"> <LinearLayout android:id="@+id/imgs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_centerHorizontal="true"> <ImageView android:id="@+id/img1" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="50dp" android:src="@drawable/slot5"/> <ImageView android:id="@+id/img2" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="50dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:src="@drawable/slot5"/> <ImageView android:id="@+id/img3" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginTop="50dp" android:src="@drawable/slot5"/> </LinearLayout> <TextView android:id="@+id/msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:layout_below="@id/imgs" android:layout_centerHorizontal="true"/> <Button android:id="@+id/btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Start" android:layout_marginTop="50dp" android:layout_below="@id/msg" android:layout_centerHorizontal="true"/></RelativeLayout>Sekarang, kita akan membuat logika Mesin Slot. Logika akan diimplementasikan dalam objek Wheel. Untuk menganimasikan gulungan, kelas Wheel akan memperluas Thread dari Android SDK. Dengan demikian, setiap gulungan akan dianimasikan dalam thread terpisah. Kami mendefinisikan antarmuka WheelListener untuk memberi tahu aktivitas utama ketika gambar berubah pada gulungan. Gambar yang akan ditampilkan oleh gulungan didefinisikan dalam array statis imgs. Properti currentIndex akan mengetahui gambar saat ini yang ditampilkan. Properti frameDuration digunakan untuk menentukan durasi satu frame. Properti startIn memungkinkan gulungan dimulai dengan penundaan yang ditentukan dalam konstruktor, sehingga setiap gulungan dapat mulai pada waktu yang berbeda secara acak. Dalam metode run, kita menjeda startIn milidetik, lalu memasuki loop yang aktif hingga isStarted false. Dalam loop, kita mengubah gambar saat frameDuration berlalu. Ketika semua gambar telah ditampilkan, kita kembali ke gambar pertama. Saat gambar baru ditampilkan, kita memberitahu WheelListener dengan memanggil newImage. Berikut kode untuk Wheel:
public class Wheel extends Thread { interface WheelListener { void newImage(int img); } private static int[] imgs = {drawable1, drawable2, drawable3, drawable4, drawable5, drawable6}; public int currentIndex; private WheelListener wheelListener; private long frameDuration; private long startIn; private boolean isStarted; public Wheel(WheelListener wheelListener, long frameDuration, long startIn) { thisistener = wheelListener; thisuration = frameDuration; thisn = startIn; currentIndex = 0; isStarted = true; } public void nextImg() { currentIndex++; if (currentIndex == imgs) { currentIndex = 0; } } @Override public void run() { try { Thread(startIn); } catch (InterruptedException e) {} while (isStarted) { try { Thread(frameDuration); } catch (InterruptedException e) {} nextImg(); if (wheelListener != null) { wheelListenerge(imgs[currentIndex]); } } } public void stopWheel() { isStarted = false; }}Langkah terakhir adalah menulis kode Java Aktivitas Utama. Kami mendeklarasikan tiga objek Wheel, satu untuk setiap gulungan. Kami membuat metode statis randomLong untuk mengembalikan nilai acak antara lower dan upper. Dalam onCreate, kami mengatur OnClickListener pada tombol untuk memulai atau menghentikan Mesin Slot. Kami memeriksa status isStarted. Jika dimulai, kami menghentikan ketiga roda dengan memanggil stopWheel, lalu memeriksa gambar saat ini untuk menampilkan pesan. Jika ketiga gambar sama, pengguna memenangkan hadiah besar. Jika tidak dimulai, kami membuat tiga roda. Untuk setiap roda, kami mendefinisikan implementasi WheelListener yang memperbarui gambar saat nextImg dipanggil. Karena roda dijalankan di thread terpisah, kami perlu memperbarui UI di UI Thread. Akhirnya, kami memulai roda pada waktu berbeda menggunakan randomLong. Berikut kode Aktivitas Utama:
public class MainActivity extends AppCompatActivity { private TextView msg; private ImageView img1, img2, img3; private Wheel wheel1, wheel2, wheel3; private Button btn; private boolean isStarted; public static final Random RANDOM = new Random(); public static long randomLong(long lower, long upper) { return lower + (long) (RANDOMuble() * (upper - lower)); } @Override protected void onCreate(Bundle savedInstanceState) { superte(savedInstanceState); setContentView(layoutty_main); img1 = (ImageView) findViewById(id1); img2 = (ImageView) findViewById(id2); img3 = (ImageView) findViewById(id3); btn = (Button) findViewById(id); msg = (TextView) findViewById(id); btnlickListener(new ViewkListener() { @Override public void onClick(View view) { if (isStarted) { wheel1eel(); wheel2eel(); wheel3eel(); if (wheel1tIndex == wheel2tIndex && wheel2tIndex == wheel3tIndex) { msgt("Anda memenangkan hadiah besar"); } else if (wheel1tIndex == wheel2tIndex || wheel2tIndex == wheel3tIndex || wheel1tIndex == wheel3tIndex) { msgt("Hadiah Kecil"); } else { msgt("Anda kalah"); } btnt("Mulai"); isStarted = false; } else { wheel1 = new Wheel(new Wheelistener() { @Override public void newImage(final int img) { runOnUiThread(new Runnable() { @Override public void run() { img1geResource(img); } }); } }, 200, randomLong(0, 200)); wheel1(); wheel2 = new Wheel(new Wheelistener() { @Override public void newImage(final int img) { runOnUiThread(new Runnable() { @Override public void run() { img2geResource(img); } }); } }, 200, randomLong(150, 400)); wheel2(); wheel3 = new Wheel(new Wheelistener() { @Override public void newImage(final int img) { runOnUiThread(new Runnable() { @Override public void run() { img3geResource(img); } }); } }, 200, randomLong(150, 400)); wheel3(); btnt("Berhenti"); msgt(""); isStarted = true; } } }); }}Sekarang Anda dapat menikmati aplikasi Mesin Slot baru Anda untuk Android. Jalankan aplikasi dan Anda akan melihat layar seperti yang diharapkan pada perangkat Android Anda.