Questo programma usa la funzione start, in cui si decidono le posizioni dei sottomarini (questo va fatto in start e non in paint, altrimenti si ricomincia da capo ogni volta che si scopre la finestra.
/* Battaglia navale (solo sottomarini). */ import java.awt.*; public class BattagliaNavale extends java.applet.Applet { /* posizioni dei sottomarini */ int xsott[]=new int[10]; int ysott[]=new int[10]; /* i colpi sparati */ int xcolpi[]=new int[500]; int ycolpi[]=new int[500]; int ncolpi=0; /* inizio: si mettono i sottomarini in posizioni casuali */ public void start() { int i; for(i=0; i<=xsott.length-1; i=i+1) { xsott[i]=Math.round((float) Math.random()*10); ysott[i]=Math.round((float) Math.random()*10); System.out.println(xsott[i]+" "+ysott[i]); } } /* mouseDown: si memorizza un nuovo colpo */ public boolean mouseDown(Event e, int x, int y) { if( (x<=400) && (y<=400) ) { ncolpi=ncolpi+1; xcolpi[ncolpi-1]=x/40; ycolpi[ncolpi-1]=y/40; repaint(); } return true; } /* paint: si stampa la griglia, e poi per ogni colpo si mette x oppure o a seconda se c'e' un sottomarino */ public void paint(Graphics g) { int x,y; int c,s; int colpito; /* la griglia */ for(x=0; x<=400; x=x+40) { g.drawLine(x,0,x,400); } for(y=0; y<=400; y=y+40) { g.drawLine(0,y,400,y); } /* disegna i colpi */ for(c=0; c<=ncolpi-1; c=c+1) { colpito=0; for(s=0; s<=xsott.length-1; s=s+1) { if( (xcolpi[c]==xsott[s]) && (ycolpi[c]==ysott[s]) ) { colpito=1; } } if( colpito==1 ) { g.drawLine(xcolpi[c]*40+5,ycolpi[c]*40+5, xcolpi[c]*40+35,ycolpi[c]*40+35); g.drawLine(xcolpi[c]*40+5,ycolpi[c]*40+35, xcolpi[c]*40+35,ycolpi[c]*40+5); } else { g.drawOval(xcolpi[c]*40+5,ycolpi[c]*40+5,30,30); } } } }