Server.
import java.awt.Graphics2D;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
/**
*
* @author
*/
public class frmTombola extends javax.swing.JFrame {
/**
* Creates new form frmTombola
*/
private int Urna[] = new int[90];
private int estratto, nrDentro;
private int punteggi[] = new int[18];
private int prosVinc;
final int DIM = 30;
private final int TOTCART = 24;
private String[] cartelle = new String[TOTCART];
private int nrCon, nrUt;
private final int NRCON=3;
private Socket[] socket;
private int[][] puntiUt;
private PrintWriter[] out;
public frmTombola() {
initComponents();
}
private void creaCartelle() {
int i, indice, tmp;
for (i=0; i<TOTCART; i++) Urna[i] = i;
Random caso = new Random();
for (i=TOTCART-1; i>1; i--) {
indice = caso.nextInt(i);
tmp = Urna[indice];
Urna[indice] = Urna[i];
Urna[i] = tmp;
}
cartelle[Urna[0]] = ".6..2330..51..78....17..3941..60..85..1925..4358....89";
cartelle[Urna[1]] = ".2..20..42..6874...3..29..4453..76....15..34..5569..80";
cartelle[Urna[2]] = ".5..22..48..63..81..12..36..54..7586.8..24....5664..90";
cartelle[Urna[3]] = ".7..21..45..6172...913..32..57..73....18..3547..65..88";
cartelle[Urna[4]] = "..11..3746....7082.4..2638..59..77....1428..49..66..87";
cartelle[Urna[5]] = "..10..31..50..7183.1..27..40..6279....16..33..5267..84";
cartelle[Urna[6]] = "..1323..4055..70...7..2534..59..73....15..3646..64..87";
cartelle[Urna[7]] = "..11..31..5062..82.1..28..4254..78....18..3345..6579..";
cartelle[Urna[8]] = "..19..32..5160..86.4..24..47..6372...6..26..49..697288";
cartelle[Urna[9]] = "..10..35..56..7680.8..21..44..66..81..14..38..5867..83";
cartelle[Urna[10]] = "..1220..43..61..85.216..37..53..74...9..29..48....7790";
cartelle[Urna[11]] = "..17..30..5268..84.3..22..41....7189.5..2739..57..75..";
cartelle[Urna[12]] = "..10..3543..63..82.316..38..51..73....1724..4556..79..";
cartelle[Urna[13]] = ".5..2630..53..74...7..28..48..68..84..14..34..55..7589";
cartelle[Urna[14]] = "..11..31..57..7186.2..20..46..6272...6....32..5869..88";
cartelle[Urna[15]] = ".4..22..4054..77...9..25..42..60..80..12..39..5967..83";
cartelle[Urna[16]] = "..1523..41..61..81.8..2736..52..76....18..3747..66..90";
cartelle[Urna[17]] = "..1321..44..6470....19..33..50..7885.1..29..49..65..87";
cartelle[Urna[18]] = ".1..20..4655..72....10..3149..60..82..182737..50....90";
cartelle[Urna[19]] = ".2..22..40..61..83..12..33..54..7189.4..25..45..6678..";
cartelle[Urna[20]] = ".5..2332..53..73....1329..42..63..87.917..38..57..76..";
cartelle[Urna[21]] = "..16....445265..80.6..28....58..7484..19..3547..69..86";
cartelle[Urna[22]] = ".8..26..43..64..81..14..34..51..7085..15..3948..6779..";
cartelle[Urna[23]] = ".3..2136..56....88.7..24..41..6275....11..30..506877..";
}
private void disegna(){
Graphics2D g = (Graphics2D)jPanel1.getGraphics();
int x, y, i=0;
for(y=60, i=1; y<9*DIM+60; y+=DIM)
for (x=10; x<(10*DIM+10); x+=DIM, i++) {
g.drawString(""+i, x, y);
}
estratto = 0;
nrDentro=90;
for (i=0; i<18; i++) punteggi[i]=0;
prosVinc=0;
jButton1.setEnabled(true);
g.drawLine(5, 40, 10*DIM+5, 40);
g.drawLine(5, 40+3*DIM, 10*DIM+5, 40+3*DIM);
g.drawLine(5, 40+6*DIM, 10*DIM+5, 40+6*DIM);
g.drawLine(5, 40+9*DIM, 10*DIM+5, 40+9*DIM);
g.drawLine(5, 40, 5, 40+9*DIM);
g.drawLine(5*DIM, 40, 5*DIM, 40+9*DIM);
g.drawLine(10*DIM+5, 40, 10*DIM+5, 40+9*DIM);
creaCartelle();
try {
ascolta();
} catch(IOException e) {}
}
private int estrai() {
int n = Urna[estratto++];
String num;
if (n<=9) num="."+n;
else num=""+n;
for (int i=0; i<nrUt; i++) {
out[i].println(num);
}
return n;
}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
disegna();
int i, indice, tmp;
for (i=0; i<90; i++) Urna[i] = i+1;
Random caso = new Random();
for (i=89; i>1; i--) {
indice = caso.nextInt(i);
tmp = Urna[indice];
Urna[indice] = Urna[i];
Urna[i] = tmp;
}
}
private void VincitaUt(int n){
String num, tmp;
if (n<=9) num ="."+n;
else num=""+n;
for (int utente=0; utente<nrUt; utente++) {
for (int j=0; j<54; j+=2) {
tmp = cartelle[utente].substring(j, j+2);
if (num.equals(tmp)){
int riga = j/18;
++puntiUt[utente][riga];
if(puntiUt[utente][riga]==2 && prosVinc==0){
jTextArea1.append("\nUtente "+utente+" ha fatto Ambo ");
prosVinc++;
break;
}
if(puntiUt[utente][riga]==3 && prosVinc==1){
jTextArea1.append("\nUtente "+utente+" ha fatto Terno ");
prosVinc++;
break;
}
if(puntiUt[utente][riga]==4 && prosVinc==2){
jTextArea1.append("\nUtente "+utente+" ha fatto Quaterna ");
prosVinc++;
break;
}
if(puntiUt[utente][riga]==5 && prosVinc==3){
jTextArea1.append("\nUtente "+utente+" ha fatto Cinquina ");
prosVinc++;
break;
}
if (prosVinc==4){
if(puntiUt[utente][0]+puntiUt[utente][1]+puntiUt[utente][2]==15)
jTextArea1.append("\nUtente "+utente+" ha fatto Tombola ");
}
}
}
}
}
private void Vincita(int n){
// controllo del punteggio.
int riga = (n-1)/5;
++punteggi[riga]; // conta i numeri sulla riga.
if (punteggi[riga]==2 && prosVinc==0) {
jTextArea1.append("\nAmbo");
prosVinc++;
}
if (punteggi[riga]==3 && prosVinc==1) {
jTextArea1.append("\nTerno");
prosVinc++;
}
if (punteggi[riga]==4 && prosVinc==2) {
jTextArea1.append("\nQuaterna");
prosVinc++;
}
if (punteggi[riga]==5 && prosVinc==3) {
jTextArea1.append("\nCinquina");
prosVinc++;
}
// per verificare la tombola si considera che
// in ogni sottocartella ci devono stare 15 numeri.
if (prosVinc==4) {
for(int i=0; i<18; i+=3)
if ((punteggi[i]+punteggi[i+1]+punteggi[i+2])==15) {
jTextArea1.append("\nTombola");
// fermare il gioco e proporre nuova partita
}
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (nrDentro==0) return;
nrDentro--;
Graphics2D g = (Graphics2D)jPanel1.getGraphics();
int n = estrai(), x, y;
y = (int) (n-1)/10*DIM+45;
x = ((n-1)%10)*DIM + 8;
jTextArea1.append("\n"+(90-nrDentro)+": "+n);
g.drawOval(x, y, DIM/2, DIM/2);
//Vincita(n);
VincitaUt(n);
}
public void ascolta() throws IOException {
nrCon=NRCON-1; // max 3 connessioni
nrUt = 0;
socket = new Socket[NRCON];
puntiUt = new int[NRCON][3];
out = new PrintWriter[NRCON];
//out = new PrintWriter[NRCON];
ServerSocket server = new ServerSocket(9090);
while(nrCon>=0) {
if (nrUt==24) return;
try {
socket[nrCon] = server.accept();
for (int i=0; i<3; i++) puntiUt[nrUt][i]=0;
try {
out[nrUt] = new PrintWriter(socket[nrCon].getOutputStream(), true);
out[nrUt].println(cartelle[nrUt++]);
} catch(IOException e) { }
} catch(IOException e) { }
nrCon--;
}
System.out.println("tutti gli utenti sono connessi");
}
Client
import java.awt.Graphics2D;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
*
* @author
*/
public class frmTombolaClient extends javax.swing.JFrame {
private BufferedReader in;
private PrintWriter out;
private String Cartella[] = new String[27];
private int posX[], posY[];
/**
* Creates new form frmTombolaClient
*/
public frmTombolaClient() {
initComponents();
}
public void aspetta() throws IOException {
Graphics2D g = (Graphics2D) jPanel1.getGraphics();
String Num = in.readLine();
while (Num!=null) {
for (int i=0; i<27; i++){
if (Num.equals(Cartella[i])) {
g.drawOval(posX[i]-5, posY[i]-15, 20, 20);
break;
}
}
jTextArea1.append("\nEstratto: " + Num);
Num = in.readLine();
}
}
public void connetti() throws IOException {
// Crea la connessione e inizia la trasmissione.
posX=new int[27];
posY=new int[27];
Socket socket = new Socket("127.0.0.1", 9090);
in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
String Cart = in.readLine();
String Num;
jTextArea1.append(Cart + "\n");
Graphics2D g = (Graphics2D) jPanel1.getGraphics();
for (int i=0; i<18; i+=2) {
Num = Cart.substring(i,i+2);
posX[i/2] = i*20+20;
posY[i/2] = 40;
g.drawString(Num, posX[i/2], posY[i/2]);
Cartella[i/2]=Num;
}
for (int i=18; i<36; i+=2) {
Num = Cart.substring(i,i+2);
posX[i/2] = (i-18)*20+20;
posY[i/2] = 80;
g.drawString(Num, posX[i/2], posY[i/2]);
Cartella[i/2]=Num;
}
for (int i=36; i<54; i+=2) {
Num = Cart.substring(i,i+2);
posX[i/2] = (i-36)*20+20;
posY[i/2] = 120;
g.drawString(Num, posX[i/2], posY[i/2]);
Cartella[i/2]=Num;
}
g.drawLine(10, 25, 370, 25);
g.drawLine(10, 55, 370, 55);
g.drawLine(10, 95, 370, 95);
g.drawLine(10, 135, 370, 135);
for (int i=0; i<20; i+=2)
g.drawLine(i*20+10, 25, i*20+10, 135);
//aspetta();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
connetti();
} catch(IOException e) { }
try {
aspetta();
} catch (IOException e) {}
}