Ich versuche nun schon seit ein paar Wochen ein Spiel zu programmieren. Ich bin zwar fortgeschrittener Programmierer aber kein wirklicher Experte.
In meinem Programm möchte ich Felder erstellen, die nach Erstellung völlig verfügbar sind und erst bei Beendigung des Programms aus dem Speicher gelöscht werden. Ich habe bereits versucht meine eigene Klasse zu schreiben:
[jfields.h]
#include
class jFields
{
TImage \*PaintRect;
static int count;
TColor FieldColor;
int FieldX;
int FieldY;
public:
int WideSet;
int isSet;
jFields();
jFields(int FX, int FY, int FSet, TColor FCol);
~jFields();
void SetPos(int setfx, int setfy);
void SetColor(TColor fsetcolor);
void Paint();
TColor getColor();
static int Count(void);
void Parent();
};
[/jfields.h]
[jfields.cpp]
#include
TColor myLightGreen = (TColor)0x00008800;
TColor myGreen = (TColor)0x00006600;
int jFields::count = 0;
jFields::jFields() :
FieldColor(myLightGreen), WideSet(10), isSet(0), FieldX(0), FieldY(0)
{
// PaintRect = new TImage();
++count;
}
jFields::jFields(int FX, int FY, int FSet, TColor FCol) :
WideSet(10), FieldX(FX), FieldY(FY), isSet(FSet), FieldColor(FCol)
{
// PaintRect = new TImage;
++count;
}
jFields::~jFields()
{
--count;
}
void jFields::SetPos(int setfx, int setfy)
{
FieldX = setfx; FieldY = setfy;
}
void jFields::SetColor(TColor fsetcolor)
{
FieldColor = fsetcolor;
}
void jFields::stuck\_out\_tongue:aint()
{
PaintRect-\>Left = 0;
PaintRect-\>Top = 0;
PaintRect-\>Height = 20;
PaintRect-\>Width = 40;
TPoint BuildGridPoint[4];
BuildGridPoint[0].x = 0;
BuildGridPoint[0].y = 10;
PaintRect-\>Canvas->:stuck\_out\_tongue\_winking\_eye:enPos = BuildGridPoint[0];
PaintRect-\>Canvas->:stuck\_out\_tongue\_winking\_eye:en-\>Color = myLightGreen;
PaintRect-\>Canvas-\>Brush-\>Color = myGreen;
BuildGridPoint[1].x = 20; BuildGridPoint[1].y = 0;
BuildGridPoint[2].x = 40; BuildGridPoint[2].y = 10;
BuildGridPoint[3].x = 20; BuildGridPoint[3].y = 20;
BuildGridPoint[4].x = 0; BuildGridPoint[4].y = 10;
PaintRect-\>Canvas->:stuck\_out\_tongue\_winking\_eye:olyline(BuildGridPoint, 4);
PaintRect-\>Update();
PaintRect-\>Show();
}
TColor jFields::getColor()
{
return FieldColor;
}
int jFields::Count()
{
return count;
}
[/jfields.cpp]
Wie man Sieht habe ich bereits „PaintRect = new TImage“ herauskommentiert, da dies nicht funktioniert. Ein „new TImage(bla)“ in der Funktion Paint() hat zwar dazu geführt, dass das Programm ausgeführt werden kann, jedoch springt der debugger an, wenn ich Paint() tatsächlich aufrufe, weil ich wahrscheinlich nicht das richtige Objekt in die Klammern schreibe. Ist es möglich, der Klasse per Parameter das richtige Objekt zu übergeben, sodass ich dort das neue Image erstellen kann? Ich sehe momentan TImage und TBitmap als einzig vernünftige Lösungen um den in der Funktion erstellten Salmi auf die ganze Spielfläche verteilt ohne Lücken zu zeichnen, wenn ich ihn noch weiter verwenden will. Ein Formular wäre wahrscheinlich keine gute Lösung und selbst dieses zu erstellen scheint mir derweil noch zu kompliziert. BITTE HELFT MIR! - euers joph`
P.S.: Ich benutze Borland C++ Builder 6