### : 목차 구분 기호
--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
--- : 목차 내에 항목 구분 기호
목차
1. 이론 및 정보
2. 설정 및 그 밖에
3. 소스코드
4. 과제
###################################
1. 이론 및 정보
-----------------------------------
-----------------------------------
-----------------------------------
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
###################################
4. 과제
-----------------------------------
###################################
2. 설정 및 그 밖에
-----------------------------------
###################################
3. 소스코드
-----------------------------------
3. 소스코드
-----------------------------------
3-1 /day16/src/awt/event/EventTest1.java package awt.event; import java.awt.Button; import java.awt.Frame; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /* public class EventTest1 extends Frame implements ActionListener{ Button b1, b2; TextArea ta; public EventTest1() { b1 = new Button("눌러주세요"); b2 = new Button("종료"); ta = new TextArea(); add("North",b1); add("South",b2); add("Center",ta); b1.addActionListener(this); b2.addActionListener(this); } public static void main(String[] args) { // TODO 이벤트 소스와 이벤트 핸들러가 같은 클래스인 경우 EventTest1 et = new EventTest1(); et.setSize(300, 400); et.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == b1){ ta.setText(ta.getText()+"버튼이 눌렸어요...\n"); }else if(e.getSource() == b2){ dispose(); } } } */ /* class EventDemo1 implements ActionListener { Frame f; public EventDemo1(Frame f) { this.f = f; } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == ((EventTest1) f).b1) { ((EventTest1) f).ta.setText(((EventTest1) f).ta.getText() + "버튼이 눌렸어요...\n"); } else if (e.getSource() == ((EventTest1) f).b2) { f.dispose(); } } } public class EventTest1 extends Frame { Button b1, b2; TextArea ta; public EventTest1() { b1 = new Button("눌러주세요"); b2 = new Button("종료"); ta = new TextArea(); add("North", b1); add("South", b2); add("Center", ta); EventDemo1 demo = new EventDemo1(this); b1.addActionListener(demo); b2.addActionListener(demo); } public static void main(String[] args) { // TODO 이벤트 소스와 이벤트 핸들러가 다른 클래스인 경우 EventTest1 et = new EventTest1(); et.setSize(300, 400); et.setVisible(true); } } */ public class EventTest1 extends Frame { Button b1, b2; TextArea ta; public EventTest1() { b1 = new Button("눌러주세요"); b2 = new Button("종료"); ta = new TextArea(); add("North", b1); add("South", b2); add("Center", ta); EventDemo1 demo = new EventDemo1(this); b1.addActionListener(demo); b2.addActionListener(demo); } class EventDemo1 implements ActionListener { Frame f; public EventDemo1(Frame f) { this.f = f; } @Override public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("종료")) { f.dispose(); } else { ta.setText(ta.getText() + "버튼이 눌렸어요...\n"); } } } public static void main(String[] args) { // TODO 이벤트 핸들러가 내부 클래스인 경우 EventTest1 et = new EventTest1(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-2 /day16/src/awt/event/EventTest2.java package awt.event; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; /* public class EventTest2 extends Frame implements WindowListener{ TextField tf; public EventTest2() { setLayout(new FlowLayout()); tf = new TextField(); tf.setText("x버튼을 누르면 윈도우가 종료됩니다."); add(tf); addWindowListener(this); } public static void main(String[] args) { // TODO 어댑터 클래스 테스트 EventTest2 et = new EventTest2(); et.setSize(300, 400); et.setVisible(true); } @Override public void windowClosing(WindowEvent e) { // TODO Auto-generated method stub System.exit(0); //dispose(); } @Override public void windowActivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeactivated(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowDeiconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowIconified(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowOpened(WindowEvent e) { // TODO Auto-generated method stub } @Override public void windowClosed(WindowEvent e) { // TODO Auto-generated method stub } } */ class WindowExit extends WindowAdapter { @Override public void windowClosing(WindowEvent e) { System.exit(0); } } public class EventTest2 extends Frame { TextField tf; public EventTest2() { setLayout(new FlowLayout()); tf = new TextField(); tf.setText("x버튼을 누르면 윈도우가 종료됩니다."); add(tf); addWindowListener(new WindowExit()); } public static void main(String[] args) { // TODO 어댑터 클래스 테스트 EventTest2 et = new EventTest2(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-3 /day16/src/awt/event/ItemEventTest1.java package awt.event; import java.awt.Checkbox; import java.awt.CheckboxGroup; import java.awt.Frame; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class ItemEventTest1 extends Frame { Panel p; Checkbox c1,c2,c3,r1,r2; TextArea area; CheckboxGroup g1; public ItemEventTest1() { p = new Panel(); c1 = new Checkbox("딸기"); c2 = new Checkbox("사과"); c3 = new Checkbox("바나나"); g1 = new CheckboxGroup(); r1 = new Checkbox("남성", g1,true); r2 = new Checkbox("여성", g1,false); area = new TextArea(); ItemEventProc item = new ItemEventProc(); c1.addItemListener(item); c2.addItemListener(item); c3.addItemListener(item); r1.addItemListener(item); r2.addItemListener(item); p.add(c1); p.add(c2); p.add(c3); p.add(r1); p.add(r2); add("North",p); add("Center",area); addWindowListener(new WindowExit()); } class ItemEventProc implements ItemListener{ @Override public void itemStateChanged(ItemEvent e) { Checkbox cb = (Checkbox)e.getSource(); if(cb.getState()){ area.setText(area.getText()+"\n"+cb.getLabel()+"가 선택되었습니다."); }else{ area.setText(area.getText()+"\n"+cb.getLabel()+"가 해제되었습니다."); } } } public static void main(String[] args) { // TODO ItemEvent 첫번째 테스트 ItemEventTest1 et = new ItemEventTest1(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-4 /day16/src/awt/event/ItemEventTest2.java package awt.event; import java.awt.Choice; import java.awt.Frame; import java.awt.TextArea; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class ItemEventTest2 extends Frame { String item[] = {"서울", "경기", "인천", "수원"}; Choice cho; TextArea ta; public ItemEventTest2() { cho = new Choice(); ta = new TextArea(); for (int i = 0; i < item.length; i++) { cho.addItem(item[i]); } cho.addItemListener(new ItemEventProc1()); add("North",cho); add("Center",ta); addWindowListener(new WindowExit()); } class ItemEventProc1 implements ItemListener{ @Override public void itemStateChanged(ItemEvent e) { Choice c = (Choice)e.getSource(); ta.setText(ta.getText()+c.getSelectedItem()+"이 선택되었습니다.\n"); } } public static void main(String[] args) { // TODO ItemEvent 두번째 테스트 ItemEventTest2 et = new ItemEventTest2(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-5 /day16/src/awt/event/TextEventTest.java package awt.event; import java.awt.Button; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.TextEvent; import java.awt.event.TextListener; public class TextEventTest extends Frame implements TextListener, KeyListener { Button btnOk; TextArea ta; TextField tf; public TextEventTest() { btnOk = new Button("OK"); ta = new TextArea(); tf = new TextField(); add("North", btnOk); add("Center", ta); add("South", tf); tf.addTextListener(this); tf.addKeyListener(this); addWindowListener(new WindowExit()); } public static void main(String[] args) { // TODO TextEvent 테스트 TextEventTest et = new TextEventTest(); et.setSize(300, 400); et.setVisible(true); } @Override public void textValueChanged(TextEvent e) { // ta.setText(ta.getText()+"내용이 바뀌었어요 : "+tf.getText()+"\n"); } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub // ta.setText(ta.getText()+"내용이 바뀌었어요 : "+tf.getText()+"\n"); if (e.getKeyChar() != KeyEvent.VK_BACK_SPACE) { ta.setText(ta.getText() + "내용이 바뀌었어요 : " + e.getKeyChar() + "\n"); } } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } } ----------------------------------- 3-6 /day16/src/awt/menu/MenuTest1.java package awt.menu; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class MenuTest1 extends Frame implements ActionListener{ MenuBar bar; //반드시 Menu만 자식 메뉴를 가질 수 있음 Menu file, edit, file_new; MenuItem file_open, file_save, file_exit; MenuItem edit_copy, edit_paste, edit_cut; MenuItem file_new_html, file_new_java; public MenuTest1() { bar = new MenuBar(); file = new Menu("파일"); edit = new Menu("편집"); file_new = new Menu("새 파일"); file_open = new MenuItem("파일 열기"); file_save = new MenuItem("파일 저장"); file_exit = new MenuItem("종료"); edit_copy = new MenuItem("복사하기"); edit_paste = new MenuItem("붙여넣기"); edit_cut = new MenuItem("잘라내기"); file_new_html = new MenuItem("HTML"); file_new_java = new MenuItem("JAVA"); file_exit.addActionListener(this); file_new.add(file_new_html); file_new.add(file_new_java); file.add(file_new); file.add(file_open); file.add(file_save); file.addSeparator(); file.add(file_exit); edit.add(edit_copy); edit.add(edit_paste); edit.add(edit_cut); bar.add(file); bar.add(edit); setMenuBar(bar); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == file_exit) { dispose(); } } public static void main(String[] args) { // TODO 메뉴 첫번째 예제 MenuTest1 et = new MenuTest1(); et.setSize(300, 400); et.setVisible(true); } } ----------------------------------- 3-7 /day16/src/awt/menu/MenuTest2.java package awt.menu; import java.awt.FileDialog; import java.awt.Frame; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileReader; import java.io.PrintWriter; public class MenuTest2 extends Frame implements ActionListener{ MenuBar bar; //반드시 Menu만 자식 메뉴를 가질 수 있음 Menu file; MenuItem file_open, file_save, file_exit; FileDialog fopen, fsave; TextArea area; public MenuTest2() { bar = new MenuBar(); file = new Menu("파일"); file_open = new MenuItem("파일 열기"); file_save = new MenuItem("파일 저장"); file_exit = new MenuItem("종료"); area = new TextArea(); fopen = new FileDialog(this, "파일 열기", FileDialog.LOAD); fsave = new FileDialog(this, "파일 저장", FileDialog.SAVE); file.add(file_open); file.add(file_save); file.addSeparator(); file.add(file_exit); bar.add(file); setMenuBar(bar); add("Center", area); file_exit.addActionListener(this); file_open.addActionListener(this); file_save.addActionListener(this); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == file_exit) { dispose(); } else if (e.getSource() == file_open) { 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() == file_save) { 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 메뉴 두번째 예제 MenuTest2 et = new MenuTest2(); et.setSize(300, 400); et.setVisible(true); } } |
-----------------------------------
3-8
-----------------------------------
3-9
-----------------------------------
###################################
4. 과제
-----------------------------------
4-1
-----------------------------------
4-2
-----------------------------------
4-3
-----------------------------------
4-4
-----------------------------------
4-5
###################################
5. 과제 해결
-----------------------------------
5. 과제 해결
-----------------------------------
5-1
-----------------------------------
5-2
-----------------------------------
5-3
-----------------------------------
5-4
###################################
프로젝트
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.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 ;
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));
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].setBackground(Color.blue);
tictactoe[i][k] = AI_NUM;
win_check();
break;
}
}
}
}
void ai_up(){
}
void win_check() {
int user_cnt = 0;
int ai_cnt = 0;
int win_temp = win_cnt;
int lose_temp = lose_cnt;
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
// result
boolean isWin = (win_temp < win_cnt);
boolean isLost = (lose_temp < lose_cnt);
if (isWin || isLost) {
isEnd = true;
if (isWin) {
isUserFirst = false;
showMessage("이겼습니다.");
lb_win_num.setText(String.valueOf(win_cnt));
}
if (isLost) {
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);
}
}
} else 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 (num == USER_NUM) {
} else if (num == AI_NUM) {
}
}
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) {
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)
new UI(Integer.parseInt(args[0]));
else
new UI(3);
/*
* 난이도 조정
*/
}
}
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.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 ;
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));
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].setBackground(Color.blue);
tictactoe[i][k] = AI_NUM;
win_check();
break;
}
}
}
}
void ai_up(){
}
void win_check() {
int user_cnt = 0;
int ai_cnt = 0;
int win_temp = win_cnt;
int lose_temp = lose_cnt;
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
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) {
win_cnt++;
}
if (ai_cnt == row_col) {
lose_cnt++;
}
// result
boolean isWin = (win_temp < win_cnt);
boolean isLost = (lose_temp < lose_cnt);
if (isWin || isLost) {
isEnd = true;
if (isWin) {
isUserFirst = false;
showMessage("이겼습니다.");
lb_win_num.setText(String.valueOf(win_cnt));
}
if (isLost) {
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);
}
}
} else 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 (num == USER_NUM) {
} else if (num == AI_NUM) {
}
}
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) {
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)
new UI(Integer.parseInt(args[0]));
else
new UI(3);
/*
* 난이도 조정
*/
}
}
'OpenFrameWork' 카테고리의 다른 글
오픈프레임워크_Day19 (0) | 2015.04.20 |
---|---|
오픈프레임워크_Day18 (0) | 2015.04.20 |
오픈프레임워크_Day16 (0) | 2015.04.20 |
오픈프레임워크_Day15 (0) | 2015.04.20 |
오픈프레임워크_Day14 (0) | 2015.04.20 |