Aktuelle Zeit: Mo 29. Apr 2024, 12:49

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
Ungelesener BeitragVerfasst: Mo 16. Aug 2010, 21:11 
Offline
Pokemonforscher
Pokemonforscher
Benutzeravatar

Registriert: Di 22. Jun 2010, 16:48
Beiträge: 2247
Wohnort: Zürich
Geschlecht: männlich
SG$: 83
Guides: 0
Seite gefunden durch: Metroid
Falls sich tatsächlich noch wer dafür interessiert:
Willkommen zur dritten Lektion der Programmierschule!
Diese Lektion ist diesmal ein wenig klein gehalten, es gibt aber auch nicht viel über dieses Thema zu sagen.

Inhalt

1. Einführung Strings
2. Texte
3. Fonts
4. Textformatierung
5. Hausaufgaben Lektion 3



1. Einführung Strings

Bild

Das ist ein String, aber nicht ein solcher wie wir ihn zum Programmieren verwenden können.

Strings sind wie Variablen auch eine Art Platzhalter für Daten.
Nur speichern Strings nicht wie bei Variablen Zahlenwerte, sondern eine ganze Zeichenfolge,
so können wir nicht nur Zahlen sondern ganze Texte anzeigen.
Es gibt grob gesagt zwei Arten, einen String auf dem Bildschirm anzuzeigen, mit einem Panel (besprechen wir später)
und/oder mit einem Text. Aber dazu müssen wir ihn natürlich zuallererst definieren:

Code:
STRING* my_str = "Hello world";


Wir definieren hiermit einen String mit dem Namen "my_str" und dem Inhalt "Hello world".
Wir können auch einen leeren String definieren und ihn dann später im Script füllen:

Code:
STRING* my_str = "";


Ein direkter Text muss immer zwischen zwei " stehen, sonst gibt der Compiler eine Fehlermeldung.
Nun hilft uns ein definierter String aber nicht viel weiter. Wir können ihn ja noch gar nicht sehen.
Das ändern wir jetzt.


2. Texte

Ein Text in A7 ist ein Objekt, welches mehrere Strings enthält und auf dem Bildschirm angezeigt werden kann.
Ein Text definiert sich folgendermassen:

Code:
TEXT* my_txt = {}


Wir definieren einen Text mit dem Namen my_txt ohne Inhalt.
Bauen wir dies nun in einen Script ein. Startet ein neues Projekt und speichert es
im Workordner in einem Ordner namens "lektion_3" (ihr müsst ihn natürlich zuerst erstellen) unter dem Namen "lektion_3.c" ab.
Nun kopiert folgenden Code als Grundgerüst in euren Script:


Code:
#include <acknex.h>
#include <default.c>

TEXT* my_txt =
{pos_x=100;
pos_y=100;
string="Hello world!";
string="We'll learn to use strings!";
flags=VISIBLE;
layer=2;}


function main()
{
video_set(800,800,0,2);
video_window(NULL,vector(800,800,0),1,"Lektion 3");


}


Wie ihr seht haben wir hier eine gefüllte TEXT-Definition.
Die Parameter darin werde ich euch in einer Tabelle erläutern:

pos_x: Horizontaler Abstand des Objektes vom linken Fensterrand in Pixel.
pos_y: Vertikaler Abstand des Objektes vom oberen Fensterrand in Pixel.
string: Hier definieren wir direkt ein String vom Text, d.h. wir müssen keinen mehr ausserhalb definieren.
Werden mehrere Strings auf diese Weise definiert, werden diese dann einfach untereinander angezeigt.
flags: Sozusagen die Verhaltensweise eines Objekts. VISIBLE bedeutet z.B. "sichtbar", währe dieser Flag nicht gesetzt wäre der Text unsichtbar.
Was es sonst noch an Flags gibt könnt ihr in der Hilfe nachschlagen, unter "Inhalt/Engine-Objekte/TEXT". Anstatt VISIBLE ist SHOW gebräuchlicher,
ich verwende es nur noch aus Gewohnheit...
layer: Wichtigkeit eines 2D-Objekts, damit kann man festlegen, welches 2D-Objekt, wenn sich zwei überlappen, in den Vordergrund stellen soll.
Allgemein gilt: Das Objekt mit dem höheren Layer-Wert überlappt Objekte mit niedrigerem layer Wert. Ist der Layer beider Objekte gleich,
entscheidet die Position vom Objekt-namen im Alphabet.

Tipp: Wenn ihr ein 2D-Objekt erstellt und dies wird komischerweise nicht angezeigt, überprüft zuerst,
ob VISIBLE oder SHOW gesetzt ist oder ob das Objekt nicht von einem anderen verdeckt wird.


Startet nun den Script und ihr seht: Die beiden Strings von der TEXT-Definition werden mit 100 Pixel Abstand vom oberen und unteren Rand angezeigt.
Das Ganze ist aber irgentwie noch ziemlich hässlich, doch acu dafür gibts ne relativ einfache Lösung. :)



3. Fonts

Fonts gibt es in jedem Programm, welches Text anzeigen kann. Es ist sozusagen die "Schriftart" vom Computer.
Wir können mit viel Zeitaufwand selber eine erstellen, oder aber wir nehmen einen vorgefertigten Font von Windows.
Zweiteres werde ich euch beibringen, Ersteres steht ebenfalls in der Hilfe unter "Engine-Objekte/FONT".
Um einen Font zu verwenden müssen wir ihn in unserem Script definieren: (Wer hätts gedacht)

Code:
FONT* my_font = "Times#20i";


Schreibt diese Definition über unsere TEXT-Definition und fügt folgende Zeile in der TEXT-Definition ein:

Code:
font=my_font;


Wir haben nun einen Font für unseren Text definiert, er enthält die Schriftart "Times" in der Pixelhöhe 20 und kursiv.
Startet nun den Script, wenn ihr alles richtig gemacht hat, sollten die beiden Sätze nun eine andere Schriftart bekommen haben.
Ok, es sieht immer noch scheisse aus, ABER es funtioniert! :D


4. Textformatierung

So ein String ist ja schön und gut, aber wir wollen ihn auch mit unserem Script verändern können!
Zum Glück gibt es da ein paar nützliche Funktiönchen, die genau das tun.
Das Schwierige an Strings ist eben, dass man sie nicht mit den Mathematischen Operatoren Vergleichen oder verändern kann.
Desshalb müssen wir auch alle Strings mit Funktionen verändern und vergleichen.

Nun wollen wir das "Hello world!" zu "Hello Kitty!" umwandeln!

Zuerst müssen wir aber noch einen String definieren, mit dem wir arbeiten können:

Code:
STRING* my_str = "Kitty!";


Er enthält auch das "Kitty!" welches wir an unser "Hello world!" anhängen wollen.
Da wir nun aber wieder mit Befehlen arbeiten müssen wir die Transformation in der Main-Funktion durchführen.
Die Befehle, die wir brauchen, lauten str_cat und str_trunc.
Gebt diese Befehle mal in der Suche von der Hilfe ein, dort wird erklärt, was diese beiden Befehle machen.
Ich werfe euch den Code einfach mal vor, aber keine angst, ich erläutere ihn gleich: ^^


Code:
#include <acknex.h>
#include <default.c>

FONT* my_font = "Times#20i";
STRING* my_str = "Kitty!";

TEXT* my_txt =
{pos_x=100;
pos_y=100;
string="Hello world!";
string="We'll learn to use strings!";
flags=VISIBLE;
font=my_font;
layer=2;}


function main()
{
video_set(800,800,0,2);
video_window(NULL,vector(800,800,0),1,"Lektion 3");

str_trunc((my_txt.pstring)[0],6);
str_cat((my_txt.pstring)[0],my_str);
}


Und hier die versprochene Erklärung:

Code:
str_trunc((my_txt.pstring)[0],6);


Dieser Befehl hier trennt 6 Zeichen vom Ende des Zielstrings ab.
Nun fragt ihr euch bestimmt, was das für ein Geschwür ist, wo eigentlich ein String hinsollte.
Es ist aber einfacher als es aussieht:
Da es sich bei einem Text um ein Objekt mit mehreren gespeicherten Strings handelt, müssen wir auch entsprechen darauf zugreifen.
"(my_txt.pstring)" ist hierbei also das Objekt, welche alle Strings von "my_txt" enthält,
und mit dem Index "[0]" verweisen wir auf einen bestimmten String davon.
0 steht hier für den ersten String in unserem Text, eben das "Hello world!", welches wir modifizieren wollen.
Mit (my_txt.pstring)[1] würden wir auf den zweiten String zugreifen, also "We'll learn to use strings!".
Das heisst, der Index startet man beim Zählen nicht bei 1, sondern bei 0. Wenn wir später mal Arrays behandeln, werden wir wieder darauf zurückkommen.

Jedenfalls haben wir nun das "World!" vom String abgetrennt.


Code:
str_cat((my_txt.pstring)[0],my_str);


Dieser Befehl hängt dem Zielstring den Quell-string an. Das heisst in diesem Fall wird my_str, also "Kitty!", an den ersten String unseres Textes, also "Hello " angefügt.
Das wars auch schon.
Startet den Script und voilá, "World" wurde durch "Kitty" ersetzt.
Es gibt aber natürlich noch viele andere Funktionen zum Modifizieren und zum Vergleichen von Strings, ihr findet alle in der Hilfe unter: "Inhalt/Engine-Funktionen/String-Funktionen"
Experimentiert umbedingt ein wenig damit rum und stellt allfällige Fragen, damit ihr auch wirklich alles verstanden habt.

so, dann wären wir schon wieder am Ende dieser Lektion, ich hoffe ihr hattet wenigstens ein bisschen Spass. ^^


Hausaufgaben Lektion 3


Zitat:
Experimentiert mit mindestens einer String-Funktion herum, die wir noch nicht behandelt haben.
Nehmt ruhig als Grundgerüst unseren jetzigen Code, gestaltet ihn um wie ihr wollt.
Schickt mir dann am Schluss euren verarbeiteten Script per PM.

Da sowieso so gut wie niemand diese Hausaufgabe machen wird, *seufz* lass ich den Abgabetermin mal weg.
An die, die sich trotzdem mal dran versuchen: Vielen Dank und viel Spass.


Zuletzt geändert von Hopfel am Mo 23. Aug 2010, 16:53, insgesamt 1-mal geändert.

Nach oben
 Profil Position des Users auf der Mitgliederkarte  
Mit Zitat antworten  
 Betreff des Beitrags:
Verfasst: Mo 16. Aug 2010, 21:11 


Nach oben
  
 
 Betreff des Beitrags: kleine frage
Ungelesener BeitragVerfasst: So 22. Aug 2010, 16:37 
Offline
Arenachamp
Arenachamp
Benutzeravatar

Registriert: So 7. Feb 2010, 15:56
Beiträge: 407
Geschlecht: männlich
SG$: 11
Guides: 0
wenn mann einen string mit TEXT* definiert wie greift man dann an einer anderen stelle des scriptes darauf zu?

_________________
Bild
bitte levelt mein geckarbor!


Nach oben
 Profil Position des Users auf der Mitgliederkarte  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Lektion 3: Strings
Ungelesener BeitragVerfasst: Mo 23. Aug 2010, 16:52 
Offline
Pokemonforscher
Pokemonforscher
Benutzeravatar

Registriert: Di 22. Jun 2010, 16:48
Beiträge: 2247
Wohnort: Zürich
Geschlecht: männlich
SG$: 83
Guides: 0
Seite gefunden durch: Metroid
(srry, hatte gestern Internetausfall -.-)

Zitat:
Code:
str_trunc((my_txt.pstring)[0],6);


Dieser Befehl hier trennt 6 Zeichen vom Ende des Zielstrings ab.
Nun fragt ihr euch bestimmt, was das für ein Geschwür ist, wo eigentlich ein String hinsollte.
Es ist aber einfacher als es aussieht:
Da es sich bei einem Text um ein Objekt mit mehreren gespeicherten Strings handelt, müssen wir auch entsprechen darauf zugreifen.
"(my_txt.pstring)" ist hierbei also das Objekt, welche alle Strings von "my_txt" enthält,
und mit dem Index "[0]" verweisen wir auf einen bestimmten String davon.
0 steht hier für den ersten String in unserem Text, eben das "Hello world!", welches wir modifizieren wollen.
Mit (my_txt.pstring)[1] würden wir auf den zweiten String zugreifen, also "We'll learn to use strings!"
.Das heisst, der Index startet man beim Zählen nicht bei 1, sondern bei 0. Wenn wir später mal Arrays behandeln, werden wir wieder darauf zurückkommen.


Ich habs noch ein wenig verständlicher ausgedrückt.
Genauer lässt es sich eigentlich kaum erklären. Aber wenn es immer noch unklar ist kann ich noch ein paar Beispiele geben. (In der SED Hilfe unter "pstring" gibts auch ein Artikel dazu)


Nach oben
 Profil Position des Users auf der Mitgliederkarte  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

0 Mitglieder


Ähnliche Beiträge

angst vor der schule?
Forum: Schule, Studium, Arbeit, Finanzen
Autor: mondy
Antworten: 4

Tags

Haus, Programm, Schule, Spass, Spiele, USA

Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group


Bei iphpbb3.com bekommen Sie ein kostenloses Forum mit vielen tollen Extras
Forum kostenlos einrichten - Hot Topics - Tags
Beliebteste Themen: Forum, Erde, Pokemon, Spiele, NES

Impressum | Datenschutz