Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - p2

Pages: [1] 2 3
1
Hallo Leute,
Ich habe vor einiger Zeit angefangen ein Axe Tutorial auf Deutsch zu schreiben. Keine kurze Helpfile sondern ein schön ausführliches Tutorial bei dem man wenn möglich bei einmaligem Durchlesen schon Axe lernt ^^
Leider habe ich selbst wenig Ahnung von Axe und schreibe nur auf was mit Hayleia, Sorunome, c4ooo, DarkestEx und viele andere beibringen. Außerdem habe ich auch nicht besonders viel Zeit wodurch ich ewig zum schreiben brauche. Daher habe ich gedacht es könnten ja einfach alle mitschreiben die Lust haben ^^
Hier ist was ich bisher habe, es fehlen noch viele Kapitel (und nir ein paar davon sind vollständig)
Ich hoffe es ist nicht zu schlecht geschrieben xD
Änderungsvorschläge, weitere Kapitel oder was auch immer bitte einfach in die Replies, ich update dann den originalen Post :)
(Diesen Post gibt es auf CodeWalrus und auf Omnimaga aber ich trage die Ergebnisse zusammen. Es ist also egal wo ihr antwortet)






ACHTUNG: Um Schäden an deinem Taschenrechner zu vermeiden, probiere bitte NIEMALS irgendwelche Codestücke aus, dabei handelt es sich nur um Anschauungs-Beispiele die NICHT ausgeführt werden dürfen! Am Ende jedes Kapitels findest du ungefährliche Beispiele zum Ausprobieren, die in GRÜN markiert sind!


In diesem Kapitle lernst du, Axe zu verwenden und die ersten Grundlagen.
Spoiler For Axe Grundlagen:
Um ein Axe-Programm zu schreiben, muss zuerst das Programm als Axe-source gekennzeichnet und ein Name angegeben werden. Diesen Namen erhält dann dein Programm nach dem Kompillieren. Dazu schreibst du in die erste Zeile deines Programms zuerst einen Punkt und anschließend einen Namen. Dieser Name muss alphanumerisch sein (Groß- und Kleinbuchstaben plus Zahlen) und muss mit einem Großbuchstabe beginnen.
Hier ein Beispiel:
Code: [Select]
PRGM:POKESRC1
:.Pokemon1
:
:1->X

Viele der Befehle aus TI-Basic wurden in Axe übernommen oder nur erweitert. Einige wenige wurden aber auch durch eigene Axe-befehle ersetzt. Öffnest du also Menüs wie MATH oder PRGM werden dir einige neue Befehle auffallen. Dies gilt aber naturlich nur in Programmen, die als Axe-source gekennzeichnet sind. Außerhalb solcher Programme solltes du durch Axe keinerlei Änderungen bemerken.

Ein erstes Beispiel für übernommene und veränderte Befehle in Axe ist dieser Code:
Code: [Select]
PRGM:POKESRC1
:.Pokemon1
:
:1->X
:ClrHome
:Output(1,3,X)
Eine Kurze Erklärung: Wie auch in TI-Basic wird beim Befehl Output( zuerst die Zeile und dann die Spalte angegeben. Dieser Befehl wurde als übernommen, genauso der Befehl ClrHome, der zuerst den Bildschirminhalt für uns löscht. Allerdings wird dieser Code nicht die Zahl 1 sondern einige unlesbare Zeichen ausspucken. Das liegt daran, dass Axe nicht standardmäßig Zahlen als Zahlen anzeigt. (ALS WAS DANN???) Um X als normale Dezimalzahl anzuzeigen, musst du also >Dec anhängen (du findest >Dec im MATH Menü). Dieser Befehl wandelt normalerweise Brüche in Kommazahlen um - Axe hat diesen Befehl verändert und verwendet ihn zur Kennzeichnung was angezeigt werden soll. Alternativ kannst du auch >Char anhängen. Das Signalisiert dem Compiler dass du hier das Zeichen nummer 1 (da 1->X) aus dem Zeichensatz des Taschenrechners angezeigt werden soll. Für X=1 solltest du hier ein kursives n bekommen.
Hier ein Beispielcode zum Ausprobieren:
Code: [Select]
PRGM:POKESRC1
:.Pokemon1
:
:35->X
:ClrHome
:Output(15,3,X>Char
:Output(11,4,X>Dec
Zur Information: Der Befehl Output( schreibt zahlen automatisch rechtsbündig in einem gedachten 5 Zeichen breiten Feld, daher die 11 und die 15 damit beide Anzeigen rechtsbündig sind. :)


Dieses Kapitel gibt einen Überblick über effzientes Arbeiten mit Variablen
Spoiler For "Arbeiten mit Variablen":
Axe ist weit mehr als TI-Basic auf geschwindigkeit optimiert und bietet daher auch viel mehr Möglichkeiten. Um dein Axe-Programm auch schön schnell ausführen zu können solltest du aber darauf achten, es auch so effizient wie möglich zu schreiben. Dadurch gewinnst du sowohl Speicherplatz als auch Geschwindigkeit.

Schon die Zuweisung einfacher Variaben lässt sich in Axe optimieren:
Dies ist ein Beispiel für einen Langsamen, nicht optimierten Code:
Code: [Select]
2->A:2->B:1->X
1->Y
1->Z[code]
Dieser lässt sich so modifizieren:
[code]2->A->B
1->X->Y->Z
Spoiler For Was der Prozessor hier macht:
Im Codebeispiel 1 (dem nicht optimierten Code) macht der Prozessor folgendes:
Code: [Select]
"2" --> Zwischenspeicher
Zwischenspeicher --> Variable-A
"2" --> Zwischenspeicher
Zwischenspeicher --> Variable-B
"1" --> Zwischenspeicher
Zwischenspeicher --> Variable-X
"1" --> Zwischenspeicher
Zwischenspeicher --> Variable-Y
"1" --> Zwischenspeicher
Zwischenspeicher --> Variable-Z

Im Codebeispiel 2 (dem optimierten Code) macht der Prozessor folgendes:
Code: [Select]
"2" --> Zwischenspeicher
Zwischenspeicher --> Variable-A
Zwischenspeicher --> Variable-B
"1" --> Zwischenspeicher
Zwischenspeicher --> Variable-X
Zwischenspeicher --> Variable-Y
Zwischenspeicher --> Variable-Z

Damit spart man natürlich nicht besonders viel Zeit, es wird aber immer empfohlen möglichst optimierten Axe code zu schreiben da der Unterschied bei größeren Programmen doch deutlich bemerkbar ist.

Zwar ist es eher üblich zuerst die Grundlagen und danach erst die Optimierungen zu lernen, allerdings ist es sehr zu empfehlen von anfang an optimierten Code zu schreiben. Dadurch gewöhnst du dir einen besseren Programmierstil an und du sparst deutlich Zeit da es viel länger dauert einen schlechten Code zu modifizieren.



In diesem Kapitel bekommst du eine Einführung in Schleifen und Bedingungen in Axe
Spoiler For Schleifen und Bedingungen:
Wie auch TI-Basic verwendet Axe If für einfache Bedingungen sowie For( und While für Schleifen. Deren Verwendung und Schreibweise ist aber teilweise anders als du es vielleicht schon von TI-Basic gewohnt bist:

Der IF-Befehl
Anders als in TI-Basic ist eine If-Abfrage IMMER mit einem End zu beenden. Dabei ist es egal ob der dadurch ausgeführte Befehlsblock nur einen einzigen Befehl oder 1000 Befehle umfasst. Dafür ist aber auch kein Then mehr nötig:
Code: [Select]
If x=2
 3->X
 5->Z
End
Hier im Beispiel werden sowohl 3->X als auch 5->Z nur ausgeführt, wenn die if-Bedingung zutrifft. TI-Basic hätte den if-Block nach dem ersten Befehl (5->Z) beendet.
Natürlich lässt sich auch ein Else einbauen und das If verschachteln:
Code: [Select]
If X=2
 3->X
 4->Y
Else
 4->X
 if Y=5
  10->Z
 End
End
Hier wurde der Code zur besseren Lesbarkeit mit Leerzeichen eingerückt. Anders als TI-Basic erlaubt Axe es, deinen Code tatsächlich so zu schreiben. Beim Kompillieren werden diese Leerzeichen ignoriert, sie haben also keinen Einfluss auf das spätere Programm und dienen nur der besseren Lesbarkeit. Sie zu verwenden lohnt sich leider wegen der geringen Bildschirmbreite des Taschenrechners nur selten.

Natürlich lassen sich auch Bedingungen in Axe noch stark optimieren (wenn auch diesmal auf Kosten der Lesbarkeit, aber man gewöhnt sich daran).
*HIER DEN SCHEIß MIT A=B?1,2:->X UND SO ERKLÄREN






In diesem Kapitle lernst du, wie du den Hauptspeicher (RAM) deines Taschenrechners verwenden kannst, um weitere Variablen speichern zu können.
Spoiler For Die verwendung des Hauptspeichers:
In diesem Kapitel ist es besonders wichtig, nur Codes auszuführen, die mit Grün markiert sind! Experimente mit dem Hauptspeicher können echte Schäden verursachen. Wenn du dir nicht sicher bist, wende dich an die Community, damit sie deine Codes prüft, bevor du etwas ausprobierst.

Axe bietet die Möglichkeit, Variablen direkt in den RAM zu speichern. Das hat den Vorteil dass dir die Variablennamen nicht ausgehen (A-Z reichen oft nicht). Das geht folgendermaßen:

In Axe wird mit {X} der inhalt des Bytes X zurückgegeben.
X bezieht sich dabei auf die Hauptspeicheradresse, also die Adresse im RAM.
Hier ein Beispiel - Dies überschreibt den Inhalt des ersten Bytes (Adresse 0) mit X, speichert also X an der ersten Position im RAM:
Code: [Select]
X->{0}(Na gut, eigentlich die erste Position im Flash-speicher, da dieser bei $0000 beginnt und der RAM erst bei $8000 (Hexadezimale Angaben - also 32.768 in Dezimal).)

Eine 1 Byte lange Zahl kann nur 2^8 Werte haben, also eine zahl zwischen 0 und 255.
Das ist natürlich viel zu wenig, also verwendet Axe standartmäßig 2 Byte pro Variable.
Damit kommt man auf 2^16 Werte, also einen Zahlenbereich von 0 bis 65.535

Das heißt dieser Code wird uns ein Problem bereiten:
Code: [Select]
300->{0}Ein kurze Erklärung:
Die Zahl 300 ist binär:   0000-0001-0010-1100, also 256+32+8+4
Sie besteht also aus 2 Bytes: 0000-0001 und 0010-1100. Versucht man nun die 300 wie oben abzuspeichern, kann nur das erste Byte tatsächlich abgespeichert werden. Das heißt aus der 300 wird 0000-0001, also die Zahl 1.

Um dieses Problem zu umgehen, wird {0}^r verwendet.
(Du findest das r unter 2nd -> APPS)
Durch das Anhängen des r signalisierst du dem Compiler, dass hier nicht nur das eine Byte {0} angesprochen werden soll, sondern zwei Bytes auf einmal:
Code: [Select]
300->{0}^rDas erste Byte (die Adresse 0) bekommt hier 0000-0001 zugewiesen und das zweite Byte (die Adresse 1) bekommt 0010-1100.

Um eine 1Byte lange Zahl zu speichern (0-255) reicht also ein Byte, für den Rest müssen 2 Bytes verwendet werden:
Code: [Select]
5->{0}
42->{1}
83->{2}
9001->{3}^r
500->{5}^r
Hierbei ist zu beachten dass {4} bereits durch 9001->{3}^r mitverwendet wird.
Wenn ihr nicht allzuviel Wert auf Speicherplatz legt aber auf nummer sicher gehen wollt, verwendet also einfach nur gerade Hauptspeicheradressen und arbeitet immer mit Bytepaaren. ;)
Code: [Select]
5->{0}^r
42->{2}^r
83->{4}^r
9001->{6}^r
500->{8}^r

Genauso wie sich einzelne Bytes im Hauptspeicher einfach setzen lassen, kann man sie natürlich auch wieder abrufen:
Code: [Select]
555->{16}^r
{16}^r+7->A[code]

Nun ist es natürlich keine gute Idee, irgendwelche Adressen im RAM (oder Flash) einfach zu überschreiben. Du riskierst damit ernsthafte Schäden an deinem Taschenrechner!
Aber natürlich bietet Axe dir eine sichere Möglichkeit diese Technik einzusetzen: [b]L1[/b]
Anders als in Basic ist [b]L1[/b] in Axe keine Liste, sondern eine einfache Adresse im Hauptspeicher. Du denkst die L1 am besten als konstante variable mit irgendeiner komischen Zahl als wert. Das hört sich jetzt komisch an, ist aber eigentlich ganz einfach:
[b]L1[/b] markiert eine Position im Hauptspeicher, an der unbenutzter Speicher zur Verfügung steht, wodurch du also auch nichts kaputt machen kannst :)
Wenn du jetzt das erste Bytepaar von L1 ansteuern willst, machst du das so:
[code]9000->{L1}^r
{L1}^r+1->A
Natürlich stellt L1 dir auch ordentlich Platz zur verfügung: Du kannst die nächsten 256 Bytes, die nach L1 kommen, problemlos verwenden.
Übrigens: Zwar ist L1 nur eine einzelne Position, aber man spricht trotzdem davon, Variablen IN L1 abzuspeichern wenn sie in diesem Bereich gespeichert werden. Der einachkeit halber übernehmen wir das auch.
Das heißt wenn du mehr Speicherplatz für Variablen brauchst, stehen dir {L1+0}^r bis {L1+256}^r zur freien Verfügung.

Theoretisch kannst du das selbe übrigens auch mit L2, L3, L4, L5 und L6 machen, davon wird aber abgeraten da diese schon von Axe verwendet werden:
Wenn du z.B: Interrupts in deinem Programm verwendest, werden diese in L2 gespeichert. Und L6 entspricht dem Bildschirm, d.h. Veränderst du etwas in L6 ist das als würdest du etwas auf dem Bildschirm anzeigen lassen. Solange dir L1 reicht vermeide es also, L2, L3, L4, L5 oder L6 zu verwenden. Und wenn dir doch der Platz ausgeht, dann frage besser einen Profi bevor du es einfach ausprobierst.

Spoiler For Codebeispiele zum ausprobieren:
Diese Codes kannst du selbst ausprobieren:
Code: [Select]
.ADRESS1
9000->{L1}^r
{L1}^r+1->A
Output(1,1,A>Dec)
Sleep(5000)
Code: [Select]
.ADRESS2
1->{L1+0}^r
2->{L1+2}
3->{L1+3}^r
{L1+0}^r+{L1+2}+{L1+3}^r->X
Output(1,1,A>Dec)
Sleep(5000)


Zusätzlich besteht noch die Möglichkeit, einzelne Nibbel anzusteuern (ein Nibbel ist eine 4Bit-Einheit, so wie ein Byte eine 8Bit-Einheit ist. Und jep, die heißen wirklich so!) Das machst du so:

Mit nib{ (du findest den Befehl unter [Math] -> NUM -> 3) wählst du eine 4Bit-Einheit aus. Wie auch Bytes werden die Nibbel mit Adressen angesteuert. ABER: Die Adressen der Nibbel sind auf 4 statt auf 8 Bit ausgelegt. Das heißt die Adresse "4" bezieht sich NICHT auf das 4. Byte sondern auf das 4. Nibbel, sprich das 2. Byte. Das heißt du musst die gewünschte Adress im Hauptspeicher zuerst Verdoppeln (zB das hundertste Nibbel liegt im 50sten Byte, daher die Verdoppelung damit die Adressen sich auch hier auf Bytes beziehen).
Nehmen wir einmal an das erste Byte in L1 wäre 1010-1111 und wir rufen nib{L1*2} auf, dann wird uns 1010 zurückgegeben.
Rufen wir nib{L1*2+1} auf, dann wird uns 1111 zurückgegeben.
Um das vierte Byte in L1 aufzurufen schreiben wir also nib{L1+3*2} und nib{L1+3*2+1} auf. (Beachte dass das +3 ebenfalls verdoppelt werden muss da es sich um Byte-Angaben handelt)
Es besteht aber auch die Möglichkeit, zwei Nibbels (also ein Byte) auf einmal abzufragen. Hier dazu ien Beispiel:
Code: [Select]
nib{L1+4*2}->A
nib{L1+4*2+1}->B
nib{L1+4*2}^r->C
nib{L1+4*2+1}^r->D
nib{L1+4*2}^r^r->E
nib{L1+4*2+1}^r^r->F
Nehmen wir an, dass L1+4 und L1+5 diesen Inhalt haben: 1010-1111 0000-0110, dann bewirkt der Code folgendes:
A = 1010 Hier wird einfach das erste Nibbel aus dem Byte L1+4 abgefragt
B = 1111 Hier wird das zweite Nibbel aus dem selben Byte abgefragt
C = 1111-1010 Hier werden 2 Nibbel abgefragt, beginnend mit dem ersten Nibbel im Byte L1+4. Die Reihenfolge der Nibbel wird dabei standardmäßig vertauscht.
D = 0000-1111 Auch hier werden 2 Nibbel abgefragt, das zweite Nibbel in L1+4 und das nächste, also das erste Nibbel in L1+5. Auch hier die vertauschte Reihenfolge.
E = 1010-1111 Hier werden wieder beide Nibbel aus L1+4 abgefragt - aber die Nibbels explizit getauscht. Das heißt ihre Reihenfolge stimmt wieder.
F = 1111-0000 Hier werden wieder das zweite Nibbel aus L1+4 und das erste aus L1+5 angefragt - in richtiger Reihenfolge.

Wichtig: Beim Arbeiten mit Nibbeln darfst du NIEMALS vergessen, die Adresse zu verdoppeln da du ansonsten einen anderen Bereich im Speicher ansprichst und eventuell Schäden an deinem Taschenrechner entstehen!
*HIER NOCH WEITERSCHREIBEN*


In diesem Kapitel lernst du, wie du eigene Variablen erstellen und selbst benennen kannst.
Spoiler For Benutzerdefinierte Variablen:
Nachdem du im letzten Kapitel gelernt hast L1 zu verwenden wird dir sicher aufgefallen sein, dass es sehr nervig ist immer {L1+14}^r anstatt X zu schreiben. Und dann soll man sich auchnoch merken an welcher Stelle in L1 was gespeichert ist? Igitt! Zum Glück bietet die Axe auch hier wieder eine Möglichkeit dies zu umgehen:
Du kannst in Axe eigene Variablen erstellen, indem du ihnen einen Namen und eine Adresse im Hauptspeicher zuordnest. Ein Beispiel davon sieht so aus:
Code: [Select]
16->°Alter
20->Alter
Hier eine erklärung was der Code macht:
Zuerst wird 16 der neuen Variable Alter zugewiesen. Da Variablen standardmäßig 2 Bytes verwenden, werden somit [b{16} und {17}[/b] beziehugnsweiße wird {16}^r dem Namen Alter zugewiesen. Das ° vor dem Namen signalisiert dem Compiler, dass hier 16 eine Hauptspeicheradresse ist und Alter eine neue Variablenbezeichnung.
Das ° findest du unter 2ND -> APPS und du darfst es hierbei niemals vergessen!
Sobald die Variable deklariert ist (sie also "erstellt" ist), kannst du sie problemlos verwenden, ohne dass du das ° dazuschreiben musst. Dieses brauchst du nur einmalig zum Erstellen der Variable.
Übrigens darf der Variablenname bis zu 16 Zeichen lang sein und aus Groß- und Klienbuchstaben bestehen. Achte aber darauf dass deine Variablennamen mit einem Großbuchstaben anfangen! Außerdem darfst du bestehende Variablenwie z.B. X oder Y nicht überschreiben.

Auch hier hilt natürlich, dass es schlecht, ist irgendwelche RAM-Regionen zu verändern, auch hier solltest du also auf L1 zurückgreifen. Das geht so:
Code: [Select]
L1+0->°XPositionWichtig: Hier wird nur L1+... geschrieben, aber nicht {L1+...} da hier die Adresse benötigt wird, nicht der ausgelesene Inhalt dieser Adresse.
Ein kurzes Beispiel für einen Typischen solchen Fehler:
Spoiler For "Fehler":
Code: [Select]
1768->{L1}^r
{L1}->°Kuchen
1700->Kuchen
Was hier passiert ist folgendes:
Der Wert 1768 wird {L1}^r also {L1} und {L1+2} zusammen zugeordnet. (0000-0110 und 1110-1000). Die Deklaration von °Kuchen verwendet jetzt aber den WERT von L1 anstatt der Adresse. Da hier nur {L1} verwendet wurde, ist dieser Wert 6 (0000-0110). Die Variable Kuchen wird also den Bytes 6 und 7 zugeordnet - irgendwo mitten im Flash-speicher. Richtig wäre gewesen:
Code: [Select]
1768->{L1}^r
L1->°Kuchen
1700->Kuchen
Hierbei wird die Adresse von L1 verwendet und somit wird der zuor zugewiesene Wert von 1768 jetzt mit 1700 überschrieben.

Bitte beachte dass bei solchen Variablendeklarationen IMMER 2 Byte verwendet werden. Wenn du also in deinem Programm diese Technik verwendest, wird dringend empfohlen, NUR 2-Byte Variablen im Hauptspeicher zu verwenden. Sich überlappende Variablen im Hauptspeicher gehören zu den am schwierigsten zu findenden Fehlern überhaut - das willst du nicht ;)


2
The Axe Parser Project / Some super crappy Axe code...
« on: August 24, 2016, 08:24:38 am »
Hey guys,
As some of you might already know, I haven't used axe for a couple of years and forgot almost everything about it  :'(
So now I'm trying to relearn axe and wanted ot ask you how I could improve the following code I wrote...
It's ment to be a player (just a square) kickign arount a Ball (a nice circle) with workign colission and gravty stuff...
I'm really sorry but I got no GIF to upload yet, hope you still understand what the code should do...  :(

Spoiler For Main Program:
.TRY07AXE
ClrDraw
[3C7EFFFFFFFF7E3C]->Pic01
[FF818181818181FF]->Pic02
.L1{0,2, 4, 6
.L1{X,Y,vX,vY
1000->{L1+0}^r
1000->{L1+2}^r
200->{L1+4}^r
100->{L1+6}^r
.Direction(X,Y)=T,U
1->T->U
.Pos Player *100 = V,W
5000->V
1000->W
.Gravitation=G
0->G
.N=NotCollide to prevent double collision
0->N
.C=Counter
0->C
Repeat getKey(15)
C++
ClrDraw
Pt-On({L1+0}^r/100,{L1+2}^r/100,Pic01)
Pt-On(V/100,W/100,Pic02)
DispGraph
{L1+0}^r+({L1+4}^r*T)->{L1+0}^r
{L1+2}^r+({L1+6}^r*T)->{L1+2}^r
prgmTRY07MOV
prgmTRY07COL
prgmTRY07GRV
End

Spoiler For Program for players Movement:
..TRY07MOV
.DownArrowKey
If getKey(1) and (W<5600):W+100->W:End
.LeftArrowKey
If getKey(2) and (V>0):V-100->V:End
.RightArrowKey
If getKey(3) and (V<8600):V+100->V:End
.UpArrowKey
If getKey(4) and (W>0):W-100->W:End

Spoiler For Program for colission and stuff:
..TRY07COL
.DOUBLECOLLIDE
N-1->N:If N=(0-1):0->N:End
.COLIDE
.Top Left
If (N=0) and (({L1+0}^r/100)>=((V/100)-7)) and (({L1+0}^r/100)<=((V/100)-6)) and (({L1+2}^r/100)>=((V/100)-7)) and (({L1+2}^r/100)<=((V/100)-6)):{L1+4}^r+80->{L1+4}^r:{L1+6}^r+80->{L1+6}^r:(0-1)->T->U:5->N:0->G:End
.Top Right
If (N=0) and (({L1+0}^r/100)>=((V/100)+7)) and (({L1+0}^r/100)<=((V/100)+7)) and (({L1+2}^r/100)>=((V/100)-7)) and (({L1+2}^r/100)<=((V/100)-6)):{L1+4}^r+80->{L1+4}^r:{L1+6}^r+80->{L1+6}^r:1->T:(0-1)->U:5->N:0->G:End
.Bottom Left
If (N=0) and (({L1+0}^r/100)>=((V/100)-7)) and (({L1+0}^r/100)<=((V/100)-6)) and (({L1+2}^r/100)>=((V/100)+6)) and (({L1+2}^r/100)<=((V/100)+7)):{L1+4}^r+100->{L1+4}^r:{L1+6}^r+100->{L1+6}^r:(0-1)->T:1->U:5->N:End
.Bottom Right
If (N=0) and (({L1+0}^r/100)>=((V/100)+6)) and (({L1+0}^r/100)<=((V/100)+7)) and (({L1+2}^r/100)>=((V/100)+6)) and (({L1+2}^r/100)<=((V/100)+7)):{L1+4}^r+100->{L1+4}^r:{L1+6}^r+100->{L1+6}^r:1->T->U:5->N:End
.Top
If (N=0) and (({L1+0}^r/100)>=((V/100)-5)) and (({L1+0}^r/100)<=((V/100)+5)) and (({L1+2}^r/100)>=((V/100)-8)) and (({L1+2}^r/100)<=((V/100)-6)):{L1+6}^r+100->{L1+6}^r:(0-1)->U:5->N:0->G:End
.Left
If (N=0) and (({L1+0}^r/100)>=((V/100)-8)) and (({L1+0}^r/100)<=((V/100)-7)) and (({L1+2}^r/100)>=((V/100)-5)) and (({L1+2}^r/100)<=((V/100)+5)):{L1+4}^r+80->{L1+4}^r:5->N:If ({L1+2}^r>5500):(0-1)->U:{L1+6}^r+80->{L1+6}^r:{L1+4}^r+20->{L1+4}^r:End:End
.Right
If (N=0) and (({L1+0}^r/100)>=((V/100)+7)) and (({L1+0}^r/100)<=((V/100)+8)) and (({L1+2}^r/100)>=((V/100)-5)) and (({L1+2}^r/100)<=((V/100)+5)):{L1+4}^r+80->{L1+4}^r:5->N:If ({L1+2}^r>5500):(0-1)->U:{L1+6}^r+80->{L1+6}^r:{L1+4}^r+20->{L1+4}^r:End:End
.Bottom
If (N=0) and (({L1+0}^r/100)>=((V/100)-5)) and (({L1+0}^r/100)<=((V/100)+5)) and (({L1+2}^r/100)>=((V/100)+7)) and (({L1+2}^r/100)<=((V/100)+8)):1->U:G/5+{L1+6}^r/2+50->{L1+6}^r:0->G:End
.BORDERS
.Left
If ({L1+0}^r<100) or ({L1+0}^r>(0-1000)):100->{L1+0}^r:1->T:End
.Right
If ({L1+0}^r>8600):8600->{L1+0}^r:(0-1)->T:End
.Top
If ({L1+2}^r)<100):100->{L1+2}^r:1->U:({L1+6}^r/2)->{L1+6}^r:End
.Bottom
If ({L1+2}^r)>5600):5600->{L1+2}^r:(0-1)->U:((G/10)+{L1+6}^r)->{L1+6}^r:0->G:End

Spoiler For Program for gravity:
..TRY07GRV
.Friction
If {L1+4}^r>50:{L1+4}^r+99/100->{L1+4}^r:Else:If {L1+4}^r<20:If (C/4+4)=C:{L1+4}^r*99/100->{L1+4}^r:End:Else:If (C/2+2)=C:{L1+4}^r*99/100->{L1+4}^r:End:End:End
.Slow down and speed up
If U=1:{L1+6}^r+102->{L1+6}^r:Else:{L1+6}^r+97->{L1+6}^r:End:{L1+6}^r/100->{L1+6}^r
.Add Gravity
G+3->G:G/10+{L1+2}^r->{L1+2}^r

Aaand explanations:
You're a square kicking arount a circle....
{L1+0}^r = X-pos ball
{L1+2}^r = Y-pos ball
{L1+4}^r = X-speed ball
{L1+6}^r = Y-Speed ball
T = Direction X-Movement ball (1 or -1)
U = Direction Y-Movement ball (1 or -1)
V = X-Pos player
W = Y-Pos player
C = Counter (add 1 each loop in main program so I can use it for executing stuff every 2 or every 4 rounds)
N = No-collide (counter for how many "rounds" it's gonna ignore colission stuff. To prevent trigering the colusion twice at once)
G = Gravitation (always rising and reset/changed by colissions)

Important: All graphic-related stuff is multiplied with 100... So I't wirking with a 9600x6400 screen and a Speed of 100 means 1px movement per round.
That's where all the /100 is coming from :)
Spoiler For Where the strange numbers in Colission come from:
These numbers seem a bit strange because it's actually the positions for the coliding object:
It's the top-left coordinates of an 8x8 image (the ball in this case) that collides with these zones (marked orange and green).
The darked boxes are the border of the player itself (just a square)

I used this for colission in order to bet the edges working well, too and also to prevent a colision from not being detected
(for example if the ball is faster than 1px/round and "jumps" inside the player)


I really hope you understand what I mean... :/




I plan on moving all teh vars inside L1, add a second player, add Goals and add the gravity for players, too (so you got a realistic jump isntead of just floating around).
Still It'll be a crappy game, but it's just for learning purposes not for being published or something ^^

Pls dont hate me for writing such crappy code - this is my first attempt after more than 4 years... :(

3
Axe / Multiple External Keyboards
« on: August 17, 2016, 04:26:02 am »
I know only the last quetion is about Axe, but I wasnt sure where else to put that post ^^

As some of you may know, TI produces external keyboards for their calculators:
https://www.amazon.com/Texas-Instruments-Keyboard-Graphing-Calculators/dp/B00007K7JE/s=electronics
They're pretty cool since they're connected using the simple 2.5mm audio plug.
My idea was using multiple of these keyboards at the same time for multiplayer purposes, using audio splitters
(Like using little adapter (2.5mm->3.5mm), a 3.5mm Audio Split and another adapter (3.5->2.5mm)
Code: [Select]
[KB]--[2.5->3.5]--.
                   >[Audiosplit]--[3.5->2.5]--[Calc]
[KB]--[2.5->3.5]--'
Has anyone of you ever tried this out and did it work? :) And could I (theoretically) use an unlimited number of keyboards? :D
Aaaand... Does Axe properly work with them...? >.<

4
General Calculator Help / TI 84+ won't receive OS
« on: March 19, 2015, 10:52:26 am »
General information:
TI 84+ Silver Edition (the so-called "Teachers Edition" with the extra plug at the upper side)
Hardware version: 3
Boot version: 1.02
OS version: 2.4.0


Problem:
Sending OS 2.4.3 using TI Connect failed: missing certificate
Sending OS 2.4.3 using TiLP failed: NACK received. Cause: the command has been refused
*both stoped before it started to receive the OS.

Current situation:
Tried to directly send OS 2.4.3 from another device.
But failed after receiving the OS - Validation Error
Now it's like Waiting... Please install operating system now


Anyone got another idea what I could do to fix it?

5
Computer Usage and Setup Help / Linux problem
« on: August 13, 2012, 10:45:47 am »
And again, I have a problem!  ;D

I'm trying to install Linux Ubuntu 12.4 32Bit on a Win98  :)
Never worked! :(
Now, I borrowed a CD/DVD/Whatrever from Sorunome.
(It's correct name is "MULTIBOOT-DVD" ^^
Well, on it are:
Ubuntu 12.4 32Bit
Ubuntu 12.4 64Bit
Debian 6.0
Linux Mint 12
Puppy Linux 5.28
GParted 0.12


I now was able to start Puppy in live mode!
Every time before I saw the desktop, with an icon called "install"
but it always freezed!

this time, I see a black screenm, but the iconbar is visible and it isn't freezing!! :D


Please elp me!
I need to install it now!
I'm not sure itf this will ever work again!
(Always tells me, the hardware is incompatible)

Sorunome told me he can do something that it looks like Ubuntu 12.4 32bit, which I want to have on that computer!


But first, i need to install it! Only running in livemode now!


6
Computer Usage and Setup Help / Internet Problem
« on: August 12, 2012, 01:38:04 pm »
It's me again!  :P
Only a few days after my virus problem (I posted about it) I now have the next problem: my laptop!
The internet isn't working anymore! (not through wifi nor through lan!)  D:


OS:   Win7


When I try to open a website, It tells me that there's no connection to the internet!
(tried it out with: Firefox, InternetExplorer, both in InPrivate-Mode and in Normal-Mode)

The strange thing is, that it tells me it's connected to the internet!

Also, InternetExplorer tells me, tha my internet settings for IE are veeery unsecure!
But I haven't changed that and it never told me that before! ???
I haven't had any problems when I used the laptop last friday, when I was at Sorunome's hose Nor when I used it jesterday!
since that, it hasn't been used!  O.O



I can be sure that the laptop is really connected to the internet, because when I tried pout Ping in CMD.exe, it was successful! ???


Any ideas how to fix that?
(I dont know what those guys will think when I have to bring it away to repair!! They gave me my Computer back only 2 days ago! That wpould be very embarrasing)  :-[

7
Other / Weird DVD protection
« on: July 26, 2012, 06:02:49 am »
I know My problem hasn't really that much to do with the board's name, but I dod not knew where else to post it.

My problem has to do with a DVD I got from a firm, selling water.
There's a raffle on the DVD, too. (Together with some movies, telling us how WONDERFUL their water is)  :P

But on that DVD is a protection: It should only be usable on one single computer!
Thatfore, I found a hidden file on the dvd (look at the attach)
I had some problems with copying it, so I saved the file as a .txt
It was stored as desktop.ini
Spoiler For desktop.ini:
Code: [Select]

[.ShellClassInfo]
LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-21815



The weird thing is, that the hidden file is shown under Files to be written to the disk
Every other files like the movie is shown under Currently on the media files

And when checking the information about the file, I got known this:
Created:                     06.7.2010
Last time changes at:   18.06.2012
And I watched the movie on that day - on juni 18th
But I never executed the .exe on the DVD which should have started through the autostart file.



My question is: How is it working???
It's no DVD+RW  *.*
Is it possible to identify a computer with its shell32.dll-file?


Should I also upload the .executable file?

8
Other / searching a software to simulate magnetic fields
« on: May 27, 2012, 01:52:55 pm »
Hi everyone!
I only postet this on this board because it hasn't anything to do with calculators and also not that much wich coding.

I am currently searching for a program with which I can calculatre magnet field lines.
But not such a freeware-stuff with 20x20x20 measuring points!
It must support calculating magnet field lines in a very high quality and as exact as possible.

It should also be able to calculate and show me the possible affections of the magnet field by the environment and different high-tech materials (like permalloy).

I don't care about the program's language as long as there's anyone who can translate it.

I also don't care about how much the software costs.
But the only program I found jet costs about 6000$  x.x
And that's a little bit too much for me...  :P



I hope someone can help me!  ;)

9
[DE] Off-Topic / INDECT
« on: March 12, 2012, 12:06:42 pm »
I.N.D.E.C.T.
Die totale Überwachung!
----------------------------------------------------------------------------------




Quote from: rbb-Online

Code: [Select]


Für Deutschlands Datenschützer ein Alptraum: Flächendeckende Kameraüberwachung,
fliegende Aufklärungsdrohnen in den Innenstädten. Wer sich verdächtig macht, wird über
Internet und Datenbanken identifiziert und landet im Räderwerk der Strafverfolger. Mit dem
EU-Projekt „Indect“ soll dieser Alptraum Wirklichkeit werden. Trotz massiver Kritik fördert die
Bundesregierung das Projekt mit Personal und Steuergeldern.
Erinnern Sie sich noch an George Orwells "Big Brother is watching you"? An die erschreckende Vision
von einem Staat, der seine Bürger rund um die Uhr überwacht? Science Fiction, dachten wir. Doch die
Realität hat die Fiktion längst eingeholt. Nicht nur, dass der Staat unsere Computer über "Bundestrojaner"
ausspähen kann! Nein, - still, leise und heimlich arbeiten Forscher in Europa zurzeit an einem noch viel
größeren Überwachungs- Projekt. Sein Name: Indect. Das Ziel: Die Entwicklung einer multimedialen
Überwachungsplattform.



http://www.rbb-online.de/kontraste/archiv/kontraste_vom_13_10/steuergelder_fuer.html





Soweit ist es schon mit der "Meinungsfreiheit" und der "Provatsphäre" oder wie sich das nennen soll...


BITTE SENDET DIESEN LINK ALL EUREN BEKANNTEN/VERWANDTEN/FREUNDEN

10
[DE] Off-Topic / Rhabarberbarbera!
« on: November 01, 2011, 07:26:56 am »


Könnt ihr das alles im Video auch nachreden?
Die Rhabarberbarberabarbrabarenbartbarbierenierbarbärbel hatte keinen Rhabarberbarberabarbarbarenbart! xD

Oder versucht doch mal, das video für Englische zu übersetzen! (Ich glaub nich dasses irgendeiner schafft!)


Spoiler For all the English guys:
Do you understand the video?
If yes, please post here what the video is about! (That'll be funny to read what you all understand!! :D

11
General Calculator Help / Should I buy a new TI??
« on: September 25, 2011, 05:50:35 am »
I have no idea what I should make with my TI 84+, now!!
nothing is working anymore!!
a few examples:


when I open the app-menu and scroll up, (so that I'm at the bottom of the list), every app will be "Finance" when I open it!!

everytime I open a ASM-program a Mirage-program or an Ion-program, my TI turns off and it's a ramclear (even if there's really no bug in code!!!!)  :mad: (means, that I can't try out my axe-programs anymore!!)

APPs which I've made with axe are displaying things, which I've deleted in the code, code-parts which aren't in the code anymore!!

self-test tells me "ROM FAIL"

I can't send any apps anymore from my TI to other ones (ERR:VALIDATION)

I've already had a few archieve-clears a few jears ago (when I was only coding in BASIC!!!!)

sometimes, my display is upside-down, and I can't fix it (always need to pull out battery)

I've already had ASM-codes in my graphs (Y1-Y0) after playing games (which were basic-programs!!)

I can't open the Midi-to-Axe-converted files (the player for it isn't working on my TI)

I wasn't able to make my Archieve larger for the nyancat-video!! (my TI ignored the program!!)



These are only a few of the things, my TI makes!!
I don't think There is another TI with a larger collection of errors!!
The only working thing is to use it for school (calculating nice numbers...)
But I'd like to code on it, too!!

I don't think TI will like it, because I've already used programs like "aboutnam", which aren't so good for your TI!
But should I send aboutnam to my TI again, to delete the text I addet into the "about"-screen and send it to TI after that?

or should I just buy a new one??

12
Axe / Making my code faster
« on: September 09, 2011, 01:49:04 pm »
Is it possible to make my code faster?
(I want to make a few different difficulty-modes!)

EDIT: Screenie!!

(It's with sound - so you should try it on your TI!)

CARAXE is the ASM-program
The other programs are the surcecode! (CAR is the main-program)

13
Axe / I need help with a code!
« on: September 09, 2011, 11:03:22 am »
I'm trying to code "TapTapRevenge" for TI84+
But I need to know how to write a few things in Axe:

---How to copy a text into the code of a progam?

---How to read numbers of the code of a program an save them as Vars?

---Is it possible to play a sound WHILE calculating things and displaying pictures (so that the program wont stop while playing the sound)



(maybe more questions will follow later)

14
Axe / string - duplicate symbol
« on: August 24, 2011, 09:49:49 am »
I'm trying to write a "chat-program" for the TI, but I have a problem:
If I want to write something, I'll have to edit the string!
But how can I save something in a String if ther's alreadsy saved something in it?
Code: [Select]
:DelVar Str00
:"abc" -> Str00
Isn't working

but sometimes, I deed olly to add one letter to String00! How to do that???
It allways tells me DUPLICATE SYMBOL

15
[DE] Off-Topic / Omnom IRC
« on: August 12, 2011, 09:55:41 am »
Falls ihr es noch nicht gemerkt habt, es gibt auch ein deutsches OmnomIRC, und da ist nie einer.
Seit tagen schon sind da nur ich und Anima.

Wenn ihr wollt, dass man das nicht wieder entfernt, solltet ihr da mal was reinschreiben, sonstbraucht's offensichtlich keiner und es wird entfernt.

Pages: [1] 2 3