# Zufallwürfel mit Processing 2



## Starskyone (5. November 2013)

Guten Tag,

ich hätte eine Frage bezüglich der Visuellen Ausgabe (2d) von einem Zufallswürfel in Processing 2.
Gerne würde ich die Ausgabe der Würfelaugen zentral in einem 500*500 Feld haben, allerdings komme ich nicht darauf wie dies zu bewerkstelligen ist.
Bisher kommen die einzelnen Augen einfach nur innerhalb des Feldes, nicht aber zentral.
Wäre nett wenn einer drüber schauen könnte und mir vielleicht sogar beim lösen meines Problems helfen kann.

Ich habe folgende Aufagebnstellung erhalten:

a) Visualisierung der Augen eines 6-seitigen Würfels. Welche Augenzahl dargestellt werden soll, wird über einen Parameter vorgegeben. Die Darstellung erfolgt im Ausgabefenster.
b) Wurf eines 6-seitigen Würfels, so dass eine Zufallszahl zwischen 1 und 6 (1 und 6 einge- schlossen) bestimmt wird.


Hier ist mein dazugehöriger Programmcode:

```
int b = int(random(6)); 

void setup() {
    size(500, 500);
    background(0);
    }

void draw() {
int a=50 ;
int c=50 ;
int v=60 ;
int d=a  ;
int e=c  ;
 if (b<2) {
    rect (a,c,50,50,7) ;
  } else if (b<3) {
     for (int y=1;y<b+1;y=y+1) {
       a=a+v    ;
       c=c+v    ;
       rect (a,c,50,50,7);
   }
   }else if (b<4) {
     for (int y=1;y<b+1;y=y+1) {
       a=a+v    ;
       c=c+v    ;
       rect (a,c,50,50,7);
   }
   }else if (b<5) {
     for (int y=3;y<b+1;y=y+1) {
       a=a+v    ;
       rect (a,c,50,50,7);
       rect (a,c+v,50,50,7);
   }
   }else if (b<6) {
     for (int y=4;y<b+1;y=y+1) {
       a=a+v+v  ;
       rect (a,c,50,50,7);
       rect (a,c+v,50,50,7);
       rect (d+v+v*2,e+e/2,50,50,7);
}
   }else if (b<7) {
     for (int y=3;y<b;y=y+1) {
       c=c+v    ;
       rect (a+v,c,50,50,7);
       rect (a,c,50,50,7);
}
}
}
```


----------



## HonniCilest (6. November 2013)

Mal dir doch den Würfel z.B. auf Millimeterpapier einmal auf, wie du die Augen hier verteilen würdest.
Demnach gibt es 7 Kästen, die jenachdem zu malen oder nicht zu malen sind, richtig?

Ich hätte zuvor ein paar Fragen, über die du nachdenken solltest:
-Warum verwendest du nur nichtsaussagende Variablen? Das ist ein furchtbarer Buchstabensalat, der für andere kaum zu erfassen ist. Variablennamen der Länge 1 sind ok, wenn sie gängig sind, wie n für Anzahl/natürliche Zahl, x und y für Funktionen / Koordinaten, h für Höhe, r für Radius, d für Durchmesser etc.
- Warum verwendest du nur den '<'-Operator? Was ist mit '<=' und '=='? '<' ist hier in der Bedingung bei den if-Anweisungen und for-Anweisungen sehr unschön.
- Warum sparst du so an Leerzeichen? Das sieht alles so gequetscht aus und macht es schlechter lesbar für andere.

Ich schlage dir folgende Variablen vor:
- x, y: Breite bzw. Höhe des umfassenden Feldes (500, 500 in deinem Fall)
- h: Höhe von einem Auge (in deinem Fall 50)
- n: Anzahl Augen (in deinem Fall 1-6)

Diese 4 Variablen sind vollkommen ausreichend, ich möchte dir am Beispiel mittleres Auge zeigen wieso.
Das mittlere Auge ist relevant für n==1, n==3 und n==5.

Die ersten 4 Parameter von rect bedeuten sicher folgendes:
param1: x der linken oberen Ecke des Rechtecks
param2: y der linken oberen Ecke des Rechtecks
param3: Länge des Rechtecks in x-Richtung
param4: Länge des Rechtecks in y-Richtung

Demnach gilt für die Parameter:
param1: (x / 2) - (h / 2)
param2: (y / 2) - (h / 2)
param3: h
param4: h

Persönlich finde ich Schleifen hier ungünstig. Ich würde bevorzugen alle rect für die 7 Augen auszuprogrammieren und diese jeweils mit einer Oder-Verknüpfung in einer If-Anweisung zu versehen.

Mit dem oben gewählten Beispiel:

```
if (n==1 || n==3 || n==5)
  rect(/*Werte siehe oben*/);
```


----------

