Let's try programming

Go Go SLOT

gogoslot今回はスロット制作に取り組みました。
(機能や特徴)
イメージ画像の準備→resの下のdrawableフォルダに格納
GIMP2で背景作成
ランダム機能
サウンド機能
サウンドファイルの準備→resの下のrawフォルダを作ってに格納
ボタン無効機能
 
サウンドを追加する事で臨場感が出ました。
やはり音があるとないとでは全く違います。
効果音は「魔王魂様」から頂きました。
有り難うございます(*´ェ`*)

 

gogoslotのコードはこちら
GoSlot.java
package com.example.sampe.goslot;

import android.media.AudioManager;
import android.media.SoundPool;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Random;


public class GoSlot extends ActionBarActivity {

    int slotNum1 = 0;               //スロット1に番号が入る変数
    int slotNum2 = 0;               //スロット2に番号が入る変数
    int slotNum3 = 0;               //スロット3に番号が入る変数
    int slotID;                     //イメージボタンのリソース番号を格納する変数
    int startID = 0;                //スロットボタンの押された数をカウントする変数
    int medal = 10;                 //メダルの枚数。メダルの増減計算に用いる変数

    Random randam;                  //ランダム変数を用意

    ImageView iv1;
    ImageView iv2;
    ImageView iv3;
    TextView tv;
    Button slotbutton1;
    Button slotbutton2;
    Button slotbutton3;
    Button startbutton;

    /*サウンド
    準備した音源ファイルはrawフォルダに格納
     */
    private SoundPool soundPool;           //効果音を鳴らす為にSoundPoolを用意
    private int soundBtn;           //スロットボタンを押された時の(SE)Sound Effect
    private int soundStr;           //スタートボタンを押された時のSE
    private int soundGong;         //大当たりの時、SE


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_go_slot);

        //リソース取得
        iv1 = (ImageView) findViewById(R.id.goSlot1);
        iv2 = (ImageView) findViewById(R.id.goSlot2);
        iv3 = (ImageView) findViewById(R.id.goSlot3);
        slotbutton1 = (Button) findViewById(R.id.slotButton1);
        slotbutton2 = (Button) findViewById(R.id.slotButton2);
        slotbutton3 = (Button) findViewById(R.id.slotButton3);
        startbutton = (Button) findViewById(R.id.startButton);
        tv = (TextView) findViewById(R.id.textView2);

        //Randomクラスのインスタンス生成
        randam = new Random();
        tv.setText(String.valueOf(medal));
        startbutton.setEnabled(false);

        //サウンド
        soundPool = new SoundPool(4, AudioManager.STREAM_ALARM, 0);
        soundBtn = soundPool.load(this, R.raw.btn, 1);
        soundStr = soundPool.load(this, R.raw.startbtn, 1);
        soundGong = soundPool.load(this, R.raw.gong, 1);


    }

    @Override
    //サウンド アプリ停止時にメモリに残らないようにリリース処理。
    protected void onPause() {
        super.onPause();
        //インスタンス解放
        soundPool.unload(soundBtn);
        soundPool.unload(soundStr);
        soundPool.unload(soundGong);
        soundPool.release();
    }


    public void slotButton1(View view) {
        slotNum1 = randam.nextInt(10);      //番号のランダム設定
        playSE();                           //押された時のサウンド設定
        startID += 1;                       //ボタンを押されたらカウント
        if (startID == 3) {
            startbutton.setEnabled(true);
        }

        switch (slotNum1) {
            case 1:
                slotID = R.drawable.goslot1;
                break;
            case 2:
                slotID = R.drawable.goslot2;
                break;
            case 3:
                slotID = R.drawable.goslot3;
                break;
            case 4:
                slotID = R.drawable.goslot4;
                break;
            case 5:
                slotID = R.drawable.goslot5;
                break;
            case 6:
                slotID = R.drawable.goslot6;
                break;
            case 7:
                slotID = R.drawable.goslot7;
                break;
            case 8:
                slotID = R.drawable.goslot8;
                break;
            default:
                slotID = R.drawable.goslot9;
        }
        iv1.setImageResource(slotID);           //リソースをimageViewにセット
        slotbutton1.setEnabled(false);          //ボタンを一度押されたら消す処理
    }

    public void slotButton2(View view) {
        slotNum2 = randam.nextInt(10);
        playSE();
        startID += 1;
        if (startID == 3) {
            startbutton.setEnabled(true);
        }


        switch (slotNum2) {
            case 1:
                slotID = R.drawable.goslot1;
                break;
            case 2:
                slotID = R.drawable.goslot2;
                break;
            case 3:
                slotID = R.drawable.goslot3;
                break;
            case 4:
                slotID = R.drawable.goslot4;
                break;
            case 5:
                slotID = R.drawable.goslot5;
                break;
            case 6:
                slotID = R.drawable.goslot6;
                break;
            case 7:
                slotID = R.drawable.goslot7;
                break;
            case 8:
                slotID = R.drawable.goslot8;
                break;
            default:
                slotID = R.drawable.goslot9;
        }
        iv2.setImageResource(slotID);
        slotbutton2.setEnabled(false);
    }

    public void slotButton3(View view) {
        slotNum3 = randam.nextInt(10);

        playSE();
        startID += 1;
        if (startID == 3) {
            startbutton.setEnabled(true);
        }


        switch (slotNum3) {
            case 1:
                slotID = R.drawable.goslot1;
                break;
            case 2:
                slotID = R.drawable.goslot2;
                break;
            case 3:
                slotID = R.drawable.goslot3;
                break;
            case 4:
                slotID = R.drawable.goslot4;
                break;
            case 5:
                slotID = R.drawable.goslot5;
                break;
            case 6:
                slotID = R.drawable.goslot6;
                break;
            case 7:
                slotID = R.drawable.goslot7;
                break;
            case 8:
                slotID = R.drawable.goslot8;
                break;
            default:
                slotID = R.drawable.goslot9;
        }
        iv3.setImageResource(slotID);
        slotbutton3.setEnabled(false);
        /*
        3つ揃った時の判別する方法が思いつかず
        リソースが数値として扱えるらしいのでint型slotIDを作りこれを判別方法として使う。
         */


        if (slotNum1 == slotNum2 && slotNum2 == slotNum3) {  //3つ同じ数字なら
            playGong();                                     //大当たりサウンド
            medal += 100;                                   //メダルが+100枚される
            tv.setText(String.valueOf(medal));              //数値を数字に変換してテキストにセット

            Toast.makeText(getApplicationContext(), "Congratulations"
                    , Toast.LENGTH_SHORT).show();           //大当たり時にトーストに設定
        }
    }

    /*
    サウンドの引数
      第一引数:ロードした時のID
      第二引数:左側音量
     第三引数:右側音量
     第四引数:プライオリティ(デフォルト0)
     第五引数: ループ設定(-1で無限ループ,0で1回再生)
     第六引数:再生速度(1.0で普通)

     */
    private void playSE() {
        soundPool.play(soundBtn, 50, 50, 1, 0, 1);
    }

    private void playStr() {
        soundPool.play(soundStr, 50, 50, 1, 0, 1);
    }

    private void playGong() {
        soundPool.play(soundGong, 100, 100, 1, 0, 1);
    }

    public void startButton(View view) {

        if (0 < medal) {                        //メダル枚数があれば
            playStr();
            medal = medal - 1;
            tv.setText(String.valueOf(medal));
            slotbutton1.setEnabled(true);
            slotbutton2.setEnabled(true);
            slotbutton3.setEnabled(true);
            startID -= 3;
            startbutton.setEnabled(false);
        } else {                               //メダルがなくなれば
            Toast.makeText(getApplicationContext(), "GAME OVER"
                    , Toast.LENGTH_LONG).show();

        }
    }
}
XMLには画像や背景を参照してるコードがある為、準備してないとエラーになります。
もし実行したいという方いらっしゃれば気をつけてください(-.-)
 
activity_go_slot.java
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                android:paddingBottom="@dimen/activity_vertical_margin"
              android:background="@drawable/slot3"
                tools:context=".GoSlot"
              android:weightSum="1">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <ImageView
        android:id ="@+id/goSlot1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/goslot1"
        >
    </ImageView>

    <ImageView
        android:id ="@+id/goSlot2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/goslot1">
    </ImageView>

    <ImageView
        android:id ="@+id/goSlot3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/goslot1">
    </ImageView>

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

    <Button
        android:id="@+id/slotButton1"
        android:onClick="slotButton1"
        android:layout_marginTop="30dp"
        android:padding="50dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:backgroundTint="#ffff805b"
        />

    <Button
        android:id="@+id/slotButton2"
        android:onClick="slotButton2"
        android:layout_marginTop="30dp"
        android:padding="50dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:backgroundTint="#FFFF805B"
        android:layout_marginBottom="40dp"/>


    <Button
        android:id="@+id/slotButton3"
        android:onClick="slotButton3"
        android:layout_marginTop="30dp"
        android:padding="50dp"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:backgroundTint="#FFFF805B"/>

 </LinearLayout>

    <Button
        android:onClick="startButton"
        android:layout_width="66dp"
        android:layout_height="58dp"
        android:text="Start"
        android:id="@+id/startButton"

        android:background="#ff3b41ff"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:textSize="20dp"
        android:id="@+id/textView"
        android:layout_gravity="center_horizontal"
        android:text="MEDAL"
        android:textColor="#ff000000"/>

    <TextView
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textColor="#ff2fff0c"
        android:text="0"
        android:textSize="20dp"
        android:id="@+id/textView2"
        android:layout_gravity="center_horizontal"
        android:gravity="right"
        android:background="#ff131111"/>


</LinearLayout>
コードで重複してる箇所があるのでやはりこれをまとめないといけないですね。
 
問題点
※SEの音量調整ができない(Androidで音を消しても出てしまう)
※スロットボタン押下時の凹み効果が薄い。
※まだサウンドに関しての理解が薄い。
なぜonPause時にリリースコード必要性なのか理解できていない。
メモリに残ってしまうという事だけ理解。
 
アクションの機能など付けてドラムを回転させたりしてみたいですが…。
今後、チャレンジしてみます!
 
 
 

 

 

 

 

PAGETOP
Copyright © Goran All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.