wxWidgets

Numeri casuali

Avviare un nuovo progetto wxDev-C++. Denominarlo Dadi e salvarlo nella cartella Dadi.

Inserire un wxFlexGridSizer. Questo sizer dispone i componenti su una matrice, consentendo di avere righe e colonne di larghezza diversa. Modificare il numero di colonne scrivendo 3 sulla riga della proprietà Columns.

Sulla prima riga disporre 3 wxButton, sulla seconda riga inserire due wxMemo e un wxPanel.

Associare i seguenti gestori di evento ai pulsanti:

Lancio dei dadi:

Il primo pulsante mostra l'esito del lancio di due dadi nel primo componente wxMemo.

  int k, d1, d2, s, cont[11], i;
    
  wxString dadostr;
  WxMemo1->Clear();
  for (k=0; k<11; k++) cont[k]=0;

  srand ( time(NULL) );

  for (k=1; k<=10; k++) {
    d1 = rand()%6+1;
    d2 = rand()%6+1;
    s = d1+d2;
    
    dadostr.Printf(_("%d"), d1);
    WxMemo1->AppendText(dadostr + _(" + "));
    
    dadostr.Printf(_("%d"), d2);
    WxMemo1->AppendText(dadostr + _(" = "));
    
    dadostr.Printf(_("%d"), s);
    WxMemo1->AppendText(dadostr + _("\n"));
    cont[s-2]++;
  }

Probabilità dell'esito del lancio di due dadi

Vengono effettuate 1000 lanci e, per ognuno, si conta quante volte si è osservata quella somma. Alla fine si traccia l'istogramma tramite un numero di asterischi proporzionale al numero di volte in cui è osservato ciascuna somma.

  int k, cont[11], d1, d2, s;
  double fattoreScala;
     
  wxString riga;
  WxMemo2->Clear();
  for (k=0; k<11; k++) cont[k]=0;
    for (k=1; k<=1000; k++) {
      d1 = rand()%6+1;
      d2 = rand()%6+1;
      s = d1+d2;
      cont[s-2]++;
    }
    for(k=0; k<11; k++){
      riga.Printf(_("%2d: %d\n"), (k+2), cont[k]);
      WxMemo2->AppendText(riga);
    }
// istogramma
  fattoreScala = (double) (30.0/cont[5]);
  for (k=0; k<11; k++) {
    riga.Printf(_("%2d: "), (k+2));
    WxMemo2->AppendText(riga);
    for (int i=0; i<fattoreScala*cont[k]; i++) 
       WxMemo2->AppendText(_("x"));
    WxMemo2->AppendText(_("\n"));
  }

Immagini

Il terzo pulsante lancia i dadi e mostra le loro immagini nel wxPanel.

Quando si devono caricare immagini bisogna inizializzare i gestori formati. Alla fine della funzione CreateGUIControls aggiungere la riga:

  wxInitAllImageHandlers();

Al gestore dell'evento associato al terzo pulsante aggiungere le seguenti righe:

  wxString punti[] ={_("uno.png"), _("due.png"), _("tre.png"), _("quattro.png"), _("cinque.png"), _("sei.png")};

  wxClientDC dc(WxPanel1);
  int dado = (int)rand()%6;

  wxBitmap d1(punti[dado], wxBITMAP_TYPE_PNG);
  dc.DrawBitmap(d1, 0, 0, true);

  dado = (int)rand()%6;
  wxBitmap d2(punti[dado], wxBITMAP_TYPE_PNG);
  dc.DrawBitmap(d2, 70, 0, true);

Tramite un'applicazione grafica creare le sei immagini dei dadi, in formato png e dimensione 70x70. Oppure scaricare le seguenti: