Hallo
ich möchte mein Spiel Schiffeversenke optisch optimieren und jetzt Bitmaps statt buchstaben verwenden. Doch ich habe bisher nur Prozeduren gefunden, wo ein bitmap in eine einzelne Zelle geladen wird. Gibt es auch die möglichkeit es Zellenübergreifend zu machen?
procedure TForm1.schiffsetzen;
var c,i:integer;
begin
schiff[index].x:=sg1.col; //x- Koordinate
schiff[index].y:=sg1.row; //y- Koordinate
darfsetzen(schiff[index].x, schiff[index].y, schiff[index].leng, schiff[index].ausrichtung); //procedur zum überprüfen ob setzen möglich ist
if dasetz=false then begin
ShowMessage('Das Schiff liegt auserhalb des Spielfeldes oder es fährt bereits ein Schiff auf diesen Koordinaten.!'); //fals nicht möglich
case index of
1: begin s21.Enabled:=True; s22.Enabled:=True end;
2: begin s31.Enabled:=True; s32.Enabled:=True end;
3: begin s41.Enabled:=True; s42.Enabled:=True end;
4: begin s51.Enabled:=True; s52.Enabled:=True end;
end;
end else begin
for i:=1 to 4 do begin //alle schiffe setzen
//komplette schiff länge
if (schiff[i].x<>0) and (schiff[i].y<>0) then begin
for c:=0 to schiff[i].leng-1 do begin
//ausrichtung prüfen
if schiff[i].ausrichtung=True then begin //für beide Ausrichtungen
sg1.cells[schiff[i].x,schiff[i].y+c]:=bt[i]; //mit Schiffsnummer kennzeichnen
end;
if schiff[i].ausrichtung=False then begin
sg1.cells[schiff[i].x+c,schiff[i].y]:=bt[i];
end;
end;
end;
end;
end;
Jochim hat geschrieben:Gibt es denn dort die Möglichkeit?
Welche? Verstehe deine Frage nicht.
Grundsätzlich ist einen Grid Komponente für ein Spiel nicht unbedingt geeignet.
Zeichne die Positionen doch einfach selber, ohne Komponente, im OnPaint Ereignis.
Hatte hier mal die Grundidee gepostet: http://www.lazarusforum.de/viewtopic.php?p=53064#p53064
theo hat geschrieben:Grundsätzlich ist einen Grid Komponente für ein Spiel nicht unbedingt geeignet.
Das höre/lese ich häufiger und verstehe es ehrlich gesagt nicht so ganz. Gerade für "Brettspiele" wie Schach, Schiffe versenken, etc. ist doch ein DrawGrid eine schöne Sache. Man legt die Felder in einem 2D-Array ab, lässt OnDrawCell abhängig vom Feldinhalt des Arrays das Gridfeld bemalen und hat auch gleich alle Events für Mausklicks auf ein bestimmtes Feld.
Was spricht denn nun dagegen?
mfg
Micha
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Man kann schon. Man kann auch mit einem Ackerschlepper zum Brot kaufen fahren. Kein Problem.
Nö, im Ernst, wenn du ein Spiel basteln willst, welches dann eben doch nicht nur in Grid-Zellen abläuft, musst du es anders machen.
So ein Grid hat auch viele Eigenschaften, die ein Spiel meistens nicht braucht.
Wenns um 2D-Spiele geht könntet ihr auch meinen Greenfoot Port versuchen. Dazu gibts auch ne Online Dokumentation vom Original. Habe si schon in wenigen Minuten ein Spiel zusammengeklickt *g*.
corpsman hat geschrieben:Wenns um 2D-Spiele geht könntet ihr auch meinen Greenfoot Port versuchen. Dazu gibts auch ne Online Dokumentation vom Original. Habe si schon in wenigen Minuten ein Spiel zusammengeklickt *g*.
leicht OT:;
schicke Idee.
Wenn ich endlich wieder mal Zeit habe werd ich mir das mal sicher mal anschauen.
Wenn man am Anfang nicht so viel Erfahrung hat, ist der Weg natürlich erst mal egal. Da kann man auch was nehmen, was man gerade hat. Z.B. ein StringGrid eben. Aber wenn man dann etwas mehr will z.b. kleine Grafiken Anzeigen, sollte man schon eine andere Struktur nehmen.
Z.B. ein einfachen 2D Array und eine PaintBox. Das erfordert aber einiges an Hintergrundwissen. Es Lohnt sich natürlich, aber es dauert eben seine Zeit. Mal eben schnell ein Spiel so zu erstellen, geht für einen "Anfänger" nicht. Erfahrende können das schon.
Daher mein Vorschlag:
Schau dir folgende Sachen an:
1. 2D Array
Was ist das? Was kann man damit machen?
2. TBitMap, TPicture
Mit TBitmap kann man nur Bitmaps laden und mit TPicture auch jpegs und png's
3. TPaintBox
Das ist eine Komponente, die im Prinzip nur eine Canvas zuverfügung stellt. Daher solltest du dir das TCanvas genauer ansehen.
Ich schätzte du brauchst eine oder zwei Wochen.
(Bitte nicht Falsch verstehen, ist keine Beleidigung, nur damit du weißt was auf dich zu kommt, wenn du diesen Weg gehst)
Aber es lohnt sich. Du lernst eine Menge dabei. Ich kann dir nur ein Beispiel anbieten, wie ich ein Snake erstellt habe. Das ist aber schon recht komplex geschrieben.
2. TBitMap, TPicture
Mit TBitmap kann man nur Bitmaps laden und mit TPicture auch jpegs und png's
3. TPaintBox
Das ist eine Komponente, die im Prinzip nur eine Canvas zuverfügung stellt. Daher solltest du dir das TCanvas genauer ansehen.
Also ich habe bereits mit all diesen Objekten schon in Spielen wie Snake etc gearbeitet, doch da ich noch Schüler bin, muss ich das machen, was der Lehrer sagt und das ist nun mal Schiffe versenken mit einem Stringgrid zeichnen. Eigentlich war auch die Aufgabe lediglich Buchstaben zu verwenden doch da ich als einziger Fertig bin habe ich mir eben gedacht die Wartezeit zu nutzen.
Könnt ihr noch ihrgendwelche Tutorials empfehlen um das Wissen zu erweitern? z.b 3D-Spiele/Objekte?
Wir haben jetzt aber Projekt Arbeit und sollen ein eigenes neues Spiel zu programmieren. Würde gerne ein 3D-spiel Programmieren doch finde kein gutes tutorial.