베팅 슬롯 머신

JTH·2023년 2월 27일
0

gb_jth

목록 보기
53/56

발표랑 이것저것 17일날 다 마무리 되었다..

베팅이 가능한 슬롯머신 류로

처음에는 이미지가 바뀌면서 일치히면 되는 그런 방식의 슬롯머신을 생각했다

다른 나라의 코드를 구경하며 긁어보고 이미지도 바꿔보며 가능할것같았다.

그렇게 나온 초안

이제 이걸보고 그대로 천천히 설계해나가면 될 것 같았으나...

결과물

무언가 많이 모자라게 완성되었다..

시간은 많았지만.. 열심히 긁어 모아보고 이미지 삽입 그리고 그 이미지가 랜덤으로 돌아갈수있게 여러 유튜브 인터넷 구글링을 해봤지만.. 기본 숫자배열을 랜덤으로 돌린것의 첫번째 배열값을 잡히게 한 소스코드에서 변경하려니 막막하였고..

시간이없어서 버그부터 없애기 시작했다..

베팅 입력창에서 돈을 입력하지않아도 슬롯머신을 한무 무료로 즐길수있어서 그걸 막기위해
버튼을 비활성화 하고

베팅금이 보유 코인보다 초과하지 않고 어떠한 상황이던 정상 숫자 입력값을 받아야 가능하게 노력했다.

(-)값입력시 바로 재입력창을 유도하게 바꿨으며

큰값도 못하게 막았고

베팅을 하다가 보유코인이 떨어지고 베팅했던 코인보다 숫자가 낮아질때 코인이 부족하다
알람을 뜨게 했다.

여기서 확인하니 그냥 갑자기 무한으로 즐겨버릴수있는 버그가 또 나와서

자동으로 배팅입력창이 나타나게 다시 설계했다.

코인이 부족할땐 절대 안돌아가게 하고싶었기에..

무한으로 즐겨요..는 막아냈고

결과는 다행히 잘나온것 같았다..

처음 목표했던 커비모양 슬롯머신을 만들고 싶었으나..

아쉽게도 목표에 다다르지 못해 가끔씩 이미지넣고 돌리는 장난감자바연습중이다..

화이팅

package selfproject;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class Slot extends JFrame {

	// 클래스에 노란 밑줄을 사라지게 하려니 밑의 이 코드가 출력되었다.
	private static final long serialVersionUID = 1L;

	public static void main(String[] args) {

		Font font = new Font("모노", Font.ITALIC, 30);
		Font font2 = new Font("일반", Font.BOLD, 20);
		Font font3 = new Font("숫자", Font.PLAIN, 40);
		JFrame frm = new JFrame("슬 롯 머 신");
		frm.setSize(640, 480);
		// 프레임을 화면 가운데에 배치
		frm.setLocationRelativeTo(null);
		// 프레임을 닫았을 때 메모리에서 제거되도록 설정
		frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // a
		// 레이아웃 설정
		frm.getContentPane().setLayout(null);

		// 컨텐츠 영역의 크기 표시
		System.out.println(frm.getContentPane().getSize());
		// 버튼 생성
		JButton btn1 = new JButton("슬롯 머신 레버");
		JButton btn2 = new JButton("배 팅");
		// 버튼 위치와 크기 설정
		btn1.setBounds(180, 360, 122, 30);
		btn2.setBounds(332, 360, 122, 30);
		// 프레임에다가 버튼 추가
		frm.getContentPane().add(btn1);
		frm.getContentPane().add(btn2);

		// 라벨 설정
		JLabel lb = new JLabel();
		lb.setBounds(170, 250, 274, 50);
		lb.setFont(font);

		// 수평 정렬
		lb.setHorizontalAlignment(JLabel.CENTER);
		lb.setText("게임을 시작합니다");
		frm.getContentPane().add(lb);

		// 보유코인라벨 설정
		JLabel lbcoin = new JLabel();
		lbcoin.setBounds(100, 30, 122, 30);
		lbcoin.setFont(font2);
		lbcoin.setText("보유 코인 : ");
		frm.getContentPane().add(lbcoin);

		// 보유코인 숫자 라벨 설정
		JLabel lbCoinNum = new JLabel();
		lbCoinNum.setBounds(210, 30, 122, 30);
		lbCoinNum.setFont(font2);
		lbCoinNum.setText("100");
		frm.getContentPane().add(lbCoinNum);

		// 배팅 코인 라벨 설정
		JLabel batCoin = new JLabel();
		batCoin.setBounds(380, 30, 122, 30);
		batCoin.setFont(font2);
		batCoin.setText("배팅 코인 : ");
		frm.getContentPane().add(batCoin);

		// 배팅 코인 숫자 라벨 설정
		JLabel batCoinNum = new JLabel();
		batCoinNum.setBounds(490, 30, 122, 30);
		batCoinNum.setFont(font2);
		batCoinNum.setText("0");
		frm.getContentPane().add(batCoinNum);

		// 첫번째 숫자 세팅
		JLabel num = new JLabel();
		num.setSize(150, 50);
		num.setBackground(Color.BLUE);
		num.setBounds(100, 150, 122, 30);
		num.setFont(font3);
		num.setForeground(Color.magenta);
		num.setText("0");
		num.setVisible(true);
		frm.getContentPane().add(num);

		// 두번째 슬롯 숫자 세팅
		JLabel num2 = new JLabel();
		num2.setBounds(300, 150, 122, 30);
		num2.setFont(font3);
		num2.setForeground(Color.BLUE);
		num2.setText("0");
		frm.getContentPane().add(num2);

		// 세번째 슬롯 숫자 세팅
		JLabel num3 = new JLabel();
		num3.setBounds(500, 150, 122, 30);
		num3.setFont(font3);
		num3.setForeground(Color.RED);
		num3.setText("0");
		frm.getContentPane().add(num3);

		// 프레임이 보이도록 설정 프레임이 보이도록 설정하는 코드는 맨아래로
		frm.setVisible(true);
		// 프레임 조절불가능
		frm.setResizable(false);

		btn1.setEnabled(false);

		// btn2 배팅 버튼의 기능
		btn2.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				// 배팅 입력 다이얼로그 설정
				String batting;
				// 배팅 코인 숫자
				int i;
				// 보유코인 숫자 라벨의 텍스트를 가져와서 인트로 변환해줌
				int j = Integer.parseInt(lbCoinNum.getText());

				// 취소 할경우 뜨는 에러를 예외처리
				try {
					do {
						batting = JOptionPane.showInputDialog("배팅 금액 입력"); // 배팅 버튼 누를시 팝업
						i = Integer.parseInt(batting); // 문자열값 배팅을 숫자형으로 변경
						if (i > j) {
							lbCoinNum.setText(String.valueOf(j));
							JOptionPane.showMessageDialog(null, "보유한 코인보더 더 크게 배팅할 수 없습니다.", "보유 코인 부족",
									JOptionPane.ERROR_MESSAGE);

						} // 배팅한 코인이 보유코인을 넘어갈경우에만
					} while (i < 0);
					batCoinNum.setText(batting); // 배팅코인 텍스트에 배팅 코인 값을 입력
					lbCoinNum.setText(String.valueOf(j));
					btn1.setEnabled(true);
					if (i > j) {
						batCoinNum.setText("0");
						btn1.setEnabled(false);
					} else if (i == 0) {
						btn1.setEnabled(false);
					}

				} catch (Exception e2) { // 예외처리 후 문장 출력
					JOptionPane.showMessageDialog(null, "취소 하였습니다.", "취소", JOptionPane.INFORMATION_MESSAGE);

					batCoinNum.setText("0");

					btn1.setEnabled(false);
				}

			}
		});

		// btn1 슬롯머신 래버 버튼의 기능
		btn1.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {

				String[] symbols = { "1", "2", "3", "4", "5" }; // 슬롯머신 내용물
				String[] symbols2 = { "1", "2", "3", "4", "5" }; // 슬롯머신 내용물
				String[] symbols3 = { "1", "2", "3", "4", "5" }; // 슬롯머신 내용물

				List<String> list = Arrays.asList(symbols);
				List<String> list2 = Arrays.asList(symbols2);
				List<String> list3 = Arrays.asList(symbols3);

				// 슬롯머신 내용물 섞고돌리고 섞고
				Collections.shuffle(list);
				list.toArray(symbols);

				Collections.shuffle(list2);
				list2.toArray(symbols2);

				Collections.shuffle(list3);
				list3.toArray(symbols3);

				// 위에 선언해둔 슬롯머신의 위치 및 판넬등을 불러와 내용물 랜덤픽의 첫번째를 세팅
				num.setText(list.get(0));
				num2.setText(list2.get(0));
				num3.setText(list3.get(0));

				// 슬롯머신 같은 수에 따라 변화
				int i;
				i = Integer.parseInt(batCoinNum.getText()); // 배팅한 코인을 int로
				int j;
				j = Integer.parseInt(lbCoinNum.getText()); // 기존 가지고있는 코인 int로

				if (list.get(0) == list2.get(0) && list2.get(0) == list3.get(0)) {
					lb.setText("30배 획득"); // 숫자 3개 일치
					int win30 = i * 30;
					j += win30;
				} else if (list.get(0) == list2.get(0) || list2.get(0) == list3.get(0) || list3.get(0) == list.get(0)) {
					lb.setText("3배 획득"); // 숫자 2개 일치
					int win3 = i * 3;
					j += win3;
				} else {
					j -= i; // 다다를시
					lb.setText("잃었습니다.");
				}

				if (j == 0) {
					lbCoinNum.setText(String.valueOf(j));
					JOptionPane.showMessageDialog(null, "보유한 코인이 없습니다. 종료합니다.", "보유 코인 없음", JOptionPane.ERROR_MESSAGE);
					// 보유 코인 바닥시 강제종료
					System.exit(0);
				}
				lbCoinNum.setText(String.valueOf(j));

				if (j < i) { // 보유한 금액이 배팅금액보다 적어질때 슬롯머신 버튼을 비활성화 해야함
					lbCoinNum.setText(String.valueOf(j));
					JOptionPane.showMessageDialog(null, "보유한 금액이 배팅 금액보다 적습니다.", "보유 코인 부족", JOptionPane.ERROR_MESSAGE);
					batCoinNum.setText("0");
					btn1.setEnabled(false); // 래버 버튼 비활성화
					btn2.doClick(); // 배팅 버튼 클릭시 아래 활성화
				}
			}
		});

	}
}
profile
//

0개의 댓글