Programm steigt ohne ersichtlichen Grund aus

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
martin_frb
Beiträge: 587
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von martin_frb »

Ach ja uebrigens

Code: Alles auswählen

 
  if   Length(m.Items) > 0 then begin
    if m.Selected > 0 then
      m.Selected := m.Selected MOD Length(m.Items)
    else
      m.Selected := Length(m.Items) + (m.Selected MOD Length(m.Items))  // mod in fpc returns negative for this, therefore "+" operator 
// which is the same as
//      m.Selected := Length(m.Items) - (abs(m.Selected) MOD Length(m.Items))
  end
  else
    // length = 0 ?
 
Sollte das gleiche Ergebnis liefern.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

nochmal zu martins Modulo vorschlag:
gibt es in Fpc einen operator dafür wie z.b.

Code: Alles auswählen

a:=b;  //zuweisung
a+=b; //Addition
a-=b; //subtraktion
//gibt es auch sowas wie
a mod= b; //oder
a %= b; //(Java-like)
?
oder benötigt man dafür eine generelle ":=" zuweisung?


Ich habe das projekt nochmal so verändert, dass man nun auch vernünftig angreifen kann, ohne dass sich irgendetwas aufhängt.
Getestet unter

Device: Raspberry Pi B
OS: RaspBian "Wheezy"
Lazarus v0.9.30.4; FPC: 2.2.2
Framerate: ca. 1-3
und
Device: Selbstbau-PC mit 16GB RAM und 3,4-3,6GHz Intel i5 Quadcore Prozessor
OS: Windows 7
Lazarus v1.0.14; FPC: 2.6.2
Framerate: ca 23-27

zugegeben, auf dem Raspberry bringt das nichts, aber das war das einzige Linuxsystem, was ich gerade zur verfügung hatte ;->
aber es funktioniert...
https://www.dropbox.com/s/osfe9foixb1fw ... .13.29.jpg

für alle die sich mal die funktionierende version ansehen möchten, lade ich sie nochmal als dateianhang hoch(wie gesagt, getestet auf RaspBian Wheezy und Windows7 mit FPC 2.2.2 und 2.6.2)...

Bisher gefundene Bugs:
Keine :-)

Fragen, Meinungen oder Kritik sind willkommen, und werden gerne berücksichtigt...

MFG
Komoluna
Dateianhänge
Project1.rar
Alle Projektdateien...
(808.34 KiB) 109-mal heruntergeladen
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von m.fuchs »

Komoluna hat geschrieben:gibt es in Fpc einen operator dafür wie z.b.

Code: Alles auswählen

a:=b;  //zuweisung
a+=b; //Addition
a-=b; //subtraktion
//gibt es auch sowas wie
a mod= b; //oder
a %= b; //(Java-like)
?
oder benötigt man dafür eine generelle ":=" zuweisung?
Ich warne vor der Benutzung dieser C-artigen Operatoren. Das ist eigentlich nur unlesbarer Code und das nur um ein paar Zeichen zu sparen. Dann doch bitte gleich C nehmen.
Pascal ist eine Sprache die eine saubere Ausdrucksweise ermöglicht. Das sollte man auch nutzen. :)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

ich benutze das auch nur wenn ich irgendwelche riesigen Variablennamen habe, und man dass nicht in mehrere Zeilen umbrechen muss, denn das ist dann wirklich schlecht leserlich...
ich wollte auch nur mal prinzipiell fragen ob es den modulo operator auch in der gekürzten ausdrucksweise gibt...

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Achtzig »

m.fuchs hat geschrieben: Ich warne vor der Benutzung dieser C-artigen Operatoren. Das ist eigentlich nur unlesbarer Code und das nur um ein paar Zeichen zu sparen. Dann doch bitte gleich C nehmen.
Pascal ist eine Sprache die eine saubere Ausdrucksweise ermöglicht. Das sollte man auch nutzen. :)
Ich finde += und dergleichen schon sehr praktisch und nutze es auch durchgehend - werde aber bei Pascal bleiben, weil Pascal nicht nur := ausmacht :wink:

Stellenweise ist es, meiner bescheidenen Meinung nach, sogar übersichtlicher. Gerade bei langen Bezeichnern, die dann eben nur auf der linken Seite stehen und nicht rechts unnötiger Weise wiederholt werden. Es ist sofort klar, daß der linke Bezeichner Teil der Berechnung ist und nicht nur das Ergebnis aufnimmt.

Einstellen kann man das bei den Projekteinstellungen unter Compilereinstellungen-Parsen.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Michl »

Hallo Komoluna,

habe mir eben das Projekt nochmal geladen, läuft jetzt flüssig, die Steuerung ist i.O. und habe eben bis zum Ende gespielt :) Ich finds schön, weiter so!
Komoluna hat geschrieben:Fragen, Meinungen oder Kritik sind willkommen, und werden gerne berücksichtigt...
Leider lässt sich das Projekt immer noch nicht unter Lazarus 1.3 (unter 1.0.14 schon) kompilieren, siehe obigen Post.

Ein paar Anregungen würde ich Dir gern noch mitgeben (will Dich nicht belehren, das steht mir nicht zu):
- der Codetext ist stellenweise ganz schön lang. Das versuche ich immer zu minimieren und den Code lieber zu zerlegen, in separate, möglichst aussagekräftige, Proceduren/Funktionen.
- angewöhnt habe ich mir auch, immer wenn ich einen Codeteil fertig habe (getestet), diesen nochmals durchzugehen und bei möglichen Unklarheiten, diesen zu kommentieren.

Ich versuche immer diese beiden Punkte zu beachten und denke, dass es mir jetzt leichter fällt (und vor allem es schneller geht), Bugs zu finden oder Änderungen durchzuführen.

Wie gesagt, nur als Anregung nicht als Kritik zu verstehen :)

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

1. danke fürs testen
2. sowohl Anregungen, wie auch Kritik sind jederzeit willkommen
3. danke für die tipps
(wo findest du den Quelltext zu lang?)

Mfg und gute nacht,
Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Michl »

Komoluna hat geschrieben:Wo findest du den Quelltext zu lang?
Ist ja hauptsächlich Geschmackssache (z.B. TForm1.FormCreate).

Ich versuche den Code so zu gestalten, dass ich diesen in einer Procedure/Function ausgeklappt komplett im Quelltexteditor überblicken kann. Ich würde z.B. versuchen den Code

Code: Alles auswählen

  Player := TPlayerData.Create;
  Player.RTW := False;
  Player.Fighting := False;
  Player.Battle := TBattle.Create;
  Player.Battle.GameMenu := TGameMenu.Create;
  Player.Battle.GameMenu.Selected := 0;
  Player.Battle.YourPokemon := TPokemon.Create;  
in die Zeile

Code: Alles auswählen

  Player := TPlayerData.Create;
umzuwandeln und alle anderen Initialisierungen im Constructor von TPlayerData (wobei ich die von TBattle wiederum in dessen Constructor vornehmen würde...) auszuführen.

Nachfolgende Zeilen entsprechend. So könnte man die Zeilen im FormCreate auf 10 ... 15 Zeilen verkürzen (nicht wie jetzt 80) und man hätte alles auf einmal im Blick.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

stimmt, gute idee...
ich kann ja nachher nochmal ne version hochladen, wo die ganzen intitiirungsroutinen in die constructoren verlagert sind...
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

Hallo Leute,

ich habe mich heute darangemacht, den Code leserlicher zu gestalten, die Initiirungsroutinen in den Konstuktor zu verlegen und im Kampf die "Volltreffer" und "Daneben" funktion einzufügen...
Außerdem liegt der angehängten Projektdatei ein Map Editor bei, mithilfe dessen ihr Maps bearbeiten oder erkunden könnt.
Außerdem eine Datei "Steuerung.txt", wo alle Tasten aufgelistet sind, auf die das Spiel reagiert, und in welcher Weise...

Zum Editor:
Jedes Feld besitzt 2 Integer werte, die dem Renderer die Bild-ID angeben, die Checkbox "obere ebene bearbeiten" wechselt beim setzen der Felder auf den 2. Wert.
Jedes Feld hat auch 2 Strings, den "Entercode" und den "Interactcode".
Die Namen sollten eigentlich alles sagen... Der Entercode wird ausgeführt, wenn der Spieler das Feld betritt, und der Interactcode, wenn er zu dem Feld sieht, und Leertaste drückt...
Wenn auf dem Feld jedoch ein NPC steht, wird der Interactcode des NPCs verwendet...

Im Editor kann man mit Rechtsklick ein Feld selektieren, und dann werden in den beiden Memos unten rechts die Codes angezeigt.
Mit Linksklick auf die kleinen Felder oben kann man ein Feldtyp auswählen, den man mit Linksklick in der Map platzieren kann.

Ich habe es nicht ausprobiert, aber auch der Editor sollte für Linux kompilierbar sein(alle "\" mit PathDelim ersetzt und alle "Windows" Uniteinbindungen entfernt)

WICHTIG: Der Ordner Editor muss sich im selben ordner befinden, wie der Ordner Img, da die Bilder nicht mit einkompiliert werden, sondern wie beim Spiel auch zur Laufzeit(falls benötigt) geladen werden.

Wie auch bei den vorherigen Uploads, bin ich offen für Kritik, beantworte gerne Fragen die den Code oder das Gameplay betreffen, auch Verbesserungsvorschläge sind willkommen.

DOWNLOAD:
Project1.rar
Spiel + Mapeditor als Quellcode
(813.65 KiB) 94-mal heruntergeladen
MFG
Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

(Da es sich um dasselbe Projekt handelt, fange ich keinen neuen Thread an, sondern benutze diesen weiterhin...)
Ich suche nach einer Möglichkeit, mithilfe von TCanvas einen Text auszugeben.
Allerdings Zeichnet TCanvas.TextOut leider eine einfarbige Fläche hinter den Text, sodass man, wenn man ein Hintergrundbild hat, man hässliche Schnitte erhält...

gibt es irgendeine Möglichkeit, einfach nur Text, ohne "Grundierung" auszugeben?
meine einzige idee währe jetzt ein TBitmap zu erstellen, dann die Brush.Color auf die TransparentColor vom TBitmap zu setzen, und dann das Bitmap mithilfe von TCanvas.Draw auf mein eigentliches Bild zu zeichnen.

Freue mich schon auf Lösung(en/svorschläge)

MFG
Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2822
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von m.fuchs »

Komoluna hat geschrieben:(Da es sich um dasselbe Projekt handelt, fange ich keinen neuen Thread an, sondern benutze diesen weiterhin...)
Keine gute Idee. Es ist ein völlig anderes Thema.
Komoluna hat geschrieben:Ich suche nach einer Möglichkeit, mithilfe von TCanvas einen Text auszugeben.
Allerdings Zeichnet TCanvas.TextOut leider eine einfarbige Fläche hinter den Text, sodass man, wenn man ein Hintergrundbild hat, man hässliche Schnitte erhält...
gibt es irgendeine Möglichkeit, einfach nur Text, ohne "Grundierung" auszugeben?
[...]
Ein

Code: Alles auswählen

Canvas.Brush.Style := bsClear;
vorher machen und alles wird gut.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Programm steigt ohne ersichtlichen Grund aus

Beitrag von Komoluna »

ok, danke...

Das nächste mal mach ich nen neuen Thread auf...

wenn jemand das projekt weiterhin verfolgen möchte, dann kann er sich mal hier umsehen: http://temporemovie.funpic.de/media

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Antworten