2048+ the Game
Sommario | Admin | Forum | Bugs | Todo | Files
Ultimo (Member )
Guru
Messaggi: 877
Iscritto: 22/05/2010
versione 8.10.2
If ok Then GOTO Avanza else GOTO Inizia
Carlo (Member )
Guru
Messaggi: 1345
Iscritto: 29/01/2018
Postato originariamente da Ultimo :
versione 8.10.2
Dovresti aggiungere su AboutBox2:
Codice sorgente - presumibilmente VB.NET
Private Sub AboutBox2_KeyDown( ByVal sender As Object , ByVal e As System.Windows .Forms .KeyEventArgs ) Handles Me .KeyDown
If e.KeyCode = Keys.F12 then Me .Close ( )
End Sub
Per fare in modo che se si preme di nuovo F12, AboutBox2 si chiude e Form1 si riabilita.
Sulla finestra Proprietà di AboutBox2, mettere KeyPreview = True
Oppure aggiungere la riga:
Me.KeyPreview = True
su: Private Sub AboutBox2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Ultima modifica effettuata da Carlo il 11/06/2018 alle 19:56
in programmazione tutto è permesso
Ultimo (Member )
Guru
Messaggi: 877
Iscritto: 22/05/2010
@Carlo
Ok lo inserisco
If ok Then GOTO Avanza else GOTO Inizia
Carlo (Member )
Guru
Messaggi: 1345
Iscritto: 29/01/2018
@Ultimo
@Mikelius
SubRoutine grafica commentata, usate matrici al posto degli if per il colore dei fondi.
Codice sorgente - presumibilmente VB.NET
Private Sub Crea_Simboli( TipoSimboli As Short)
Dim imgbmp As Bitmap = Nothing
ImageList1.Images .Clear ( ) ' svuoto ImageList1
If TipoSimboli = 1 Then ' Grafica 1
Dim Fondo As New SolidBrush( Color.Transparent )
'Carico una matrice con il valore da scrivere e il rispettivo colore di fondo in RGB
Dim ColoreFondo( ,) As Short = { { 2, 14, 209, 69} , { 4, 255, 127, 39} , { 8, 185, 122, 86} , { 16, 0, 168, 243} , { 32, 225, 184, 44} ,
{ 64, 0, 53, 243} , { 128, 255, 242, 0} , { 256, 196, 255, 14} , { 512, 160, 13, 234} ,
{ 1024, 155, 112, 77} , { 2048, 230, 17, 81} , { 4096, 181, 181, 223} , { 8192, 91, 92, 67} }
For i = 0 To 12 ' ciclo per creare 13 tessere grafiche
imgbmp = New Bitmap( 84 , 84 ) ' creo una bitmap in ram 84x84 pixel
Using g As Graphics = Graphics.FromImage ( imgbmp) ' istanzio l'oggetto g che disegnerà su imgbmp
g.TextRenderingHint = Drawing.Text .TextRenderingHint .AntiAliasGridFit ' setto alta qualità di disegno per i testi
Dim Testo As String = ColoreFondo( i, 0 ) .ToString ' testo da scrivere
Fondo = New SolidBrush( Color.FromArgb ( 255 , ColoreFondo( i, 1 ) , ColoreFondo( i, 2 ) , ColoreFondo( i, 3 ) ) ) ' colore di fondo del numero corrente
g.Clear ( Color.Snow ) ' cancello la casella con il colore bianconeve
g.FillEllipse ( Fondo, - 14 , - 14 , 111 , 111 ) ' disegno un'ellisse più grande della bitmap per creare l'effetto stondato
If i < 2 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Bold )
g.DrawString ( Testo, Carattere, Brushes.Black , New PointF( 26 , 22 ) ) ' 2 e 4
End Using
ElseIf i = 2 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 26 , 22 ) ) ' 8
End Using
ElseIf i = 3 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.DarkRed , New PointF( 18 , 22 ) ) ' 16
End Using
ElseIf i = 4 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.Blue , New PointF( 18 , 22 ) ) ' 32
End Using
ElseIf i = 5 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.Yellow , New PointF( 18 , 22 ) ) ' 64
End Using
ElseIf i = 6 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.Blue , New PointF( 5 , 22 ) ) ' 128
End Using
ElseIf i = 7 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.Black , New PointF( 8 , 22 ) ) ' 256
End Using
ElseIf i = 8 Then
Using Carattere As Font = New Font( "Arial" , 26, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 8 , 22 ) ) ' 512
End Using
ElseIf i = 9 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.LimeGreen , New PointF( 5 , 26 ) ) ' 1024
End Using
ElseIf i = 10 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 5 , 26 ) ) ' 2048
End Using
ElseIf i = 11 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.DarkRed , New PointF( 5 , 26 ) ) ' 4096
End Using
ElseIf i = 12 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Regular )
g.DrawString ( Testo, Carattere, Brushes.Red , New PointF( 5 , 26 ) ) ' 8192
End Using
End If
End Using
ImageList1.Images .Add ( imgbmp) ' aggiungo a ImageList1 la BitMap appena disegnata
Next
Panel1.BackColor = Color.Snow ' colore di fondo del Panel1, contenitore di tutte le caselle
PictureBox1.BackColor = Color.Silver ' colore di fondo della PictureBox1, massima potenza raggiunta
Call ToolStrip_Checked( TipoGrafica) ' carica i colori di fondo di Mat4x4Pict_2040 in accordo alla grafica scelta, si vede quando non ci sono i numeri
ElseIf TipoSimboli = 2 Then ' Grafica 2
Dim Fondo As New SolidBrush( Color.Transparent )
' Carico una matrice con il valore da scrivere e il rispettivo colore di fondo in RGB
Dim ColoreFondo( ,) As Short = { { 2, 245, 245, 245} , { 4, 245, 245, 220} , { 8, 242, 177, 121} , { 16, 245, 149, 99} , { 32, 245, 124, 97} ,
{ 64, 255, 10, 10} , { 128, 250, 220, 90} , { 256, 240, 225, 80} , { 512, 235, 200, 0} ,
{ 1024, 230, 190, 0} , { 2048, 220, 160, 0} , { 4096, 0, 0, 0} , { 8192, 0, 0, 0} }
For i = 0 To 12 ' ciclo per creare 13 tessere grafiche
imgbmp = New Bitmap( 84 , 84 ) ' creo una bitmap in ram 84x84 pixel
Using g As Graphics = Graphics.FromImage ( imgbmp) ' istanzio l'oggetto g che disegnerà su imgbmp
g.TextRenderingHint = Drawing.Text .TextRenderingHint .AntiAliasGridFit ' setto alta qualità di disegno per i testi
Dim Testo As String = ColoreFondo( i, 0 ) .ToString ' testo da scrivere
Fondo = New SolidBrush( Color.FromArgb ( 255 , ColoreFondo( i, 1 ) , ColoreFondo( i, 2 ) , ColoreFondo( i, 3 ) ) ) ' colore di fondo del numero corrente
g.FillRectangle ( Fondo, 4 , 4 , 76 , 76 ) ' disegno un rettangolo più piccolo della bitmap per creare l'effetto tessera
If i < 3 Then
Using Carattere As Font = New Font( "Arial" , 32, FontStyle.Bold )
g.DrawString ( Testo, Carattere, Brushes.DarkSlateGray , New PointF( 24 , 20 ) ) ' 2, 4 e 8
End Using
ElseIf i < 6 And i > 2 Then
Using Carattere As Font = New Font( "Arial" , 32, FontStyle.Bold )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 12 , 20 ) ) ' 16, 32, e 64
End Using
ElseIf i < 9 And i > 5 Then
Using Carattere As Font = New Font( "Arial" , 28, FontStyle.Bold )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 6 , 22 ) ) ' 128, 256 e 512
End Using
ElseIf i < 13 And i > 8 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Bold )
g.DrawString ( Testo, Carattere, Brushes.White , New PointF( 5 , 26 ) ) ' 1024, 2048, 4096 e 8182
End Using
End If
End Using
ImageList1.Images .Add ( imgbmp) ' aggiungo a ImageList1 la BitMap appena disegnata
Next
Panel1.BackColor = Color.Gray ' colore di fondo del Panel1, contenitore di tutte le caselle
PictureBox1.BackColor = Color.Gray ' colore di fondo della PictureBox1, massima potenza raggiunta
Call ToolStrip_Checked( TipoGrafica) ' carica i colori di fondo di Mat4x4Pict_2040 in accordo alla grafica scelta, si vede quando non ci sono i numeri
ElseIf TipoSimboli = 3 Then ' Grafica 3
Dim Fondo As New SolidBrush( Color.FromArgb ( 255, 220, 220, 220) )
Dim Penna As New SolidBrush( Color.FromArgb ( 255, 40, 40, 40) )
Dim Testo As String
For i = 0 To 12
imgbmp = New Bitmap( 84, 84)
Using g As Graphics = Graphics.FromImage ( imgbmp)
g.TextRenderingHint = Drawing.Text .TextRenderingHint .AntiAliasGridFit
g.SmoothingMode = SmoothingMode.AntiAlias
Testo = 2 ^ ( i + 1) .ToString
Penna = New SolidBrush( Color.FromArgb ( 255, 10 * i, i * 10, 21 * i) )
g.FillRectangle ( Fondo, 0, 0, 84, 84)
Call PoligonoRegolare( g, Penna, 28 - i, i + 3, 42, 41, 0, False )
If i < 13 And i > 8 Then
Using Carattere As Font = New Font( "Arial" , 22, FontStyle.Bold )
g.DrawString ( 2 ^ ( i + 1) .ToString , Carattere, Brushes.White , New PointF( 5, 26) )
End Using
End If
End Using
ImageList1.Images .Add ( imgbmp)
Next
Panel1.BackColor = Color.IndianRed
PictureBox1.BackColor = Color.DarkKhaki
Call ToolStrip_Checked( TipoGrafica)
ElseIf TipoSimboli = 4 Then
Dim Fondo As New SolidBrush( Color.Blue )
Dim Penna As New SolidBrush( Color.Yellow )
For i = 0 To 12
imgbmp = New Bitmap( 84, 84)
Using g As Graphics = Graphics.FromImage ( imgbmp)
g.FillRectangle ( Fondo, 0, 0, 84, 84)
g.FillRectangle ( Penna, 0, 80 - i * 6, 84, 84)
End Using
ImageList1.Images .Add ( imgbmp)
Next
Panel1.BackColor = Color.Coral
PictureBox1.BackColor = Color.Brown
Call ToolStrip_Checked( TipoGrafica)
ElseIf TipoSimboli = 5 Then
For i = 0 To 12
ImageList1.Images .Add ( ImageList2.Images ( i) )
Next
Panel1.BackColor = Color.Brown
PictureBox1.BackColor = Color.Brown
Call ToolStrip_Checked( TipoGrafica)
ElseIf TipoSimboli = 6 Then
For i = 0 To 12
ImageList1.Images .Add ( ImageList3.Images ( i) )
Next
Panel1.BackColor = Color.DarkGreen
PictureBox1.BackColor = Color.DarkGreen
Call ToolStrip_Checked( TipoGrafica)
ElseIf TipoSimboli = 7 Then
Dim Roma( ) As String = { " I" , " II" , " III" , " IV" , " V" , " VI" , " VII" , " VIII" , " IX" , " X" , " XI" , " XII" , " XIII" }
For i = 0 To 12
imgbmp = New Bitmap( 84 , 84 ) ' creo una bitmap
Using g As Graphics = Graphics.FromImage ( imgbmp) ' g agisce su imgbmp
g.TextRenderingHint = Drawing.Text .TextRenderingHint .AntiAliasGridFit
g.FillRectangle ( Brushes.Navy , 0, 0, 84, 84)
Using Carattere As Font = New Font( "Georgia" , 22, FontStyle.Regular )
g.DrawString ( Roma( i) , Carattere, Brushes.Red , New PointF( 5, 26) )
End Using
End Using
ImageList1.Images .Add ( imgbmp)
Next
Panel1.BackColor = Color.Tomato
PictureBox1.BackColor = Color.Navy
Call ToolStrip_Checked( TipoGrafica)
ElseIf TipoSimboli = 8 Then
Dim Lettere( ) As String = { " A" , " B" , " C" , " D" , " E" , " F" , " G" , " H" , " I" , " J" , " K" , " L" , " M" }
For i = 0 To 12
imgbmp = New Bitmap( 84 , 84 ) ' creo una bitmap
Using g As Graphics = Graphics.FromImage ( imgbmp) ' g agisce su imgbmp
g.TextRenderingHint = Drawing.Text .TextRenderingHint .AntiAliasGridFit
g.FillRectangle ( Brushes.Navy , 0, 0, 84, 84)
Using Carattere As Font = New Font( "Georgia" , 32, FontStyle.Regular )
g.DrawString ( Lettere( i) , Carattere, Brushes.Red , New PointF( - 10, 16) )
End Using
End Using
ImageList1.Images .Add ( imgbmp)
Next
Panel1.BackColor = Color.Tomato
PictureBox1.BackColor = Color.Navy
Call ToolStrip_Checked( TipoGrafica)
End If
End Sub
Modifica routine poligoni, aggiunta variabile: Pieno=True poligoni pieni, False poligoni vuoti, in 2048+ usata solo con True
Codice sorgente - presumibilmente VB.NET
Private Sub PoligonoRegolare( ByVal gR As Graphics, ByVal Solido As Brush, ByVal MisuraLato As Single, ByVal NumeroLati As Single, ByVal XCentro As Single, ByVal YCentro As Single, ByVal GradiRotazione As Single, ByVal Pieno As Boolean )
'Trasforma i GradiRotazione in Radianti
Dim RadiantiRotazione As Single = GradiRotazione * Math.PI / 180
'Archi del cerchio(IN RADIANTI)entro il quale s'immagina inscritto il poligono,
'occupati dal punto ZERO (minima coordinata Y dell'area di disegno)all'estremo
'finale di ogni lato. Non serve l'estremo dell'ultimo lato, perchè è uguale al
'punto ZERO.
Dim ARCHI As Single = 360 * Math.PI / 180 / NumeroLati
'Dichiara una Matrice con numero elementi pari a NumLati per contenere
'l'arco complessivo(in RADIANTI)occupato dal punto più alto del cerchio
'(zero radianti)ai punti successivi (estremi dei lati).
Dim aArc( NumeroLati) As Single
'Carica la matrice con gli archi complessivi (in radianti) dei suddetti punti
For i As Short = 0 To NumeroLati
aArc( i) = ARCHI * i
Next
' 1)Calcolo del Numero Fisso (serve solo il numero dei lati: NumLati)
Dim nFisso As Single = 0.5 / Math.Tan ( Math.PI / NumeroLati)
' 2)Calcolo Apotema (servono Numero Fisso e Misura del Lato)
Dim Apotema As Single = nFisso * MisuraLato
' 3)Calcolo Raggio del cerchio in cui il poligono si immagina iscritto (è
' anche il raggio del poligono)
Dim Raggio As Single = Math.Sqrt ( Apotema ^ 2 + ( MisuraLato / 2 ) ^ 2 )
'Dichiara una Matrice con numero elementi pari a NumLati per contenere le
'coordinate X di ogni punto
Dim XPunto( NumeroLati) As Single
'Dichiara una Matrice con numero elementi pari a NumLati per contenere le
'coordinate Y di ogni punto
Dim YPunto( NumeroLati) As Single
'Carica le 2 matrici suddette con le relative coordinate X ed Y
For k As Short = 0 To NumeroLati - 1
XPunto( k) = XCentro + Raggio * Math.Sin ( aArc( k) + RadiantiRotazione)
YPunto( k) = YCentro - Raggio * Math.Cos ( aArc( k) + RadiantiRotazione)
Next
'Definisce un'istanza della Classe GraphicsPath, atta a contenere un
' "insieme" di disegni
Dim Percorso As New GraphicsPath
' Crea un Percorso con tutte le linee CONSECUTIVE che costituiscono
' i Lati di un poligono tranne l'ultima, che è aggiunta poi tramite
' "CloseFigure()"
For i As Short = 0 To NumeroLati - 2
Percorso.AddLine ( XPunto( i) , YPunto( i) , XPunto( i + 1) , YPunto( i + 1) )
Next ( i)
'La seg. istruzione chiude il poligono, creando automaticamente l'ultimo lato
Percorso.CloseFigure ( )
If Pieno Then
'DISEGNA IL POLIGONO REGOLARE PIENO(che corrisponde al path appena costruito)
'Solido deve essere di tipo Brush
gR.FillPath ( Solido, Percorso)
Else
'DISEGNA IL POLIGONO REGOLARE VUOTO(che corrisponde al path appena costruito)
Dim Penna As New Pen( Solido) ' conversione da Brush a Pen
'Penna deve essere di tipo Pen
gR.DrawPath ( Penna, Percorso)
End If
End Sub
Ultima modifica effettuata da Carlo il 12/06/2018 alle 21:21
in programmazione tutto è permesso
Ultimo (Member )
Guru
Messaggi: 877
Iscritto: 22/05/2010
@Carlo
Ok modifico il codice
If ok Then GOTO Avanza else GOTO Inizia
Mikelius (Member )
Expert
Messaggi: 525
Iscritto: 14/04/2017
Ecco un aggiornamento della guida.
Manca una trattazione del Salvataggio e revisione della partita.
Dopo la revisionerò tutta (sono sicuro in molti refusi )
Fatemi sapere le vostre impressioni.
e sopratutto cosa vi piace cosa cambiereste.
P.s. @Ultimo,
La mia prefazione è fatta alla meno peggio, se vuoi farla tu una migliore visto che il progetto è partito da te... non mi offendo, anzi XD...
P.s. Questa è la versione chm per metterla dentro il gioco. E' possibile anche il formato pdf, o html (ma non credo che nel sito ci sia il modo di allegare al progetto la guida visionabile in html ).
Inoltre, se il progetto android andrà in porto, la stessa idendica guida è convertibile senza problemi in formato Epub.
Carlo (Member )
Guru
Messaggi: 1345
Iscritto: 29/01/2018
vedo solo la tree view, non vedo i contenuti
in programmazione tutto è permesso
Mikelius (Member )
Expert
Messaggi: 525
Iscritto: 14/04/2017
strano...