Schwerer, unspezifischer Fehler
Übersicht

Gehe zu Seite 1, 2, 3, 4 Weiter
Omenaton_2Betreff: Schwerer, unspezifischer Fehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo !
Ich habe seit gestern ein noch nie erlebtes, Riesenproblem mit meinem Code (das neue Weltraum Rollenspiel). Das läßt in mir meine Programmierer-Urängste vor der drohenden "Begrenztheit" wachwerden. Ich habe selbstverständlich Debug Modus an. Wenn ich versuche den Code zu kompilieren und auszuführen, bricht das Kompilieren so bei etwa 1/3 des ganzen "wortlos" ab. Ohne irgendeine Fehlermeldung. Ohne, daß der Compiler zu der Zeile mit dem Fehler hinspringen würde wie es sonst bei Fehlern sonst üblich ist. Ich habe durch experimentieren auf die Zeile genau die Stelle lokalisiert, wo der Code noch läuft und ab welcher Zeile (wenn ich die hinzufüge) der Code nicht mehr kompiliert. Was da gemacht wird, ist nichts anderes einer Variable einen Wert zuzuweisen : STOBP_SecW_Mesh_2_Name$ = StatObj\SecW_Mesh_2_Name$ In der Zeile davor, in der noch alles ok ist wird das Selbe gemacht nur die Variable heißt da Mesh 1 und nicht 2. Es ist ausgeschlossen, daß da ein logischer Programmfehler vorliegt. Ich habe auch ausprobiert, daß ich stat dieser Zeile, was ganz anderes eintippe, wie : If a9 = 1 Then a9 = a9 + 1 EndIf Der Fehler tritt auch dann auf. Es scheint egal zu sein, was da steht ! Nun, meine Befürchtung ist, daß der Compiler überfordert ist. Enweder, von der schieren Masse an Variablenzuweisungen die an der Stelle gemacht werden (ca 400 Variablen bekommen da Werte zugewiesen) ODER es gibt vielleicht eine maximale Code File Größe selbst dann, wenn man Includes benutzt (ja, dieser Fehler ist in einem Include, trat aber auch schon auf bevor ich es ausgelagert habe). Oder es gibt eventuell eine maximale Anzahl von unterschiedlichen Variablen, die der Compiler akzeptieren kann ? Mir ist es bewußt, daß der standard BlitzBasic Compiler nur maximal 1 MB große Codes bearbeiten kann. Dies habe ich schon bei Vulpec Mutations erreicht gehabt. Aber ich lagere Code Teile in Includes aus und so konnte ich bis heute noch locker unter dieser Grenze bleiben . Zur Zeit ist mein Hauptcode 860 kb groß und keine der Includes alleine ist größer als 536 kb. Wenn ich die Code File Größen von Hauptcode UND Includes alle zusammenaddiere, dann kommt das auf 2846 kb. Kann das sein, daß das für den Compiler zuviel ist ? Weiß jemand dazu etwas Bestimmtes ? Damals, vor vielen Jahren, als ich auf die Begrenzug der Code Länge auf 1 MB in dem offiziellen BlitzBasic Editor / Compiler gestoßen bin habe ich gelesen, daß es auch inoffizielle Editoren gibt, die mehr als 1 MB können. Ich habe damals Eines auch kurz getestet und es ging, nur gefiel mir der Editor nicht so gut wie der Original und deshalb benutze ich immer den original BlitzBasic Editor und würde es gerne weiterhin tun. Eventuell müßte ich meinen Code in einem anderen Editor/Compiler einlesen und testen, ob es dort läuft. Das wäre aufschlußreich. Kann mir jemand einen guten Editor/Compiler empfehlen ? Um Fragen zuvorzubeugen, beschreibe ich noch kurz was ich da mache und warum (wobei ich denke, daß das egal ist). Wenn der Spieler ein gegnerisches Raumschiff zerstört, dann hinterläßt dies meistens einen Loot-Container. Einen Behälter, den der Spieler öffnen und dann dessen Inhalt zu sich nehmen kann. Wie in allen MMORPGs, wie in WoW auch. Bisher habe ich das so gemacht, daß immer nach der Zerstörung eines Schiffes wird es ermittelt, ob da ein Lootcontainer sein soll und wenn ja womit das gefüllt werden soll. Wenn ja, dann wird ein neuer Static Object (so nenne ich etwas irreführend den Haupt Objekt Type für bewegliche, meist intelligente Objekte in meinem Code) erschaffen und seine Werte aus einer Bibliothek Datei von der Festplatte eingelesen. Auch die dazugehörige Meshes werden eingelesen und zurecht geformt. Das funktioniert auch schon seit lange tadellos. Ich will jedoch vermeiden, daß Mitten im Spiel überhaupt irgendetwas von der Festplatte aus nachgeladen werden wird. Nur in Menüs oder wenn sonstige Fenster (Inventory) auf sind, also wenn der Spieler sich nicht in der Aktion befindet sollen Daten nachgeladen werden. Deswegen verändere ich jetzt, wie der Lootcontainer erschaffen werden soll. Mein Plan ist, daß ich den Lootcontainer als Objekt Type und als Mesh schon beim Spiel Start (wenn die Sektor erschaffen wird) voraus einlade. Ich mache alles mit HideEntity unsichtbar und setzen den LifeState Wert des Types auf 4, was bei mir "Library Object" entspricht. Objekte mit diesem Life State sollen dann nirgendwo in Code berücksichtigt werden, sie sind praktisch tot, nicht vorhanden. Sie stören nicht. Wenn dann nach Zerstörung eines Gegners ein Lootcontainer erschaffen werden soll, dann soll folgendes geschehen : 1. Ich springe den StaticObject Type des unsichtbaren Library-Lootcontainers an. (ich mache nicht diesen unsichtbaren Objekt zum neuen Container, sondern lasse das weiterhin als unsichtbares Muster liegen, ich übernehme nur seine Werte). 2. Ich kopiere seine ca 400 Variablen (die Type Felder sind) in einen gewöhnlichen, temporäreren Variablen Set (das sind keine Type Felder, weil sie nur als eine enzige Instanz existieren müssen). 3. Ich kopiere die Meshes mit CopyMesh oder CopyEntity (das wird sich noch dem Test erweisen) ebenfalls in eine temporäre Mesh Variable. 4. Dann erschaffe ich den neuen Static Object Type Eintrag. Dies bekommt die Werte, die ich vorhin in dem temporären Variablenset abgelegt habe zugewiesen. 5. Dann kopiere ich (CopyMesh) die Meshes aus dem temporären Meshes zu den neuen, zu dem neuen Container Type zugehörigen Mesh-Variablen. Das müßte so gehen. Es gäbe noch 2-3 andere Lösungswege um das zu tun und ich habe lange überlegt, welcher Weg am Günstigsten wäre und bin schließlich zu diesem Weg gekommen. Der Fehler tritt in dem Codeteil wo Punkt 2 und 4, also das Kopieren der Variablenwerten auf. Da ist nichts Kompliziertes drin, nur simples Werte zuweisen. Ich konnte auch keinen Syntax Fehler finden. |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Kann mir jemand einen guten Editor/Compiler empfehlen?
Ich nehme nur noch IDEal, vor allem bei grösseren Projekten "ideal" um ein Riesenprojekt in kleinere Dateien zu splitten und trotzdem die Übersicht über alles zu haben (neben vielen weiteren Annehmlichkeiten die die Original IDE einfach nicht bietet): http://www.fungamesfactory.com |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Krischan hat Folgendes geschrieben: Zitat:
Kann mir jemand einen guten Editor/Compiler empfehlen?
Ich nehme nur noch IDEal, vor allem bei grösseren Projekten "ideal" um ein Riesenprojekt in kleinere Dateien zu splitten und trotzdem die Übersicht über alles zu haben (neben vielen weiteren Annehmlichkeiten die die Original IDE einfach nicht bietet): http://www.fungamesfactory.com Ja, ich bin auch gerade auf die Website vono IDEal Editor gestoßen und überlege es mir zu installieren. Ist es aber nicht verbuggt ? kann man sich gut darauf verlassen ? Hast du nicht auch irgendwas Negatives darüber zu berichten ? Übrigens ich komme immer mehr zu der Vermutung, daß so wie der Blitz Editor nur 1 MB Source Code in einem Stück bearbeiten kann, so kann es sein, daß es bei ca 2 MB Source Code auch bei Includes Probleme macht. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
IDEal ist nur in der hinsicht verbuggt, indem du ausklappbare Menüs einklappst und direkt vor oder hinter diesen Zeichen rumeditierst. Die Folge: Es werden unsichtbare Steuerzeichen entfernt, was den weiteren Verlauf beim editieren sehr erschwert bishin unmöglich macht. Lösung: Immer direkt vor oder nach einem eingeklappten Menü dieses entweder vorher ausklappen oder erst gar nicht diesen Bereich bearbeiten.
Ansonsten ist es Top. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja aber über so Kleinigkeiten kann man hinwegsehen. Alleine die Funktion Compile > Review Declarations ist einen Blick wert um überflüssige Variablen/Funktionen zu eliminieren. Die alte Blitz-IDE vermisse ich überhaupt nicht mehr. IDEal wird zwar seit 2007 anscheinend nicht mehr weiterentwickelt, läuft aber überwiegend stabil.
Und versuche am Besten gleich, Dich mit dem Projektmodus vertraut zu machen (.ipf Datei). |
||
da_poller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich nutze fast seit anfang am ideal. Nicht du wegen dem klappbaren funktionen oder der automatischen einrückung. Vorallem die einfache bedienung und der projekt teil finde ich einfach klasse. Bisher ist mir ideal nicht einmal abgestürzt oder hatte einen fehler. | ||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das gibt es doch gar nicht !
Ich habe IDEal installiert, meinen Code geladen und es geschieht das selbe Problem wie in dem offiziellen Blitz Editor. Es kompiliert einfach nicht zu Ende ! Wenn ich den kleineren Code lade, der läuft auch hier wie in dem Original. Es macht keinen Unterschied welchen Editor ich benutze. Das ist sehr irrietierend. Ich habe gehofft mit dem neuen Editor ginge alles. Hmm... das könnte vielleicht bedeuten, daß der Blitz Compiler Exe das Problem in sich hat. Der neue Editor (IDEal) benutzt ja auch die selbe Blitz Exe. Wenn das so ist. Was kann die Ursache sein ? Hat einer von euch schon ein projekt gehabt , bei dem die Source Codes mit allen Includes zusammen über 2 MB groß waren ? Jetzt bin ich ziemlich ratlos. Ich habe gerade sogar ein Screenshot in die Galeria hochgeladen, um euch beim Helfen zu motivieren ![]() https://www.blitzforum.de/gallery/1554/ |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehm folgendes: IDEal ist eine IDE, also Entwicklungsumgebung, benutzt aber nach wie vor den Blitz Compiler, also nur ein Frontend. Den Fehler suchen musst Du immer noch, es dürfte aber mit IDEeal leichter sein, diesen zu finden. | ||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Krischan hat Folgendes geschrieben: Ehm folgendes: IDEal ist eine IDE, also Entwicklungsumgebung, benutzt aber nach wie vor den Blitz Compiler, also nur ein Frontend. Den Fehler suchen musst Du immer noch, es dürfte aber mit IDEeal leichter sein, diesen zu finden.
Ja, das habe ich auch schon vorher verstanden. Es geht aber darum, daß ich meines Wissens nach keinen Fehler in meinem Code drin habe und ich vermutete, daß die Entwicklungsumgebung die Problemquelle sei. So ist es aber offensichtlich nicht. Wenn du meine Fehlerbeschreibung liest, dann weißt du, daß der Fehler in einer Zeile auftritt wo ich einfach einer Variable einen Wert zuweise. Da kann kein Fehler drin sein. |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zeig uns bitte mal die entsprechenden Stellen deiner Punkte 2 udn 4 deiner Fehleranalyse.
Normalerweise bricht Blitz beim Compilieren nicht ab ohne sich zu melden. Zumindest ist mir das noch nie passiert. Ich denke mal eine komplette Deinstallation mit Registrierungsreinigung und Neuinstallation würde helfen. |
||
Omenaton_2Betreff: Update |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe inzwischen ausprobiert, alle temporäre Variablen, in die ich die Werte aus den Type Feldern hineinkoüpiere ganz vorne im Code per Include als pure Variable Definition mit Wert Null anzugeben. Das hilft auch nichts.
Ich habe noch einen Test in der Zeile gemacht, wo der Fehler auftritt. Wenn da steht : If TempInt = 1 Then TempInt = 2 EndIf Dann ist kein Fehler. Das Programm läuft. Wenn ich aber schreibe : If TempNEW = 1 Then TempNEW = 2 EndIf Dann taucht der Fehler auf. Der Unterschied ist, daß TempInt eine von mir oft in Code an verschiedenen Stellen benutze temporäre Integer Variable ist. Also nichts Neues. TempNEW ist aber eine neue Variable, die ich sonst noch nicht in Code benutzt habe. Dieser Test läßt die Schlußfolgerung zu, daß der Compiler Exe von BlitzBasic einfach keine weitere neue Variablen einführen lassen will. Sollte das wirklich der Fall sein, dann habe ich ein gewaltiges Problem. Ich habe noch die Idee zu versuchen stat normalen Variablen Types zu nehmen, vielleicht werden die anders bewertet. Wenn das aber auch nicht klappt dann ist das beängstigend. Übrigens es ist eine menge Tipparbeit, weil wie gesagt geht es um ca 400 Variablen. Noch ein Hinweis : Selbst wenn ich die Rutine mit dem Lootcontainer erschaffen gar nicht anspringe, weil ich den Gosub auskommentiere, taucht der Fehler auf. Das ist auch ein Zeichen dafür, daß das kein echter logischer Programmfehler ist. |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
NightPhoenix hat Folgendes geschrieben: Zeig uns bitte mal die entsprechenden Stellen deiner Punkte 2 udn 4 deiner Fehleranalyse.
Normalerweise bricht Blitz beim Compilieren nicht ab ohne sich zu melden. Zumindest ist mir das noch nie passiert. Ich denke mal eine komplette Deinstallation mit Registrierungsreinigung und Neuinstallation würde helfen. STOBP_SecW_Mesh_1_Name$ = StatObj\SecW_Mesh_1_Name$ ; Bis hierher OK STOBP_SecW_Mesh_2_Name$ = StatObj\SecW_Mesh_2_Name$ ; Wenn diese 2. Zeile reinkommt, kommt der Fehler. (Das ist bei Punkt 2. Punkt 4 kann da vernachlässigt werden. Aber da heißt es einfach nur umgekehrt : StatObj\SecW_Mesh_1_Name$ = STOBP_SecW_Mesh_1_Name$) Ich habe auch schon probiert die Zeile zu vereinfachen, stat Type Name nur Null zu nehmen, das hilft auch nicht. Mir ist so ein Fehler auch noch nie passiert und ich programmiere mit BlitzBasic auch schon immerhin ca 7 Jahre. Deinstallation würde helfen ? Hmm, was könnte kaputtgegangen sein ? aber wenn mir sonst nichts hilft, werde ich das auch ausprobieren. Morgen, vorher aber noch denke ich nach was sonst noch sein könnte. |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Omenaton, Doppelposts sind nicht besonders beliebt hier ![]() ![]() So, genug davon => Ist es möglich, dass du die Variablen zählst, bis es zu diesem Problem kommt? Das wäre nett, denn dann hätten wir mal eine Art Spezifikation, die man später sicher wieder brauchen könnte. Benutzt du eigentlich ausschliesslich globale Variablen oder arbeitest du auch mit Locals? Ich fände es interessant, mal zu erfahren, wie viele Globals und Locals Blitz verkraftet. Achja, du erwähnst Gosub: Versuch mal gewisse Strukturen statt in Subs einfach in Funktionen auszulagern, vielleicht bringt das schon was. Und ich frag mich ehrlich gesagt grad ein wenig, wie man auf 2MiB Sourcecode kommt =/ Ich weiss ja nicht, wie du programmierst (mit sieben Jahren bestimmt nicht schlecht), aber bei so viel Code muss doch auch viel Optimierungspotenzial vorhanden sein... Wie du selbst schon sagtest, gewisse Dinge (oder Gruppen) könntest du ja in Types zusammenfassen. mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Omenaton_2Betreff: An Holzchopf |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mehrmals die Editierfunktion benutzt. Jedes Mal wenn es Sinn machte.
Es macht aber auch Sinn, einer Diskussion einen richtigen Fluß zu lassen in dem man in linearer Abfolge erkennen kann, wie sich was entwickelt hatte und was eine Antwort auf Was genau ist. Wenn man immer nur den selben Beitrag editiert und bis zum geht nicht mehr erweitert, ist das sicherlich nicht übersichtlicher oder (worum es mir geht) verständlicher. So, genug davon... Die Variablen zu zählen ist zu aufwendig, aber ich habe es zum Teil trotzdem getan. Ich habe das Programm laufen lassen, dann das Debugfenster aufgemacht und dort die Globals und Constants zusammengezählt. Komplett ohne die neue Rutine, in dem die ca 400 neue Variablen definiert werden sind es laut Anzeige 140 Globals und 37 Constants. was Locals angeht : "echte" Locals die ich als solche definiert habe, habe ich gar keine, aber der Debugger listet alle Type Fields als Locals auf. Davon gibt es sehr, sehr viele, die werde ich nicht zusammenzählen, weil das einfach zu viel ist. Ergänzung : ich kann zwar nicht alles zusammenzählen, aber weil ich alle Type Definitionen zusammen in einem einzigen Include Datei drin habe, kann ich einfach schätzen wie Viele Type Felder ich insgesamt habe, in dem ich einfach die Zeilenanzahl des Cursors ganz unten anschaue. Demnach habe ich grob geschätzt 3500 Type Felder. In der besagten Rutine wo die vielen neuen Variablen hinzukommen sollen, gehen 367 noch ohne Probleme, Wenn ich da noch die 368-ste dazuschreibe, dann kommst es zum Problem. Also, zusammen wären es die Globals und Constants die gehen ca 545. dazu kämen noch die vielen, viele Type Fields. "Achja, du erwähnst Gosub: Versuch mal gewisse Strukturen statt in Subs einfach in Funktionen auszulagern, vielleicht bringt das schon was" - Das bringt absolut nichts. Gar nichts. (Außer, es sollte so sein, daß das Problem nur mit den Globals ist, was ich eher nicht glaube.) "Und ich frag mich ehrlich gesagt grad ein wenig, wie man auf 2MiB Sourcecode kommt =/ " - So, daß man ein großes Projekt mit vielen, vielen Features macht und nicht nur ein kleines Casual Game wie Tetris. Ich mache ein World of Warcraft ähnliches Spiel in Weltraum, nur offline. Wenn du solche Spiele kennst und ein bißchen Fantasie hast, dann solltest du dir das denken können, daß da Einiges an Sourcecode zusammenkommt und ich bin schätzungsweise schon etwas mehr als mir der Hälfte der Programmierarbeiten fertig. "bei so viel Code muss doch auch viel Optimierungspotenzial vorhanden sein" - Sicherlich ist da Optimierungspotential drin. Manches werde ich am Ende wahrscheinlich noch optimieren. Manches lasse ich obwohl es nicht optimal ist, (weil ich es Anfangs Mangels Kenntnisses der späteren Code Teilen nicht optimal machen konnte) unoptimiert, weil es zu aufwendig wäre diese Dinge nochmal anzugehen. "Wie du selbst schon sagtest, gewisse Dinge (oder Gruppen) könntest du ja in Types zusammenfassen" - Ja, ich könnte diese ca 400 Variablen auch als Type machen. Es würde aber gar keinen Sinn machen das zu tun und würde den Code nur länger machen, nicht kürzer. Das liegt daran, daß Types nur dann wirklich Sinn ergeben, wenn sie mehrere "Instanzen" haben müssen. Wenn ich aber immer nur eine "Instanz" brauche, dann wozu Type ? Nichtsdestotrotz, werde ich wahrscheinlich versuchen die Sache mit Type zu machen, um zu sehen, ob das hilft oder nicht. Es ist eine Frage, ob die Begrenzung pro Variablen Typ (wie globals, Constants oder Locals) gilt oder alles zusammengenommen. Und gelten dabei die viele Type Fields als Locals, wie es den Anschein hat ? Übrigens, die ca 400 neue Variablen definiere ich normaler weise nicht extra als "Global", deswegen müßten sie als Locals gelten (wenn ich mich richtig daran erinnere, was ich darüber kürzlich gelesen habe.) Ergänzung : Ich lese gerade in der offiziellen Hilfe Datei : " whenever you assign a variable that isn't Global, it is automatically assigned as a LOCAL variable. You can optionally assign a value to the variable at the time of declaration." Also wären die ca 400 zusätzliche Variablen Locals, als ob sie Teil einer Function wären. Globals habe ich gar nciht so viele in meinem Code. Die überwältigende Mehrheit sind Type Fields. Das muß aber auch so bleiben. Ich sehe auch wieder, daß in dem Debugfenster die Type Fields unter der Rubrik Locals aufgelistet werden. Wenn das so ist, dann würde es auch nichts bringen sie als Type anstat als Locals zu definieren. Dann bleiben mir immer noch 2 häßliche Lösungen : A., Ich verzichte darauf, den Lootcontainer vorauszuladen. Ich lasse es wie es bisher war, ich lade den Container schnell ein, wenn er erschaffen wird. Das fällt meist gar nicht auf, das geschieht so schnell. B., Ganz, ganz häßlich wäre der Weg, daß ich gar keine neue Variablen definiere, sondern : ich springe zu dem Type Instanz des Musters. Ich kopiere den Wert dessen in meine beliebte "TempInt oder TempDeci, Temp$" Variablen. Dann springe ich zu der Type Instanz des neu erschaffenen Types (Neuer Container) und lese den Wert aus diesem Temp Variable ein. Dann nochmal die selbe Prozädur für den nächsten Type Field. Es wird wieder nur die Temp Variable überschrieben, keine neue erschaffen. der alte Wert ist ja schon nicht mehr von Bedeutung. Dann so bei allen ca 400 Type Fields vorgehen. Ein hin und her. Das möchte ich vermeiden, weil es eine menge Tipp-Arbeit ist, den Code lang macht und weil ich vermute, daß das schlecht für den Performance sein würde- Aber, diese Lösung käme ohne einen einzige neue Variable egal welcher Art aus. So würde diese häßliche Lösung "B" aussehen : Code: [AUSKLAPPEN] For StatObj.STATIC_OBJ = Each STATIC_OBJ : If StatObj\TypusNr = 10 And StatObj\Life_State = 4 Then Exit : Next
Temp$ = StatObj\Name$ For StatObj.STATIC_OBJ = Each STATIC_OBJ : If StatObj\ID = NewObjID Then Exit : Next StatObj\Name$ = Temp$ Das würde 800 extra Code Zeilen, 800 extra Loop Durchgänge und 800 Extra If Then Bedingungen mit sich bringen. Würde aber wahrscheinlich zuverlässig funktionieren und verlangt nicht nach neuen Variablen. Ansonsten denke ich, daß wenn ich davon ausgehe, daß wenn ich diese neue 400 Variablen wie auch immer für diesen Zweck nicht einführe, mir noch ca 367 freie Variablen zur Benutzung übrigbleiben. Davon könnte ich schon bis zum Ende des Projektes auskommen, weil ich das meiste was ich brauche schon drin habe. Der einzige größere Bereich der noch fehlt sind die Quests, aber so viel wird das wohl auch nicht sein. Ich habe gerade einen Vorab-Test zu dieser Möglichkeit B gemacht. Einfach den Code von oben in einer Schleife 400 mal ausgeführt und die Zeit die dafür nötig war ausgegeben. Es waren nur 2 Millisekunden ! Selbst wenn das sich noch verdopplen oder gar verdreichfachen sollte, ist es immer noch sehr kurz. Ich glaube ich werde doch diese "häßliche" Lösung nehmen. Das macht aber meinen Code schon wieder ein großes Stück länger. Man kann eben nicht immer alles gleichzetig haben : einen kurzen, kompakten Code, guten Performance, wenige Resourcen wie Variablen benutzen, einen übersichtlichen und leicht verständlichen Code (das ist bei einem sehr komplexen Projekt oft wichtiger als alles Andere !). |
||
- Zuletzt bearbeitet von Omenaton_2 am Do, Nov 12, 2009 20:50, insgesamt einmal bearbeitet
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn Du nur mit Gosub arbeitest dann sind alle Deine Variablen zwar an sich Local, allerdings nur im Kontext der Hauptroutine. Es wäre also durchaus denkbar, dass es hier beim Parser eine Beschränkung auf z.B. 500 Variablen in einem Kontext gibt.
Und um ehrlich zu sein sollte das eigentlich auch locker genügen. Probiere mal aus, ob sich die Anzahl der möglichen Variablen ändert, wenn Du das betroffene Stück Code in eine eigene Funktion packst. Diese muss vermutlich auch nicht aufgerufen werden oder semantisch richtig sein. Ich denke Du solltest Deinen Code generell dynamischer strukturieren und ggf. die Nutzung einer Scriptsprache wie BriskVM in Erwägung ziehen. Und 400 Felder in einem Type halte ich für total übertrieben. Ich sehe ja ein, dass viele "Attribute" für ein Rollenspiel nötig sind, aber hier kann man gewiss vieles dynamisch abbilden. Stichworte: BlitzArrays in Types, Types in Types und Bitoperationen für Ja/Nein-Werte Ein WOW hat vermutlich keine Stelle im gesamten Code wo mehr als 100 hart codierte Variablen gleichzeitig benutzt würden... EDIT Und für Dein Problem: Du hast einen Type der enthält alle statischen Definitionen(also was für alle Objekte dieses Typs gilt z.B. Meshreferenz, Hitpoints, etc) für alle möglichen Objekte. Diese werden komplett beim Start des Levels oder des Spiels geladen. Alle Referenzentities werden mit Hideentity versteckt. Dein Type der die Objekte enthält referenziert dann nur noch auf diesen Type z.B. Field def.tDef Beim Erzeugen eines Objekts holst Du Dir dann mit CopyEntity einfach eine neue Instanz des Referenzmeshs. Kann sein dass Du noch ein ShowEntity auf Dein neu kopiertes Objekt machen musst. Du musst einfach Dein Datenmodell ändern. So bekommst Du einen kurzen, kompakten Code, gute Performance, benutzt wenige Resourcen wie Variablen, und hast einen übersichtlichen und mit entsprechender InlineDoku leicht verständlichen Code |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Pummelie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst auch eine 2. exe machen.
Also ein bischen der functionen in ein zweites programm packen und diese dann per udp oder name pipe komunizieren lassen, ich denke jedoch das das sehr viel langsamer sein wird. Oder nicht? |
||
It's done when it's done. |
E. Urbachehemals "Basicprogger" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der Blitz3D Compiler hat doch keine Variablenbegrenzung. Wer kommt denn auf so eine sinnfreie Idee? Hier, ca. 1500 bzw. 2000 Variablen:
Code: [AUSKLAPPEN] Local a0 = 0
Local a1 = 1 Local a2 = 2 Local a3 = 3 Local a4 = 4 Local a5 = 5 Local a6 = 6 Local a7 = 7 Local a8 = 8 Local a9 = 9 Local a10 = 10 Local a11 = 11 Local a12 = 12 Local a13 = 13 Local a14 = 14 Local a15 = 15 Local a16 = 16 Local a17 = 17 Local a18 = 18 Local a19 = 19 Local a20 = 20 Local a21 = 21 Local a22 = 22 Local a23 = 23 Local a24 = 24 Local a25 = 25 Local a26 = 26 Local a27 = 27 Local a28 = 28 Local a29 = 29 Local a30 = 30 Local a31 = 31 Local a32 = 32 Local a33 = 33 Local a34 = 34 Local a35 = 35 Local a36 = 36 Local a37 = 37 Local a38 = 38 Local a39 = 39 Local a40 = 40 Local a41 = 41 Local a42 = 42 Local a43 = 43 Local a44 = 44 Local a45 = 45 Local a46 = 46 Local a47 = 47 Local a48 = 48 Local a49 = 49 Local a50 = 50 Local a51 = 51 Local a52 = 52 Local a53 = 53 Local a54 = 54 Local a55 = 55 Local a56 = 56 Local a57 = 57 Local a58 = 58 Local a59 = 59 Local a60 = 60 Local a61 = 61 Local a62 = 62 Local a63 = 63 Local a64 = 64 Local a65 = 65 Local a66 = 66 Local a67 = 67 Local a68 = 68 Local a69 = 69 Local a70 = 70 Local a71 = 71 Local a72 = 72 Local a73 = 73 Local a74 = 74 Local a75 = 75 Local a76 = 76 Local a77 = 77 Local a78 = 78 Local a79 = 79 Local a80 = 80 Local a81 = 81 Local a82 = 82 Local a83 = 83 Local a84 = 84 Local a85 = 85 Local a86 = 86 Local a87 = 87 Local a88 = 88 Local a89 = 89 Local a90 = 90 Local a91 = 91 Local a92 = 92 Local a93 = 93 Local a94 = 94 Local a95 = 95 Local a96 = 96 Local a97 = 97 Local a98 = 98 Local a99 = 99 Local a100 = 100 Local a101 = 101 Local a102 = 102 Local a103 = 103 Local a104 = 104 Local a105 = 105 Local a106 = 106 Local a107 = 107 Local a108 = 108 Local a109 = 109 Local a110 = 110 Local a111 = 111 Local a112 = 112 Local a113 = 113 Local a114 = 114 Local a115 = 115 Local a116 = 116 Local a117 = 117 Local a118 = 118 Local a119 = 119 Local a120 = 120 Local a121 = 121 Local a122 = 122 Local a123 = 123 Local a124 = 124 Local a125 = 125 Local a126 = 126 Local a127 = 127 Local a128 = 128 Local a129 = 129 Local a130 = 130 Local a131 = 131 Local a132 = 132 Local a133 = 133 Local a134 = 134 Local a135 = 135 Local a136 = 136 Local a137 = 137 Local a138 = 138 Local a139 = 139 Local a140 = 140 Local a141 = 141 Local a142 = 142 Local a143 = 143 Local a144 = 144 Local a145 = 145 Local a146 = 146 Local a147 = 147 Local a148 = 148 Local a149 = 149 Local a150 = 150 Local a151 = 151 Local a152 = 152 Local a153 = 153 Local a154 = 154 Local a155 = 155 Local a156 = 156 Local a157 = 157 Local a158 = 158 Local a159 = 159 Local a160 = 160 Local a161 = 161 Local a162 = 162 Local a163 = 163 Local a164 = 164 Local a165 = 165 Local a166 = 166 Local a167 = 167 Local a168 = 168 Local a169 = 169 Local a170 = 170 Local a171 = 171 Local a172 = 172 Local a173 = 173 Local a174 = 174 Local a175 = 175 Local a176 = 176 Local a177 = 177 Local a178 = 178 Local a179 = 179 Local a180 = 180 Local a181 = 181 Local a182 = 182 Local a183 = 183 Local a184 = 184 Local a185 = 185 Local a186 = 186 Local a187 = 187 Local a188 = 188 Local a189 = 189 Local a190 = 190 Local a191 = 191 Local a192 = 192 Local a193 = 193 Local a194 = 194 Local a195 = 195 Local a196 = 196 Local a197 = 197 Local a198 = 198 Local a199 = 199 Local a200 = 200 Local a201 = 201 Local a202 = 202 Local a203 = 203 Local a204 = 204 Local a205 = 205 Local a206 = 206 Local a207 = 207 Local a208 = 208 Local a209 = 209 Local a210 = 210 Local a211 = 211 Local a212 = 212 Local a213 = 213 Local a214 = 214 Local a215 = 215 Local a216 = 216 Local a217 = 217 Local a218 = 218 Local a219 = 219 Local a220 = 220 Local a221 = 221 Local a222 = 222 Local a223 = 223 Local a224 = 224 Local a225 = 225 Local a226 = 226 Local a227 = 227 Local a228 = 228 Local a229 = 229 Local a230 = 230 Local a231 = 231 Local a232 = 232 Local a233 = 233 Local a234 = 234 Local a235 = 235 Local a236 = 236 Local a237 = 237 Local a238 = 238 Local a239 = 239 Local a240 = 240 Local a241 = 241 Local a242 = 242 Local a243 = 243 Local a244 = 244 Local a245 = 245 Local a246 = 246 Local a247 = 247 Local a248 = 248 Local a249 = 249 Local a250 = 250 Local a251 = 251 Local a252 = 252 Local a253 = 253 Local a254 = 254 Local a255 = 255 Local a256 = 256 Local a257 = 257 Local a258 = 258 Local a259 = 259 Local a260 = 260 Local a261 = 261 Local a262 = 262 Local a263 = 263 Local a264 = 264 Local a265 = 265 Local a266 = 266 Local a267 = 267 Local a268 = 268 Local a269 = 269 Local a270 = 270 Local a271 = 271 Local a272 = 272 Local a273 = 273 Local a274 = 274 Local a275 = 275 Local a276 = 276 Local a277 = 277 Local a278 = 278 Local a279 = 279 Local a280 = 280 Local a281 = 281 Local a282 = 282 Local a283 = 283 Local a284 = 284 Local a285 = 285 Local a286 = 286 Local a287 = 287 Local a288 = 288 Local a289 = 289 Local a290 = 290 Local a291 = 291 Local a292 = 292 Local a293 = 293 Local a294 = 294 Local a295 = 295 Local a296 = 296 Local a297 = 297 Local a298 = 298 Local a299 = 299 Local a300 = 300 Local a301 = 301 Local a302 = 302 Local a303 = 303 Local a304 = 304 Local a305 = 305 Local a306 = 306 Local a307 = 307 Local a308 = 308 Local a309 = 309 Local a310 = 310 Local a311 = 311 Local a312 = 312 Local a313 = 313 Local a314 = 314 Local a315 = 315 Local a316 = 316 Local a317 = 317 Local a318 = 318 Local a319 = 319 Local a320 = 320 Local a321 = 321 Local a322 = 322 Local a323 = 323 Local a324 = 324 Local a325 = 325 Local a326 = 326 Local a327 = 327 Local a328 = 328 Local a329 = 329 Local a330 = 330 Local a331 = 331 Local a332 = 332 Local a333 = 333 Local a334 = 334 Local a335 = 335 Local a336 = 336 Local a337 = 337 Local a338 = 338 Local a339 = 339 Local a340 = 340 Local a341 = 341 Local a342 = 342 Local a343 = 343 Local a344 = 344 Local a345 = 345 Local a346 = 346 Local a347 = 347 Local a348 = 348 Local a349 = 349 Local a350 = 350 Local a351 = 351 Local a352 = 352 Local a353 = 353 Local a354 = 354 Local a355 = 355 Local a356 = 356 Local a357 = 357 Local a358 = 358 Local a359 = 359 Local a360 = 360 Local a361 = 361 Local a362 = 362 Local a363 = 363 Local a364 = 364 Local a365 = 365 Local a366 = 366 Local a367 = 367 Local a368 = 368 Local a369 = 369 Local a370 = 370 Local a371 = 371 Local a372 = 372 Local a373 = 373 Local a374 = 374 Local a375 = 375 Local a376 = 376 Local a377 = 377 Local a378 = 378 Local a379 = 379 Local a380 = 380 Local a381 = 381 Local a382 = 382 Local a383 = 383 Local a384 = 384 Local a385 = 385 Local a386 = 386 Local a387 = 387 Local a388 = 388 Local a389 = 389 Local a390 = 390 Local a391 = 391 Local a392 = 392 Local a393 = 393 Local a394 = 394 Local a395 = 395 Local a396 = 396 Local a397 = 397 Local a398 = 398 Local a399 = 399 Local a400 = 400 Local a401 = 401 Local a402 = 402 Local a403 = 403 Local a404 = 404 Local a405 = 405 Local a406 = 406 Local a407 = 407 Local a408 = 408 Local a409 = 409 Local a410 = 410 Local a411 = 411 Local a412 = 412 Local a413 = 413 Local a414 = 414 Local a415 = 415 Local a416 = 416 Local a417 = 417 Local a418 = 418 Local a419 = 419 Local a420 = 420 Local a421 = 421 Local a422 = 422 Local a423 = 423 Local a424 = 424 Local a425 = 425 Local a426 = 426 Local a427 = 427 Local a428 = 428 Local a429 = 429 Local a430 = 430 Local a431 = 431 Local a432 = 432 Local a433 = 433 Local a434 = 434 Local a435 = 435 Local a436 = 436 Local a437 = 437 Local a438 = 438 Local a439 = 439 Local a440 = 440 Local a441 = 441 Local a442 = 442 Local a443 = 443 Local a444 = 444 Local a445 = 445 Local a446 = 446 Local a447 = 447 Local a448 = 448 Local a449 = 449 Local a450 = 450 Local a451 = 451 Local a452 = 452 Local a453 = 453 Local a454 = 454 Local a455 = 455 Local a456 = 456 Local a457 = 457 Local a458 = 458 Local a459 = 459 Local a460 = 460 Local a461 = 461 Local a462 = 462 Local a463 = 463 Local a464 = 464 Local a465 = 465 Local a466 = 466 Local a467 = 467 Local a468 = 468 Local a469 = 469 Local a470 = 470 Local a471 = 471 Local a472 = 472 Local a473 = 473 Local a474 = 474 Local a475 = 475 Local a476 = 476 Local a477 = 477 Local a478 = 478 Local a479 = 479 Local a480 = 480 Local a481 = 481 Local a482 = 482 Local a483 = 483 Local a484 = 484 Local a485 = 485 Local a486 = 486 Local a487 = 487 Local a488 = 488 Local a489 = 489 Local a490 = 490 Local a491 = 491 Local a492 = 492 Local a493 = 493 Local a494 = 494 Local a495 = 495 Local a496 = 496 Local a497 = 497 Local a498 = 498 Local a499 = 499 Local a500 = 500 Global b0 = 0 Global b1 = 1 Global b2 = 2 Global b3 = 3 Global b4 = 4 Global b5 = 5 Global b6 = 6 Global b7 = 7 Global b8 = 8 Global b9 = 9 Global b10 = 10 Global b11 = 11 Global b12 = 12 Global b13 = 13 Global b14 = 14 Global b15 = 15 Global b16 = 16 Global b17 = 17 Global b18 = 18 Global b19 = 19 Global b20 = 20 Global b21 = 21 Global b22 = 22 Global b23 = 23 Global b24 = 24 Global b25 = 25 Global b26 = 26 Global b27 = 27 Global b28 = 28 Global b29 = 29 Global b30 = 30 Global b31 = 31 Global b32 = 32 Global b33 = 33 Global b34 = 34 Global b35 = 35 Global b36 = 36 Global b37 = 37 Global b38 = 38 Global b39 = 39 Global b40 = 40 Global b41 = 41 Global b42 = 42 Global b43 = 43 Global b44 = 44 Global b45 = 45 Global b46 = 46 Global b47 = 47 Global b48 = 48 Global b49 = 49 Global b50 = 50 Global b51 = 51 Global b52 = 52 Global b53 = 53 Global b54 = 54 Global b55 = 55 Global b56 = 56 Global b57 = 57 Global b58 = 58 Global b59 = 59 Global b60 = 60 Global b61 = 61 Global b62 = 62 Global b63 = 63 Global b64 = 64 Global b65 = 65 Global b66 = 66 Global b67 = 67 Global b68 = 68 Global b69 = 69 Global b70 = 70 Global b71 = 71 Global b72 = 72 Global b73 = 73 Global b74 = 74 Global b75 = 75 Global b76 = 76 Global b77 = 77 Global b78 = 78 Global b79 = 79 Global b80 = 80 Global b81 = 81 Global b82 = 82 Global b83 = 83 Global b84 = 84 Global b85 = 85 Global b86 = 86 Global b87 = 87 Global b88 = 88 Global b89 = 89 Global b90 = 90 Global b91 = 91 Global b92 = 92 Global b93 = 93 Global b94 = 94 Global b95 = 95 Global b96 = 96 Global b97 = 97 Global b98 = 98 Global b99 = 99 Global b100 = 100 Global b101 = 101 Global b102 = 102 Global b103 = 103 Global b104 = 104 Global b105 = 105 Global b106 = 106 Global b107 = 107 Global b108 = 108 Global b109 = 109 Global b110 = 110 Global b111 = 111 Global b112 = 112 Global b113 = 113 Global b114 = 114 Global b115 = 115 Global b116 = 116 Global b117 = 117 Global b118 = 118 Global b119 = 119 Global b120 = 120 Global b121 = 121 Global b122 = 122 Global b123 = 123 Global b124 = 124 Global b125 = 125 Global b126 = 126 Global b127 = 127 Global b128 = 128 Global b129 = 129 Global b130 = 130 Global b131 = 131 Global b132 = 132 Global b133 = 133 Global b134 = 134 Global b135 = 135 Global b136 = 136 Global b137 = 137 Global b138 = 138 Global b139 = 139 Global b140 = 140 Global b141 = 141 Global b142 = 142 Global b143 = 143 Global b144 = 144 Global b145 = 145 Global b146 = 146 Global b147 = 147 Global b148 = 148 Global b149 = 149 Global b150 = 150 Global b151 = 151 Global b152 = 152 Global b153 = 153 Global b154 = 154 Global b155 = 155 Global b156 = 156 Global b157 = 157 Global b158 = 158 Global b159 = 159 Global b160 = 160 Global b161 = 161 Global b162 = 162 Global b163 = 163 Global b164 = 164 Global b165 = 165 Global b166 = 166 Global b167 = 167 Global b168 = 168 Global b169 = 169 Global b170 = 170 Global b171 = 171 Global b172 = 172 Global b173 = 173 Global b174 = 174 Global b175 = 175 Global b176 = 176 Global b177 = 177 Global b178 = 178 Global b179 = 179 Global b180 = 180 Global b181 = 181 Global b182 = 182 Global b183 = 183 Global b184 = 184 Global b185 = 185 Global b186 = 186 Global b187 = 187 Global b188 = 188 Global b189 = 189 Global b190 = 190 Global b191 = 191 Global b192 = 192 Global b193 = 193 Global b194 = 194 Global b195 = 195 Global b196 = 196 Global b197 = 197 Global b198 = 198 Global b199 = 199 Global b200 = 200 Global b201 = 201 Global b202 = 202 Global b203 = 203 Global b204 = 204 Global b205 = 205 Global b206 = 206 Global b207 = 207 Global b208 = 208 Global b209 = 209 Global b210 = 210 Global b211 = 211 Global b212 = 212 Global b213 = 213 Global b214 = 214 Global b215 = 215 Global b216 = 216 Global b217 = 217 Global b218 = 218 Global b219 = 219 Global b220 = 220 Global b221 = 221 Global b222 = 222 Global b223 = 223 Global b224 = 224 Global b225 = 225 Global b226 = 226 Global b227 = 227 Global b228 = 228 Global b229 = 229 Global b230 = 230 Global b231 = 231 Global b232 = 232 Global b233 = 233 Global b234 = 234 Global b235 = 235 Global b236 = 236 Global b237 = 237 Global b238 = 238 Global b239 = 239 Global b240 = 240 Global b241 = 241 Global b242 = 242 Global b243 = 243 Global b244 = 244 Global b245 = 245 Global b246 = 246 Global b247 = 247 Global b248 = 248 Global b249 = 249 Global b250 = 250 Global b251 = 251 Global b252 = 252 Global b253 = 253 Global b254 = 254 Global b255 = 255 Global b256 = 256 Global b257 = 257 Global b258 = 258 Global b259 = 259 Global b260 = 260 Global b261 = 261 Global b262 = 262 Global b263 = 263 Global b264 = 264 Global b265 = 265 Global b266 = 266 Global b267 = 267 Global b268 = 268 Global b269 = 269 Global b270 = 270 Global b271 = 271 Global b272 = 272 Global b273 = 273 Global b274 = 274 Global b275 = 275 Global b276 = 276 Global b277 = 277 Global b278 = 278 Global b279 = 279 Global b280 = 280 Global b281 = 281 Global b282 = 282 Global b283 = 283 Global b284 = 284 Global b285 = 285 Global b286 = 286 Global b287 = 287 Global b288 = 288 Global b289 = 289 Global b290 = 290 Global b291 = 291 Global b292 = 292 Global b293 = 293 Global b294 = 294 Global b295 = 295 Global b296 = 296 Global b297 = 297 Global b298 = 298 Global b299 = 299 Global b300 = 300 Global b301 = 301 Global b302 = 302 Global b303 = 303 Global b304 = 304 Global b305 = 305 Global b306 = 306 Global b307 = 307 Global b308 = 308 Global b309 = 309 Global b310 = 310 Global b311 = 311 Global b312 = 312 Global b313 = 313 Global b314 = 314 Global b315 = 315 Global b316 = 316 Global b317 = 317 Global b318 = 318 Global b319 = 319 Global b320 = 320 Global b321 = 321 Global b322 = 322 Global b323 = 323 Global b324 = 324 Global b325 = 325 Global b326 = 326 Global b327 = 327 Global b328 = 328 Global b329 = 329 Global b330 = 330 Global b331 = 331 Global b332 = 332 Global b333 = 333 Global b334 = 334 Global b335 = 335 Global b336 = 336 Global b337 = 337 Global b338 = 338 Global b339 = 339 Global b340 = 340 Global b341 = 341 Global b342 = 342 Global b343 = 343 Global b344 = 344 Global b345 = 345 Global b346 = 346 Global b347 = 347 Global b348 = 348 Global b349 = 349 Global b350 = 350 Global b351 = 351 Global b352 = 352 Global b353 = 353 Global b354 = 354 Global b355 = 355 Global b356 = 356 Global b357 = 357 Global b358 = 358 Global b359 = 359 Global b360 = 360 Global b361 = 361 Global b362 = 362 Global b363 = 363 Global b364 = 364 Global b365 = 365 Global b366 = 366 Global b367 = 367 Global b368 = 368 Global b369 = 369 Global b370 = 370 Global b371 = 371 Global b372 = 372 Global b373 = 373 Global b374 = 374 Global b375 = 375 Global b376 = 376 Global b377 = 377 Global b378 = 378 Global b379 = 379 Global b380 = 380 Global b381 = 381 Global b382 = 382 Global b383 = 383 Global b384 = 384 Global b385 = 385 Global b386 = 386 Global b387 = 387 Global b388 = 388 Global b389 = 389 Global b390 = 390 Global b391 = 391 Global b392 = 392 Global b393 = 393 Global b394 = 394 Global b395 = 395 Global b396 = 396 Global b397 = 397 Global b398 = 398 Global b399 = 399 Global b400 = 400 Global b401 = 401 Global b402 = 402 Global b403 = 403 Global b404 = 404 Global b405 = 405 Global b406 = 406 Global b407 = 407 Global b408 = 408 Global b409 = 409 Global b410 = 410 Global b411 = 411 Global b412 = 412 Global b413 = 413 Global b414 = 414 Global b415 = 415 Global b416 = 416 Global b417 = 417 Global b418 = 418 Global b419 = 419 Global b420 = 420 Global b421 = 421 Global b422 = 422 Global b423 = 423 Global b424 = 424 Global b425 = 425 Global b426 = 426 Global b427 = 427 Global b428 = 428 Global b429 = 429 Global b430 = 430 Global b431 = 431 Global b432 = 432 Global b433 = 433 Global b434 = 434 Global b435 = 435 Global b436 = 436 Global b437 = 437 Global b438 = 438 Global b439 = 439 Global b440 = 440 Global b441 = 441 Global b442 = 442 Global b443 = 443 Global b444 = 444 Global b445 = 445 Global b446 = 446 Global b447 = 447 Global b448 = 448 Global b449 = 449 Global b450 = 450 Global b451 = 451 Global b452 = 452 Global b453 = 453 Global b454 = 454 Global b455 = 455 Global b456 = 456 Global b457 = 457 Global b458 = 458 Global b459 = 459 Global b460 = 460 Global b461 = 461 Global b462 = 462 Global b463 = 463 Global b464 = 464 Global b465 = 465 Global b466 = 466 Global b467 = 467 Global b468 = 468 Global b469 = 469 Global b470 = 470 Global b471 = 471 Global b472 = 472 Global b473 = 473 Global b474 = 474 Global b475 = 475 Global b476 = 476 Global b477 = 477 Global b478 = 478 Global b479 = 479 Global b480 = 480 Global b481 = 481 Global b482 = 482 Global b483 = 483 Global b484 = 484 Global b485 = 485 Global b486 = 486 Global b487 = 487 Global b488 = 488 Global b489 = 489 Global b490 = 490 Global b491 = 491 Global b492 = 492 Global b493 = 493 Global b494 = 494 Global b495 = 495 Global b496 = 496 Global b497 = 497 Global b498 = 498 Global b499 = 499 Global b500 = 500 Function func_context() Local c0 = 0 Local c1 = 1 Local c2 = 2 Local c3 = 3 Local c4 = 4 Local c5 = 5 Local c6 = 6 Local c7 = 7 Local c8 = 8 Local c9 = 9 Local c10 = 10 Local c11 = 11 Local c12 = 12 Local c13 = 13 Local c14 = 14 Local c15 = 15 Local c16 = 16 Local c17 = 17 Local c18 = 18 Local c19 = 19 Local c20 = 20 Local c21 = 21 Local c22 = 22 Local c23 = 23 Local c24 = 24 Local c25 = 25 Local c26 = 26 Local c27 = 27 Local c28 = 28 Local c29 = 29 Local c30 = 30 Local c31 = 31 Local c32 = 32 Local c33 = 33 Local c34 = 34 Local c35 = 35 Local c36 = 36 Local c37 = 37 Local c38 = 38 Local c39 = 39 Local c40 = 40 Local c41 = 41 Local c42 = 42 Local c43 = 43 Local c44 = 44 Local c45 = 45 Local c46 = 46 Local c47 = 47 Local c48 = 48 Local c49 = 49 Local c50 = 50 Local c51 = 51 Local c52 = 52 Local c53 = 53 Local c54 = 54 Local c55 = 55 Local c56 = 56 Local c57 = 57 Local c58 = 58 Local c59 = 59 Local c60 = 60 Local c61 = 61 Local c62 = 62 Local c63 = 63 Local c64 = 64 Local c65 = 65 Local c66 = 66 Local c67 = 67 Local c68 = 68 Local c69 = 69 Local c70 = 70 Local c71 = 71 Local c72 = 72 Local c73 = 73 Local c74 = 74 Local c75 = 75 Local c76 = 76 Local c77 = 77 Local c78 = 78 Local c79 = 79 Local c80 = 80 Local c81 = 81 Local c82 = 82 Local c83 = 83 Local c84 = 84 Local c85 = 85 Local c86 = 86 Local c87 = 87 Local c88 = 88 Local c89 = 89 Local c90 = 90 Local c91 = 91 Local c92 = 92 Local c93 = 93 Local c94 = 94 Local c95 = 95 Local c96 = 96 Local c97 = 97 Local c98 = 98 Local c99 = 99 Local c100 = 100 Local c101 = 101 Local c102 = 102 Local c103 = 103 Local c104 = 104 Local c105 = 105 Local c106 = 106 Local c107 = 107 Local c108 = 108 Local c109 = 109 Local c110 = 110 Local c111 = 111 Local c112 = 112 Local c113 = 113 Local c114 = 114 Local c115 = 115 Local c116 = 116 Local c117 = 117 Local c118 = 118 Local c119 = 119 Local c120 = 120 Local c121 = 121 Local c122 = 122 Local c123 = 123 Local c124 = 124 Local c125 = 125 Local c126 = 126 Local c127 = 127 Local c128 = 128 Local c129 = 129 Local c130 = 130 Local c131 = 131 Local c132 = 132 Local c133 = 133 Local c134 = 134 Local c135 = 135 Local c136 = 136 Local c137 = 137 Local c138 = 138 Local c139 = 139 Local c140 = 140 Local c141 = 141 Local c142 = 142 Local c143 = 143 Local c144 = 144 Local c145 = 145 Local c146 = 146 Local c147 = 147 Local c148 = 148 Local c149 = 149 Local c150 = 150 Local c151 = 151 Local c152 = 152 Local c153 = 153 Local c154 = 154 Local c155 = 155 Local c156 = 156 Local c157 = 157 Local c158 = 158 Local c159 = 159 Local c160 = 160 Local c161 = 161 Local c162 = 162 Local c163 = 163 Local c164 = 164 Local c165 = 165 Local c166 = 166 Local c167 = 167 Local c168 = 168 Local c169 = 169 Local c170 = 170 Local c171 = 171 Local c172 = 172 Local c173 = 173 Local c174 = 174 Local c175 = 175 Local c176 = 176 Local c177 = 177 Local c178 = 178 Local c179 = 179 Local c180 = 180 Local c181 = 181 Local c182 = 182 Local c183 = 183 Local c184 = 184 Local c185 = 185 Local c186 = 186 Local c187 = 187 Local c188 = 188 Local c189 = 189 Local c190 = 190 Local c191 = 191 Local c192 = 192 Local c193 = 193 Local c194 = 194 Local c195 = 195 Local c196 = 196 Local c197 = 197 Local c198 = 198 Local c199 = 199 Local c200 = 200 Local c201 = 201 Local c202 = 202 Local c203 = 203 Local c204 = 204 Local c205 = 205 Local c206 = 206 Local c207 = 207 Local c208 = 208 Local c209 = 209 Local c210 = 210 Local c211 = 211 Local c212 = 212 Local c213 = 213 Local c214 = 214 Local c215 = 215 Local c216 = 216 Local c217 = 217 Local c218 = 218 Local c219 = 219 Local c220 = 220 Local c221 = 221 Local c222 = 222 Local c223 = 223 Local c224 = 224 Local c225 = 225 Local c226 = 226 Local c227 = 227 Local c228 = 228 Local c229 = 229 Local c230 = 230 Local c231 = 231 Local c232 = 232 Local c233 = 233 Local c234 = 234 Local c235 = 235 Local c236 = 236 Local c237 = 237 Local c238 = 238 Local c239 = 239 Local c240 = 240 Local c241 = 241 Local c242 = 242 Local c243 = 243 Local c244 = 244 Local c245 = 245 Local c246 = 246 Local c247 = 247 Local c248 = 248 Local c249 = 249 Local c250 = 250 Local c251 = 251 Local c252 = 252 Local c253 = 253 Local c254 = 254 Local c255 = 255 Local c256 = 256 Local c257 = 257 Local c258 = 258 Local c259 = 259 Local c260 = 260 Local c261 = 261 Local c262 = 262 Local c263 = 263 Local c264 = 264 Local c265 = 265 Local c266 = 266 Local c267 = 267 Local c268 = 268 Local c269 = 269 Local c270 = 270 Local c271 = 271 Local c272 = 272 Local c273 = 273 Local c274 = 274 Local c275 = 275 Local c276 = 276 Local c277 = 277 Local c278 = 278 Local c279 = 279 Local c280 = 280 Local c281 = 281 Local c282 = 282 Local c283 = 283 Local c284 = 284 Local c285 = 285 Local c286 = 286 Local c287 = 287 Local c288 = 288 Local c289 = 289 Local c290 = 290 Local c291 = 291 Local c292 = 292 Local c293 = 293 Local c294 = 294 Local c295 = 295 Local c296 = 296 Local c297 = 297 Local c298 = 298 Local c299 = 299 Local c300 = 300 Local c301 = 301 Local c302 = 302 Local c303 = 303 Local c304 = 304 Local c305 = 305 Local c306 = 306 Local c307 = 307 Local c308 = 308 Local c309 = 309 Local c310 = 310 Local c311 = 311 Local c312 = 312 Local c313 = 313 Local c314 = 314 Local c315 = 315 Local c316 = 316 Local c317 = 317 Local c318 = 318 Local c319 = 319 Local c320 = 320 Local c321 = 321 Local c322 = 322 Local c323 = 323 Local c324 = 324 Local c325 = 325 Local c326 = 326 Local c327 = 327 Local c328 = 328 Local c329 = 329 Local c330 = 330 Local c331 = 331 Local c332 = 332 Local c333 = 333 Local c334 = 334 Local c335 = 335 Local c336 = 336 Local c337 = 337 Local c338 = 338 Local c339 = 339 Local c340 = 340 Local c341 = 341 Local c342 = 342 Local c343 = 343 Local c344 = 344 Local c345 = 345 Local c346 = 346 Local c347 = 347 Local c348 = 348 Local c349 = 349 Local c350 = 350 Local c351 = 351 Local c352 = 352 Local c353 = 353 Local c354 = 354 Local c355 = 355 Local c356 = 356 Local c357 = 357 Local c358 = 358 Local c359 = 359 Local c360 = 360 Local c361 = 361 Local c362 = 362 Local c363 = 363 Local c364 = 364 Local c365 = 365 Local c366 = 366 Local c367 = 367 Local c368 = 368 Local c369 = 369 Local c370 = 370 Local c371 = 371 Local c372 = 372 Local c373 = 373 Local c374 = 374 Local c375 = 375 Local c376 = 376 Local c377 = 377 Local c378 = 378 Local c379 = 379 Local c380 = 380 Local c381 = 381 Local c382 = 382 Local c383 = 383 Local c384 = 384 Local c385 = 385 Local c386 = 386 Local c387 = 387 Local c388 = 388 Local c389 = 389 Local c390 = 390 Local c391 = 391 Local c392 = 392 Local c393 = 393 Local c394 = 394 Local c395 = 395 Local c396 = 396 Local c397 = 397 Local c398 = 398 Local c399 = 399 Local c400 = 400 Local c401 = 401 Local c402 = 402 Local c403 = 403 Local c404 = 404 Local c405 = 405 Local c406 = 406 Local c407 = 407 Local c408 = 408 Local c409 = 409 Local c410 = 410 Local c411 = 411 Local c412 = 412 Local c413 = 413 Local c414 = 414 Local c415 = 415 Local c416 = 416 Local c417 = 417 Local c418 = 418 Local c419 = 419 Local c420 = 420 Local c421 = 421 Local c422 = 422 Local c423 = 423 Local c424 = 424 Local c425 = 425 Local c426 = 426 Local c427 = 427 Local c428 = 428 Local c429 = 429 Local c430 = 430 Local c431 = 431 Local c432 = 432 Local c433 = 433 Local c434 = 434 Local c435 = 435 Local c436 = 436 Local c437 = 437 Local c438 = 438 Local c439 = 439 Local c440 = 440 Local c441 = 441 Local c442 = 442 Local c443 = 443 Local c444 = 444 Local c445 = 445 Local c446 = 446 Local c447 = 447 Local c448 = 448 Local c449 = 449 Local c450 = 450 Local c451 = 451 Local c452 = 452 Local c453 = 453 Local c454 = 454 Local c455 = 455 Local c456 = 456 Local c457 = 457 Local c458 = 458 Local c459 = 459 Local c460 = 460 Local c461 = 461 Local c462 = 462 Local c463 = 463 Local c464 = 464 Local c465 = 465 Local c466 = 466 Local c467 = 467 Local c468 = 468 Local c469 = 469 Local c470 = 470 Local c471 = 471 Local c472 = 472 Local c473 = 473 Local c474 = 474 Local c475 = 475 Local c476 = 476 Local c477 = 477 Local c478 = 478 Local c479 = 479 Local c480 = 480 Local c481 = 481 Local c482 = 482 Local c483 = 483 Local c484 = 484 Local c485 = 485 Local c486 = 486 Local c487 = 487 Local c488 = 488 Local c489 = 489 Local c490 = 490 Local c491 = 491 Local c492 = 492 Local c493 = 493 Local c494 = 494 Local c495 = 495 Local c496 = 496 Local c497 = 497 Local c498 = 498 Local c499 = 499 Local c500 = 500 Print a0 Print b0 Print c0 Print a1 Print b1 Print c1 Print a2 Print b2 Print c2 Print a3 Print b3 Print c3 Print a4 Print b4 Print c4 Print a5 Print b5 Print c5 Print a6 Print b6 Print c6 Print a7 Print b7 Print c7 Print a8 Print b8 Print c8 Print a9 Print b9 Print c9 Print a10 Print b10 Print c10 Print a11 Print b11 Print c11 Print a12 Print b12 Print c12 Print a13 Print b13 Print c13 Print a14 Print b14 Print c14 Print a15 Print b15 Print c15 Print a16 Print b16 Print c16 Print a17 Print b17 Print c17 Print a18 Print b18 Print c18 Print a19 Print b19 Print c19 Print a20 Print b20 Print c20 Print a21 Print b21 Print c21 Print a22 Print b22 Print c22 Print a23 Print b23 Print c23 Print a24 Print b24 Print c24 Print a25 Print b25 Print c25 Print a26 Print b26 Print c26 Print a27 Print b27 Print c27 Print a28 Print b28 Print c28 Print a29 Print b29 Print c29 Print a30 Print b30 Print c30 Print a31 Print b31 Print c31 Print a32 Print b32 Print c32 Print a33 Print b33 Print c33 Print a34 Print b34 Print c34 Print a35 Print b35 Print c35 Print a36 Print b36 Print c36 Print a37 Print b37 Print c37 Print a38 Print b38 Print c38 Print a39 Print b39 Print c39 Print a40 Print b40 Print c40 Print a41 Print b41 Print c41 Print a42 Print b42 Print c42 Print a43 Print b43 Print c43 Print a44 Print b44 Print c44 Print a45 Print b45 Print c45 Print a46 Print b46 Print c46 Print a47 Print b47 Print c47 Print a48 Print b48 Print c48 Print a49 Print b49 Print c49 Print a50 Print b50 Print c50 Print a51 Print b51 Print c51 Print a52 Print b52 Print c52 Print a53 Print b53 Print c53 Print a54 Print b54 Print c54 Print a55 Print b55 Print c55 Print a56 Print b56 Print c56 Print a57 Print b57 Print c57 Print a58 Print b58 Print c58 Print a59 Print b59 Print c59 Print a60 Print b60 Print c60 Print a61 Print b61 Print c61 Print a62 Print b62 Print c62 Print a63 Print b63 Print c63 Print a64 Print b64 Print c64 Print a65 Print b65 Print c65 Print a66 Print b66 Print c66 Print a67 Print b67 Print c67 Print a68 Print b68 Print c68 Print a69 Print b69 Print c69 Print a70 Print b70 Print c70 Print a71 Print b71 Print c71 Print a72 Print b72 Print c72 Print a73 Print b73 Print c73 Print a74 Print b74 Print c74 Print a75 Print b75 Print c75 Print a76 Print b76 Print c76 Print a77 Print b77 Print c77 Print a78 Print b78 Print c78 Print a79 Print b79 Print c79 Print a80 Print b80 Print c80 Print a81 Print b81 Print c81 Print a82 Print b82 Print c82 Print a83 Print b83 Print c83 Print a84 Print b84 Print c84 Print a85 Print b85 Print c85 Print a86 Print b86 Print c86 Print a87 Print b87 Print c87 Print a88 Print b88 Print c88 Print a89 Print b89 Print c89 Print a90 Print b90 Print c90 Print a91 Print b91 Print c91 Print a92 Print b92 Print c92 Print a93 Print b93 Print c93 Print a94 Print b94 Print c94 Print a95 Print b95 Print c95 Print a96 Print b96 Print c96 Print a97 Print b97 Print c97 Print a98 Print b98 Print c98 Print a99 Print b99 Print c99 Print a100 Print b100 Print c100 Print a101 Print b101 Print c101 Print a102 Print b102 Print c102 Print a103 Print b103 Print c103 Print a104 Print b104 Print c104 Print a105 Print b105 Print c105 Print a106 Print b106 Print c106 Print a107 Print b107 Print c107 Print a108 Print b108 Print c108 Print a109 Print b109 Print c109 Print a110 Print b110 Print c110 Print a111 Print b111 Print c111 Print a112 Print b112 Print c112 Print a113 Print b113 Print c113 Print a114 Print b114 Print c114 Print a115 Print b115 Print c115 Print a116 Print b116 Print c116 Print a117 Print b117 Print c117 Print a118 Print b118 Print c118 Print a119 Print b119 Print c119 Print a120 Print b120 Print c120 Print a121 Print b121 Print c121 Print a122 Print b122 Print c122 Print a123 Print b123 Print c123 Print a124 Print b124 Print c124 Print a125 Print b125 Print c125 Print a126 Print b126 Print c126 Print a127 Print b127 Print c127 Print a128 Print b128 Print c128 Print a129 Print b129 Print c129 Print a130 Print b130 Print c130 Print a131 Print b131 Print c131 Print a132 Print b132 Print c132 Print a133 Print b133 Print c133 Print a134 Print b134 Print c134 Print a135 Print b135 Print c135 Print a136 Print b136 Print c136 Print a137 Print b137 Print c137 Print a138 Print b138 Print c138 Print a139 Print b139 Print c139 Print a140 Print b140 Print c140 Print a141 Print b141 Print c141 Print a142 Print b142 Print c142 Print a143 Print b143 Print c143 Print a144 Print b144 Print c144 Print a145 Print b145 Print c145 Print a146 Print b146 Print c146 Print a147 Print b147 Print c147 Print a148 Print b148 Print c148 Print a149 Print b149 Print c149 Print a150 Print b150 Print c150 Print a151 Print b151 Print c151 Print a152 Print b152 Print c152 Print a153 Print b153 Print c153 Print a154 Print b154 Print c154 Print a155 Print b155 Print c155 Print a156 Print b156 Print c156 Print a157 Print b157 Print c157 Print a158 Print b158 Print c158 Print a159 Print b159 Print c159 Print a160 Print b160 Print c160 Print a161 Print b161 Print c161 Print a162 Print b162 Print c162 Print a163 Print b163 Print c163 Print a164 Print b164 Print c164 Print a165 Print b165 Print c165 Print a166 Print b166 Print c166 Print a167 Print b167 Print c167 Print a168 Print b168 Print c168 Print a169 Print b169 Print c169 Print a170 Print b170 Print c170 Print a171 Print b171 Print c171 Print a172 Print b172 Print c172 Print a173 Print b173 Print c173 Print a174 Print b174 Print c174 Print a175 Print b175 Print c175 Print a176 Print b176 Print c176 Print a177 Print b177 Print c177 Print a178 Print b178 Print c178 Print a179 Print b179 Print c179 Print a180 Print b180 Print c180 Print a181 Print b181 Print c181 Print a182 Print b182 Print c182 Print a183 Print b183 Print c183 Print a184 Print b184 Print c184 Print a185 Print b185 Print c185 Print a186 Print b186 Print c186 Print a187 Print b187 Print c187 Print a188 Print b188 Print c188 Print a189 Print b189 Print c189 Print a190 Print b190 Print c190 Print a191 Print b191 Print c191 Print a192 Print b192 Print c192 Print a193 Print b193 Print c193 Print a194 Print b194 Print c194 Print a195 Print b195 Print c195 Print a196 Print b196 Print c196 Print a197 Print b197 Print c197 Print a198 Print b198 Print c198 Print a199 Print b199 Print c199 Print a200 Print b200 Print c200 Print a201 Print b201 Print c201 Print a202 Print b202 Print c202 Print a203 Print b203 Print c203 Print a204 Print b204 Print c204 Print a205 Print b205 Print c205 Print a206 Print b206 Print c206 Print a207 Print b207 Print c207 Print a208 Print b208 Print c208 Print a209 Print b209 Print c209 Print a210 Print b210 Print c210 Print a211 Print b211 Print c211 Print a212 Print b212 Print c212 Print a213 Print b213 Print c213 Print a214 Print b214 Print c214 Print a215 Print b215 Print c215 Print a216 Print b216 Print c216 Print a217 Print b217 Print c217 Print a218 Print b218 Print c218 Print a219 Print b219 Print c219 Print a220 Print b220 Print c220 Print a221 Print b221 Print c221 Print a222 Print b222 Print c222 Print a223 Print b223 Print c223 Print a224 Print b224 Print c224 Print a225 Print b225 Print c225 Print a226 Print b226 Print c226 Print a227 Print b227 Print c227 Print a228 Print b228 Print c228 Print a229 Print b229 Print c229 Print a230 Print b230 Print c230 Print a231 Print b231 Print c231 Print a232 Print b232 Print c232 Print a233 Print b233 Print c233 Print a234 Print b234 Print c234 Print a235 Print b235 Print c235 Print a236 Print b236 Print c236 Print a237 Print b237 Print c237 Print a238 Print b238 Print c238 Print a239 Print b239 Print c239 Print a240 Print b240 Print c240 Print a241 Print b241 Print c241 Print a242 Print b242 Print c242 Print a243 Print b243 Print c243 Print a244 Print b244 Print c244 Print a245 Print b245 Print c245 Print a246 Print b246 Print c246 Print a247 Print b247 Print c247 Print a248 Print b248 Print c248 Print a249 Print b249 Print c249 Print a250 Print b250 Print c250 Print a251 Print b251 Print c251 Print a252 Print b252 Print c252 Print a253 Print b253 Print c253 Print a254 Print b254 Print c254 Print a255 Print b255 Print c255 Print a256 Print b256 Print c256 Print a257 Print b257 Print c257 Print a258 Print b258 Print c258 Print a259 Print b259 Print c259 Print a260 Print b260 Print c260 Print a261 Print b261 Print c261 Print a262 Print b262 Print c262 Print a263 Print b263 Print c263 Print a264 Print b264 Print c264 Print a265 Print b265 Print c265 Print a266 Print b266 Print c266 Print a267 Print b267 Print c267 Print a268 Print b268 Print c268 Print a269 Print b269 Print c269 Print a270 Print b270 Print c270 Print a271 Print b271 Print c271 Print a272 Print b272 Print c272 Print a273 Print b273 Print c273 Print a274 Print b274 Print c274 Print a275 Print b275 Print c275 Print a276 Print b276 Print c276 Print a277 Print b277 Print c277 Print a278 Print b278 Print c278 Print a279 Print b279 Print c279 Print a280 Print b280 Print c280 Print a281 Print b281 Print c281 Print a282 Print b282 Print c282 Print a283 Print b283 Print c283 Print a284 Print b284 Print c284 Print a285 Print b285 Print c285 Print a286 Print b286 Print c286 Print a287 Print b287 Print c287 Print a288 Print b288 Print c288 Print a289 Print b289 Print c289 Print a290 Print b290 Print c290 Print a291 Print b291 Print c291 Print a292 Print b292 Print c292 Print a293 Print b293 Print c293 Print a294 Print b294 Print c294 Print a295 Print b295 Print c295 Print a296 Print b296 Print c296 Print a297 Print b297 Print c297 Print a298 Print b298 Print c298 Print a299 Print b299 Print c299 Print a300 Print b300 Print c300 Print a301 Print b301 Print c301 Print a302 Print b302 Print c302 Print a303 Print b303 Print c303 Print a304 Print b304 Print c304 Print a305 Print b305 Print c305 Print a306 Print b306 Print c306 Print a307 Print b307 Print c307 Print a308 Print b308 Print c308 Print a309 Print b309 Print c309 Print a310 Print b310 Print c310 Print a311 Print b311 Print c311 Print a312 Print b312 Print c312 Print a313 Print b313 Print c313 Print a314 Print b314 Print c314 Print a315 Print b315 Print c315 Print a316 Print b316 Print c316 Print a317 Print b317 Print c317 Print a318 Print b318 Print c318 Print a319 Print b319 Print c319 Print a320 Print b320 Print c320 Print a321 Print b321 Print c321 Print a322 Print b322 Print c322 Print a323 Print b323 Print c323 Print a324 Print b324 Print c324 Print a325 Print b325 Print c325 Print a326 Print b326 Print c326 Print a327 Print b327 Print c327 Print a328 Print b328 Print c328 Print a329 Print b329 Print c329 Print a330 Print b330 Print c330 Print a331 Print b331 Print c331 Print a332 Print b332 Print c332 Print a333 Print b333 Print c333 Print a334 Print b334 Print c334 Print a335 Print b335 Print c335 Print a336 Print b336 Print c336 Print a337 Print b337 Print c337 Print a338 Print b338 Print c338 Print a339 Print b339 Print c339 Print a340 Print b340 Print c340 Print a341 Print b341 Print c341 Print a342 Print b342 Print c342 Print a343 Print b343 Print c343 Print a344 Print b344 Print c344 Print a345 Print b345 Print c345 Print a346 Print b346 Print c346 Print a347 Print b347 Print c347 Print a348 Print b348 Print c348 Print a349 Print b349 Print c349 Print a350 Print b350 Print c350 Print a351 Print b351 Print c351 Print a352 Print b352 Print c352 Print a353 Print b353 Print c353 Print a354 Print b354 Print c354 Print a355 Print b355 Print c355 Print a356 Print b356 Print c356 Print a357 Print b357 Print c357 Print a358 Print b358 Print c358 Print a359 Print b359 Print c359 Print a360 Print b360 Print c360 Print a361 Print b361 Print c361 Print a362 Print b362 Print c362 Print a363 Print b363 Print c363 Print a364 Print b364 Print c364 Print a365 Print b365 Print c365 Print a366 Print b366 Print c366 Print a367 Print b367 Print c367 Print a368 Print b368 Print c368 Print a369 Print b369 Print c369 Print a370 Print b370 Print c370 Print a371 Print b371 Print c371 Print a372 Print b372 Print c372 Print a373 Print b373 Print c373 Print a374 Print b374 Print c374 Print a375 Print b375 Print c375 Print a376 Print b376 Print c376 Print a377 Print b377 Print c377 Print a378 Print b378 Print c378 Print a379 Print b379 Print c379 Print a380 Print b380 Print c380 Print a381 Print b381 Print c381 Print a382 Print b382 Print c382 Print a383 Print b383 Print c383 Print a384 Print b384 Print c384 Print a385 Print b385 Print c385 Print a386 Print b386 Print c386 Print a387 Print b387 Print c387 Print a388 Print b388 Print c388 Print a389 Print b389 Print c389 Print a390 Print b390 Print c390 Print a391 Print b391 Print c391 Print a392 Print b392 Print c392 Print a393 Print b393 Print c393 Print a394 Print b394 Print c394 Print a395 Print b395 Print c395 Print a396 Print b396 Print c396 Print a397 Print b397 Print c397 Print a398 Print b398 Print c398 Print a399 Print b399 Print c399 Print a400 Print b400 Print c400 Print a401 Print b401 Print c401 Print a402 Print b402 Print c402 Print a403 Print b403 Print c403 Print a404 Print b404 Print c404 Print a405 Print b405 Print c405 Print a406 Print b406 Print c406 Print a407 Print b407 Print c407 Print a408 Print b408 Print c408 Print a409 Print b409 Print c409 Print a410 Print b410 Print c410 Print a411 Print b411 Print c411 Print a412 Print b412 Print c412 Print a413 Print b413 Print c413 Print a414 Print b414 Print c414 Print a415 Print b415 Print c415 Print a416 Print b416 Print c416 Print a417 Print b417 Print c417 Print a418 Print b418 Print c418 Print a419 Print b419 Print c419 Print a420 Print b420 Print c420 Print a421 Print b421 Print c421 Print a422 Print b422 Print c422 Print a423 Print b423 Print c423 Print a424 Print b424 Print c424 Print a425 Print b425 Print c425 Print a426 Print b426 Print c426 Print a427 Print b427 Print c427 Print a428 Print b428 Print c428 Print a429 Print b429 Print c429 Print a430 Print b430 Print c430 Print a431 Print b431 Print c431 Print a432 Print b432 Print c432 Print a433 Print b433 Print c433 Print a434 Print b434 Print c434 Print a435 Print b435 Print c435 Print a436 Print b436 Print c436 Print a437 Print b437 Print c437 Print a438 Print b438 Print c438 Print a439 Print b439 Print c439 Print a440 Print b440 Print c440 Print a441 Print b441 Print c441 Print a442 Print b442 Print c442 Print a443 Print b443 Print c443 Print a444 Print b444 Print c444 Print a445 Print b445 Print c445 Print a446 Print b446 Print c446 Print a447 Print b447 Print c447 Print a448 Print b448 Print c448 Print a449 Print b449 Print c449 Print a450 Print b450 Print c450 Print a451 Print b451 Print c451 Print a452 Print b452 Print c452 Print a453 Print b453 Print c453 Print a454 Print b454 Print c454 Print a455 Print b455 Print c455 Print a456 Print b456 Print c456 Print a457 Print b457 Print c457 Print a458 Print b458 Print c458 Print a459 Print b459 Print c459 Print a460 Print b460 Print c460 Print a461 Print b461 Print c461 Print a462 Print b462 Print c462 Print a463 Print b463 Print c463 Print a464 Print b464 Print c464 Print a465 Print b465 Print c465 Print a466 Print b466 Print c466 Print a467 Print b467 Print c467 Print a468 Print b468 Print c468 Print a469 Print b469 Print c469 Print a470 Print b470 Print c470 Print a471 Print b471 Print c471 Print a472 Print b472 Print c472 Print a473 Print b473 Print c473 Print a474 Print b474 Print c474 Print a475 Print b475 Print c475 Print a476 Print b476 Print c476 Print a477 Print b477 Print c477 Print a478 Print b478 Print c478 Print a479 Print b479 Print c479 Print a480 Print b480 Print c480 Print a481 Print b481 Print c481 Print a482 Print b482 Print c482 Print a483 Print b483 Print c483 Print a484 Print b484 Print c484 Print a485 Print b485 Print c485 Print a486 Print b486 Print c486 Print a487 Print b487 Print c487 Print a488 Print b488 Print c488 Print a489 Print b489 Print c489 Print a490 Print b490 Print c490 Print a491 Print b491 Print c491 Print a492 Print b492 Print c492 Print a493 Print b493 Print c493 Print a494 Print b494 Print c494 Print a495 Print b495 Print c495 Print a496 Print b496 Print c496 Print a497 Print b497 Print c497 Print a498 Print b498 Print c498 Print a499 Print b499 Print c499 Print a500 Print b500 Print c500 End Function func_context() Funktioniert auch als Sub-Routine mit Gosub und ebenso mit Type-Fields. Ich behaupte mit fester Überzeugung, dass du einen Fehler syntaktischer Art in deinem Code hast. So sehr man sich auch über Fehler aufregt, die Faustregel ist: Der Compiler hat immer Recht. Der Fehler liegt bei dir. Und solange du nicht einen Code lieferst, der das Gegenteil beweist, solltest du deinen Code noch einmal überprüfen. Ich sehe ja ein, dass Compiler nicht fehlerfrei sind und schon gar nicht der Blitz3D-Compiler, was Code: [AUSKLAPPEN] Data ""++""
beweist. Aber dein Fehler klingt eher nach "Irgendwo etwas vergessen, was der Compiler erwartet und deshalb mittendrin abbricht". Falls du mir allerdings einen Code vorstellen kannst, der den Fehler reproduziert, ändere ich meine Meinung gerne. |
||
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik |
- Zuletzt bearbeitet von E. Urbach am Do, Nov 12, 2009 21:34, insgesamt 2-mal bearbeitet
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Der Compiler hat immer Recht.
Und eine Fehlermeldung ist immer die gemeinste Rache deines Computers ![]() |
||
![]() |
CasiopayaBetreff: Re: An Holzchopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
Omenaton_2 hat Folgendes geschrieben: B., Ganz, ganz häßlich wäre der Weg, daß ich gar keine neue Variablen definiere, sondern : ich springe zu dem Type Instanz des Musters. Ich kopiere den Wert dessen in meine beliebte "TempInt oder TempDeci, Temp$" Variablen. Dann springe ich zu der Type Instanz des neu erschaffenen Types (Neuer Container) und lese den Wert aus diesem Temp Variable ein. Also davon rate ich dir dringend ab. Kein Mensch ist fähig bei mehreren hundert derart verwendeten Variablen den Überblick zu behalten. Du würdest binnen kürzester Zeit aufgeben müssen. Insgesamt ist meine Meinung aus Erfahrungen mit anderen Sprachen (C#, Java, VB, Ada, C, PHP) und der Compilerbau-Vorlesung: Ja, es gibt so eine Variablen-Mengen Begrenzung, ![]() ![]() ![]() ![]() ![]() ![]() Die Grundannahme von der du ausgehen solltest ist: Der Compiler funktioniert gemäß seiner Spezifikation, d.h. wenn du ihm gültigen Code gibst, erzeugt er daraus ein gültiges Kompilat. Das darfst du nicht mit folgendem verwechseln: Wenn Der Compiler keine spezifische Fehlermeldung (z.B über einen Syntaxfehler) ausgibt, gibt es keine solche Fehler. Gerade beim Blitz-Compiler sind mir schon Dinge unterlaufen, die eigentlich ein starkes Stück sind. Weil man irgendwo in der 2000. Zeile ein Endif vergessen hat, labert der Compiler irgendwas über fehlende Deklarationen in einem anderen Modul... Deshalb: Versuch deinen Code in mehrere Module zu zerlegen, die alle für sich genommen geprüft werden und funktionieren. Teile und Hersche, irgendwann wirst du den Fehler finden. Versuch dabei die Kopplung zwischen den Modulen möglichst gering zu halten, und den Zusammenhalt innerhalb der Module möglichst hoch. |
||
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zu der These, daß der Fehler in meinem Code liegt und nicht an einer Variablenbegrenzung :
- Basicprogger, du hast da 2000 Variablen. Ok, das geht, aber ich bin nach Schätzungen bei ungefähr 4000 Variablen (wenn ich die ca 3500 Type Fields als Locals mitberechne). Nur weil es bei 2000 noch geht, heißt es nicht, daß es bei sagen wir 5000 auch noch ginge. Was den Fehler in Code angeht. Ich kann mir nicht vorstellen, daß das ein Syntax Fehler sein soll und logischer Fehler schon gar nicht. Deswegen nicht, weil der Fehler NUR auftritt, wenn ich ab einer bestimmten Zeile noch weitere Variablen einführen will, sonst nicht. Wenn das Programm ohne diese zusätzlichen Zeilen einwandfrei funktioniert, dann MUSS der Fehler (Falls das ein Syntax Fehler ist) in den neuen Zeilen drin sein. Ansonsten könnte es sein, daß in den neuen Zeilen an sich kein direkter Fehler ist, aber etwas, was einen Fehler an einer anderen Stelle in Code erst verursacht, in dem es plötzlich in Widerspruch zu etwas steht. Aber das kann in diesem Fall nicht sein, weil deise Zeilen so simpel und einheitlich aufgebaut sind, daß da sich kein Fehler verstecken kann. Es deutet alles sehr darauf hin, daß es sich hier um eine Variablenanzahlbegrenzung handelt. (erinnere dich nur den Test den ich vorne beschrieben habe in dem ich eine Variable zuweise, den es schon gab und das geht, sobald ich aber den Variablennamen auf einen völlig neuen ersetze geht es nicht mehr. Egal was. - BigBug "Und 400 Felder in einem Type halte ich für total übertrieben. ...Stichworte: BlitzArrays in Types, Types in Types und Bitoperationen für Ja/Nein-Werte " Es sind in der Wirklichkeit sogar ca 450 Felder, nur sind einige davon immer nur temporär in Gebrauch (Timer, Flags, etc) die nicht abgespeichert und geladen werden, weil sie Anfangs noch auf Null stehen können. Diese lasse ich auch in der neuen Copy Rutine raus, deshalb rede ich nur von 400. Diese über 400 Felder sind nötig. Ich werde nicht anfangen aufzuzählen wofür alles die da sind, aber die sind nicht nur so zum Spaß da. Anfangs waren es unter 100, dann so wie ich immer mehr und mehr Features eingebaut habe, wuchsen auch die Anforderungen an den Object Type und ein paar werden bestimmt noch hinzukommen. Solange bis man das nicht selber tatsächlich macht, kann man sich das nur schwer oder gar nicht vorstellen. Types in Types, BlitzArrays, etc. Ich habe schon geschrieben, daß man immer wieder vor die Wahl gestellt wird, wie man etwas programmiertechnisch löst und dabei muß man immer ein Kompromiß eingehen. Man kann selten alles haben. Bei einem sehr großen Projekt wie bei meinem (und ich habe auch schon die Erfahrung von dem Aufbauechtzeit Strategiespiel Vulpec Mutations hinter mir) ist es aus meiner Sicht essentiell wichtig, daß der Code so simple und übersichtlich und vor allem leicht verständlich wie nur möglich bleibt. Wenn es sein muß opfere ich diesem Zweck Performance und Code Länge. Wenn ich anfange Types in Types zu benutzen und noch weiter, dann wird mein Code zu unverständlich. Es geht darum, daß wenn ich mit dem Auge den Code durchscrolle, daß das möglichst schnell geht und ich mich dabei nicht übermäßig bemühen muß die Zeilen zu interprätieren. Kompaktheit des Codes oder Sparen mit Speicher und Performance sind für mich nicht am Wichtigsten. Die zählen viel und wenn es geht mache ich alles so, daß es für die erwähnten Attributen günstig ist, aber die haben nicht die höchste Priorität. Konkret zu der Sache mit den über 400 Felder Type des Static Objects (meist Gegnerschiffe). Ich habe schon vor Jahren bevor ich es anfing darüber nachgedacht, ob ich den Type nicht lieber in 2 oder gar mehrere aufspalten sollte. Ich könnte die Typ spezifische Variablen die bei allen Individuen des gleiche Types immer unverändert gleich sind in einem extra Typus Type zusammenfassen. Die Waffen werte (von denen es sehr viele gibt) vielleichtauch extra machen. Die Static Objects hätten dann nur noch die (immer noch viele) Variablen die sich ständig und individuell ändern können. Wenn ich das so machen würde, (und nicht so wie es jetzt ist, daß alle relavanten Werte eines Static Objects in einem Type drin sind) dann hätte das einen einzigen guten Effekt : ich würde Speicher sparen, weil die sonst immer gleiche Type Felder nicht vielfach wiederholt für jedes Individum existieren müßten. Das wäre zugegeben nett. Es würde aber nicht bedeuten, daß ich weniger unterschiedliche Variablen hätte. Die Anzahl der Variablen Typen würde sich nicht verändern, nur die Anzahl der einzelnen Instanzen dieser Variablen wäre geringer. Also würde mir das bei meinem momentanen Problem nicht helfen. Aber, es hätte auch negative Folgen : Wenn die Variablen einer logischen Einheit, eines Static Objectes (also meist eines Gegnerschiffes) in verschiedenen Types aufgeteilt zu finden sind, dann würde das bedeuten, daß ich jedes Mal (und das kommt sehr, sehr häufig vor) wenn ich einen bestimmen Static Object anspringe (oder alle in Loop wegen eines Checks durchgehe) auch gleichzeitig die dazu passenden andere Types (für Grund-Typus, Waffen Typus, etc) auch noch anspringen müßte. Das würde den Code weniger übersichtlich und länger machen. Es würde zusätzlich Gedenkzeit für mich kosten, die enstprechenden Stellen in Code zu deuten und die einzelnen Variablen gedanklich richtig einzuordnen. Ich werde darüber noch nachdenken. Das ist eine Frage bei der die Entscheidung sehr schwer abzuwägen ist. Hätte ich am Anfang schon gewußt, wie Viele Felder ich für ein Static Object brauchen werde, kann es gut sein, daß ich mich für die Aufspaltung entschieden hätte. Das ist nichts, was ich einfach so ändern könnte. Dafür müßte ich schon jetzt sehr, sehr viel verändern. Das wäre extrem aufwendig. Aber trotzdem, noch machbar. Solange ich nicht anfange den Leveleditor zu machen, mache ich nur wenige Objekte rein, damit ich nicht zu viel verändern muß, wenn sich was ändert. Ich habe trotzdem schon jetzt ca 20 Objekte drin mit jeweils ca 450 Variablen. Es ist also ein erheblicher Aufwand. - Casiopaya "Also davon rate ich dir dringend ab. Kein Mensch ist fähig bei mehreren hundert derart verwendeten Variablen den Überblick zu behalten. Du würdest binnen kürzester Zeit aufgeben müssen. " Nein, weil ich an der Stelle wo ich das machen würde nichts machen oder beachten muß. Da werden einfach nur die Variablen hin und herkopiert, sonst nichts. Da muß man nichts verstehen und mit diesem Code-Abschnitt brauche ich mach nach dem das einmal funktionierend drin ist nicht mehr zu beschäftigen. Das wird ein Inlcude, den ich ruhig vergessen kann. Die 400 Variablen an sich sind für mich bewiesener Maßen kein Problem. Damit komme ich gut klar. Die haben alle einen vielsagenden Namen und sind sortiert und sind sind langsam so angewachsen, ich wurde mit denen nicht auf ein Mal konfrontiert. |
||
- Zuletzt bearbeitet von Omenaton_2 am Fr, Nov 13, 2009 16:30, insgesamt 2-mal bearbeitet
Gehe zu Seite 1, 2, 3, 4 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group