Newsgroup: it.comp.lang.pascal
Titolo: Forza 4

Ciao a tutti,
vorrei sottoporvi un piccolo problema che devo risolvere in Pascal...
Sto implementando il gioco "Forza 4"... lo conoscete tutti vero? Ok
adesso il mio problema e' che devo scrivere una funzione che controlli
se ci sono stati dei vincitori.
Il mio "campo di gara" e' rappresetato da una matrice 6x8 (6 righe per 8
colonne). Ma andiamo con ordine.
Ho definito un tipo enumerativo in questo modo
Cella = (Mia, Sua, Libera);
Ho una matrice di questo tipo
Matr[1..6,1..8] of Cella;
Mi serve una funzione a cui passo la posizione in cui ho inserito il
gettone e questa mi deve dire se c'e' stato un vincitore o no... cioe'
se il gettone che ho inserito ha determinato l'allineamento di quattro
gettoni dello stesso colore in una qualsiasi delle direzioni.
Quando dico che passo la posizione intendo dire che passo sia la riga
che la colonna in cui va a posizionarsi il gettone...
Spero di essermi spiegato, aspetto suggerimenti!
Ciao e grazie in anticipo!!!
Rod.
P.S. Per Andrea Laforgia... lo so che hai gia' risolto la cosa.. eehehe
:-))) CIAO!
R.
--
Rimuovi NOSPAM per rispondere via email
--------------------------------------------
Rodolfo D'Agostino
E-mail: 
rod...@bigfoot.com
ICQ #24454740 (casa)
       #30474489 (univ.)
--------------------------------------------
"Quanti programmatori ci vogliono
  per cambiare una lampadina? Nessuno,
  è un problema hardware..."

you wrote :
#Ho definito un tipo enumerativo in questo modo
#
#Cella = (Mia, Sua, Libera);
#
#Ho una matrice di questo tipo
#
#Matr[1..6,1..8] of Cella;
#
#Mi serve una funzione a cui passo la posizione in cui ho inserito il
#gettone e questa mi deve dire se c'e' stato un vincitore o no... cioe'
function Vittoria( x, y : integer ; tipo_cella : cella ) : boolean ;
var Ox, Oy, CountH, CountV, CountD1, CountD2 : integer ;
begin
  CountH  := 1 ;
  CountV  := 1 ;
  CountD1 := 1 ;
  CountD2 := 1 ;
  Ox := x ;
  Oy := y ;
  x := Ox - 1 ;
  while (( x >= 1 ) and ( Matr[y, x] = tipo_cella )) do 
  begin
        CountH := CountH + 1 ;
        x := x - 1 ;
  end ;
  x := Ox + 1 ;
  while (( x <= 8 ) and ( Matr[y, x] = tipo_cella )) do 
  begin
        CountH := CountH + 1 ;
        x := x + 1 ;
  end ;
  x := Ox ; y := Oy - 1 ;
  while (( y >= 1 ) and ( Matr[y, x] = tipo_cella )) do 
  begin
        CountV := CountV + 1 ;
        y := y - 1 ;
  end ;
  x := Ox ; y := Oy + 1 ;
  while (( y <= 6 ) and ( Matr[y, x] = tipo_cella )) do 
  begin
        CountV := CountV + 1 ;
        y := y + 1 ;
  end ;
  x := Ox - 1 ; y := Oy - 1 ;
  while (( x >= 1 ) and ( y >= 1 ) and ( Matr[y, x] = tipo_cella )) do
  begin
        CountD1 := CountD1 + 1 ;
        x := x - 1 ;
        y := y - 1 ;
  end ;
  x := Ox + 1 ; y := Oy + 1 ;
  while (( x <= 8 ) and ( y <= 6 ) and ( Matr[y, x] = tipo_cella )) do
  begin
        CountD1 := CountD1 + 1 ;
        x := x + 1 ;
        y := y + 1 ;
  end ;
  if (( CountH >= 4 ) or ( CountV >= 4 ) or
      ( CountD1 >= 4 ) or ( CountD2 >= 4 )) then Vittoria := TRUE 
  else Vittoria := FALSE ;
end ;
Andrea Laforgia        (
andrea_...@bigfoot.com
)
----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
----------------------------------------------------

se ci sono stati dei vincitori.
Se non ricordo male trovai come soluzione quella di definire per ogni
cella un array di 8 elementi. Ognuno di questi faceva riferimento alle
caselle adiacenti (N,NO,O,SO,...) e veniva aggiornato col numero di
pedine (dello stesso colore) di tali caselle nella stessa direzione,
verificando quindi l'eventuale vincita.
Spero di essermi spiegato.

 Spero di essermi spiegato, aspetto suggerimenti!
Ti sei spiegato bene.
So di arrivare in ritardo ma forse posso esserti ancora di qualche aiuto
(anche se immagino che la risposta di Laforgia abbia già risolto i tuoi
problemi).
Io ho già fatto questo gioco, se ti interessa scrivimi e ti mando il
listato. Ti avverto però che l'ho fatto in secondo liceo, che la grafica è
molto rozza, che il listato è privo di commenti e un po' contorto (non mi
ero affatto preoccupato della possibilità di farlo leggere agli altri) e che
il mio campo di gioco è 5 x 5; apparte tutto ciò, è carino. Il motivo per
cui ho scelto una matrice così piccola [5 x 5] è legato alla grafica e alla
difficoltà di effettuare i controlli su chi vince (stesso problema tuo) che
io avevo risolto facendogli controllare tutte le combinazioni in cui si
poteva vincere.
Spero che ti interessi.
Ciao da FABIO! :)