본문 바로가기
flutter

flutter 다이스게임만들기 5 마지막

by 멈추지않아 2022. 5. 31.
코딩셰프 강의를 보고 만든 파일입니다.
https://www.youtube.com/watch?v=mQX_kJKnZzk&list=PLQt_pzi-LLfoOpp3b-pnnLXgYpiFEftLB&index=3

우선 위에 유튜브 영상을 가셔서 더보기란에 프로젝트에 가셔서 이미지를 받아주세요.

받으신후  dice이미지를 

이런식으로 image폴더에 넣어주세요

import 'dart:math';

import 'package:flutter/material.dart';

class Dice extends StatefulWidget {
  const Dice({Key? key}) : super(key: key);


  @override
  State<Dice> createState() => _DiceState();
}

class _DiceState extends State<Dice> {
  int left=1;
  int right=1;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("주사위 게임"),
        centerTitle: true,
        backgroundColor: Colors.purple,
      ),
      body: Column(
          children: [
            Padding(
              padding: EdgeInsets.only(top: 100),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,

                children: [
                  Expanded(
                    flex: 2,
                      child: Image(
                    image: AssetImage('image/dice$left.png'),
                  ),
                  ),
                  SizedBox(
                    width: 10,
                  ),
                  Expanded(
                    flex: 2,
                      child: Image(
                    image: AssetImage('image/dice$right.png'),
                  ),
                  ),

                ],
              ),
            ),
            SizedBox(
              height: 50,
            ),
            ButtonTheme(

              child: ElevatedButton(
                onPressed: () {
                  setState(() {
                    left=Random().nextInt(6)+1;
                    right=Random().nextInt(6)+1;
                  });
                },
                child: Icon(
                  Icons.play_arrow,
                  color: Colors.white,
                  size: 50.0,
                ),
                style: ElevatedButton.styleFrom(primary: Colors.purpleAccent),

              ),
            )

          ],
        ),

    );
  }
}

클래스 젤 상단에 int 변수 두개를 선언해주세요  각 왼쪽 오른쪽 주사위 눈 숫자를 나타낼용도로 쓸것입니다. 초기값을 1로 설정해주시고

이미지 경로 설정해준 곳을

Expanded(
  flex: 2,
    child: Image(
  image: AssetImage('image/dice$left.png'),
),
),

이런식으로 image/dice$변수명.png 이런식으로 바꺼주세요 그럼 숫자가 바뀔때마다 불러오는 이미지 이름이 dice1 dice5이런식으로 변할겁니다 그에따라 이미지도 변하게 됩니다.

그럼 초기 상태는 1이기 때문에 주사위 1 이미지가 보입니다. 그럼 이제 버튼을 누르면 변경되도록 해보겠습니다.

ButtonTheme(

  child: ElevatedButton(
    onPressed: () {
      setState(() {
        left=Random().nextInt(6)+1;
        right=Random().nextInt(6)+1;
      });
    },
    child: Icon(
      Icons.play_arrow,
      color: Colors.white,
      size: 50.0,
    ),
    style: ElevatedButton.styleFrom(primary: Colors.purpleAccent),

  ),
)

이렇게 버튼 부분 onpressed에 setState를 넣어주고 그안에서 Random을 활요해서 각 변수에 숫자가 랜덤으로 들어가게 해주었습니다.

Random().nextInt(6)+1

이거느 랜덤으로 숫자가 나오게 하는것으로 Random().nextInt(6)이거는 0~5.까지 나오게 합니다 그래서 거기에 1을 더해줘서 1~6이 나오게  만들어줬습니다.

그럼 이제 변수두개가 버튼을 누르면 바뀌고 그에따라 이미지도 바뀔것입니다.

이런식으로 변경됩니다.

그럼 pubsec.yaml로 이동해서

이런식으로 fluttertoast를 입력해주고 위에 pubget을 눌러줍시다

ButtonTheme(

  child: ElevatedButton(
    onPressed: () {
      setState(() {
        left=Random().nextInt(6)+1;
        right=Random().nextInt(6)+1;
      });
      Fluttertoast.showToast(
          msg: "Left Dice:{$left}, Right Dice:{$right}",
          backgroundColor: Colors.purpleAccent,
          toastLength: Toast.LENGTH_LONG,
          gravity: ToastGravity.BOTTOM,
          textColor: Colors.black
      );
    },
    child: Icon(
      Icons.play_arrow,
      color: Colors.white,
      size: 50.0,
    ),
    style: ElevatedButton.styleFrom(primary: Colors.purpleAccent),

  ),
)
import 'package:fluttertoast/fluttertoast.dart';

이렇게 작성하고 import까지 해주고 에뮬레이터를껐다켜주세요. 그리고 눌러보면

이런식으로 스낵바와는 다른 모양으로 글자가 뜨는 것을 알수 있습니다.

Fluttertoast.showToast(
    msg: "Left Dice:{$left}, Right Dice:{$right}",
    backgroundColor: Colors.purpleAccent,
    toastLength: Toast.LENGTH_LONG,
    gravity: ToastGravity.BOTTOM,
    textColor: Colors.black
);

여기서 msg는 뛰울 글자이고 $변수 이렇게 해서 변수내용을 뛰울수 있습니다.

backgroundcolor는 배경 색

toastlength는 뜨는 창이 떠있는 시간을 말합니다 Duration을 뜻한다고  생각하면 됩니다.

gravity는 위치 를 말합니다.

textColor는 글자색 을 말합니다.

 

gravity를 CENTER로  바꾸면

이런식으로 됩니다.

이렇게 다이스게임을 완성했습니다 ㅎㅎ

'flutter' 카테고리의 다른 글

Flutter 다이스게임만들기 4  (0) 2022.05.30
Flutter 다이스게임만들기 3  (0) 2022.05.29
Flutter 다이스게임 만들기 2  (0) 2022.05.28
flutter 다이스게임 만들기  (0) 2022.05.27
flutter 5일차 statefulWidget  (0) 2022.05.26