JAVA

[실습]야구게임 만들기

zammanza 2013. 2. 8. 17:11

import java.awt.BorderLayout;

 

import java.awt.EventQueue;

 

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

import javax.swing.JButton;

import javax.swing.JTextArea;

import javax.swing.JScrollPane;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.util.Random;

import javax.swing.SwingConstants;

import java.awt.Font;

 

 

public class Baseball extends JFrame {

 

        private JPanel contentPane;

        private JTextField num1;

        private JTextField num2;

        private JTextField num3;

        private JButton button;

        private JTextArea ingGameArea;

       

        //랜덤생성된 숫자 저장될 변수

        private int[] pitcher = {0,0,0};

       

        //내가 넣은 숫자가 저장될 변수

        private int[] batter = {0,0,0};

       

        //스트라이크 카운트

        private int strike = 0;

       

        //볼넷 카운트

        private int ball4 = 0;

 

        //회차 저장 1~10회까지

        private int ballnumber = 0;          

       

        //게임진행상황 저장

        private String ingGame = "";

       

        //경기끝 상황 변수

        private int status = 0;

       

       

        private JLabel result;

        /**

         * Launch the application.

         */

        public static void main(String[] args) {

               EventQueue.invokeLater(new Runnable() {

                       public void run() {

                              try {

                                      Baseball frame = new Baseball();

                                      frame.setVisible(true);

                              } catch (Exception e) {

                                      e.printStackTrace();

                              }

                       }

               });

        }

 

        /**

         * Create the frame.

         */

 

       

       

        public Baseball() {

               setTitle("야구게임");

               setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

               setBounds(100, 100, 303, 368);

               contentPane = new JPanel();

               contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

               setContentPane(contentPane);

               contentPane.setLayout(null);

              

               num1 = new JTextField();

               num1.setBounds(12, 101, 37, 21);

               contentPane.add(num1);

               num1.setColumns(10);

              

               num2 = new JTextField();

               num2.setColumns(10);

               num2.setBounds(61, 101, 37, 21);

               contentPane.add(num2);

              

               num3 = new JTextField();

               num3.setColumns(10);

               num3.setBounds(110, 101, 37, 21);

               contentPane.add(num3);

              

               // 던지기 실행 클래스======================================================================================================

               JButton btnNewButton = new JButton("던지기!");

               btnNewButton.addMouseListener(new MouseAdapter() {

                       @Override

                       public void mouseClicked(MouseEvent arg0) {

                                                            

                              try{

                                      result.setText("");

                                     

                                      //"타석에 들어서기" 눌럿는지 확인

                                      if(pitcher[0] == 0 && pitcher[1] == 0 && pitcher[2] == 0){

                                             JOptionPane.showMessageDialog(Baseball.this, "마운드에 오르세요 ^^" , "경고" , JOptionPane.INFORMATION_MESSAGE );

                                             result.setText("마운드에 오르세요 ^^");

                                      }else{

                                             //두자리수 이상의 숫자를 입력받을 경우 입력값을 ""으로 바꿔서 예외처리로 보냄

                                             if(Integer.valueOf(num1.getText())  >= 10){num1.setText("");}

                                             if(Integer.valueOf(num2.getText())  >= 10){num2.setText("");}

                                             if(Integer.valueOf(num3.getText())  >= 10){num3.setText("");}

 

                                            

                                             //내가 입력한 숫자를 batter 넣음              

                                             batter[0] = Integer.parseInt(num1.getText());

                                             batter[1] = Integer.parseInt(num2.getText());

                                             batter[2] = Integer.parseInt(num3.getText());

                                            

                                             //내가 입력한 숫자중에 중복값이 있는지 검사

                                             if(batter[0] == batter[1] || batter[1] == batter[2] || batter[0] == batter[2]){

                                                     JOptionPane.showMessageDialog(Baseball.this, "같은 숫자를 넣지 마세요" , "경고" , JOptionPane.INFORMATION_MESSAGE );

                                                     result.setText("같은 숫자를 넣지 마세요");

                                                     num1.setText("");

                                                     num2.setText("");

                                                     num3.setText("");

                                                    

                                             }else{

                                                    

                                                     //스트라이크,  검사

                                                     for(int i = 0 ; i < 3 ; i++){

                                                             for(int a = 0 ; a < 3 ; a++){

                                                                    if(pitcher[i] == batter[a]){

                                                                            if(i == a){

                                                                                   strike = strike + 1;

                                                                                    result.setText("스트라이크!!");

                                                                            }else{

                                                                                   ball4 = ball4 + 1;

                                                                                   result.setText("~~ _");

                                                                            }

                                                                    }

                                                             }      

                                                     }

                                                    

                                                     //진행상황 저장 & 표시

                                                     ingGame = ingGame + (ballnumber+1) + " : " + batter[0] + "  -  " + batter[1] + "  -  " + batter[2] +  "      [" + String.valueOf(strike)+ "스트라이크 / " + String.valueOf(ball4)+ "" + "]"+"\n";

                                                     ingGameArea.setText(ingGame);

                      

                                                     System.out.println("스트라이크 : " + strike + " / 볼넷 : " + ball4 );           //스트라이크,볼넷 횟수 표시

                                                    

                                                     ballnumber = ballnumber + 1;          //공격횟수 증가

                                                    

                                                    

                                                     //게임종료 조건

                                                     if(ballnumber > 9){

                                                             status = 3;

                                                             EndGame();

                                                             status = 0;

                                                     }

                                                     if(strike > 2){

                                                             status = 1;

                                                             EndGame();

                                                             status = 0;

                                                     }

                                                     if(ball4 > 3){

                                                             status = 2;

                                                             EndGame();

                                                             status = 0;

                                                     }

                                                    

 

                                             }

                                      }

                             

                               //==============================================================================

                              }catch (NumberFormatException asd){

                                      JOptionPane.showMessageDialog(Baseball.this, "0~9까지의 숫자를 입력해주세요." , "경고" , JOptionPane.INFORMATION_MESSAGE );

                                      result.setText("0~9까지의 숫자를 입력해주세요.");                //숫자입력 확인

                                      num1.setText("");

                                      num2.setText("");

                                      num3.setText("");

                              }

                                                    

                       }

               });

               btnNewButton.setBounds(174, 100, 97, 23);

               contentPane.add(btnNewButton);

              

               //마운드에 오르기 클래스======================================================================================================

               button = new JButton("마운드에 오르기");

               button.addMouseListener(new MouseAdapter() {

                       @Override

                       public void mouseClicked(MouseEvent arg0) {

                              result.setText("준비");

                              //공격횟수,볼넷,스트라이크 초기화(EndGameClass)

                              EndGame();

                             

                              //랜덤 숫자 3 생성

                              Random r = new Random();              //random class 선언

                             

                              //겹치지 않는 3개의 숫자 생성하여 pitcher 변수에 넣음

                              for(int i=0 ; i < 3 ; i++){

                                      pitcher[i] = r.nextInt(10);

                                      for(int a = 0 ; a < i ; a++){

                                             if(pitcher[i] == pitcher[a]){

                                                     i--;

                                             }

                                      }             

                              }

                              System.out.print(pitcher[0]);

                              System.out.print(pitcher[1]);

                              System.out.println(pitcher[2]);

       

                       }

               });

               button.setBounds(61, 10, 158, 23);

               contentPane.add(button);

              

               JScrollPane scrollPane = new JScrollPane();

               scrollPane.setBounds(12, 136, 259, 188);

               contentPane.add(scrollPane);

              

               ingGameArea = new JTextArea();

               scrollPane.setViewportView(ingGameArea);

              

               result = new JLabel("진행상황");

               result.setFont(new Font("굴림", Font.BOLD, 14));

               result.setHorizontalAlignment(SwingConstants.CENTER);

               result.setBounds(12, 43, 259, 48);

               contentPane.add(result);

        }

        //경기종료 클래스선언======================================================================================================

        public void EndGame(){

                if(status == 0){

                       result.setText("경기준비");

                       num1.setText("");

                       num2.setText("");

                       num3.setText("");

                       ingGameArea.setText("");

               }

               if(status == 1){

                       result.setText("3 아웃!! 경기끝!");

                       ingGame = ingGame +"정답 : " + pitcher[0] + "  -  " + pitcher[1] + "  -  " + pitcher[2];

                       ingGameArea.setText(ingGame);

               }

               if(status == 2){

                       result.setText("포볼!! 경기끝!");

                       ingGame = ingGame +"정답 : " + pitcher[0] + "  -  " + pitcher[1] + "  -  " + pitcher[2];

                       ingGameArea.setText(ingGame);

               }

               if(status == 3){

                       result.setText("경기시간 종료");

                       ingGame = ingGame +"정답 : " + pitcher[0] + "  -  " + pitcher[1] + "  -  " + pitcher[2];

                       ingGameArea.setText(ingGame);

               }      

               pitcher[0] = 0; pitcher[1] = 0; pitcher[2] = 0;

               batter[0] = 0; batter[1] = 0; batter[2] = 0;

               strike = 0;

               ball4 = 0;

               ballnumber = 0;              

               ingGame = "";

        }

}

 

 

 

 

결과물