Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
15 Il Gioco - Aggiunte

15 Il Gioco

Sommario | Admin | Forum | Bugs | Todo | Files

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 1:43
Sabato, 24/03/2018
Prima di realizzare il Gioco del 15 con lo scorrimento delle tessere, avevo immaginato il programma senza lo scorrimento.
Non lo avevo scritto, ma era abbastanza corto, ora l'ho scritto.

Codice minimale per il Gioco del 15, nulla da inserire sul form, anche la grafica è gestita dal codice.

Codice sorgente - presumibilmente VB.NET

  1. Imports System.Collections
  2.  
  3. Public Class Form1
  4.     Dim Mosse, Ciclo As Short
  5.     Dim lTasto(16) As Label
  6.     Dim rnd As New Random
  7.     Dim aControllo = New Integer(15, 3) {{1, 4, 0, 0}, {0, 2, 5, 1}, {1, 3, 6, 2}, {2, 7, 3, 3},
  8.                                          {0, 5, 8, 4}, {4, 1, 6, 9}, {5, 2, 7, 10}, {11, 3, 6, 7},
  9.                                          {4, 9, 12, 8}, {8, 5, 10, 13}, {14, 9, 6, 11}, {15, 10, 7, 11},
  10.                                          {8, 13, 12, 12}, {12, 9, 14, 13}, {13, 10, 15, 14}, {14, 11, 15, 15}}
  11.  
  12.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  13.         ' oggetti grafici sul form
  14.         For Tessere = 0 To 16
  15.             lTasto(Tessere) = New Label ' creo una collezione di 17 labels
  16.             lTasto(Tessere).Size = New Size(55, 55)
  17.             lTasto(Tessere).Text = Tessere + 1
  18.             lTasto(Tessere).Location = New Size(56 * (Tessere Mod 4) + 33, 56 * (Math.Ceiling(Tessere \ 4)) + 40)
  19.             lTasto(Tessere).Tag = Tessere : lTasto(Tessere).BackColor = Color.White
  20.             lTasto(Tessere).BorderStyle = BorderStyle.FixedSingle
  21.             lTasto(Tessere).TextAlign = ContentAlignment.MiddleCenter
  22.             lTasto(Tessere).Font = New Font("Comic Sans MS", 12, FontStyle.Bold)
  23.             Me.Controls.Add(lTasto(Tessere))
  24.             AddHandler lTasto(Tessere).Click, AddressOf lTasto_OnClick ' evento click
  25.         Next Tessere
  26.         lTasto(15).Text = " " : lTasto(15).BackColor = Color.LightGray
  27.         lTasto(16).AutoSize = True : lTasto(16).Location = New Size(35, 10)
  28.         Mescola()
  29.     End Sub
  30.  
  31.     Private Sub lTasto_OnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
  32.         Dim Trovato As Short = 99
  33.         If sender.tag = 16 Then Mescola() : Exit Sub ' label di intestazione
  34.         For Me.Ciclo = 0 To 3 ' cerco la casella vuota usando la matrice di controllo
  35.             If lTasto(aControllo(sender.tag(), Ciclo)).Text = " " Then Trovato = Ciclo
  36.         Next
  37.         If Trovato <> 99 Then ' scambio il contenuto dei tasti
  38.             lTasto(aControllo(sender.tag(), Trovato)).Text = lTasto(sender.tag).Text
  39.             lTasto(aControllo(sender.tag(), Trovato)).BackColor = lTasto(sender.tag).BackColor
  40.             lTasto(sender.tag).Text = " " : lTasto(sender.tag).BackColor = Color.LightGray
  41.             Mosse += 1 : Controllo()
  42.         End If
  43.     End Sub
  44.  
  45.     Sub Controllo()
  46.         Dim Situazione As String = ""
  47.         For Me.Ciclo = 0 To 15
  48.             Situazione = Situazione & lTasto(Ciclo).Text
  49.         Next Ciclo
  50.         If Situazione = "123456789101112131415 " Or Situazione = " 123456789101112131415" Then
  51.             lTasto(16).Text = "Hai vinto in " & Mosse & " mosse"
  52.         Else
  53.             lTasto(16).Text = "Gioco del 15 mossa N. " & Mosse
  54.         End If
  55.     End Sub
  56.  
  57.     Sub Mescola()
  58.         Dim Numero, mtdati(15), Ciclo1 As Short
  59.         For Me.Ciclo = 0 To 15 ' per 16 caselle
  60.             Numero = rnd.Next(1, 17) : mtdati(Ciclo) = Numero : lTasto(Ciclo).Text = Numero
  61.             If Numero = 16 Then
  62.                 lTasto(Ciclo).Text = " " : lTasto(Ciclo).BackColor = Color.LightGray
  63.             Else
  64.                 lTasto(Ciclo).Text = Numero : lTasto(Ciclo).BackColor = Color.White
  65.             End If
  66.             For Ciclo1 = 0 To Ciclo - 1
  67.                 If Numero = mtdati(Ciclo1) Then Ciclo -= 1
  68.             Next Ciclo1
  69.         Next Ciclo
  70.         lTasto(16).Text = "   Gioco del 15 [mescola]  "
  71.         Mosse = 0
  72.     End Sub
  73. End Class


Ultima modifica effettuata da Carlo il 28/03/2018 alle 4:33


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 7:25
Martedì, 27/03/2018
Inserita Versione 3.3.00.
Corretto piccolo bug e il puzzle ora può avere un massimo di colonne/righe = 8


Carlo ha allegato un file: 15 Il Gioco.jpg (143904 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Carlo il 29/03/2018 alle 10:18


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2339
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:07
Giovedì, 29/03/2018
fantastico 63 numeri, è da provare.

Vediamo in quanto tempo lo risolvo


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 10:24
Giovedì, 29/03/2018
:k: ci faccia sapere...


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 14:03
Venerdì, 30/03/2018
Testo quotato

Postato originariamente da Thejuster:

fantastico 63 numeri, è da provare.

Vediamo in quanto tempo lo risolvo



Non ci ha fatto sapere, io ho pronto il 10x10.
Esatto 99 numeri, ho cercato in giro e non esiste!!!
Datemi conferma se sono l'unico imbranato che ha programmato il gioco del 15 con 99 numeri.


Carlo ha allegato un file: 15 Il Gioco.jpg (195104 bytes)
Clicca qui per guardare l'immagine


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2339
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:05
Venerdì, 30/03/2018
non sò perché ma windows defender me lo rileva come virus.
forse è il zip non saprei.

Cmq ti risparmio la noia di doverti creare ogni tessera tramite immagine.

(Libreria Tessera)
https://mega.nz/#!IgwBwL5S!elBTvYxTrOghs_3BskCQWCC1OZiZwFop ...

Aggiungi la libreria al progetto

Invece di aggiungere una normalissima pictureBox
Aggiungi il componente Tessera

Codice sorgente - presumibilmente VB.NET

  1. '                                                W    H  N       ENUM
  2.         Dim tess As New Tessere.Tessera(55, 55, 8, Tessere.Tessera.GrandientMode.Verticale)
  3.         tess.Gradiente = True
  4.         tess.ColoreGradiente1 = Color.Red
  5.         tess.ColoreGradiente2 = Color.White



W = Larghezza (default 55)
H = Altezza ( default 55)
N = Numero da visualizzare
Enumeratore per il tipo di sfumatura
ed altri campi opzionali.


l'Handle lo gestisci identico alla picture.


Anziché fare

Codice sorgente - presumibilmente VB.NET

  1. For Tessere = 0 To NumColonne * NumRighe - 2
  2.             pictTasto(Tessere) = New PictureBox ' creo le n. PictureBox
  3.             pictTasto(Tessere).Width = DimTessera
  4.             pictTasto(Tessere).Height = DimTessera
  5.             pictTasto(Tessere).SizeMode = PictureBoxSizeMode.Zoom
  6.             pictTasto(Tessere).Name = "Tes" & Tessere.ToString ' parametro inutilizzto
  7.             pictTasto(Tessere).Image = ImageList1.Images.Item(Tessere) ' associazione indice, immagine
  8.             pictTasto(Tessere).Left = DimTessera * (Tessere Mod NumColonne) ' ccordinata X calcolata
  9.             pictTasto(Tessere).Top = DimTessera * (Math.Ceiling(Tessere \ (NumRighe + NumColonne - NumRighe))) ' coordinata Y calcolata
  10.             pictTasto(Tessere).Tag = Tessere + 1 ' corrispondenza immagine con numero rappresentato
  11.             Me.PictureBox1.Controls.Add(pictTasto(Tessere)) ' aggiungo a PictureBox1 usato come contenitore per avere le coordinate invariate anche se si sposta il puzzle nel form
  12.             AddHandler pictTasto(Tessere).Click, AddressOf PictTasto_OnClick ' permette di avere l'evento click
  13.             SequenzaGenerata = SequenzaGenerata & (Tessere + 100 + 1).ToString.Substring(1, 2) 'sequenza delle 15 caselle il +100 per aggiungere lo zero = Format(tessere, "00"), in Vb.NET?
  14.         Next Tessere



ti basterà inserire quello.
così eviti anche di disegnare le immagini una per una ed appesantire il progetto.

ho fatto una semplice generazione
alla fine ecco il risultato

https://s9.postimg.org/wck3yxftr/Cattura.png

puoi anche cambiare i colori, la grandezza del font etc.





Ultima modifica effettuata da Thejuster il 30/03/2018 alle 22:18


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 3:19
Sabato, 31/03/2018
Testo quotato

Postato originariamente da Thejuster:
Cmq ti risparmio la noia di doverti creare ogni tessera tramite immagine.

(Libreria Tessera)
https://mega.nz/#!IgwBwL5S!elBTvYxTrOghs_3BskCQWCC1OZiZwFop ...

Aggiungi la libreria al progetto

Invece di aggiungere una normalissima pictureBox
Aggiungi il componente Tessera



Sei sempre pronto a stimolare la mente.

Non ho eseguito il tuo consiglio di aggiungere il componente tessera perché finché posso mi piace fare da me.

Quando ho disegnato tutti i tasti in maniera ripetitiva, "sentivo" che qualcosa non andava, anche se mi giustificavo perché volevo un tasto personalizzato, e tu me ne hai dato conferma, disegnare tutti quei tasti era "sbagliato".

Ora ho disegnato solo lo sfondo del tasto con photoshop e l'ho caricato sul background delle pictureboxs poi ho creato delle bitmaps con il numero con effetto ombreggiato usando DrawStrig, e riaggiunto alle picturebox.image:

Codice sorgente - presumibilmente VB.NET

  1. Dim imgbmp As Bitmap = Nothing
  2. Dim pictTasto(100) As PictureBox
  3.  
  4. ' ciclo for tessere
  5.  
  6. pictTasto(Tessere).BackgroundImage = ImageList1.Images.Item(0) ' sfondo
  7.  
  8. imgbmp = New Bitmap(DimTessera, DimTessera)
  9.    Using g As Graphics = Graphics.FromImage(imgbmp)
  10.       g.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit
  11.       Dim Testo As String = Tessere + 1.ToString
  12.       If Testo.Length = 1 Then Testo = " " & Testo  'centratura.
  13.       Using Carattere As Font = New Font("Arial", DimTessera \ 2, FontStyle.Regular)
  14.          ' prima di scrivere il numero giallo chiaro, lo scrivo spostato nero per effetto ombra
  15.          g.DrawString(Testo, Carattere, Brushes.Black, New PointF(2, DimTessera / 8 + 2))
  16.          g.DrawString(Testo, Carattere, Brushes.LightYellow, New PointF(0, DimTessera / 8))
  17.       End Using
  18.    End Using
  19. pictTasto(Tessere).Image = imgbmp
  20.  
  21. ' next tessere


Il risultato è che i tasti hanno ancora l'aspetto personalizzato e allo zoom restano nitidi, ma l'exe è diventato di soli 64k, grazie per il consiglio.

il link per scaricare il progetto:
http://www.pierotofy.it/pages/projects/files.php?id=665

Testo quotato

Postato originariamente da Thejuster:
non sò perché ma windows defender me lo rileva come virus.
forse è il zip non saprei.


Mi controlli se il solo .exe ti dice che è un virus?

Ultima modifica effettuata da Carlo il 27/02/2023 alle 9:34


in programmazione tutto è permesso
PM Quote
Avatar
Carlo (Member)
Guru^2


Messaggi: 1423
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:00
Sabato, 22/08/2020
Ver 5.1, tolta dipendenza Microsoft PowerPack

il link per scaricare il progetto:
http://www.pierotofy.it/pages/projects/files.php?id=665

Ultima modifica effettuata da Carlo il 22/08/2020 alle 16:25


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo