--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
###################################
3. 소스코드
----------------------------------- 3-1 /day16/src/awt/menu/MenuTest3.java package awt.menu; import java.awt.FileDialog; import java.awt.Frame; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.BufferedReader; import java.io.FileReader; import java.io.PrintWriter; /* public class MenuTest3 extends Frame implements MouseListener,ActionListener { PopupMenu pmenu; MenuItem newfile,openfile,closefile,savefile,exit; FileDialog fopen, fsave; public MenuTest3() { pmenu = new PopupMenu(); newfile = new MenuItem("새파일"); openfile = new MenuItem("파일열기"); closefile = new MenuItem("파일닫기"); savefile = new MenuItem("파일저장"); exit = new MenuItem("종료"); fopen = new FileDialog(this, "파일 열기", FileDialog.LOAD); fsave = new FileDialog(this, "파일 저장", FileDialog.SAVE); pmenu.add(newfile); pmenu.add(openfile); pmenu.add(savefile); pmenu.add(closefile); pmenu.addSeparator(); pmenu.add(exit); add(pmenu); addMouseListener(this); exit.addActionListener(this); newfile.addActionListener(this); openfile.addActionListener(this); closefile.addActionListener(this); savefile.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == exit) { dispose(); }else if (e.getSource() == newfile) { }else if (e.getSource() == openfile) { fopen.setVisible(true); if (fopen.getFile() != null) { try { FileReader reader = new FileReader(fopen.getDirectory() + "\\" + fopen.getFile()); BufferedReader br = new BufferedReader(reader); String str; while ((str = br.readLine()) != null) { //area.append(str + "\n"); } br.close(); reader.close(); } catch (Exception e1) { e1.printStackTrace(); } } }else if (e.getSource() == closefile) { }else if (e.getSource() == savefile) { fsave.setVisible(true); if (fsave.getFile() != null) { try { PrintWriter pw = new PrintWriter(fsave.getDirectory() + "\\" + fsave.getFile()); //pw.print(area.getText()); pw.close(); } catch (Exception e1) { e1.printStackTrace(); } } } } public static void main(String[] args) { // TODO 메뉴 세번째 예제 MenuTest3 et = new MenuTest3(); et.setSize(300, 400); et.setVisible(true); } @Override public void mouseClicked(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub pmenu.show(this, e.getX(), e.getY()); } @Override public void mouseEntered(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } } */ //#2 리펙토링 해보자. 나중에 MouseListener를 Adapter로 바꿔라 /* public class MenuTest3 extends Frame implements MouseListener,ActionListener { PopupMenu pmenu; MenuItem newfile,openfile,closefile,savefile,exit; FileDialog fopen, fsave; TextArea area; public MenuTest3() { pmenu = new PopupMenu(); area = new TextArea(); itemAdd("새파일", pmenu); itemAdd("파일열기", pmenu); itemAdd("파일닫기", pmenu); itemAdd("파일저장", pmenu); itemAdd("종료", pmenu); fopen = new FileDialog(this, "파일 열기", FileDialog.LOAD); fsave = new FileDialog(this, "파일 저장", FileDialog.SAVE); add(pmenu); //add(area); addMouseListener(this); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("종료")) { dispose(); }else if (e.getActionCommand().equals("새파일")) { }else if (e.getActionCommand().equals("파일열기")) { fopen.setVisible(true); if (fopen.getFile() != null) { try { FileReader reader = new FileReader(fopen.getDirectory() + "\\" + fopen.getFile()); BufferedReader br = new BufferedReader(reader); String str; while ((str = br.readLine()) != null) { area.append(str + "\n"); } br.close(); reader.close(); } catch (Exception e1) { e1.printStackTrace(); } } }else if (e.getActionCommand().equals("파일닫기")) { }else if (e.getActionCommand().equals("파일저장")) { fsave.setVisible(true); if (fsave.getFile() != null) { try { PrintWriter pw = new PrintWriter(fsave.getDirectory() + "\\" + fsave.getFile()); pw.print(area.getText()); pw.close(); } catch (Exception e1) { e1.printStackTrace(); } } } } private void itemAdd(String title, PopupMenu p){ MenuItem mi = new MenuItem(title); mi.addActionListener(this); p.add(mi); } public static void main(String[] args) { // TODO 메뉴 세번째 예제 MenuTest3 et = new MenuTest3(); et.setSize(300, 400); et.setVisible(true); } @Override public void mouseClicked(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub pmenu.show(this, e.getX(), e.getY()); } @Override public void mouseEntered(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mousePressed(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseReleased(java.awt.event.MouseEvent e) { // TODO Auto-generated method stub } } */ //#2 어뎁터 변경 class MouseAdapterProc extends MouseAdapter{ Frame f; PopupMenu p; public MouseAdapterProc(Frame f,PopupMenu p ) { this.f = f; this.p = p; } @Override public void mouseClicked(MouseEvent e) { p.show(f, e.getX(), e.getY()); } } public class MenuTest3 extends Frame implements ActionListener { /** * */ private static final long serialVersionUID = 1L; PopupMenu pmenu; MenuItem newfile,openfile,closefile,savefile,exit; FileDialog fopen, fsave; TextArea area; public MenuTest3() { pmenu = new PopupMenu(); area = new TextArea(); itemAdd("새파일", pmenu); itemAdd("파일열기", pmenu); itemAdd("파일닫기", pmenu); itemAdd("파일저장", pmenu); itemAdd("종료", pmenu); fopen = new FileDialog(this, "파일 열기", FileDialog.LOAD); fsave = new FileDialog(this, "파일 저장", FileDialog.SAVE); add(pmenu); //add(area); addMouseListener(new MouseAdapterProc(this,pmenu)); } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("종료")) { dispose(); }else if (e.getActionCommand().equals("새파일")) { }else if (e.getActionCommand().equals("파일열기")) { fopen.setVisible(true); if (fopen.getFile() != null) { try { FileReader reader = new FileReader(fopen.getDirectory() + "\\" + fopen.getFile()); BufferedReader br = new BufferedReader(reader); String str; while ((str = br.readLine()) != null) { area.append(str + "\n"); } br.close(); reader.close(); } catch (Exception e1) { e1.printStackTrace(); } } }else if (e.getActionCommand().equals("파일닫기")) { }else if (e.getActionCommand().equals("파일저장")) { fsave.setVisible(true); if (fsave.getFile() != null) { try { PrintWriter pw = new PrintWriter(fsave.getDirectory() + "\\" + fsave.getFile()); pw.print(area.getText()); pw.close(); } catch (Exception e1) { e1.printStackTrace(); } } } } private void itemAdd(String title, PopupMenu p){ MenuItem mi = new MenuItem(title); mi.addActionListener(this); p.add(mi); } public static void main(String[] args) { // TODO 메뉴 세번째 예제 MenuTest3 et = new MenuTest3(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-2 /day17/src/swing/SwingTest1.java package swing; import java.awt.FlowLayout; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; public class SwingTest1 extends JFrame{ JButton b1; ImageIcon icon1, icon2; public SwingTest1() { setLayout(new FlowLayout()); icon1 = new ImageIcon(getClass().getResource("/resources/duke_box.gif")); icon2 = new ImageIcon(getClass().getResource("/resources/duke_flip.gif")); b1 = new JButton("버튼"); b1.setIcon(icon1); b1.setPressedIcon(icon2); add(b1); setSize(300,400); setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { // TODO Swing 첫번째 예제 new SwingTest1(); } } ----------------------------------- 3-3 /day17/src/swing/SwingTest2.java package swing; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.border.BevelBorder; import javax.swing.border.EtchedBorder; public class SwingTest2 extends JFrame{ JButton b1; ImageIcon icon1; JLabel label; public SwingTest2() { setLayout(new FlowLayout()); icon1 = new ImageIcon(getClass().getResource("/resources/duke_pencil.gif")); b1 = new JButton("버튼"); label = new JLabel("스윙 라벨입니다.", icon1, JLabel.CENTER); add(b1); add(label); label.setBorder(new EtchedBorder(Color.RED,Color.GRAY)); b1.setBorder(new BevelBorder(BevelBorder.LOWERED)); } public static void main(String[] args) { // TODO Swing 두번째 예제 SwingTest2 st = new SwingTest2(); st.setSize(300,400); st.pack();//내용에 맞게 사이즈를 조절해줌 st.setVisible(true); st.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ----------------------------------- 3-4 /day17/src/swing/SwingTest3.java package swing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JTextField; public class SwingTest3 extends JFrame implements ActionListener, KeyListener { JButton btn; JTextField field; JLabel label; public SwingTest3() { // 화면상의 길이 field = new JTextField(30); btn = new JButton("확인"); label = new JLabel("안녕하세요......"); add("Center", field); add("East", btn); add("South", label); btn.addActionListener(this); field.addKeyListener(this); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == btn) { label.setText(field.getText()); field.setText(""); } } public static void main(String[] args) { // TODO Swing 세번째 예제 SwingTest3 st = new SwingTest3(); st.pack();// 내용에 맞게 사이즈를 조절해줌 st.setVisible(true); st.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub if (e.getKeyChar() == KeyEvent.VK_ENTER) { if (field.getText().isEmpty()) { //JOptionPane.showMessageDialog(null, "반드시 데이터를 입력해야 합니다."); //String str = JOptionPane.showInputDialog("이유를 적어봐"); int num = JOptionPane.showConfirmDialog(null, "아무거나 선택하시오", "타이틀 입력", JOptionPane.YES_NO_CANCEL_OPTION); return; } label.setText(field.getText()); field.setText(""); } } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } } ----------------------------------- 3-5 /day17/src/swing/SwingTest4.java package swing; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; public class SwingTest4 extends JFrame { JTree tree; JLabel label; public SwingTest4() { // MODEL DefaultMutableTreeNode root = new DefaultMutableTreeNode("커피"); DefaultMutableTreeNode step1 = new DefaultMutableTreeNode("자바 커피"); DefaultMutableTreeNode step2 = new DefaultMutableTreeNode("원두 커피"); DefaultMutableTreeNode step2_1 = new DefaultMutableTreeNode("아메리카노"); DefaultMutableTreeNode step2_2 = new DefaultMutableTreeNode("헤이즐넛"); DefaultMutableTreeNode step2_3 = new DefaultMutableTreeNode("라떼"); root.add(step1); root.add(step2); step2.add(step2_1); step2.add(step2_2); step2.add(step2_3); tree = new JTree(root); tree.addMouseListener(new MouseHandler()); // add(tree); // #1 1개의 scroll 추가 // JScrollPane scroll = new JScrollPane(tree); // #2 여러개의 scroll 추가 방법 JScrollPane scroll = new JScrollPane(); scroll.getViewport().add(tree); add(scroll); label = new JLabel("여기에 선택한 항목이 나타납니다."); add("South", label); } class MouseHandler extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { int selRow = tree.getRowForLocation(e.getX(), e.getY()); //선택한 위치에 tree의 경로를 가져옴 TreePath tp = tree.getPathForLocation(e.getX(), e.getY()); if( -1 != selRow){ //label.setText(String.valueOf(selRow)); //#3 더블클릭 체크 if (e.getClickCount() == 2) { label.setText(tp.getLastPathComponent().toString()); } } } } public static void main(String[] args) { // TODO Swing 네번째 예제 SwingTest4 st = new SwingTest4(); // st.setSize(300,400); st.pack();// 내용에 맞게 사이즈를 조절해줌 st.setVisible(true); st.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ----------------------------------- 3-6 /day17/src/swing/SwingTest5.java package swing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.TableModel; class MouseAdapterTest extends MouseAdapter { JFrame t; public MouseAdapterTest(JFrame t) { this.t = t; } @Override public void mouseClicked(MouseEvent e) { SwingTest5 sw5 = (SwingTest5) t; TableModel model = sw5.table.getModel(); if (sw5.table.getSelectedRow() != -1 || sw5.table.getSelectedColumn() != -1) { System.out.println(model.getValueAt(sw5.table.getSelectedRow(), sw5.table.getSelectedColumn())); } } } public class SwingTest5 extends JFrame implements ActionListener { JTable table; JButton btn; String title[] = { "이름", "나이", "성별" }; Object data[][] = { { "홍길동", 24, "남자" }, { "임꺽정", 25, "남자" }, { "신사임당", 27, "여자" } }; public SwingTest5() { table = new JTable(data, title); table.addMouseListener(new MouseAdapterTest(this)); btn = new JButton("출력"); btn.addActionListener(this); JScrollPane scroll = new JScrollPane(); scroll.getViewport().add(table); add("Center", scroll); add("South", btn); } @Override public void actionPerformed(ActionEvent e) { TableModel model = table.getModel(); /* for (int i = 0; i < model.getRowCount(); i++) { System.out.print(model.getColumnName(i)+"\t"); } System.out.println(---------------------------------); for (int i = 0; i < model.getColumnCount(); i++) { for (int j = 0; j < model.getRowCount(); j++) { System.out.print(model.getValueAt(i, j)+"\t"); } System.out.println(); } System.out.println(table.getSelectedRow()+":"+table.getSelectedColumn()); */ if(e.getSource() == btn){ if(table.getSelectedRow() != -1 || table.getSelectedColumn() != -1){ System.out.println(model.getValueAt(table.getSelectedRow(), table.getSelectedColumn())); } } } public static void main(String[] args) { // TODO Swing 다섯번째 예제 SwingTest5 st = new SwingTest5(); // st.setSize(300,400); st.pack();// 내용에 맞게 사이즈를 조절해줌 st.setVisible(true); st.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ----------------------------------- 3-7 /day17/src/swing/SwingTest6.java package swing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; class MouseActionDemo extends MouseAdapter{ JFrame f; public MouseActionDemo(JFrame f) { this.f = f; } @Override public void mouseClicked(MouseEvent e) { SwingTest6 st6 = (SwingTest6)f; if( e.getSource() == st6.tName ){ st6.tName.setText(""); }else if( e.getSource() == st6.tAge ){ st6.tAge.setText(""); }else if( e.getSource() == st6.tGender ){ st6.tGender.setText(""); } } } public class SwingTest6 extends JFrame implements ActionListener{ JTable table; JButton btnAdd, btnDel; JScrollPane scroll; String title[] = { "이름", "나이", "성별" }; JTextField tName, tAge, tGender; JPanel panel; public SwingTest6() { DefaultTableModel model = new DefaultTableModel(title, 0); // jtable을 처음에 제목만으로 초기화 해주는 방법 table = new JTable(model); // 위 방법이 아니면, 에러남, 안됨 // table = new JTable(title); scroll = new JScrollPane(table); btnAdd = new JButton("추가"); btnDel = new JButton("삭제"); tName = new JTextField("이름", 6); tAge = new JTextField("나이", 3); tGender = new JTextField("성별", 2); panel = new JPanel(); btnAdd.addActionListener(this); btnDel.addActionListener(this); MouseActionDemo mad = new MouseActionDemo(this); tName.addMouseListener(mad); tAge.addMouseListener(mad); tGender.addMouseListener(mad); add("Center", scroll); panel.add(tName); panel.add(tAge); panel.add(tGender); panel.add(btnAdd); panel.add(btnDel); add("South", panel); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == btnAdd){ String[] data = new String[3]; data[0] = tName.getText(); data[1] = tAge.getText(); data[2] = tGender.getText(); for (int i = 0; i < data.length; i++) { if(data[i].isEmpty()){ JOptionPane.showMessageDialog(null, "반드시 데이터를 전부 입력해야 합니다."); return; } } // 테이블에 추가 // TableModel 보다 자식인 DefaultTableModel을 사용 DefaultTableModel model = (DefaultTableModel) table.getModel(); model.addRow(data); //마지막 처리 tName.setText(""); tAge.setText(""); tGender.setText(""); }else if(e.getSource() == btnDel){ //만약 선택하지 않고 삭제 버튼을 누르면, 대화상자 if(table.getSelectedRow() == -1 || table.getSelectedColumn() == -1){ JOptionPane.showMessageDialog(null, "반드시 데이터를 선택해야 합니다."); return; } //삭제 DefaultTableModel model = (DefaultTableModel) table.getModel(); if(table.getSelectedRowCount() > 0){ for (int i = table.getSelectedRowCount()-1; i > 0 ; i--) { model.removeRow(table.getSelectedRow()+i); } } model.removeRow(table.getSelectedRow()); } } public static void main(String[] args) { // TODO Swing 여섯번째 예제 SwingTest6 st = new SwingTest6(); st.setSize(300, 400); // st.pack(); st.setVisible(true); st.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ----------------------------------- |
4. 과제
-----------------------------------
5. 과제 해결
-----------------------------------
package tictactoe;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class UI extends JFrame {
JPanel west, east;
JButton reset, end_game;
JLabel lb_win, lb_lose, lb_draw;
JLabel lb_win_num, lb_lose_num, lb_draw_num;
Random random;
final int AI_NUM = 2;
final int USER_NUM = 1;
final int INIT = 0;
int win_cnt = 0, lose_cnt = 0, draw_cnt = 0;
boolean isUserFirst = true;// true면 user 먼저
boolean isEnd = false;
int row_col = 3;
JButton button[][];
int[][] tictactoe;
ImageIcon icon_user, icon_ai;
public UI(int num) {
setTitle("TicTacToe");
if (num > 0)
row_col = num;
button = new JButton[row_col][row_col];
tictactoe = new int[row_col][row_col];
west = new JPanel();
east = new JPanel();
random = new Random();
west.setLayout(new GridLayout(row_col, row_col));
//icon_user = new ImageIcon(getClass().getResource("/res/close.png"));
//icon_ai = new ImageIcon(getClass().getResource("/res/circle.png"));
for (int i = 0; i < button.length; i++) {
for (int j = 0; j < button[i].length; j++) {
button[i][j] = new JButton();
button[i][j].setForeground(Color.lightGray);
button[i][j].setBackground(Color.lightGray);
button[i][j].addActionListener(new ButtonListener());
tictactoe[i][j] = INIT;
west.add(button[i][j]);
}
}
// button[i].setIcon(new ImageIcon(ImageIO.read(new File("F:\\study\\java\\X.png"))));
reset = new JButton("다시하기");
end_game = new JButton("종료");
lb_win = new JLabel("Win(승)", JLabel.CENTER);
lb_lose = new JLabel("Lose(패)", JLabel.CENTER);
lb_draw = new JLabel("Draw(비김)", JLabel.CENTER);
lb_win_num = new JLabel();
lb_lose_num = new JLabel();
lb_draw_num = new JLabel();
lb_win_num.setHorizontalAlignment(JLabel.CENTER);
lb_lose_num.setHorizontalAlignment(JLabel.CENTER);
lb_draw_num.setHorizontalAlignment(JLabel.CENTER);
ButtonListener bl = new ButtonListener();
reset.addActionListener(bl);
end_game.addActionListener(bl);
east.setLayout(new GridLayout(4, 2, 2, 2));
east.add(reset);
east.add(end_game);
east.add(lb_win);
east.add(lb_win_num);
east.add(lb_lose);
east.add(lb_lose_num);
east.add(lb_draw);
east.add(lb_draw_num);
setLayout(new GridLayout(1, 2, 5, 5));
add(west);
add(east);
setBounds(200, 100, 700, 400);
setVisible(true);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
void ai_random() {
for (;;) {
win_check();
if (isEnd)
break;
else {
int i = random.nextInt(row_col);
int k = random.nextInt(row_col);
if (tictactoe[i][k] == INIT) {
//button[i][k].setIcon(icon_ai);
button[i][k].setBackground(Color.blue);
tictactoe[i][k] = AI_NUM;
win_check();
break;
}
}
}
}
void ai_up() {
}
void win_check() {
if(!isEnd){
int user_cnt = 0;
int ai_cnt = 0;
int init_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
if (tictactoe[i][j] == USER_NUM) {
user_cnt++;
} else if (tictactoe[i][j] == AI_NUM) {
ai_cnt++;
} else if (tictactoe[i][j] == INIT) {
init_cnt++;
}
}
if (user_cnt == row_col) {
end_game(USER_NUM);
return;
}
if (ai_cnt == row_col) {
end_game(AI_NUM);
return;
}
ai_cnt = 0;
user_cnt = 0;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
end_game(USER_NUM);
return;
}
if (ai_cnt == row_col) {
end_game(AI_NUM);
return;
}
ai_cnt = 0;
user_cnt = 0;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
int j = i;
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
end_game(USER_NUM);
return;
}
if (ai_cnt == row_col) {
end_game(AI_NUM);
return;
}
user_cnt = 0;
ai_cnt = 0;
//
for (int i = 0; i < tictactoe.length; i++) {
int j = tictactoe.length - 1 - i;
if (tictactoe[j][i] == USER_NUM) {
user_cnt++;
} else if (tictactoe[j][i] == AI_NUM) {
ai_cnt++;
}
}
if (user_cnt == row_col) {
end_game(USER_NUM);
return;
}
if (ai_cnt == row_col) {
end_game(AI_NUM);
return;
}
// result
if (init_cnt == 0) {
isUserFirst = !isUserFirst;
isEnd = true;
draw_cnt++;
showMessage("비겼습니다.");
lb_draw_num.setText(String.valueOf(draw_cnt));
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
button[i][j].setEnabled(false);
}
}
}
}
}
void end_game(int num) {
if(!isEnd){
if (num == USER_NUM) {
win_cnt++;
isUserFirst = false;
showMessage("이겼습니다.");
lb_win_num.setText(String.valueOf(win_cnt));
} else if (num == AI_NUM) {
lose_cnt++;
isUserFirst = true;
showMessage("졌습니다.");
lb_lose_num.setText(String.valueOf(lose_cnt));
}
for (int i = 0; i < tictactoe.length; i++) {
for (int j = 0; j < tictactoe[i].length; j++) {
button[i][j].setEnabled(false);
}
}
}
isEnd = true;
}
void showMessage(String mes) {
JOptionPane.showMessageDialog(this, mes);
}
private class ButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
JButton button1 = (JButton) e.getSource();
// 배열과 Button에 값 및 색상변화, 특정 tictactoe 버튼을 눌렀을때
for (int i = 0; i < button.length; i++) {
for (int k = 0; k < button[i].length; k++) {
if (button1 == button[i][k]) {
if (tictactoe[i][k] == INIT) {
//button[i][k].setIcon(icon_user);
button1.setBackground(Color.red);
button1.setForeground(Color.black);
button1.setText("USER");
tictactoe[i][k] = USER_NUM;
ai_random();
}
}
}
}
// reset
if (button1 == reset) {
for (int i = 0; i < button.length; i++) {
for (int k = 0; k < button[i].length; k++) {
button[i][k].setEnabled(true);
button[i][k].setBackground(Color.lightGray);
button[i][k].setForeground(Color.lightGray);
button[i][k].setText("");
tictactoe[i][k] = INIT;
}
}
isEnd = false;
if (!isUserFirst) {
ai_random();
}
} else if (button1 == end_game) {
dispose();
}
}
}
public static void main(String[] args) {
if (args.length > 0){
int num = Integer.parseInt(args[0]);
if( num > 2 ){
if( num % 2 == 1){
num +=1;
new UI(num);
}else{
new UI(num);
}
}else{
new UI(3);
}
}else
new UI(3);
/*
* 난이도 조정
*/
}
'OpenFrameWork' 카테고리의 다른 글
오픈프레임워크_Day20 (0) | 2015.04.20 |
---|---|
오픈프레임워크_Day19 (0) | 2015.04.20 |
오픈프레임워크_Day17 (0) | 2015.04.20 |
오픈프레임워크_Day16 (0) | 2015.04.20 |
오픈프레임워크_Day15 (0) | 2015.04.20 |