2020.11.24 일지 - Semi Project

0후·2020년 11월 24일
0

비트캠프

목록 보기
27/112

오늘의 요약

오늘부터 이번주 내내는 세미 프로젝트 하는 기간이라 큼지막한 내용의 일지를 올릴 일은 없을 것 같지만, 하루하루 배운 것들을 올려보도록 하겠다.

Test.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.*;

public class Test extends JFrame {
    Container cp;
    ImagePanel imgP;
    String teamName;
    Color b = new Color(0xFFFFFF);
    Q q = new Q();
	String mod;

    Test() {}
    void init() {
        teamName = JOptionPane.showInputDialog("팀 이름을 입력해주세요~"); //OK버튼 클릭시 입력창에 입력한 값이 teamNum에 리턴됨, cancle이나 창을 끄면 Null
        q.readOriginal();

        imgP = new ImagePanel(this); // 호출
        //init();
        setButton();
        setUI();
    }
    void setButton() {
        cp = getContentPane();
        cp.add(imgP);

    }
    void setUI() {
        // SetBounds(x,y,폭,높이)
        getContentPane().setBackground(b);
        imgP.b1.setBounds(280, 310, 140, 50); //스코어보드
        imgP.b2.setBounds(420, 310, 140, 50); //음악재생
        imgP.b3.setBounds(320, 0, 45, 45); //모래시계
        imgP.b4.setBounds(0, 310, 140, 50); //오케이버튼
        imgP.b5.setBounds(140, 310, 140, 50); //Pass
        imgP.b6.setBounds(560, 310, 140, 50); //Exit
        imgP.timer.setBounds(125, 60, 450, 60); //Pass
        imgP.quiz.setBounds(50, 135, 600, 100);
		imgP.mod.setBounds(10, 5, 50, 50); // mode
        setTitle("Team 3 Quiz Contest");
        setSize(700, 400);
        setVisible(true);
        setLocationRelativeTo(null);
        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args){
        Test t = new Test();
        t.init();
    }
}

Imagepanel.java

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.Toolkit;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.*;
import java.util.*;
import java.awt.image.BufferedImage;
import javax.sound.sampled.*;

public class ImagePanel extends JPanel implements ActionListener {
    Vector < String > list = new Vector < String > ();
    Image image;
    JButton b1, b2, b3, b4, b5, b6, quiz;
    JButton timer, mod;
    JPanel p;
    ImageIcon i1, i2, i3, i4, i5, i6, i7;
    Clip clip;
    Test test;
    BufferedImage pic;
    String teamName;
    Random r = new Random();
    static int score = 0;
    Q q = new Q();
    QTimer qt;
    String sec;

    public ImagePanel() {}
    public ImagePanel(Test test) {
        this.test = test;
        makeMusic();
		test.mod = "프로그래밍";
        makeSource();
    }
    void makeSource() {
        //이미지
        image = new ImageIcon("imgs/screen.png").getImage(); // Wallpaper
        i1 = new ImageIcon(getClass().getResource("imgs/testsend.gif"));
        i2 = new ImageIcon(getClass().getResource("imgs/play.png"));
        i3 = new ImageIcon(getClass().getResource("imgs/passed.png"));
        i4 = new ImageIcon(getClass().getResource("imgs/score-board.png"));
        i5 = new ImageIcon(getClass().getResource("imgs/ok.png"));
        i6 = new ImageIcon(getClass().getResource("imgs/cancel.png"));
		i7 = new ImageIcon(getClass().getResource("imgs/choose.png"));

        //버튼
        b1 = new JButton(i4); //스코어보드
        b2 = new JButton(i2); //음악 재생
        b3 = new JButton(i1); //모래시계
        b4 = new JButton(i5); //OK
        b5 = new JButton(i3); //Pass
        b6 = new JButton(i6); //EXIT
        timer = new JButton("Time");
		mod = new JButton(i7);

        quiz = new JButton("Quiz Start");

        //quiz font 설정
        quiz.setFont(new Font("맑은 고딕", Font.BOLD, 30));
        quiz.setForeground(Color.WHITE);
        quiz.setHorizontalAlignment(JButton.CENTER);

        //타이머 font
        timer.setFont(new Font("맑은 고딕", Font.BOLD, 30));
        timer.setForeground(Color.WHITE);
        timer.setHorizontalAlignment(JButton.CENTER);

        //이벤트 리스너 추가
        quiz.addActionListener(this);
        b1.addActionListener(this);
        b2.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
		mod.addActionListener(this);

        //JButton 외곽선 제거
        b1.setBorderPainted(false);
        b2.setBorderPainted(false);
        b3.setBorderPainted(false);
        b4.setBorderPainted(false);
        b5.setBorderPainted(false);
        b6.setBorderPainted(false);
		mod.setBorderPainted(false);
        timer.setBorderPainted(false);
        quiz.setBorderPainted(false);

        //클릭시 생기는 테두리 제거
        b1.setFocusPainted(false);
        b2.setFocusPainted(false);
        b3.setFocusPainted(false);
        b4.setFocusPainted(false);
        b5.setFocusPainted(false);
        b6.setFocusPainted(false);
		mod.setFocusPainted(false);
        timer.setFocusPainted(false);
        quiz.setFocusPainted(false);

        //절대위치 배치
        setLayout(null);
        add(b1);
        add(b2);
        add(b3);
        add(b4);
        add(b5);
        add(b6);
        add(timer);
        add(quiz);
		add(mod);

        setBackground(new Color(255, 255, 255));
        b1.setBackground(Color.white);
        b2.setBackground(Color.white);
        b3.setBackground(Color.white);
        b4.setBackground(Color.white);
        b5.setBackground(Color.white);
        b6.setBackground(Color.white);
		mod.setBackground(Color.white);
        timer.setBackground(Color.white);
        quiz.setBackground(Color.white);

        //투명하게
        b1.setOpaque(false);
        b2.setOpaque(false);
        b3.setOpaque(false);
        b4.setOpaque(false);
        b5.setOpaque(false);
        b6.setOpaque(false);
		mod.setOpaque(false);
        timer.setOpaque(false);
        quiz.setOpaque(false);
    }
    //이벤트
    public void actionPerformed(ActionEvent e) {
        Object obj = e.getSource();
        String imgFile = "";
        if (obj == quiz) { // 퀴즈
            try {
                sec = JOptionPane.showInputDialog("진행하실 시간을 입력해주세요~");
                qt = new QTimer(this);
                //quiz.setText("문자열이 긴 문장 테스트 내용");
                qt.start();
                start();
            } catch (Exception ie) {}

        } else if (obj == b1) { //스코어보드 누르면 창 뜨게~ (나중에 퀴즈의 스코어 변수를 넣을 예정)
            JOptionPane.showMessageDialog(null, "스코어보드 \n " + test.teamName + " : " + score, "Score Board",
                JOptionPane.QUESTION_MESSAGE,
                null);
        } else if (obj == b2) { // BGM 이벤트
            if (clip.isRunning() == false) { //bgm이 나오고 있지 않을때 시작~
                clip.start();
                imgFile = "imgs/stop.png";
                try {
                    pic = ImageIO.read(new File(imgFile));
                } catch (IOException e1) {
                    System.out.println("이미지 없음!");
                }
                i2.setImage(pic);
            } else if (clip.isRunning() == true) { //bgm이 나오고 있을때 스탑~
                clip.stop();
                imgFile = "imgs/play.png";
                try {
                    pic = ImageIO.read(new File(imgFile));
                } catch (IOException e2) {
                    System.out.println("이미지 없음!");
                }
                i2.setImage(pic);
            }
        } else if (obj == b6) {
            System.exit(-1); // 나가기 버튼
        } else if (obj == b4) {
			try{
				if (qt.sec1 != 0) {
					int size = list.size();
					if (size > 0) {
						int i = r.nextInt(size);
						String line = list.get(i);
						quiz.setText(line);
						score++;
						list.remove(i);
					} else {
						quiz.setText("문제 끝~");
					}
				} 
			}catch(NullPointerException ne){}
        } else if (obj == b5) {
			try{
				if (qt.sec1 != 0) {
					int size = list.size();
					if (size > 0) {
						int i = r.nextInt(size);
						String line = list.get(i);
						quiz.setText(line);
					}
				}
			}catch(NullPointerException ne){}
        }else if(obj== mod){
			String mod[] ={"프로그래밍","나라 이름"};
			
			Object sk=JOptionPane.showInputDialog(null,"퀴즈 종류를 선택해 주세요~","Select Mode",JOptionPane.QUESTION_MESSAGE, null, mod, mod[0]);
			if((String)sk==null){
			}else{
				JOptionPane.showMessageDialog(null, sk+"으로 퀴즈 내용이 바뀝니다.");
				if(sk=="나라 이름"){
					test.mod=(String)sk;
				}else{
					test.mod=(String)sk;
				}
			}
		}
		

    }
    // 오버라이딩
    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        setOpaque(false); //투명하게
        super.paint(g);
    }
    //BGM 생성
    void makeMusic() {
        try {
            File morlau = new File("music/morlau.wav");
            clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(morlau));
        }catch(LineUnavailableException ne){
			JOptionPane.showMessageDialog(null,"스피커가 연결돼었는지 확인해주세요.");
		}catch (Exception e) {}
    }
    void start() {
        FileReader fr = null;
        BufferedReader br = null;
        String line = "";
		if(test.mod=="프로그래밍"){	
			list.clear();
			try {
				fr = new FileReader("filtered.txt");
				br = new BufferedReader(fr);
				while ((line = br.readLine()) != null) {
					list.add(line);
				}
				inputTeamNum();
			} catch (FileNotFoundException fe) {
			} catch (IOException ie) {}
		}else if(test.mod=="나라 이름"){
			list.clear();
			try {
            fr = new FileReader("country.txt");
            br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                list.add(line);
            }
            inputTeamNum();
			} catch (FileNotFoundException fe) {
			} catch (IOException ie) {}
		}
    }
    void inputTeamNum() {
        try {
            String line = test.teamName;
            if (line != null) line = line.trim();
            //System.out.println(teamName);

            showQ();
        } catch (NumberFormatException ne) {
            inputTeamNum();
        }
    }
    void showQ() {
        int size = list.size();
        if (size > 0) {
            int i = r.nextInt(size);
            quiz.setText(list.get(i));
        } else {
            quiz.setText("문제 끝~");
        }
    }
}
profile
휘발방지

0개의 댓글