C++ Einen Würfel drehen und kippen lassen

Halli Hallo,

ich muss für die Schule einen Würfel programmieren, (wie bei dem Spiel „Nikitin“ mit den Tangram-Würfeln).
Der Würfel hat auf 4 Seiten eine Farbe und auf den anderen 2 Seiten zwei Farben. Nun muss ich diesen Würfel grafisch darstellen und anhand von Buttons soll der Spieler ihn dann drehen (im und gegen den Uhrzeigersinn) und kippen (vorne,hinten, rechts, links) können.
Das Darstellen des Würfels habe ich schon hinbekommen, aber wenn ich dann auf einen Button klicke, kommt eine Fehlermeldung.
Ich bin noch ziemlich neu auf diesem Gebiet, und brauche daher bitte bitte Hilfe.
Mein bisheriger Code ist folgender:

Stein.cpp

//---------------------------------------------------------------------------

#pragma hdrstop

#include „Stein.h“

//---------------------------------------------------------------------------

#pragma package(smart_init)

void Stein::FarbenAuslesen(string Farben[6])
{
for (int iKante=0;iKanteimgWuerfel->Canvas->Brush->Color=Farbe; //Farbe auswählen
TPoint Punkt[3]; //anlegen eines Arrays, vom Datentyp Punkt
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:en->Color=Farbe; //Farbauswahl für den Konturenstift, da man sonst „immer“ Dreiecke sehen würde
switch(iKante)
{
case 0: Punkt[0].x=80;
Punkt[0].y=70;
Punkt[1].x=30;
Punkt[1].y=110;
Punkt[2].x=180;
Punkt[2].y=110;
break;
case 1: Punkt[0].x=30;
Punkt[0].y=110;
Punkt[1].x=180;
Punkt[1].y=110;
Punkt[2].x=230;
Punkt[2].y=70;
break;
case 2: Punkt[0].x=30;
Punkt[0].y=110;
Punkt[1].x=80;
Punkt[1].y=70;
Punkt[2].x=230;
Punkt[2].y=70;
break;
case 3: Punkt[0].x=80;
Punkt[0].y=70;
Punkt[1].x=230;
Punkt[1].y=70;
Punkt[2].x=180;
Punkt[2].y=110;
break;

}
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:olygon(Punkt,2); //2 Dreiecke werden gezeichnet

}
if (iSeite==1) //rechte Seite
{ Form1->imgWuerfel->Canvas->Brush->Color=Farbe;
TPoint Punkt[3];
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:en->Color=Farbe;
switch(iKante)
{
case 0: Punkt[0].x=180;
Punkt[0].y=110;
Punkt[1].x=230;
Punkt[1].y=70;
Punkt[2].x=230;
Punkt[2].y=220;
break;
case 1: Punkt[0].x=180;
Punkt[0].y=110;
Punkt[1].x=180;
Punkt[1].y=160;
Punkt[2].x=230;
Punkt[2].y=220;
break;
case 2: Punkt[0].x=230;
Punkt[0].y=70;
Punkt[1].x=180;
Punkt[1].y=110;
Punkt[2].x=180;
Punkt[2].y=260;
break;
case 3: Punkt[0].x=230;
Punkt[0].y=70;
Punkt[1].x=230;
Punkt[1].y=220;
Punkt[2].x=180;
Punkt[2].y=260;
break;
}
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:olygon(Punkt,2); //2 Dreiecke werden gezeichnet
}
if (iSeite==3) //vordere Seite
{ Form1->imgWuerfel->Canvas->Brush->Color=Farbe;
TPoint Punkt[3];
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:en->Color=Farbe;
switch (iKante)
{
case 0: //Dreieck 1
Punkt[0].x=30;
Punkt[0].y=110;
Punkt[1].x=180;
Punkt[1].y=110;
Punkt[2].x=180;
Punkt[2].y=260;
break;
case 1: //Dreieck 2
Punkt[0].x=30;
Punkt[0].y=110;
Punkt[1].x=30;
Punkt[1].y=260;
Punkt[2].x=180;
Punkt[2].y=260;
break;
case 2: //Dreieck 3
Punkt[0].x=30;
Punkt[0].y=260;
Punkt[1].x=30;
Punkt[1].y=110;
Punkt[2].x=180;
Punkt[2].y=110;
break;
case 3: //Dreieck 4
Punkt[0].x=30;
Punkt[0].y=260;
Punkt[1].x=180;
Punkt[1].y=260;
Punkt[2].x=180;
Punkt[2].y=110;
break;
}
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:olygon(Punkt,2); //2 Dreiecke werden gezeichnet
}
}
}

//Würfel-Konturen, Forderseite
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:en->Width=2; //Stiftdicke
Form1->imgWuerfel->Canvas-&gt:stuck_out_tongue_winking_eye:en->Color=clBlack; //Farbauswahl
Form1->imgWuerfel->Canvas->Rectangle(30,110,180,260); //Vorderseite/Rechteck wird gezeichnet

//Würfel-Konturen, 3-D-Optik
Form1->imgWuerfel->Canvas->MoveTo(30,110);
Form1->imgWuerfel->Canvas->LineTo(80,70);
Form1->imgWuerfel->Canvas->LineTo(230,70);
Form1->imgWuerfel->Canvas->LineTo(180,110);
Form1->imgWuerfel->Canvas->MoveTo(180,260);
Form1->imgWuerfel->Canvas->LineTo(230,220);
Form1->imgWuerfel->Canvas->LineTo(230,70);

}
//-------------------------------------------------

und noch die Main.cpp

//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include „Main.h“
#include"Wuerfel.h"
#include"Stein.h"
#include
#include
#include
#include
using namespace std;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource „*.dfm“
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Wuerfel Zeichnen;
Zeichnen.WuerfelZeichnen();
//Stein Wuerfel;

}
//---------------------------------------------------------------------------

void __fastcall TForm1::cmdUntenClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.KippeUnten();
//Zeichnen.WuerfelZeichnen();

}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmdLinksClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.KippeLinks();
//Zeichnen.WuerfelZeichnen();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmdObenClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.KippeOben();
//Zeichnen.WuerfelZeichnen();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmdRechtsClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.KippeRechts();
//Zeichnen.WuerfelZeichnen();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmdDreheMitUhrClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.DreheMitUhr();
//Zeichnen.WuerfelZeichnen();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::cmdDreheGegenUhrClick(TObject *Sender)
{
Stein Bewegung;
//Wuerfel Zeichnen;

Bewegung.DreheGegenUhr();
//Zeichnen.WuerfelZeichnen();
}
//--------------------------------------------------

Vielen Dank schon mal für eure Hilfe!

Liebe Grüße
Mandy

Hallo,

Das Darstellen des Würfels habe ich schon hinbekommen, aber
wenn ich dann auf einen Button klicke, kommt eine
Fehlermeldung.

Was denn fuer eine?

void Stein::KippeLinks()
{ Wuerfel.WuerfelZeichnen();

//Seite 0 in tmp speichern
tmp[0][0]=Seite[0][0];
tmp[0][1]=Seite[0][1];
tmp[0][2]=Seite[0][2];
tmp[0][3]=Seite[0][3];
//Seite 0 wird Seite 1 zugewiesen
Seite[0][0]=Seite[1][0];
Seite[0][1]=Seite[1][1];
Seite[0][2]=Seite[1][2];
Seite[0][3]=Seite[1][3];
//Seite 1 wird Seite 2 zugewiesen
Seite[1][0]=Seite[2][0];
Seite[1][1]=Seite[2][1];
Seite[1][2]=Seite[2][2];
Seite[1][3]=Seite[2][3];
//Seite 2 wird Seite 4 zugewiesen
Seite[2][0]=Seite[4][0];
Seite[2][1]=Seite[4][1];
Seite[2][2]=Seite[4][2];
Seite[2][3]=Seite[4][3];
//Seite 4 wird Seite 0 (tmp) zugewiesen
Seite[4][0]=tmp[0][0];
Seite[4][1]=tmp[0][1];
Seite[4][2]=tmp[0][2];
Seite[4][3]=tmp[0][3];

/* //Seite 3 dreht sich gegen den Uhrzeigersinn
tk[3][0]=Seite[3][0];
Seite[3][0]=Seite[3][3];
Seite[3][3]=Seite[3][2];
Seite[3][2]=Seite[3][1];
Seite[3][1]=tk[3][0];
//Seite 5 dreht sich im Uhrzeigersinn
tk[5][0]=Seite[5][0];
Seite[5][0]=Seite[5][1];
Seite[5][1]=Seite[5][2];
Seite[5][2]=Seite[5][3];
Seite[5][3]=tk[5][0]; */

Wuerfel.WuerfelZeichnen();
}

Solche Spaesse kannst du dir sparen, wenn du die Drehung als Matrixmultiplikation darstellst.

Gruesse,
Moritz