Newsgroup: it.comp.lang.visual-basic
Titolo: crucipuzzle parte 2

Ciao a tutti.
Rieccomi con questo simpatico giochetto...
Ho terminato la classe per la risoluzione del gioco, però ora sarebbe bello
dargli una veste grafica e permettere anche la risoluzione manuale...
Vorrei dei consigli...
Io ho pensato di creare una classe contenente le caselle che rappresentano
le lettere. In pratica si tratta di rettangoli bianchi al cui interno
vengono stampate le lettere e messi uno vicino all'altro danno l'idea dello
schema classico...
Cosa ve ne pare?
Purtroppo sono una schiappa della grafica e questo un po' mi penalizza...
chi si sente di darmi un consiglio... sarà ben gradito :))
Grazie in anticipo...
Max

 Cosa ve ne pare?
è da un po che hanno inventato le label..
in alternativa, puoi scrivere direttamente sulla form, o su una picture, con
il metodo drawsrting (usi .net, giusto?)
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 il metodo drawsrting (usi .net, giusto?)
omissis: .net :)
suppongo quindi che l'idea che ho adottato, o meglio, vorrei adottare, non
ti piace...
Max

 ti piace...
Con le classi di GDI+ di .NET puoi giocare come vuoi.
Ritengo che l'eccessiva potenzialità attraggono e distraggono.
Es.  delle righe di codice digitate tempo fa per un test:
Aggiungi una PictureBox ad una Windows form,
poi il seguente
Private Sub DisPictureBox()
        Dim newimg As New Bitmap(100, 100)
        Dim grf As Graphics
        grf = Graphics.FromImage(newimg)
        grf.Clear(Color.Aqua)
        ' Funzioni che creano l'immagine
        grf.DrawLine(New Pen(Color.Blue, 2), 0, 0, 100, 100)
        grf.DrawLine(New Pen(Color.DarkGreen, 2), 100, 0, 0, 100)
        grf.DrawEllipse(New Pen(Color.DarkMagenta, 30), 20, 20, 60, 60)
        'Fine funzioni che creano l'immagine
        PictureBox1.Image = newimg
    End Sub
Un'idea per costruirne altre.
Anzi, direi, penso che se inizi a costruire un catalogo, una form,
un'esempio, come il librone delle carte da parati,
che alcuno a caso,
il lettore,
invii il progettino al sito, svolge un diplice benessere,
a lui, che impara, a noi che lucriamo.
Ave
giuseppeD

 adottare, non ti piace...
dipende.
se l'utilizzo di un oggetto è dettato solo dalla necessità di far apparire
una certa lettera in una certa posizione, mi sembra uno spreco di risorse,
se hai altre esigenze, che però in questo momento non posso intuire, se ne
potrebbe parlare.
io comunque farei un oggettone unico, che eredita da una picture box, al
quale passi la matrice dei caratteri, e che "riscrive" i caratteri nella
corretta posizione ad ogni evento paint


 corretta posizione ad ogni evento paint
Questo dovrebbe escludere quanto detto sopra (premesso che mi intendo poco o
niente di grafica)...
Grazie
Max

 a lui, che impara, a noi che lucriamo.
Giuseppe, devi essere troppo avanti per me :)))
non ho ben capito cosa volessi dirmi :-P
Ave a te!
Max

 poco o niente di grafica)...
non necessariamente.
in effetti, se vuoi che la "lettera" abbia una vita propria, il fatto di
inserirla all'interno dell'oggetto può semplificarti la vita... però faresti
fatica a dare una vita "collettiva".
ad esempio, le poche volte che, causa noia colossale, mi sono dedicato a
risolvere dei crucipuzzle, quando trovavo una parola nello schema la segnavo
con un tratto di penna... disegnare una riga su una picture direi che è
abbastanza elementare.
per evidenziare una lettera stampata in una picture potresti disegnargli
sopra un quadratino colorato con effetto trasparenza...
insomma, le soluzioni si trovano.


 insomma, le soluzioni si trovano.
Ho optato per questo metodo:
una classe per la lettera da stampare.
Dalla form creo una matrice di lettere in modo da averne le proprietà a
disposizione.
Il tutto funziona bene eccetto che se la form esce dal video perdo la
visualizzazione... dovrei probabilmente agganciarmi in qualche modo
all'evento Paint della form...
Ciao
Max

 all'evento Paint della form...
come hai fatto a disegnare le lettere sulla form?


> come hai fatto a disegnare le lettere sulla form?
Nella classe delle "lettere" ho inserito questo metodo con tutti i parametri
necessari:
Public Sub DisegnaLettera(ByVal g As Graphics)
g.DrawRectangle(New Pen(Color.White), m_left, m_top, m_lato, m_lato)
g.FillRectangle(New SolidBrush(Color.White), m_left, m_top, m_lato, m_lato)
g.DrawString(m_lettera, New Font("Arial", 16, FontStyle.Regular), New
SolidBrush(Color.Black), (m_left), (m_top))
End Sub
Nella form principale:
schema(coo.rig, coo.col) = New Casella(UCase(Me.TextBox3.Text),
GetNextTop(coo.col), GetNextLeft(coo.col), m_dimensione, Me)
schema(coo.rig, coo.col).DisegnaLettera(g)
dove la prima istruzione crea la lettera e la inserisce in una matrice e la
seconda la disegna...
E' questo che volevi sapere?
Max

 E' questo che volevi sapere?
sě.
quello che perň non vedo nel tuo codice č a cosa si riferisce il graphics
"g".
immagino sia relativo alla form.
comunque, che io sappia, hai a disposizione due strade: mettere il codice
che disegna le lettere all'interno dell'evento paint della form (attenzione,
non fare l'errore che feci io, a suo tempo, usa l'oggetto graphics passato
come parametro dell'evento, se no alla fine ti si cancella tutto quello che
hai disegnato), oppure ti generi un oggetto bitmap, disegni su quella, e
nell'evento paint ridisegni la bitmap sul form.
la seconda strada comporta un maggior utilizzo di risorse, ma un ridisegno
piů rapido, valuta tu quale strada risponde meglio alle tue esigenze.


 nell'evento paint ridisegni la bitmap sul form.
Ho utilizzato il primo metodo.
Visto che io ho tutti i dati a disposizione con due cicli for ristampo le
lettere
all'interno dell'evento paint. E' anche piuttosto veloce...
Max