+3

Hướng dẫn làm game craze math

Chào các bạn! Như tiêu đề mình sẽ hướng dẫn các bạn làm game crazemath. Một game khá là thú vị cũng từng được 1 số báo viết bài.

Có 1 lưu ý nhỏ là, đây là 1 mini game, và mình làm bài hướng dẫn này ngắn gọn nhất, dễ làm nhất để các bạn mới làm quen với unity cũng có thể làm được! Vì vậy chúng ta sẽ không bàn đến vấn đề tối ưu hay kĩ thuật quá cao siêu nhé! 😉

Bước 1: Các bạn tạo 1 project unity như bình thường (3d hay 2d j cũng ko quan trọng nhé):

1.PNG

Bước 2: Chúng ta sẽ tạo cho mình các đối tượng sau:

  • 1 Image
  • 3 text
  • 2 button. Theo cấu trúc sau:

2.PNG

Bước 3: Chúng ta sẽ cài đặt lại các thông số của các đối tượng sau:

  • Camera:

3.PNG

  • Canvas:

4.PNG

  • Image:

5.PNG

  • Text:

6.PNG

  • Text (1):

7.PNG

  • Text (2):

8.PNG

  • Button:

9.PNG

  • Text trong Button

9-1.PNG

  • Button (1):

10.PNG

  • Text trong Button (1):

10-1.PNG

  • Image (1):

11.PNG

  • Text trong Image (1):

11-1.PNG

  • Button trong Image (1):

11-2.PNG

  • Text trong Button trong Image (1):

11-2-1.PNG

Tới đây các bạn hãy switch platform sang android để có thể thấy màn hình thành quả từ đầu tới giờ nhé! 😉

13.PNG

Cuối cùng chúng ta sẽ được kết quả như thế này:

14.PNG

Về mặt cơ bản các bạn đã thấy được UI của game rồi đúng? Game của chúng ta đã có da có thịt rồi, tiếp theo chúng ta sẽ tạo ra linh hồn cho nó! Thứ giúp nó sống được ^_^

Chúng ta tạo 1 script và đặt tên cho nó là "GameManager", sau đó đưa đoạn code sau vào nhé:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public enum GAME_STATUS
{
    wait, //khi game bat dau thi can thoi gian de no xoa di lich su choi lan truoc
    run, //khi game chay
    result, //khi ket thuc game va dua ra ket qua
    pause, //khi game dung lai
    next //phep toan tiep theo
}

public class GameManager : MonoBehaviour {

    public Image ImgThoiGian;
    public Text TxtDiem;
    public Text TxtDiemCuoi;
    public Text TxtPhepTinh;
    public Text TxtKetQua;
    public Button BtnDung;
    public Button BtnSai;
    public Button BtnThuLai;
    public GameObject ObjKetqua;

    private float thoigianbatdau = 0;
    private float thoigiancho = 3f;
    private int sothu1;
    private int sothu2;
    private int soketqua;
    private int sodiem;
    private GAME_STATUS _status;
    public GAME_STATUS Status
    {
        set
        {
            _status = value;
            switch (_status)
            {
                case GAME_STATUS.wait:
                    sodiem = 0;
                    TxtDiem.text = sodiem.ToString();
                    TaoPhepTinh();
                    break;
                case GAME_STATUS.run:
                    thoigianbatdau = Time.time;
                    ImgThoiGian.fillAmount = 1;
                    break;
                case GAME_STATUS.next:
                    TaoPhepTinh();
                    break;
                case GAME_STATUS.result:
                    HienKetQua();
                    break;
                case GAME_STATUS.pause:
                    break;
                default:
                    break;
            }
        }
    }

    // Bat dau game
    void Start () {
        Status = GAME_STATUS.wait;
        //them cac hanh dong cho cac nut bam.
        BtnDung.onClick.AddListener(Dung);
        BtnSai.onClick.AddListener(Sai);
        BtnThuLai.onClick.AddListener(Thulai);
    }

    // Update is called once per frame
    void Update () {
        //neu game dang chay thi se tinh thoi gian
        if(_status == GAME_STATUS.run)
        {
            ChayThoiGian();
        }
	}

    // ham tinh thoi gian cho game
    private void ChayThoiGian()
    {
        // neu thoi gian con thi tiep tuc tru thoi gian.
        if (ImgThoiGian.fillAmount > 0)
        {
            ImgThoiGian.fillAmount = (thoigiancho -  (Time.time - thoigianbatdau)) / thoigiancho;
        }

        // neu thoi gian het ve 0 thi hien thi ket qua game.
        if (ImgThoiGian.fillAmount <= 0)
        {
            Status = GAME_STATUS.result;
        }
    }

    // ham tao ra cac phep toan
    private void TaoPhepTinh()
    {
        // ta ra 2 so ngau nhien de tinh tong
        sothu1 = Random.Range(1, 20);
        sothu2 = Random.Range(1, 20);
        // ket qua duoc tao ra ngau nhien co the dung hoac sai
        soketqua = (sothu1 + sothu2 + Random.Range(-1, 1));
        // hien thi phep tinh
        TxtPhepTinh.text = sothu1 + "+" + sothu2;
        // hien thi ket qua phep tinh
        TxtKetQua.text = "= " + soketqua;
        // cho game chay
        Status = GAME_STATUS.run;
    }

    // ham kiem tra nguoi choi chon dap an do la dung hay sai so voi phep toan
    private void kiemTra(bool isChoose)
    {
        // kiem tra xem nguoi choi chon ket qua vay la dung hay sai
        if((sothu1 + sothu2 == soketqua && isChoose) ||
            (sothu1 + sothu2 != soketqua && !isChoose)
            )
        {
            // neu nguoi choi tra loi dung thi game se tiep tuc va duoc cong diem
            Status = GAME_STATUS.next;
            sodiem++;
            TxtDiem.text = sodiem.ToString();
        } else
        {
            // neu nguoi choi tra loi sai thi hien thi ket qua
            Status = GAME_STATUS.result;
        }
    }

    // hanh dong chon dap an dung cua nguoi choi
    private void Dung()
    {
        // goi toi ham kiem tra
        kiemTra(true);
    }

    // hanh dong chon dap an sai cua nguoi choi
    private void Sai()
    {
        // goi toi ham kiem tra
        kiemTra(false);
    }

    // ham thu lai cho phep sau khi hien thi ket qua thi nguoi choi co the choi lai
    private void Thulai()
    {
        // an man hinh ket qua di
        ObjKetqua.SetActive(false);
        // dua game ve trang thai chuan bi chay
        Status = GAME_STATUS.wait;
    }

    // ham hien man hinh ket qua khi game ket thuc
    private void HienKetQua()
    {
        // hien thi diem cuoi cung cua nguoi choi
        TxtDiemCuoi.text = "Your Score\n" + TxtDiem.text;
        // hien thi man ket qua
        ObjKetqua.SetActive(true);
    }
}

}

Sau đó các bạn add script trên vào đối tượng GameManager trên scene, và kéo các đối tượng còn thiếu vào như trong hình.

12.PNG

Ok! Let's play! chúng ta đã xong game rồi đó các bạn! bây giờ các bạn đã có thể ấn play và tận hưởng thành quả của mình 😉

Các bạn có thể chơi thử bản final của mình theo link sau

https://play.google.com/store/apps/details?id=com.dcprodev.crazemath

Có bất cứ câu hỏi nào các bạn có thể pm trực tiếp hoặc để lại comment phía dưới nhé 😉

Nếu thích thì like, thú vị thì subscribe nhé 😉


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí