import java.io.*; import java.awt.*; import java.awt.event.*; import java.applet.Applet; import java.util.*; import java.net.*; public class Kabenet extends Applet implements MouseListener, ActionListener, Runnable { int laud[][] = new int[8][8]; int kumb; //milline nupp parasjagu valitud on.....st kui 2-minu nupp, 4- minu tamm int kohtAllaVana; int kohtParemaleVana; int kohtAllaUus; int kohtParemaleUus; boolean olenserver = true; boolean voinkaia = false; //mina ei saa käia, vastase järgi pean ootama boolean saanvotta = false; //kui see on true, siis mujale käia ei saa, st peab võtma kindlasti vastase nupu ära boolean onyhendus = false; Image nupupilt1; Image nupupilt2; Image nupupiltkol; Image tammipilt1; Image tammipilt2; Image tammipiltkol; String sisend; PrintWriter valja; BufferedReader sisse; Label kesKaibLabel = new Label("Ühendus loomata"); Label infoLabel = new Label(""); Button nupp = new Button("Ühenda"); TextField IP = new TextField(); Socket sc; //Jutuka jaox TextArea jutukaText = new TextArea("",8,5,1); TextField jutukaSonum = new TextField(); public Kabenet() //konstruktor { addMouseListener(this); //See vinge massiiv laud[0][0] = -1;laud[0][1] = 1; laud[0][2] = -1;laud[0][3] = 1; laud[0][4] = -1;laud[0][5] = 1; laud[0][6] = -1;laud[0][7] = 1; laud[1][0] = 1; laud[1][1] = -1;laud[1][2] = 1; laud[1][3] = -1;laud[1][4] = 1; laud[1][5] = -1;laud[1][6] = 1; laud[1][7] = -1; laud[2][0] = -1;laud[2][1] = 1; laud[2][2] = -1;laud[2][3] = 1; laud[2][4] = -1;laud[2][5] = 1; laud[2][6] = -1;laud[2][7] = 1; laud[3][0] = 0; laud[3][1] = -1;laud[3][2] = 0; laud[3][3] = -1;laud[3][4] = 0; laud[3][5] = -1;laud[3][6] = 0; laud[3][7] = -1; laud[4][0] = -1;laud[4][1] = 0; laud[4][2] = -1;laud[4][3] = 0; laud[4][4] = -1;laud[4][5] = 0; laud[4][6] = -1;laud[4][7] = 0; laud[5][0] = 2; laud[5][1] = -1;laud[5][2] = 2; laud[5][3] = -1;laud[5][4] = 2; laud[5][5] = -1;laud[5][6] = 2; laud[5][7] = -1; laud[6][0] = -1;laud[6][1] = 2; laud[6][2] = -1;laud[6][3] = 2; laud[6][4] = -1;laud[6][5] = 2; laud[6][6] = -1;laud[6][7] = 2; laud[7][0] = 2; laud[7][1] = -1;laud[7][2] = 2; laud[7][3] = -1;laud[7][4] = 2; laud[7][5] = -1;laud[7][6] = 2; laud[7][7] = -1; Panel ylaOsa = new Panel(new GridLayout(2, 2)); //paneme kujunduse paika ylaOsa.add(kesKaibLabel); ylaOsa.add(infoLabel); ylaOsa.add(IP); ylaOsa.add(nupp); nupp.addActionListener(this); Panel jutukaOsa = new Panel(new BorderLayout()); jutukaOsa.add(jutukaText, BorderLayout.NORTH); jutukaOsa.add(jutukaSonum, BorderLayout.SOUTH); jutukaSonum.addActionListener(this); Panel suurPaneel = new Panel(new BorderLayout()); suurPaneel.add(ylaOsa, BorderLayout.NORTH); suurPaneel.add(jutukaOsa, BorderLayout.SOUTH); setLayout(new BorderLayout()); add(suurPaneel, BorderLayout.SOUTH); jutukaText.setEnabled(false); jutukaSonum.setEnabled(false); new Thread(this).start(); } Image laePilt(String failinimi) // pildi laadimisex mingi fk { try{ return getImage(getCodeBase(), failinimi); }catch(Exception e){} return Toolkit.getDefaultToolkit(). getImage(failinimi); } public void paint(Graphics g) //ekraani joonistamise stuff { if (olenserver == true) { nupupilt1 = laePilt("kabenupp2.jpg"); nupupilt2 = laePilt("kabenupp1.jpg"); tammipilt1 = laePilt("tamm2.jpg"); tammipilt2 = laePilt("tamm1.jpg"); if (kumb == 2) {nupupiltkol = laePilt("kabenupp1kol.jpg");} //must selektitud if (kumb == 4) {tammipiltkol = laePilt("tamm1kol.jpg");} //valge tamm selektitud } else //töötan kliendina, mul on valged nupud { nupupilt1 = laePilt("kabenupp1.jpg"); nupupilt2 = laePilt("kabenupp2.jpg"); tammipilt1 = laePilt("tamm1.jpg"); tammipilt2 = laePilt("tamm2.jpg"); if (kumb == 2)//valge selektitud {nupupiltkol = laePilt("kabenupp2kol.jpg");} if (kumb == 4)//valge tamm selektitud {tammipiltkol = laePilt("tamm2kol.jpg");} } int hele = 1; for (int alla=0;alla<8;alla++ ) { for (int paremale=0;paremale<8;paremale++ ) { if(hele == 0) //määrame ruudu tegemisex kas valge või halli värvi { g.setColor(new Color(192,192,192)); hele = 1; }else{ g.setColor(Color.white); hele = 0;} g.fillRect(paremale*50, alla*50,50,50); //teeme ruudu //vastase nupu joonistame if (laud[alla][paremale]==1){ g.drawImage(nupupilt1, paremale*50+1, alla*50+10, this);} else if (laud[alla][paremale]==3){ g.drawImage(tammipilt1, paremale*50+1, alla*50+10, this);} //minu nupu joonistame else if (laud[alla][paremale]==2) { //vaatame, kas on selektitud või mitte if ((alla == kohtAllaVana)&&(paremale == kohtParemaleVana)){ g.drawImage(nupupiltkol, paremale*50+1, alla*50+10, this);} else{g.drawImage(nupupilt2, paremale*50+1, alla*50+10, this);} //ei ole selektitud } else if (laud[alla][paremale]==4) { //vaatame, kas on selektitud või mitte if ((alla == kohtAllaVana)&&(paremale == kohtParemaleVana)){ g.drawImage(tammipiltkol, paremale*50+1, alla*50+10, this);} else{g.drawImage(tammipilt2, paremale*50+1, alla*50+10, this);} //ei ole selektitud } } if (hele==1){hele = 0;}else{hele = 1;} //uue rea alguses on vaja muuta, et vöödiline ei tulex see laud.... } g.setColor(Color.black); //teeme kasti ümber malelaua...... mix mitte ühe ruuduna teha? ah ei tiagi... g.drawLine(0,400,400,400); g.drawLine(400,0,400,400); g.drawLine(0,0,0,400); g.drawLine(0,0,400,0); } public int KasSaabVeelVotta(int kohtAllaUus, int kohtParemaleUus) //kui juba korra võetud, vaatame, kas veel saab võtta. NB! Põhjuse võtmisex leiab alati ;) { if (kohtParemaleUus>1 && kohtAllaUus>1 && ((laud[kohtAllaUus-1][kohtParemaleUus-1]==1)||(laud[kohtAllaUus-1][kohtParemaleUus-1]==3)) && (laud[kohtAllaUus-2][kohtParemaleUus-2]==0)) { //vasakult ülevalt infoLabel.setText("Saab veel võtta!"); saanvotta = true; return 1; } else if (kohtParemaleUus<6 && kohtAllaUus>1 && ((laud[kohtAllaUus-1][kohtParemaleUus+1]==1)||(laud[kohtAllaUus-1][kohtParemaleUus+1]==3)) && (laud[kohtAllaUus-2][kohtParemaleUus+2]==0)) { //paremalt ülevalt infoLabel.setText("Saab veel võtta!"); saanvotta = true; return 1; } else if (kohtParemaleUus>1 && kohtAllaUus<6 && ((laud[kohtAllaUus+1][kohtParemaleUus-1]==1)||(laud[kohtAllaUus+1][kohtParemaleUus-1]==3)) && (laud[kohtAllaUus+2][kohtParemaleUus-2]==0)) { //vasakult alt infoLabel.setText("Saab veel võtta!"); saanvotta = true; return 1; } else if (kohtParemaleUus<6 && kohtAllaUus<6 && ((laud[kohtAllaUus+1][kohtParemaleUus+1]==1)||(laud[kohtAllaUus+1][kohtParemaleUus+1]==3)) && (laud[kohtAllaUus+2][kohtParemaleUus+2]==0)) { //paremalt alt infoLabel.setText("Saab veel võtta!"); saanvotta = true; return 1; } // kui ei saa võtta rohkem, vahetame kasutajat kesKaibLabel.setText("Vastase kord käia...oota..."); infoLabel.setText(""); saanvotta = false; voinkaia = false; valja.println("$SinuKord"); return 0; //ei saa rohkem võtta }; public int KasSaanVotta() //kui minu kord käia, siis kõigepealt kontrollime, kas saan üldse võtta, sest kabes võtma peab! { boolean oli = false; //kontrollime siis juba, kas mul üldse nuppe ka olemas on :) //chekime terve laua läbi for (int alla=0;alla<8;alla++ ) { for (int paremale=0;paremale<8;paremale++ ) { if((laud[alla][paremale] == 4) || (laud[alla][paremale] == 2)) { oli = true; if (alla>1 && paremale>1 && ((laud[alla-1][paremale-1]==1) || (laud[alla-1][paremale-1]==3)) && (laud[alla-2][paremale-2]==0)) { //vasakult ülevalt infoLabel.setText("Võtma peab !"); saanvotta = true; return 1; } else if (alla>1 && paremale<6 && ((laud[alla-1][paremale+1]==1) || (laud[alla-1][paremale+1]==3)) && (laud[alla-2][paremale+2]==0)) { //paremalt ülevalt infoLabel.setText("Võtma peab !"); saanvotta = true; return 1; } else if (alla<6 && paremale>1 &&((laud[alla+1][paremale-1]==1) || (laud[alla+1][paremale-1]==3)) && (laud[alla+2][paremale-2]==0)) { //vasakult alt infoLabel.setText("Võtma peab !"); saanvotta = true; return 1; } else if (alla<6 && paremale <6 && ((laud[alla+1][paremale+1]==1) || (laud[alla+1][paremale+1]==3)) && (laud[alla+2][paremale+2]==0)) { //paremalt alt infoLabel.setText("Võtma peab !"); saanvotta = true; return 1; } } } } if (oli == false) //mul pole ühtegi nuppu enam, issand kui kahju.... saingi pähe :( { kesKaibLabel.setText("Kaotasid !!!"); infoLabel.setText("Hale luuser..."); valja.println("$kaotasin"); try{sc.close();} catch (Exception e){System.out.println("Probleem: "+e);} } infoLabel.setText(""); return 0; //ei saa võtta } public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseClicked(MouseEvent e) //mis siis juhtub, kui hiirega ühe väixe kliki teen :| (6) { if (voinkaia == true) { if (kumb==2 || kumb==4)//eelnevalt oldi valitud 2 või 4 (minu nupp või minu tamm) { kohtAllaUus = (int)e.getY()/50; //uue koha kordinaadid, kus klikin kohtParemaleUus = (int)e.getX()/50; //System.out.println("AllaUUS: "+kohtAllaUus+" ParemaleUUS: "+kohtParemaleUus); //kontrollime siis, kas tegu on käiguga või võtmisega if (laud[kohtAllaUus][kohtParemaleUus] == 0 && laud[kohtAllaUus][kohtParemaleUus] != -1) //uus koht on tühi ja hall { //käimine edasi, või tammiga ka tagasi if((saanvotta==false) && ((kohtAllaUus == kohtAllaVana-1 && kohtParemaleUus == kohtParemaleVana-1) || (kohtAllaUus == kohtAllaVana-1 && kohtParemaleUus == kohtParemaleVana+1) || (kohtAllaUus == kohtAllaVana+1 && kohtParemaleUus == kohtParemaleVana+1) || (kohtAllaUus == kohtAllaVana+1 && kohtParemaleUus == kohtParemaleVana-1))) // lihtsalt käime nupuga edasi ja justnimelt edasi.... { //nupuga käimine if ((kohtAllaUus == kohtAllaVana-1 && kohtParemaleUus == kohtParemaleVana-1) || (kohtAllaUus == kohtAllaVana-1 && kohtParemaleUus == kohtParemaleVana+1)) { if (kohtAllaUus == 0) //peale käimist muutus tammix { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3"); laud[kohtAllaUus][kohtParemaleUus] = 4; } else if (kumb == 4) //käime tammiga edasi { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3"); laud[kohtAllaUus][kohtParemaleUus] = 4; } else if (kumb == 2) //käime nupuga edasi { laud[kohtAllaUus][kohtParemaleUus] = 2; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"1");} } else //võimalus käia tammiga tagasi { laud[kohtAllaUus][kohtParemaleUus] = 4; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3"); } laud[kohtAllaVana][kohtParemaleVana] = 0;//kustutataxe minu nupp vanast kohast valja.println("$KA"+(7-kohtAllaVana)+"P"+(7-kohtParemaleVana)+"="+"0"); kesKaibLabel.setText("Vastase kord käia...oota..."); infoLabel.setText(""); voinkaia = false; valja.println("$SinuKord"); kumb = 0; repaint(); } // siit edasi võtmine else if((kohtAllaUus == kohtAllaVana-2) && (kohtParemaleUus == kohtParemaleVana-2) && ((laud[kohtAllaVana-1][kohtParemaleVana-1]==1) || (laud[kohtAllaVana-1][kohtParemaleVana-1]==3))) //võtame vastase nupu või tammi ära { //vasakult eest if (kumb == 4) //võtame tammiga { laud[kohtAllaUus][kohtParemaleUus] = 4; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3"); } else if (kumb == 2) //võtame nupuga { if (kohtAllaUus == 0) //peale võtmist muutus tammix { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3"); laud[kohtAllaUus][kohtParemaleUus] = 4; }else { laud[kohtAllaUus][kohtParemaleUus] = 2; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"1");} } laud[kohtAllaVana][kohtParemaleVana] = 0; //kustutataxe minu nupp vanast kohast valja.println("$KA"+(7-kohtAllaVana)+"P"+(7-kohtParemaleVana)+"="+"0"); laud[kohtAllaVana-1][kohtParemaleVana-1] = 0; //kustutataxe vastase nupp valja.println("$KA"+(7-(kohtAllaVana-1))+"P"+(7-(kohtParemaleVana-1))+"="+"0"); KasSaabVeelVotta(kohtAllaUus,kohtParemaleUus); kumb = 0; repaint(); } else if((kohtAllaUus == kohtAllaVana-2) && (kohtParemaleUus == kohtParemaleVana+2) && ((laud[kohtAllaVana-1][kohtParemaleVana+1]==1) || (laud[kohtAllaVana-1][kohtParemaleVana+1]==3))) { //paremalt eest if (kumb == 4) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla2"); laud[kohtAllaUus][kohtParemaleUus] = 4; } else if (kumb == 2) { if (kohtAllaUus == 0) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla2"); laud[kohtAllaUus][kohtParemaleUus] = 4; }else { laud[kohtAllaUus][kohtParemaleUus] = 2; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"1");} } laud[kohtAllaVana][kohtParemaleVana] = 0;//kustutataxe minu nupp vanast kohast valja.println("$KA"+(7-kohtAllaVana)+"P"+(7-kohtParemaleVana)+"="+"0"); laud[kohtAllaVana-1][kohtParemaleVana+1] = 0; //kustutataxe vastase nupp valja.println("$KA"+(7-(kohtAllaVana-1))+"P"+(7-(kohtParemaleVana+1))+"="+"0"); KasSaabVeelVotta(kohtAllaUus,kohtParemaleUus); kumb = 0; repaint(); } else if((kohtAllaUus == kohtAllaVana+2) && (kohtParemaleUus == kohtParemaleVana-2) && ((laud[kohtAllaVana+1][kohtParemaleVana-1]==1) || (laud[kohtAllaVana+1][kohtParemaleVana-1]==3))) //võtame vastase nupu ära { //vasakult tagant if (kumb == 4) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla3"); laud[kohtAllaUus][kohtParemaleUus] = 4; } else if (kumb == 2) { if (kohtAllaUus == 0) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla2"); laud[kohtAllaUus][kohtParemaleUus] = 4; }else { laud[kohtAllaUus][kohtParemaleUus] = 2; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"1");} } laud[kohtAllaVana][kohtParemaleVana] = 0;//kustutataxe minu nupp vanast kohast valja.println("$KA"+(7-kohtAllaVana)+"P"+(7-kohtParemaleVana)+"="+"0"); laud[kohtAllaVana+1][kohtParemaleVana-1] = 0; //kustutataxe vastase nupp valja.println("$KA"+(7-(kohtAllaVana+1))+"P"+(7-(kohtParemaleVana-1))+"="+"0"); KasSaabVeelVotta(kohtAllaUus,kohtParemaleUus); kumb = 0; repaint(); } else if((kohtAllaUus == kohtAllaVana+2) && (kohtParemaleUus == kohtParemaleVana+2) && ((laud[kohtAllaVana+1][kohtParemaleVana+1]==1) || (laud[kohtAllaVana+1][kohtParemaleVana+1]==3))) { //paremalt tagant if (kumb == 4) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla4"); laud[kohtAllaUus][kohtParemaleUus] = 4; } else if (kumb == 2) { if (kohtAllaUus == 0) { valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"3 bla2"); laud[kohtAllaUus][kohtParemaleUus] = 4; }else { laud[kohtAllaUus][kohtParemaleUus] = 2; valja.println("$KA"+(7-kohtAllaUus)+"P"+(7-kohtParemaleUus)+"="+"1");} } laud[kohtAllaVana][kohtParemaleVana] = 0;//kustutataxe minu nupp vanast kohast valja.println("$KA"+(7-kohtAllaVana)+"P"+(7-kohtParemaleVana)+"="+"0"); laud[kohtAllaVana+1][kohtParemaleVana+1] = 0; //kustutataxe vastase nupp valja.println("$KA"+(7-(kohtAllaVana+1))+"P"+(7-(kohtParemaleVana+1))+"="+"0"); KasSaabVeelVotta(kohtAllaUus,kohtParemaleUus); kumb = 0; repaint(); } else infoLabel.setText("Vale käik! Proovi veel ;)!"); } else { kumb=0; } } else if (kumb==0)//pole enne kuskil klikanud, st nupp on valitamata :P { kohtAllaVana = (int)e.getY()/50; kohtParemaleVana = (int)e.getX()/50; if(laud[kohtAllaVana][kohtParemaleVana] == 2) { kumb = 2; infoLabel.setText(""); } else if(laud[kohtAllaVana][kohtParemaleVana] == 4) { kumb = 4; infoLabel.setText(""); } else infoLabel.setText("Vale käik !"); repaint(); //et näitax valitud nuppu //System.out.println("AllaVANA: "+kohtAllaVana+" ParemaleVANA: "+kohtParemaleVana); } } } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} public void run() //see vinge lõime värk { try { if (olenserver == true) { ServerSocket ss = new ServerSocket(3001); Socket sc = ss.accept(); sisse = new BufferedReader(new InputStreamReader(sc.getInputStream())); valja = new PrintWriter(sc.getOutputStream(), true); infoLabel.setText("Ühendus loodud !"); kesKaibLabel.setText("Vastase kord käia...oota..."); nupp.setLabel("Katkesta"); IP.setEnabled(false); } while(true) //ootame ja vaatame, mis inffi tuleb { sisend = sisse.readLine(); if (sisend.equals("$alustame")) { valja.println("$okalustame"); infoLabel.setText("Ühendus loodud"); kesKaibLabel.setText("Vastase kord käia...oota..."); nupp.setLabel("Katkesta"); IP.setEnabled(false); jutukaSonum.setEnabled(true); } if (sisend.substring(0,2).equals("$K")) //tegemist on siis käiguga { laud[Integer.parseInt(sisend.substring(3,4))][Integer.parseInt(sisend.substring(5,6))] = Integer.parseInt(sisend.substring(7,8)); //System.out.println("Sisend: " + sisend); repaint(); } if (sisend.substring(0,3).equals("$J:")) //Jutuka text { jutukaText.append("Vastane: " + sisend.substring(3,sisend.length()) + "\n"); } if(sisend.equals("$SinuKord")) { voinkaia = true; kesKaibLabel.setText("Minu kord käia !"); KasSaanVotta(); } if (sisend.equals("$alustame"))//klient saadab sõnumi alustamisex { valja.println("$okalustame"); infoLabel.setText("Ühendus loodud !"); kesKaibLabel.setText("Vastase kord käia...oota..."); nupp.setLabel("Katkesta"); IP.setEnabled(false); } if (sisend.equals("$kaotasin")) { kesKaibLabel.setText("Sina võitsid !!!"); infoLabel.setText("Juheiii...:)"); try{sc.close();} catch (Exception e){System.out.println("Probleem: "+e);} //ei tea, kas seda on vaja ikka kindlasti } } } catch (Exception e){System.out.println("Probleem: "+e);} } public void actionPerformed(ActionEvent e) { String ipAadress = IP.getText(); if(e.getSource()==nupp) //üritan ühendust teha (ise klient) { try { olenserver = false; voinkaia = true; Socket sc = new Socket (ipAadress, 3001); sisse = new BufferedReader(new InputStreamReader(sc.getInputStream())); valja = new PrintWriter(sc.getOutputStream(), true); valja.println("$alustame"); sisend = sisse.readLine(); if (sisend.equals("$okalustame")) { infoLabel.setText("Ühendus loodud !"); kesKaibLabel.setText("Minu kord käia !"); nupp.setLabel("Katkesta"); IP.setEnabled(false); jutukaSonum.setEnabled(true); new Thread(this).start(); repaint(); //endale valged nupud } } catch(Exception er){infoLabel.setText("Vigane aadress !");} if (onyhendus == true) //et saax sulgeda ühenduse { try { valja.close(); sisse.close(); nupp.setLabel("Mäng läbi"); IP.setEnabled(true); jutukaSonum.setEnabled(false); } catch (Exception sadfa) { } } } if (e.getSource() == jutukaSonum) //saadan jutuka teate teisele { jutukaText.append("Mina: " + jutukaSonum.getText() + "\n"); valja.println("$J:"+jutukaSonum.getText()); jutukaSonum.setText(""); } } public static void main(String argumendid[]) { Frame f = new Frame("Kabenet - proovi ja sa ei kahetse :)"); f.setSize(410,650); f.add(new Kabenet()); f.setVisible(true); } };