Home
2018年4月11日 星期三

[程式] Android Studio : Lights Game

Android Studio : Lights Game

會實作這個遊戲,最主要的原因是看不懂再玩甚麼,實作之後就會發現遊戲規則。
  • 亂數產生按鈕的背景顏色
  • 顏色順序
  • 點擊 按鈕1 → 按鈕1 與 按鈕2 變色,按鈕4 → 按鈕3 與 按鈕4 變色
  • 點擊 按鈕2 → 按鈕1、按鈕2 與 按鈕3 變色,按鈕3 → 按鈕2、按鈕3 與 按鈕4 變色
  • 四個按鈕都變成綠色,結束遊戲


範例網址:

https://www.youtube.com/watch?v=WrjI8RH25ss

相關資訊圖片:

Lights Game View (activity_main.xml)畫面
Lights Game View (activity_main.xml)畫面


初始畫面
初始畫面

結束畫面
結束畫面

Source Code:

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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"
    tools:context=".MainActivity">


    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginTop="10dp"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginTop="10dp"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginTop="10dp"
        android:text="Button" />

    <Button
        android:id="@+id/b_new"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:layout_marginTop="20dp"
        android:text="New Game" />
</LinearLayout>

MainActivity.java
package tw.idv.wenyen.lightsgame;

import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.util.Random;

public class MainActivity extends AppCompatActivity {

    Button button1, button2, button3, button4, b_new;

    String buttonColor1, buttonColor2, buttonColor3, buttonColor4;

    Random r;

    int score = 0;

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

        b_new = (Button) findViewById(R.id.b_new);

        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);

        //initial colors
        r = new Random();
        int temp;

        //button1
        temp = r.nextInt(3) + 1;
        if (temp == 1) {
            buttonColor1 = "red";
        } else if (temp == 2) {
            buttonColor1 = "green";
        } else if (temp == 3) {
            buttonColor1 = "blue";
        }

        //button2
        temp = r.nextInt(3) + 1;
        if (temp == 1) {
            buttonColor2 = "red";
        } else if (temp == 2) {
            buttonColor2 = "green";
        } else if (temp == 3) {
            buttonColor2 = "blue";
        }

        //button3
        temp = r.nextInt(3) + 1;
        if (temp == 1) {
            buttonColor3 = "red";
        } else if (temp == 2) {
            buttonColor3 = "green";
        } else if (temp == 3) {
            buttonColor3 = "blue";
        }

        //button4
        temp = r.nextInt(3) + 1;
        if (temp == 1) {
            buttonColor4 = "red";
        } else if (temp == 2) {
            buttonColor4 = "green";
        } else if (temp == 3) {
            buttonColor4 = "blue";
        }

        //apply colors
        applyColor(button1, buttonColor1);
        applyColor(button2, buttonColor2);
        applyColor(button3, buttonColor3);
        applyColor(button4, buttonColor4);

        //clicks
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonColor1 = changeColor(buttonColor1);
                applyColor(button1, buttonColor1);

                buttonColor2 = changeColor(buttonColor2);
                applyColor(button2, buttonColor2);

                checkForWin();
            }
        });

        //clicks
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonColor1 = changeColor(buttonColor1);
                applyColor(button1, buttonColor1);

                buttonColor2 = changeColor(buttonColor2);
                applyColor(button2, buttonColor2);

                buttonColor3 = changeColor(buttonColor3);
                applyColor(button3, buttonColor3);

                checkForWin();
            }
        });

        //clicks
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonColor2 = changeColor(buttonColor2);
                applyColor(button2, buttonColor2);

                buttonColor3 = changeColor(buttonColor3);
                applyColor(button3, buttonColor3);

                buttonColor4 = changeColor(buttonColor4);
                applyColor(button4, buttonColor4);

                checkForWin();
            }
        });

        //clicks
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                buttonColor3 = changeColor(buttonColor3);
                applyColor(button3, buttonColor3);

                buttonColor4 = changeColor(buttonColor4);
                applyColor(button4, buttonColor4);

                checkForWin();
            }
        });

        b_new.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                startActivity(intent);
                finish();
            }
        });

    }

    public void checkForWin() {

        score++;

        if (buttonColor1.equals("green") &&
                buttonColor2.equals("green") &&
                buttonColor3.equals("green") &&
                buttonColor4.equals("green") ) {
            Toast.makeText(MainActivity.this, "Winner in " + score + " moves!",Toast.LENGTH_SHORT).show();

            button1.setEnabled(false);
            button2.setEnabled(false);
            button3.setEnabled(false);
            button4.setEnabled(false);
        }
    }

    public String changeColor( String color) {
        if (color.equals("red")) {
            color = "green";
        } else if (color.equals("green")) {
            color = "blue";;
        } else if (color.equals("blue")) {
            color = "red";;
        }

        return color;
    }

    public void applyColor(Button button, String color) {
        if (color.equals("red")) {
            button.setBackgroundColor(Color.RED);
        } else if (color.equals("green")) {
            button.setBackgroundColor(Color.GREEN);
        } else if (color.equals("blue")) {
            button.setBackgroundColor(Color.BLUE);
        }
    }
}

實作心得:

程式困難度不高,因此沒有特別寫註解,不過遊戲本身還蠻有趣的,值得玩一玩。

0 意見:

張貼留言