Autor Beitrag
beastofchaos
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 02:01 
Hallo Leute,
ich heiße Thomas und bin 15. Bin seid einem halben-dreiviertel Jahr mit Delphi vertraut und hatte schon nach 2-3 Wochen angefangen, mich an mein erstes großes Projekt zu hocken: Minigolf mit Delphi xD

Habe viel geschrieben und auch durch viiiele Tipps im Forum es endlich geschafft. Ich schätze jetzt meine Arbeitszeit auf über 250 Stunden mind, da ich schon kurz vor Silvester angefangen habe und fast täglich dran gearbeitet habe :)

Dann kann ich nicht mehr viel sagen, außer dass das Spiel noch in der Beta-Phase' ist. Also wenn euch gravierende Fehler auffallen -> Bescheid sagen ;)
'Beta-Phase: Eigentlich sind ja alle Spiele in der Beta, weil sie alle immer noch Fehler enthalten :)

Jetzt kann ich nur sagen
ENJOY!


Grüße, Thomas alias Beast


PS: 1.Problem vorweg ist, dass das Einlochen noch nicht glatt verläuft, das muss ich nochmal iwie korrigieren.
(2.Problem: Es könnte auch bei nicht sehr fitten PCs sein, dass der Ball mal über ein Hindernis hüpft oder dass alles stockend ist - das ist halt von der Computergeschwindigkeit abhängig
( arbeite mit OnIdle ))

Version2 : Neue Version beinhaltet jetzt Bilder, aber noch keinen Sound bei Kontakten mit Wand - kommt vll noch)
Version3 : Sound bei Wandkollision, perfektionierte Ballbewegung bei Lochberührung, Ball wird kleiner bei Ball im Loch
Version4 : Editor für eigene Level ( -> Wechsel zwischen Editor und Spiel möglich )
Version5 : Awards haben besseres Design - Editor ist verbessert
Version6 : einige Probleme entfernt (siehe Beitrag vom 11.04)
Version7 : Handling zum Vergrößern/etc. verbessert
Version8 : Bug entfernt bei "an Wand liegend"
Version9 : blinkende Hindernisse bei Berührung, Quelltext verbessert (jetzt mit Objekten), um leichter Verbesserungen einzubauen :P
Version10: schönere Awards; TON - Zwei Hintergrundlieder und Kollisionssound, der noch nicht perfekt läuft bei vielen Kollisionen

PS: Wegen zu großem Ordner muss ich nun(ab Version 9) auf eine andere Seite überspringen zum Upload: www.megaupload.com/?d=GW7NP0X3


Zuletzt bearbeitet von beastofchaos am So 01.05.11 23:28, insgesamt 22-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.03.11 11:58 
Hallo Thomas,

schöne Idee!

Hast du evtl. vergessen, einige Bilder mitzugeben (s. Anhang)? Bei "Verkleinern" findet er auch die Bitmap "Pictures\Maximize.bmp" nicht.

Und die Textbox (was ist das für eine Zahl?) scheint auch etwas verrutscht zu sein - zumindestens bei meiner Auflösung von 1024x768...

Würde mich über weitere Level freuen...

Gruß
Th69
Einloggen, um Attachments anzusehen!
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 12:33 
Mmh, das ist mir jetzt ein rätsel, wieso der da schon wieder meckert.
Wenn man auf Verkleinern z.B. klickt passiert (unteranderem) folgendes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TMainForm.FormCreate(Sender: TObject);
begin
path := ExtractFilePath(Application.ExeName);   //speichert den Pfad der Exe-datei in einer String-variable (ein "/" ist dabei schon hintendran)
.
.
.
end;


procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
.
.
.
with BitBtn2 do
      begin
      Glyph.LoadFromFile(path + 'Pictures\Maximize.bmp');
      Caption := 'Vollbild';
      end;
.
.
.
end;



Bei mir funktioniert das Verfahren einwandtfrei, weswegen ich jetzt auch keine Lösung für das Problem weiß :/

Die Zahlen im Editfenster geben die Entfernung zwischen der jetzigen zu zeichnenden Position und der vorherigen Position des Balls. Hatte ich gebraucht, um zu schauen, wie viel Pixel zwischen den beiden Punkten liegen ( für meine Berechnungen teilweise ). Ist jetzt weg ;)

edit: ach mist bin ich doof. Ich hab ja nur die Exe-datei geschickt, ich müsste das Spiel immer mit dem ganzen ordner verschicken. Ich pack das schnell mal in nen zip-ordner ( ohne Quelltext ) und lads neu hoch
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Sa 26.03.11 13:00 
Hi,

super, nun bin ich zufrieden ;-) ... und perfekt!
Einloggen, um Attachments anzusehen!
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 13:30 
:DD

Den besten Award,d en man bisher erreichen kann ist: "1 Versuch und mind 5 Kontakte" - Ist aber auch fast unmöglich.
Ich mach dann nach meiner Schul-präsentation am Donnerstag an dem Programm noch einiges. Auch wenn ich heute abend ein zweites Level mache, muss ich die Übergänge gestalten, vll mach ich auch noch Highscore-listen aktualisierend per MySQL, was für mich ein total unbekanntes Terraint ist. Textdatei schreiben und verändern kann ich schon, aber das dann auf MySQL-Basis ist was ganz anderes :p

Übrigens wird das zweite Level auch Schubfelder haben ;)
Und das erste Level werd ich noch verändern. Die Hindernisse sind ja nur so gesetzt zum Ausprobieren :p
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Sa 26.03.11 15:21 
user profile iconbeastofchaos hat folgendes geschrieben Zum zitierten Posting springen:

PS: 1.Problem vorweg ist, dass das Einlochen noch nicht glatt vreläuft, das muss ich nochmal iwie korrigieren.


So zum nachdenken, Und für 15 Jahre ist das ein dickes Brett zum Sägen:
Wie machst du das mit dem langsamer werdenden Ball? Basiert die Geschwindigkeit auf einer mathematischen Formel? Somit könntest du doch im Bereich des Lochs die Geschwindigkeit und den Winkel ermitteln.
Daraus liese sich dann mit dem Lochdurchmesser, der Geschwindigkeit und der Trägheit des Balles, doch relativ leicht ermitteln, ob der Ball nun ins Loch fallen würde oder nicht.

Klingt kompliziert, ist es auch.
Es sind glaub 3 Fälle die du Abfangen musst.
1. Wann Prüfe ich ob der Ball das Loch erreicht hat. (glaub am schwersten)
2. Mittig kommender Ball
-> wenn Geschwindigkeit stimmt -> Versenkt,
-> wenn zu Schnell -> Etwas von der Geschwindigkeit wegnehmen und weiter rollen lassen. Wieviel von der Geschwindigkeit weggenommen wird, hängt von der Geschwindigkeit selber ab. Als Hausnummer sag ich mal, bei 5 Km/h prallt der gegen die gegenüberliegende Kante und verliert nahezu 80% an Speed. Bei 50Km/h ist dem Ball das Loch egal und der Schiesst hienaus ^^
3. Ermittlung wie weit 'aussermittig' der Ball auf dein Loch trifft. Somit liesse sich anhand der 'ReinfallTiefe' und der Trägheit der Austrittswinkel ermitteln.

Um 1. kommst du nicht drum herum. Und um Trägheit und ob der Ball das Schlagloch wahrnimmt (Reinfalltiefe)) wohl auch nicht.
Ich würde meinen Physik und Mathe Lehrer auf dieses Problem ansprechen. Bringt erstmal Bonuspunkte bei den Lehrern und zweitens ist dies endlich mal eine Schulaufgabe mit praktischen Hintergrund den wohl jeder Mitschüler nachgehen mag. Mehr als: Ein Skifahrer fährt einen Hang mti 35% Neigung (1. Hürde, da 100% == 45° entsprechen) und einem Gleitwiderstand von µ=0,08 herunter...

Soviel erstmal von meiner Seite ;)


Grüße
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 17:47 
@KleinesPferd:

Mein IdleHandler sieht erst mal so aus:
Meine vielen Funktionen hier müsst ihr nicht wissen, erschließt sich von selbst...

z.B:
v2d.normalize(v1: TVector2D): TVector2D -> normalisierter Vektor
Außerdem ist TVector2D ein Typ bestehend aus zwei extendeds und der Typ TLine besteht aus Ortsvektor(p) und Richtungsvektor(r) - darauf basiert alles in meinem Programm

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
procedure TMainForm.IdleHandler(Sender: TObject; var Done: Boolean);
var
  i: integer;
  tmp, ReflectionLine: TLine;
  P1, P2: TVector2D;
  Collision: Boolean;
begin
  Collision := False;
  timestep := CalcTimestep(CalcTime, Frequency);
  if moving then
    begin
    tmp := to_line(Gameball.m, V2d.scale(Gameball.v, timestep));

    for i := 1 to 4 do
      if not Collision and V2d.BallLineCollision(Gameball, tmp.r, lines[i]) then              // Collision mit den Außenwänden?    
        begin                                                                               
        Gameball.v := V2d.Reflect(Gameball.v, lines[i].r);
        Gameball.contacts := Gameball.contacts + 1;
        Collision := True;
        end;

    for i := high(Barricades) downto 1 do                                                      // Oder Collision mit einem der Hindernisse?
      if v2d.BallBarrCollision(Gameball, tmp.r, Barricades[i], ReflectionLine) then
          Gameball.v := v2d.reflect(Gameball.v, ReflectionLine.r);

    if not Collision and V2d.BallHoleTouch(Gameball, Goal) then Gameball.v := V2d.add(Gameball.v, V2d.sub(Goal.m, Gameball.m));          // Oder berührt der Mittelpunkt des Spielballs das Loch?

    Gameball.m := V2d.add(Gameball.m, V2d.scale(Gameball.v, timestep));                        // Berechnet die neue Position
    end;

  Paintbox1.Invalidate;


  if (V2d.length(Gameball.v) < 600and V2d.BallInHole(Gameball, Goal) then
    begin
    Moving := True;
    Application.OnIdle := Nil;
    CLf := 80;
    Paintbox1.Invalidate;
    showawards;
    BitBtn3.Enabled := True;
    end;

  if not Moving then Paintbox1.Cursor := crCross
    else if Moving then                                      // Geschwindigkeitsabnahme:
      begin
      QueryPerformanceCounter(Gameball.tn);                                 // Zählt Schwingungen zu diesem Moment
      Gameball.t := (Gameball.tn - Gameball.t0) / Frequency;                // Berechnet Zeit von Beginn des Schusses bis jetzt
      Gameball.length := (-200) * Gameball.t + V2d.length(Gameball.v0);     // Länge = Wiederstand(variabel) * Zeit + Geschwindigkeit am Anfang des Schusses
      Gameball.v := V2d.scale(V2d.normalize(Gameball.v), Gameball.length);  // Ermittelt per neue Länge den neuen Vektor

      if Gameball.length < 0.2 then                                         // Damit er nicht ins unendlich Minimale geht, wird ab 0.2 auf 0 gerundet
        begin
        Gameball.v := V2d.scale(Gameball.v,0);
        Moving := False;
        end;
      end;

  if (V2d.length(Gameball.v) = 0then Moving := False                      // Bewegt sich die Kugel?
    else Moving := True;



Was er addiert bei "BallHoleTouch" ist der Vektor vom Spielballmittelpunkt zum Lochmittelpunkt. Weiß nicht, ob das so richtig ist, aber es sieht realistisch aus. Das macht er im Moment nur, wenn der Ball sich bewegt. Denn wenn er halb im Loch liegt und sich nur noch wenig bewegt, würde er zwar die Geschwindigkeit erhöhen, aber nur so minimal, dass die Geschwindigkeitsabnahme das schon wieder wegrechnet. Ich muss jetzt weg, aber wenn in einer Stunde wiederkmme, änder ich das, dass auch bei keiner Bewegung die Geschwindigkeit sich erhöht. Ich lads euch dann hoch. Bis dann ;)
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: Sa 26.03.11 21:21 
Als erstes: Hut Ab! Respekt!
Ich habe mit sehr vielem gerechnet, aber nicht mit einem so sauberen Quelltext. Sehr leicht verständlich, obwohl ich noch nicht mal einen Blick auf die Variablendeklaration geworfen habe.
Und das du mit Vektoren arbeitest, finde auch ich sehr positiv.


Sehe ich das Richtig, auf Gameball.v (Geschwindigkeit?) und V2d.length(Gameball.v) (Restweglänge bei der aktuellen Geschwindigkeit?) basiert deine Geschwindigkeit, bzw der noch zurückzulegende Weg? Ich würde gernen einen Blick in die V2d.length Funktion werfen.

Ich versuch mir mal selber eine Funktion auszudenken, mit der ich meine Vorschläge von weiter oben, dir näher bringen könnte. In wie weit mir das gelingen wird, ist fraglich. Bin Momentan zeitlich arg eingebunden.

Zum Nachdenken hätte ich ein paar Kleinigkeiten.
Bis auf die leichtere Lesbarkeit, ist es glaub weniger nötig, zwischen Aussenwänden und Hindernissen einen Unterschied zu machen. Somit würde eine Kollisionsberechnung universell einsetzbar sein.
Um den Ball zu versenken, MUSS dessen Mittelpunkt unbedingt, den Mittelpunkt des Loches erwischen?
Und Collision ist mit Gameball.contacts>0 gleichzusetzen ;)

Schöne Grüße
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 22:40 
user profile iconKleinesPferd hat folgendes geschrieben Zum zitierten Posting springen:
Als erstes: Hut Ab! Respekt!
Ich habe mit sehr vielem gerechnet, aber nicht mit einem so sauberen Quelltext. Sehr leicht verständlich, obwohl ich noch nicht mal einen Blick auf die Variablendeklaration geworfen habe.
Und das du mit Vektoren arbeitest, finde auch ich sehr positiv.

Dankeschön, ist auch sehr mühsam, aber leichter als meine anfänglich Idee von der Trignometrie - da gäbe es hundert sonderfälle, bei denen die normalen Rechnungen nicht funktionieren würde :p
Zur Lesbarkeit: Meinst du, dass ich Kommentare am Rand habe? die hab ich schnell noch für euch dazu gedichtet oder meinst du das Einrpcken? :P

Zitat:

Sehe ich das Richtig, auf Gameball.v (Geschwindigkeit?) und V2d.length(Gameball.v) (Restweglänge bei der aktuellen Geschwindigkeit?) basiert deine Geschwindigkeit, bzw der noch zurückzulegende Weg? Ich würde gernen einen Blick in die V2d.length Funktion werfen.

v2d.length besteht aus einer Zeile(Satz des Pythagoras):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
class function V2d.Length(v: TVector2d): extended;
begin
  result := sqrt(v.x * v.x + v.y * v.y);
end;


Zitat:

Ich versuch mir mal selber eine Funktion auszudenken, mit der ich meine Vorschläge von weiter oben, dir näher bringen könnte. In wie weit mir das gelingen wird, ist fraglich. Bin Momentan zeitlich arg eingebunden.

Meine Rechnung läuft ja folgendermaßen: Wenn Berühren mit Loch dann "Gameball.v := Gameball.v + Entfernung zum Mittelpunkt der Lochs"

Zitat:

Bis auf die leichtere Lesbarkeit, ist es glaub weniger nötig, zwischen Aussenwänden und Hindernissen einen Unterschied zu machen. Somit würde eine Kollisionsberechnung universell einsetzbar sein.

Naja, auf Grund der Ecken bei den Hindernissen, ist die Kollisionsprüfung ein bisschen anders strukturiert, als bei Linien :/ Deswegen muss ich das trennen
Klar könnte ich auch eine Funktion erstellen, die würde aber als erstes die beiden arrays(4 linien, mehrere Barrikaden) übernehmen müssem und dann halt beide einzelnd auf Kollision überprüfen (später auch arrays für Kugeln, Schubgebiete, Wasser und Eisfläche)

Zitat:

Um den Ball zu versenken, MUSS dessen Mittelpunkt unbedingt, den Mittelpunkt des Loches erwischen?

-> Nö, das ist nur, wenn der Ball "im Loch" ist, sprich wenn er ganz im Loch ist und kein bisschen übersteht. Wenn das Loch größer als die Kugel ist, dann gibt es mehrere Probleme. Wenn die Kugel größer als das Loch ist, bleibt sie logischerweise stecken - so sähe das auch bei mir aus (schon ausprobiert)

Zitat:

Und Collision ist mit Gameball.contacts>0 gleichzusetzen ;)

Nö, weil
-Collision ist gleichzusetzen mit "Trifft er in DIESEM moment die Wand"
-Contacts zählt nur die bisherigen Kollisionen. Angenommen ich hätte eine wand getroffen ( contacts := 1 ), dann würde er das ganze Spiel über denken, dass er etwas trifft, auch wenn er auf
einer freien Wiese ist


Grüße, Thomas - Danke, dass du dich so aktiv mit meinem Programm beschäftigst ;) Das hilft mir, weiter über Probleme nachzudenken :p


Zuletzt bearbeitet von beastofchaos am Sa 26.03.11 23:13, insgesamt 1-mal bearbeitet
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 26.03.11 23:04 
So, hab jetzt neue Version hochgeladen - sie enthält:
- Sound bei jeder Wandcollision - Problem: es hängt meist leicht, wenn er den Sound abspielt
- perfektionierte Ballbewegung bei Lochberührung
- Ball wird kleiner bei Ball im Loch

Meine nächsten Ziele sind:
1. Bisher arbeit mein Programm mit einer temporären Unit, die alles (teilweise objektorientiert) zur Vektorrechnung beinhaltet. Nun will noch eine temporäre Unit erstellen, die alle zusätzlichen Prozeduren (z.B. Paintbox1.OnPaint/ Showawards/ BitBtn1.OnClick) und die Positionen der Buttons,etc. beinhaltet -> das erspart mir, für jedes Level alle Prozeduren dazu zu schreiben.
Dann müsste ich in dem Programm nur schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
uses Windows, ..., Vectors(Vektor-unit), Minigolf( geplante Minigolf-unit);
.
var 
  TMainForm: MinigolfForm;                     // Dieses MinigolfForm soll dann durch die "Minigolf-unit" erstellt
  Barricades: array[1..1of TBarricade;         // Hindernisse
  Circles: array[1..1of TCircle;                 // runde Hindernisse
  Pushareas: array[1..1of TBarricade;           // "Schubgebiete"
  Lines: array[1..4of TLine;                   // 4 Außenwände
.
.
.
procedure TMainform.OnCreate;
begin
...                                              // liest Daten aus Textdatei
SetLength(Barricades,...); 
SetLength(Circles,...);
SetLength(Pushareas,...);
if Barricades[0] = 0 then                        // falls das Level keine Hindernisse beinhaltet, dann wird der anfang auf 0 gesetzt und keine Hindernisse werden deklariert
  begin
  Barricades[1] := ...
  .
  .
  .



2. Um mehrere Levels einzubinden, soll alles in einem Programm läuft, aber es soll die Daten(Anzahl/Position/Art der Hindernisse) zu den unterschiedlichen Levels aus extenernen Text-Datei auslesen.
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: So 03.04.11 11:37 
Neue Version ist online - die neuen Features:

- Man kann beim Spielen zum Editor wechseln, der aber nur ein neues Level an die "Level-Reihe" anhängt.
- Editor speichert die Levels als MGo-Dateien ( ->.txt ) mit sehr einer übersichtlichen Auflistung der Hindernisse.
(-> Minigolf-Programm kann diese Text-Dateien auslesen und interpretieren)
- Powerschubfelder sind in Level 2 vorhanden, aber lassen sich selber (noch) nicht mit Editor einfügen.
- Dasselbe gilt auch für Kreis-Hindernisse, bei denen aber überraschenderweise die Kollision nicht immer perfekt funktioniert

Werde noch weiter dran arbeiten und in spätestens in 2 Wochen werde ich eine Version mit einem perfekten Editor hochladen ;)

Was meint ihr eigentlich zu einem Editor? Soll man mit ihm auch das aktuelle Level ändern können? Das würde iwie ustig sein, aber dann könnte man jedes schwere Level einfach umstellen :/

Grüße, Thomas ;)


Edit: Der Editor löscht die etzte gezeichnete Barrikade iwie wieder und außerdem wird Start und Ziel verwechselt - das hab ich bis heute abend geändert ;)
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 03.04.11 11:59 
Coole Sache :zustimm:

user profile iconbeastofchaos hat folgendes geschrieben Zum zitierten Posting springen:
Was meint ihr eigentlich zu einem Editor? Soll man mit ihm auch das aktuelle Level ändern können? Das würde iwie ustig sein, aber dann könnte man jedes schwere Level einfach umstellen :/

Naja, an sich kann man ja immer die Level-Datei verändern um zu gewinnen. Vielleicht wäre es am besten, dass man zwar im Editor diese Level laden kann, aber sie nicht überspeichern kann. Du sagst deinem Programm also, du hast 5 Level. Der Editor verhindert dann, dass man auf Level 1-5 was drüberspeichert. (Man würde dann als Level6 speichern).

Achja, man kriegt die "mehr als 10mal Wand berührt" Meldung auch bei genau 10 Berührungen ;) Da ist irgendwo ein = zuviel :mrgreen:

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: So 03.04.11 12:37 
Jep, dann arbeite ich noch in der Richtung am Editor - im moment gibt es imemr 2 feste Levels.
Ich lade jetzt eine neue Version hoch:

- Die eigenen Levels werden temporör gespeichert und am Ende wieder gelöscht, wenn man will kann man sie auch extra speichern (Extra-button)
- Die Verwechslung zwischen Ziel und Ende ist korrigiert
- Genauso auch behoben, dass die letzte barrikade immer nicht gespeichert wird
- Awardfehler auch schnell korrigiert ;)

Danke für deinen Tipp :P
FURIOS
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 42

Windoof 7
~~~>* C# *<~~~
BeitragVerfasst: Di 05.04.11 13:43 
Das Spiel macht aufjedenfall fun ;)

_________________
Nicht wer viel hat, sondern wer wenig will ist glücklich !*
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: So 10.04.11 22:11 
Neuste Version ist drinne

- Awards sind etwas 3-dimensionaler gehalten ;)
- Editor lässt sich besser bedienen
Teekeks
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 211
Erhaltene Danke: 23



BeitragVerfasst: So 10.04.11 23:28 
Hallo!
Tolles Programm, läuft auch unter Wine!
Aber: wenn ich [ctrl]+c drücke (in meiner Linux-Konsole bedeutet das "Prozess beenden") dann meldet sich dein Programm mit ner Meldung "ctrl-c hit", auch wenn das Fenster NICHT den Focus hat und die Tastenkombination wird nicht ausgefürt!

Was machst du da bitte? :)
Thom
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 70
Erhaltene Danke: 5


Delphi 10 Seattle Prof.
BeitragVerfasst: So 10.04.11 23:59 
Unter Windows zeigt Strg+C überhaupt keine Wirkung - was ja auch zu erwarten ist. Alt+F4 schließt das Programm - genau, wie es sein soll. Liegt also wahrscheinlich irgendwie an Deinem Wine... :lol:

Allerdings habe ich zwei andere kleine Fehler gefunden:
  • Der Button "Neustart" startet das Level neu - ich hätte aber erwartet, daß das Spiel ab Level 1 neu gestartet würde. Das geht aber leider nicht. Da hilft nur Spiel beenden und neu öffnen.
  • Wird das Fenster mit "Vergrößern" vergrößert und klickt man doppelt auf die Überschrift, wird das Fenster wieder verkleinert. Das ist das normale Verhalten. Nur wird das Spielfeld dabei leider nicht angepaßt und alle Buttons sind außer Reichweite. Da hilft dann nur noch Alt+F4 zum Beenden des Spiels.

Aber ansonsten: Tolle Sache, Thomas! Respekt: Ich würde mir mehr 15-jährige mit Deiner Geduld und Ausdauer wünschen! Mach' weiter so! :zustimm:
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Mo 11.04.11 14:21 
Jep, ich glaube auch, dass das nicht an meinem programm liegt - sicher könnte man das Problem umgehen, indem man das Betriebssystem rausfindet und dann entsprechend auf die Kombination Strg+C reagiert, aber das wäre ein Featrue, das ic hganz am Ende behebe.

Habe in der letzten halben Stunde Prozedur FormResize eingeführt und zwar genau so, dass man bei Doppelklick auf die FormCaption auch alle bjekte entsprechend ausrichtet. Funktioniert also jetzt schon mal einwandtfrei.

Der Neustart startet ab jetzt immer bei Level 1 wieder. Eigentlich woltel ich iwann auch noch einbauen, dass man auf alle bereits gespielten Levels greifen kann -> Unter dem Spielfeld eine Leiste mit allen Ziffen von 1 bis zum letzten Level. Das wird auch noch bei Version 10 oder so kommen ;) Erstmal bau ich den Editor noch weiter aus (Kreise und Powerschübe mit drinne).

Hab noch einen Fehler gefunden: wenn man einlocht, dann auf Editor geht und dann gleich wieder auf "Weiterspielen" dann hat sich die Kugel ein kleines bisschen vom Loch entfernt und man kann schießen :/ Problem bei neuer Version behoeb


Vielen Dank für euer Lob, das gibt mir auf jeden Fall Ansporn für noch größere Projekte :P Aber werde erstmal nach Minigolf Java und C+ in den Grundzügen lernen, da ich in 3 Monaten ein Schulpraktikum bei einer Softwarefirma mache - danach bekommt ihr sicher noch mehr zu sehen ;)
beastofchaos Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 247
Erhaltene Danke: 4



BeitragVerfasst: Sa 16.04.11 16:15 
So, da ich durch kleine (eigentlich unwichtige) Hindernisse Probleme mit der Leiste oben dran habe, werde ich dasauf bsNone setzen und selber per Canvas eine Leiste malen :)
Dazu hätte ich gerne ein Feedback, ob ihr das bisher gut fandet, dass das Programm sich verkleinern/vergrößern lässt. Denn ich würde dann lieber immer auf Vollbild arbeiten - Das heißt man könnte das Programm nicht verkleinern :/ Wüsste gern, was ihr davon haltet - sonst bleib ich bei der Möglichkeit, dass man zwischen den Möglichkeiten wechseln kann
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 16.04.11 16:31 
Am besten wäre, wenn man es einfach in der Größe verändern könnte wie man es will. Denn so macht das Spiel auf einem normalen Full-HD Bildschirm gerade einmal ein Drittel der Höhe und Breite aus.

Und warum nutzt du nicht einfach die System-Knöpfe zum Maximieren / Wiederherstellen / Schließen? So ist das nicht gerade intuitiv.

Und dann fehlt noch die Benutzung der Laufzeitthemes (XP-Style), so sehen die Buttons doch ziemlich hässlich aus. ;-)

Von der Umsetzung des Spielbereichs an sich sieht es wirklich richtig gut aus, aber das Drumherum weniger. ;-)