Detta program körs mot en server. Här finns serverprogrammet. Ifall servern är nere kan ni starta serverprogrammet på den egna datorn.
På föreläsning 4 skrevs ett serverprogram som spelar sten, sax, påse med alla
villiga klienter. Koden finns här. Nu ska du skriva ett
grafiskt klientprogram och du ska använda idel swingkomponenter, nämligen
JFrame, JTextField, JLabel, JButton, ImageIcon och Box.
Spelet är känt över hela världen och det finns mycket att hämta på webbsidan
Rock, paper, scissors, bland annat
tre gif-bilder.
try {
Socket socket=new Socket("my.nada.kth.se",4712) ;
BufferedReader in=new BufferedReader(new InputStreamReader(
socket.getInputStream())) ;
PrintWriter ut=new PrintWriter(socket.getOutputStream()) ;
ut.println("Charlotta"); ut.flush() ;
System.out.println(in.readLine()) ;}
Ifall servern är nere kan du försöka kontakta servern på rungner. Byt då ut "my.nada.kth.se" mot "rungner.nada.kth.se". Klienten ska sända ditt namn till den server som lyssnar på port 4712 och
skriva ut det svar du får. Kom ihåg ut.flush(), annars sänds inte
namnet iväg. När klienten fungerar kan du ägna dej helt åt det grafiska
gränssnittet.
public class Klient extends JFrame implements ActionListener{
där vänstra halvan är din spelplan och högra halvan datorns spelplan. Du ska
använda BoxLayout, den layout som oftast blir bra. Varje spelplan är en vertikal
Box som uppifrån och ner innehåller
JLabel med texten Jag: eller Datorn:.
JTextField där det som sänds från dej och från datorn syns.
(Först hälsningen, sedan STEN, SAX eller PÅSE).
new JButton(stenbild)...)
ImageIcon...)
JLabel som efter ett tryck visar ETT...,
efter andra trycket TVÅ... och efter tredje VINNER,
OAVGJORT eller FÖRLORAR.
JTextField som visar Poäng: 7
Spelplan vara en inre klass, så är det enkelt att skapa två
exemplar av den och lägga bredvid varandra i en horisontell box. Fördelen med
en box är att man kan lägga in fasta mellanrum mellan komponenterna Om man
deklarerat Box box=Box.createHorizontalBox(); kan man göra så här.
box.add(jag); //Spelplan jag=new Spelplan("Jag:"); har redan deklarerats
box.add(Box.createHorizontalStrut(20)); //Ett mellanrum
box.add(du); //Spelplan du=new Spelplan("Datorn:"); har redan deklarerats
Extrauppgift: Lägg till ljudeffekter! (Kan kräva hörlurar på elektrodatorer utan högtalare).
Spelplan ärva Box kan du i
konstruktorn börja med anropetsuper(BoxLayout.Y_AXIS) för att få den vertikal.
ImageIcon sten=new ImageIcon("rock.gif") och samlas i en array
Icon[] bild={sten,sax,påse}.
String[]text={"STEN","SAX","PÅSE"}.
knapp[i].setActionCommand(text[i]). Den kan man
sedan få fram i actionPerformed med e.getActionCommand().
knapp[i].addActionListener(Klient.this).
public void markera(String texten) i spelplansklassen lämplig.
Den kan gå igenom knapparna och sätta bakgrunden grå utom för knappen
med texten, som i stället gulnar. Samtidigt kan den skriva in texten i meddelandefältet.
markera i datorfönstret.