Autore Topic: Caricare una classe da disco  (Letto 699 volte)

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Caricare una classe da disco
« il: 22 Maggio 2015, 21:04:21 »
La richiesta può sembrare bizzarra, ma una classe è scritta su disco come un normale file di testo.
E' possibile leggere da programma una classe preesistente sul disco e da quella creare un oggetto?
Class.Load serve a questo o sto dicendo una fesseria atomica?
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #1 il: 22 Maggio 2015, 21:31:16 »
Devo aver scritto qualcosa nella WIKI, ma non riesco a ritrovarla....   :hard:

La Classe Class consente di richiamare mediante il metodo .Load() una Classe specifica, da indicarsi nell'unico parametro previsto per quel metodo.

Consente in particolare di creare un oggetto appartenente alla Classe richiamata e di gestirlo normalmente come Object.

Facciamo un esempio:
Codice: gambas [Seleziona]
Public Sub Form_Open()

  Dim s As String
  Dim ob As Object

' Mostra tutte le proprietà, metodi e gli eventi che appartengono alla Classe richiamata nel metodo ".Load()":
  For Each s In Class.Load("Button").Symbols
    Print s
  Next

' Creiamo un oggetto appartenente, ad esempio, alla Classe "Button":
    ob = Class.Load("Button").New([Me])
    
    With ob
      .X = 30
      .Y = 50
      .W = 80
      .H = 40
      .Text = "Tasto"
    End With
    
' Assegnamo la variabile di tipo "Oggetto" ad un gruppo per la sollevazione degli eventi previsti dalla Classe, alla quale l'oggetto appartiene:
    Object.Attach(ob, Me, "TASTO")

End


Public Sub TASTO_Click()   ' Proviamo l'evento Click()
  
  Print "Tasto cliccato"
  
End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #2 il: 22 Maggio 2015, 21:43:17 »
...ma ci consente, ad esempio, di sapere se su un Form è presente, ed eventualmente in che quantità, qualche oggetto appartenente alla Classe specificata dal metodo .Load().

Come esempio poniamo sul Form tre Button e due Label, poi scriviamo questo codice:
Codice: gambas [Seleziona]
Public Sub Form_Open()

 Print "Sul Form sono presenti: \n"
  With Class.Load("Button")
    Print "  "; .Name; "   n. "; .Count
    Print "che appartengono al componente: "; .Component.Name
  End With
  
 With Class.Load("Label")
   Print "\n  "; .Name; "   n. "; .Count
   Print "che appartengono al componente: "; .Component.Name
 End With

End
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #3 il: 23 Maggio 2015, 17:11:21 »
Non è proprio quello che intendevo io.
Mi spiego meglio: voglio tentare (se ci riuscirò) a fare una versione in Gambas di questo:

http://corewar.co.uk/probots/index.htm

che si chiamerà ovviamente G-robots. ;D
Parto dalla versione in Pascal invece di quella originale in C perchè ha una sintassi più vicina al Basic e mi crea meno problemi di traduzione.
La mia idea è quella di avere nel programma una classe base di nome Robot non instanziabile da cui ogni concorrente crea, tramite l'ereditarietà, una sua classe Robot, alla quale aggiunge tutte le strategie di battaglia che preferisce, poi tramite Dialog o qualcosaltro all'inizio del gioco ogni concorrente carica nel gioco il suo robot preferito.
Spero di essermi spiegato. :)
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #4 il: 23 Maggio 2015, 21:07:22 »
...alla quale aggiunge tutte le strategie di battaglia che preferisce, poi tramite Dialog o qualcosaltro all'inizio del gioco ogni concorrente carica nel gioco il suo robot preferito.

Cioè tu vorresti salvare in un file esterno al programma la Classe specifica "Robot" come istanziata dal giocatore ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #5 il: 24 Maggio 2015, 00:35:38 »
Ogni giocatore deve scrivere la sua classe e chiamarla come gli pare, che deve iniziare con:

Inherits Robot

che è la classe genitrice. Poi in _new() mette il nome del robot, poi deve modificare una sub di nome Main presente nella classe genitrice che è quella che verrà chiamata dal programma principale ogni volta che il robot ha il suo turno e che deve contenere la strategia di combattimento. Poi il giocatore, se vuole, può aggiungere altre ruotine a suo piacimento, da chiamare da Main per gestire il movimento, il radar, quando sparare ecc.
All'inizio il gioco chiede ad ogni giocatore la classe da caricare per poi creare l'oggetto relativo.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #6 il: 24 Maggio 2015, 00:52:45 »
Ogni giocatore deve scrivere la sua classe e chiamarla come gli pare, che deve iniziare con:

Inherits Robot

che è la classe genitrice. Poi in _new() mette il nome del robot, poi deve modificare una sub di nome Main presente nella classe genitrice che è quella che verrà chiamata dal programma principale ogni volta che il robot ha il suo turno e che deve contenere la strategia di combattimento. Poi il giocatore, se vuole, può aggiungere altre ruotine a suo piacimento, da chiamare da Main per gestire il movimento, il radar, quando sparare ecc.
All'inizio il gioco chiede ad ogni giocatore la classe da caricare per poi creare l'oggetto relativo.

...ma che deve essere un programmatore !?   :rotfl:



Scusami.... ma m'è scappato !   ;D
Insomma, tu vuoi sostanzialmente che il giocatore dia dei parametri e che il programma crei (istanzi) sulla base di quei parametri una Classe modello.

  
« Ultima modifica: 24 Maggio 2015, 00:57:19 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #7 il: 24 Maggio 2015, 01:14:39 »
...ma che deve essere un programmatore !?   :rotfl:

E' un gioco per programmatori. Nelle versioni originali in C e Pascal i giocatori dovevano creare una script da dare in pasto al programma. :)
Citazione
Insomma, tu vuoi sostanzialmente che il giocatore dia dei parametri e che il programma crei (istanzi) sulla base di quei parametri una Classe modello.

Non solo, deve gestire la velocità e la direzione del robot, la velocità di rotazione del radar, quando sparare, cosa fare se si viene colpiti e sopratutto gestire bene il carburante, perchè se finisce il robot non può fare più niente e viene massacrato dagli altri... :D
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #8 il: 24 Maggio 2015, 01:19:07 »
...ma che deve essere un programmatore !?   :rotfl:

E' un gioco per programmatori. Nelle versioni originali in C e Pascal i giocatori dovevano creare una script da dare in pasto al programma. :)
Citazione
Insomma, tu vuoi sostanzialmente che il giocatore dia dei parametri e che il programma crei (istanzi) sulla base di quei parametri una Classe modello.

Non solo, deve gestire la velocità e la direzione del robot, la velocità di rotazione del radar, quando sparare, cosa fare se si viene colpiti e sopratutto gestire bene il carburante, perchè se finisce il robot non può fare più niente e viene massacrato dagli altri... :D

1) la cosa che mi stimola non è il gioco in sé, ma la procedura con il codice da realizzare (come creare di sana pianta a posteriori una Classe da un breve modello);

2) ho visto la pagina da te segnalata, ma non sono riuscito a trovare il sorgente scritto in C. Puoi trovarlo ?
« Ultima modifica: 24 Maggio 2015, 01:20:43 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #9 il: 24 Maggio 2015, 11:27:56 »
Beh, bastava guardare nell'indice a sinistra della pagina...: :)

http://corewar.co.uk/crobots/index.htm
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.307
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #10 il: 24 Maggio 2015, 16:31:54 »
Sì, sono andato a vedere, ma nei file compressi non ci sono i sorgenti in C: è tutta roba coperta da diritto d'autore; c'è sostanzialmente solo l'eseguibile per winzoz .exe. 
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Caricare una classe da disco
« Risposta #11 il: 25 Maggio 2015, 17:01:49 »
Questa comunque, è la classe base per creare i propri robot:

Codice: [Seleziona]
' Gambas class file

'questa è la classe genitrice per creare i propri robot
Export
Create Private 'non istanziabile
Property Read Nome As String 'nome del robot
Property Posx As Short 'posizione x e y nel campo di battaglia
Property Posy As Short
Property Velocita As Byte 'velocità del robot
Property Direzione As Short 'direzione di marcia del robot in gradi
Property Scansione As Short 'angolo di scansione del radar in gradi
Property Barriera As Boolean 'la barriera è alzata?
Property Cammuffo As Boolean 'l'invisibilità è attivata?
Private $Nome As String
Private $Posx As Short
Private $Posy As Short
Private $Velocita As Byte
Private $Direzione As Short
Private $Scansione As Short
Private $Barriera As Boolean
Private $Cammuffo As Boolean

Private Function Nome_Read() As String
Return $Nome
End

Private Sub Velocita_Write(Value As Byte)
$Velocita = Value
End

Private Function Velocita_Read() As Byte
Return $Velocita
End

Private Function Direzione_Read() As Short
Return $Direzione
End

Private Sub Direzione_Write(Value As Short)
$Direzione = Value
End

Private Function Scansione_Read() As Short
Return $Scansione
End

Private Sub Scansione_Write(Value As Short)
$Scansione = Value
End

Private Function Barriera_Read() As Boolean
Return $Barriera
End

Private Sub Barriera_Write(Value As Boolean)
$Barriera = Value
End

Private Function Cammuffo_Read() As Boolean
Return $Cammuffo
End

Private Sub Cammuffo_Write(Value As Boolean)
$Cammuffo = Value
End

Private Function Posx_Read() As Short
Return $Posx
End

Private Sub Posx_Write(Value As Short)
$Posx = Value
End

Private Function Posy_Read() As Short
Return $Posy
End

Private Sub Posy_Write(Value As Short)
$Posy = Value
End

Public Sub Main()
'qui va messa la strategia di combattimento
End

Piuttosto semplice, ma è solo uno "scheletro" che ognuno deve personalizzare.
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.