fh_study
Erfahrenes Mitglied
Hallo zusammen,
als erstes muss ich anmerken, dass ich mich erst heute in ms vc++ eingearbeitet habe. Also bitte über ganz dumme Fehler hinweg sehen.
Ich bin grad dabei ein kleines Übungsprogramm (für's Studium) zu schreiben, welches eigentlich nichts anderes können soll als dieses berühmte Verschiebespiel darzustellen, sprich: in einer 4 mal 4 Matrix sind 15 Button's und 1 Feld frei. In das freie Feld sollen die Button's "hineingeschoben" werden können.
Nun mein Problem:
Habe zunächst eine Funktion geschrieben, die die 15 Buttons willkürlich anordnet:
dann eine, die die neue Position des zu verschiebenden Buttons und die neue Position des leeren Feldes nach einem Klick auf den entsprechenden Button berechnet.
dann wird das ganze Fenster mit Buttons erzeugt:
und zu guter letzt das OnPaint:
Die Funktionen laufen auch alle, das Fenster mit den Buttons wird auch angezeigt, aber leider verschieben sich die BUTTONS NICHT !
Ach so, die Funktion move() wird durch einen ON_BN_CLICKED ... ausgelöst und das passt soweit auch alles, nur die Buttons werden nicht neu gezeichnet.
HILFE
als erstes muss ich anmerken, dass ich mich erst heute in ms vc++ eingearbeitet habe. Also bitte über ganz dumme Fehler hinweg sehen.
Ich bin grad dabei ein kleines Übungsprogramm (für's Studium) zu schreiben, welches eigentlich nichts anderes können soll als dieses berühmte Verschiebespiel darzustellen, sprich: in einer 4 mal 4 Matrix sind 15 Button's und 1 Feld frei. In das freie Feld sollen die Button's "hineingeschoben" werden können.
Nun mein Problem:
Habe zunächst eine Funktion geschrieben, die die 15 Buttons willkürlich anordnet:
Code:
void buttons()
{
tempx = 75;
tempy = 60;
srand((unsigned)time(NULL));
for(n=0;n<16;n++)
{
btn_number = 1 + rand() % 16;
while(btn_pos_x[btn_number])
{
btn_number = 1 + rand() % 16;
}
btn_pos_x[btn_number] = tempx;
btn_pos_y[btn_number] = tempy;
tempx = tempx + 40;
if(n == 3) { tempy = tempy+40; tempx = 75; }
if(n == 7) { tempy = tempy+40; tempx = 75; }
if(n == 11) { tempy = tempy+40; tempx = 75; }
}
}
dann eine, die die neue Position des zu verschiebenden Buttons und die neue Position des leeren Feldes nach einem Klick auf den entsprechenden Button berechnet.
Code:
void CSpielFrame::move(int x)
{
//Überprüfung auf Verschiebbarkeit
verschiebbar = 0;
//anzahl++;
if((btn_pos_x[x]-40) == btn_pos_x[16] && btn_pos_y[x] == btn_pos_y[16]) //verschiebung nach links möglich?
{
verschiebbar = 1;
}
if((btn_pos_x[x]+40) == btn_pos_x[16] && btn_pos_y[x] == btn_pos_y[16]) //verschiebung nach rechts möglich?
{
verschiebbar = 1;
}
if(btn_pos_x[x] == btn_pos_x[16] && (btn_pos_y[x]-40) == btn_pos_y[16]) //verschiebung nach oben möglich?
{
verschiebbar = 1;
}
if(btn_pos_x[x] == btn_pos_x[16] && (btn_pos_y[x]+40) == btn_pos_y[16]) //verschiebung nach unten möglich?
{
verschiebbar = 1;
}
//wenn verschiebung möglich, dann führe Funktion aus
if(verschiebbar == 1)
{
btn_pos_x[0] = btn_pos_x[16]; //Zwischenspeicherun Position x des leeren Feldes
btn_pos_y[0] = btn_pos_y[16]; //Zwischenspeicherun Position y des leeren Feldes
btn_pos_x[16] = btn_pos_x[x]; //Position des Buttons an leeres Feld
btn_pos_y[16] = btn_pos_y[x];
btn_pos_x[x] = btn_pos_x[0]; //Position des leeren Feldes an Button
btn_pos_y[x] = btn_pos_y[0];
}
}
dann wird das ganze Fenster mit Buttons erzeugt:
Code:
CSpielFrame::CSpielFrame()
{
if(btn_pos_x[1]) { } //hier wird geprüft, ob das spiel neu gestartet wurde
else { buttons(); } //wenn ja rufe Funktion buttons auf
anzahl++;
Create(NULL, "Verschiebespiel",
WS_OVERLAPPEDWINDOW - WS_THICKFRAME,
CRect (CPoint(100,100),CSize(320,320)));
CBtnSpiel1.Create("1",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[1],btn_pos_y[1]), CSize (40,40)),
this, IDC_BTN_SPIEL1);
CBtnSpiel2.Create("2",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[2],btn_pos_y[2]), CSize (40,40)),
this, IDC_BTN_SPIEL2);
CBtnSpiel3.Create("3",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[3],btn_pos_y[3]), CSize (40,40)),
this, IDC_BTN_SPIEL3);
CBtnSpiel4.Create("4",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[4],btn_pos_y[4]), CSize (40,40)),
this, IDC_BTN_SPIEL4);
CBtnSpiel5.Create("5",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[5],btn_pos_y[5]), CSize (40,40)),
this, IDC_BTN_SPIEL5);
CBtnSpiel6.Create("6",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[6],btn_pos_y[6]), CSize (40,40)),
this, IDC_BTN_SPIEL6);
CBtnSpiel7.Create("7",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[7],btn_pos_y[7]), CSize (40,40)),
this, IDC_BTN_SPIEL7);
CBtnSpiel8.Create("8",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[8],btn_pos_y[8]), CSize (40,40)),
this, IDC_BTN_SPIEL8);
CBtnSpiel9.Create("9",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[9],btn_pos_y[9]), CSize (40,40)),
this, IDC_BTN_SPIEL9);
CBtnSpiel10.Create("10",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[10],btn_pos_y[10]), CSize (40,40)),
this, IDC_BTN_SPIEL10);
CBtnSpiel11.Create("11",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[11],btn_pos_y[11]), CSize (40,40)),
this, IDC_BTN_SPIEL11);
CBtnSpiel12.Create("12",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[12],btn_pos_y[12]), CSize (40,40)),
this, IDC_BTN_SPIEL12);
CBtnSpiel13.Create("13",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[13],btn_pos_y[13]), CSize (40,40)),
this, IDC_BTN_SPIEL13);
CBtnSpiel14.Create("14",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[14],btn_pos_y[14]), CSize (40,40)),
this, IDC_BTN_SPIEL14);
CBtnSpiel15.Create("15",WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
CRect (CPoint (btn_pos_x[15],btn_pos_y[15]), CSize (40,40)),
this, IDC_BTN_SPIEL15);
text = "Verschiebespiel";
text2 = "Bringe die Felder in die richtige Reihenfolge!";
mstr = "";
astr = "Anzahl der Züge: 1";
};
und zu guter letzt das OnPaint:
Code:
void CSpielFrame::OnPaint()
{
CSpielFrame();
CPaintDC dc(this);
dc.Rectangle (73,58,237,222);
dc.TextOut (103,10,text);
dc.TextOut (10,25,text2);
dc.TextOut (20,240,mstr);
dc.TextOut (20,265,astr);
}
Die Funktionen laufen auch alle, das Fenster mit den Buttons wird auch angezeigt, aber leider verschieben sich die BUTTONS NICHT !
Ach so, die Funktion move() wird durch einen ON_BN_CLICKED ... ausgelöst und das passt soweit auch alles, nur die Buttons werden nicht neu gezeichnet.
HILFE
Zuletzt bearbeitet: