import java.awt.*; import java.awt.event.*; public class KiK extends Canvas implements ActionListener, MouseListener { int[][] plansza; int wspR1, wspK1, wspR2, wspK2,gra; static final int pusto = 0,O = 1,X = 2; boolean tura; Label raport; public KiK() { setBackground(Color.WHITE); addMouseListener(this); raport = new Label("",Label.CENTER); plansza = new int[15][15]; newGame(); Frame frame = new Frame("K\u00f3\u0142ko i krzy\u017cyk"); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent ev) { System.exit(0); } }); setSize(218,238); frame.add(this,"Center"); frame.add(raport,"South"); frame.pack(); frame.setVisible(true); frame.setResizable(false); frame.setLocationRelativeTo(null); MenuBar mb = new MenuBar(); frame.setMenuBar(mb); Menu file = new Menu("Plik"); mb.add(file); MenuItem newgame = new MenuItem("Nowa gra",new MenuShortcut(KeyEvent.VK_N)); newgame.addActionListener(this); file.add(newgame); file.add(new MenuItem ("-")); MenuItem quit = new MenuItem("Zamknij", new MenuShortcut(KeyEvent.VK_Q)); quit.addActionListener(this); file.add(quit); Menu help = new Menu("Pomoc"); mb.setHelpMenu(help); MenuItem rules = new MenuItem ("Zasady gry"); rules.addActionListener(this); help.add(rules); MenuItem about = new MenuItem ("O programie..."); about.addActionListener(this); help.add(about); } public void actionPerformed(ActionEvent event) { if(event.getActionCommand().startsWith("Nowa gra")) newGame(); else if (event.getActionCommand().startsWith("Zamknij")) System.exit(0); else if(event.getActionCommand().startsWith("O programie...")) getAbout(); else if(event.getActionCommand().startsWith("Zasady gry")) getRules(); } void getAbout() { Okna okna = new Okna(); okna.new OProgramie(); } void getRules() { Okna okna = new Okna(); okna.new ZasadyGry(); } void newGame() { for (int rzad = 0; rzad < 15; rzad++) for (int kolumna = 0; kolumna < 15; kolumna++) plansza[rzad][kolumna] = pusto; gra = X; raport.setText("Gr\u0119 rozpoczyna gracz 'X'"); tura = true; wspR1 = -1; repaint(); } void getArea(int rzad, int kolumna) { if ( plansza[rzad][kolumna] != pusto ) { if (gra == X) raport.setText("Gracz 'X' - wybierz puste pole."); else raport.setText("Gracz 'O' - wybierz puste pole."); return; } plansza[rzad][kolumna] = gra; Graphics g = getGraphics(); getElement(g, gra, rzad, kolumna); g.dispose(); if (zwyciezca(rzad,kolumna)) { if (gra == O) { Okna okna = new Okna(); okna.new KoniecGry("Zwyci\u0119\u017ca 'O' ! Gratulacje!!!"); tura = false; } else { Okna okna = new Okna(); okna.new KoniecGry("Zwyci\u0119\u017ca 'X' ! Gratulacje!!!"); tura = false; } Graphics gl = getGraphics(); getLine(gl); gl.dispose(); return; } boolean wolnePola = false; for (int i = 0; i < 15; i++) for (int j = 0; j < 15; j++) if (plansza[i][j] == pusto) wolnePola = true; if (wolnePola == false) { tura = false; return; } if (gra == X) { gra = O; raport.setText("Kolej na ruch gracza 'O'"); } else { gra = X; raport.setText("Kolej na ruch gracza 'X'"); } } private boolean zwyciezca(int rzad, int kolumna) { if (licznik( plansza[rzad][kolumna], rzad, kolumna, 1, 0 ) >= 5) return true; if (licznik( plansza[rzad][kolumna], rzad, kolumna, 0, 1 ) >= 5) return true; if (licznik( plansza[rzad][kolumna], rzad, kolumna, 1, -1 ) >= 5) return true; if (licznik( plansza[rzad][kolumna], rzad, kolumna, 1, 1 ) >= 5) return true; wspR1 = -1; return false; } private int licznik(int gracz, int rzad, int kolumna, int wspX, int wspY) { int l = 1; int r, k; r = rzad + wspX; k = kolumna + wspY; while ( r >= 0 && r < 15 && k >= 0 && k < 15 && plansza[r][k] == gracz ) { l++; r += wspX; k += wspY; } wspR1 = r - wspX; wspK1 = k - wspY; r = rzad - wspX; k = kolumna - wspY; while ( r >= 0 && r < 15 && k >= 0 && k < 15 && plansza[r][k] == gracz ) { l++; r -= wspX; k -= wspY; } wspR2 = r + wspX; wspK2 = k + wspY; return l; } public void paint(Graphics g) { g.setColor(Color.darkGray); for (int i = 1; i < 15; i++) { g.drawLine(1 + 15*i, 0, 1 + 15*i, getSize().height); g.drawLine(0, 1 + 15*i, getSize().width, 1 + 15*i); } g.setColor(Color.BLACK); g.drawRect(0,0,getSize().width-1,getSize().height-1); g.drawRect(1,1,getSize().width-3,getSize().height-3); for (int rzad = 0; rzad < 15; rzad++) for (int kolumna = 0; kolumna < 15; kolumna++) if (plansza[rzad][kolumna] != pusto) getElement(g, plansza[rzad][kolumna], rzad, kolumna); if (wspR1 >= 0) getLine(g); } private void getElement(Graphics g, int piece, int rzad, int kolumna) { if (piece == O) { g.setColor(Color.BLUE); g.drawOval(3 + 15*kolumna, 3 + 15*rzad, 10, 10); } else { g.setColor(Color.BLACK); g.drawLine(2+15*kolumna,2+15*rzad,15*kolumna+15,15*rzad+15); g.drawLine(15*kolumna+15,15*rzad+2,2+15*kolumna,15+15*rzad); } } private void getLine(Graphics g) { g.setColor(Color.red); g.drawLine( 8 + 15*wspK1, 8 + 15*wspR1, 8 + 15*wspK2, 8 + 15*wspR2 ); if (wspR1 == wspR2) g.drawLine( 8 + 15*wspK1, 7 + 15*wspR1, 8 + 15*wspK2, 7 + 15*wspR2 ); else g.drawLine( 7 + 15*wspK1, 8 + 15*wspR1, 7 + 15*wspK2, 8 + 15*wspR2 ); } public void mousePressed(MouseEvent evt) { if (tura == false) raport.setText("Wybierz 'Nowa gra' z menu 'Plik'"); else { int kolumna = (evt.getX() - 2) / 15; int rzad = (evt.getY() - 2) / 15; if (kolumna >= 0 && kolumna < 15 && rzad >= 0 && rzad < 15) getArea(rzad,kolumna); } } public void mouseReleased(MouseEvent evt) { } public void mouseClicked(MouseEvent evt) { } public void mouseEntered(MouseEvent evt) { } public void mouseExited(MouseEvent evt) { } }