Bank-Funktionen
Übersicht

RocysBetreff: Bank-Funktionen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eine kleine Funktionssammlung zum Thema Banks.
Zuerst sind die "add"-Befehle, die einen Wert an eine Bank anhaengen und, falls diese nicht existiert, eine erstellen. Rueckgabewert ist die Adresse der Bank Folgender Code Code: meine_bank=BANK_add_byte(meine_bank,15) wuerde also schauen, ob die Bank "meine_bank" existiert. Wenn nicht wuerde sie erstellt werden. In jedem Fall wird ans Ende der Bank der Wert 15 angehaengt. Dann gibt es noch BANK_new_read und BANK_next_data: Nehmen wir mal an, man speichert in einer Bank Gegnerdaten. Diese Daten bestehen aus 1 Byte fuer die Gegnerart 1 Int fuer die HPs 1 Short fuer die Munition Dann wuerde man folgende Schleife machen, um alle Gegner durchzugehen: Code: BANK_new_read(7) repeat BANK_next_data(gegner_bank) gegner_art=peekbyte(gegner_bank,BANK_readpos) gegner_hp=peekint(gegner_bank,BANK_readpos+1) gegner_ammo=peekshort(gegner_bank,BANK_readpos+5) until BANK_end=1 Bank_new_read startet also die Durchsuchung einer Bank. Der Parameter gibt an, wie gross der Datensatz ist. BANK_next_data setzt den Zeiger um die groesse eines Datensatzes weiter. Also koennen wir alle Datensaetze in der Bank durchgehen. BANK_readpos ist die Adresse des jeweiligen Datensatzes. Wenn schliesslich alle Datensaetze durchgegangen sind, wird die Variable BANK_end auf 1 gesetzt. Wir wissen, es gibt nichts mehr auszulesen. Code: Function BANK_add_byte(lcl_bank%,lcl_data%) ;diese Funtion haengt an eine Bank ein byte an ;wenn es die bank nicht gibt, wird sie erstellt ;die Adresse der Bank wird zurueckgegeben If lcl_bank%=0 Then lcl_bank=CreateBank(1) ;Wenn es die Bank nicht gibt, wird sie mit der Groesse 1 erstellt Else ResizeBank(lcl_bank,BankSize(lcl_bank)+1) ;Wenn es sie gibt, wird ihre Groesse um 1 erhoeht End If PokeByte(lcl_bank,BankSize(lcl_bank)-1,lcl_data) ;das Byte wird angehaengt Return lcl_bank ;die Adresse der Bank wird zurueckgegeben End Function Function BANK_add_short(lcl_bank%,lcl_data%) ;diese Funtion haengt an eine Bank einen Short-Wert an ;wenn es die bank nicht gibt, wird sie erstellt ;die Adresse der Bank wird zurueckgegeben If lcl_bank%=0 Then lcl_bank=CreateBank(2) ;Wenn es die Bank nicht gibt, wird sie mit der Groesse 2 erstellt Else ResizeBank(lcl_bank,BankSize(lcl_bank)+2) ;Wenn es sie gibt, wird ihre Groesse um 2 erhoeht End If PokeShort(lcl_bank,BankSize(lcl_bank)-2,lcl_data) ;der Short-Wert wird angehaengt Return lcl_bank ;die Adresse der Bank wird zurueckgegeben End Function Function BANK_add_int(lcl_bank%,lcl_data%) ;diese Funtion haengt an eine Bank einen Int-Wert an ;wenn es die bank nicht gibt, wird sie erstellt ;die Adresse der Bank wird zurueckgegeben If lcl_bank%=0 Then lcl_bank=CreateBank(4) ;Wenn es die Bank nicht gibt, wird sie mit der Groesse 4 erstellt Else ResizeBank(lcl_bank,BankSize(lcl_bank)+4) ;Wenn es sie gibt, wird ihre Groesse um 4 erhoeht End If PokeInt(lcl_bank,BankSize(lcl_bank)-4,lcl_data) ;der INT-Wert wird angehaengt Return lcl_bank ;die Adresse der Bank wird zurueckgegeben End Function Function BANK_add_float(lcl_bank%,lcl_data#) ;diese Funtion haengt an eine Bank einen Float-Wert an ;wenn es die bank nicht gibt, wird sie erstellt ;die Adresse der Bank wird zurueckgegeben If lcl_bank%=0 Then lcl_bank=CreateBank(4) ;Wenn es die Bank nicht gibt, wird sie mit der Groesse 4 erstellt Else ResizeBank(lcl_bank,BankSize(lcl_bank)+4) ;Wenn es sie gibt, wird ihre Groesse um 4 erhoeht End If PokeFloat(lcl_bank,BankSize(lcl_bank)-4,lcl_data#) ;der Float-Wert wird angehaengt Return lcl_bank ;die Adresse der Bank wird zurueckgegeben End Function Global BANK_readpos ;Wo lesen wir in Banks Global BANK_data_size ;Wie viele Byte ist ein Datensatz lang Global BANK_end=0 ;sind wir schon am Ende der Bank angelangt Function BANK_new_read(lcl_data_size%) ;startet einen neuen Lese-Vorgang aus einer Bank BANK_readpos=-lcl_data_size ;setze die Leseposition der Bank auf 0 BANK_data_size=lcl_data_size ;die Groesse der Datensaetze wird festgelegt BANK_end=0 ;Wir sind noch nicht am Ende der Bank End Function Function BANK_next_data(lcl_bank%) ;setzt die Readpos auf den naechsten Dateneintrag in der Bank BANK_readpos=BANK_readpos+BANK_data_size ;Erhoehe den Bank_read_pos If BANK_readpos>=(BankSize(lcl_bank)-BANK_data_size) Then BANK_end=1 ;Wenn die Bank zuende ist, wird BANK_end=1 End Function |
||
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich will nichts sagen, aber eigentlich benutzen die meisten Leute für das was du da beschreibst Types.
Es mag sein, dass Banks minimal schneller sind, obwohl ich mir da auch nicht mehr so sicher bin, wenn man wie du den Umweg über mehrere Funktionen macht um Werte auszulesen. Ob die Qualität oder Originalität für das Codearchiv ausreichend ist soll ein Moderator beurteilen, aber ich empfinde den Code als wenig zu gebrauchen. |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
Goodjee |
![]() Antworten mit Zitat ![]() |
---|---|---|
nunja, das ist ja im prinzip ne liste, und somit kann es keine types ersetze, weil bb nur eine liste hat, so kann man mehrere machen
man könnte sich natürlich auch selber ne liste basteln mit types, indem man einen type knoten erstellt, der einen inhalt und einen vorgänger und nachfolger hat, aber so gehts ja auch ![]() |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Rocys |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also, ich benutze es, bei 'Traders' für folgendes.
ich habe ein Array PLANET_Ground_job_applications(max_planet,max_ground,max_worker). alle max_ sind variablen. Wenn jetzt eine Person sich auf den Job bewirbt, wird ihre ID in die Bank geschrieben, die ich in dem Array speichere. Ich wüsste jetzt nicht, wie man das mit Types lösen könnte. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group