Einige Spiele benötigen keinen komplexen Speicher- und Ladecode; dieser Ausschnitt besteht aus einem simplen Spiel, das die High Scores in einer Datei sichert. Sie können das Beispiel verwenden, um zu lernen, wie man High Scores, Einstellungen etc. speichern kann; Sie könnten sogar die Save / Load Anweisungen in der A5 Engine durch Ihre eigenen ersetzen.
Das Ziel des Spiels ist es, eine hohe Punktzahl zu erzielen, indem auf so viele Panels wie möglich geklickt wird. Diese erscheinen an zufälligen Positionen, Sie müssen also flink sein.
Die ist die Main Funktion:
function
main()
{
fps_max = 50;
level_load (black_wmb);
wait (2); // wait for the level to be loaded
init_mouse();
start_game();
}
Ich lade ein Dummy Level, initialisiere die Maus nach 2 Frames und starte das Spiel. Die init_mouse Funktion ist bekannt:
function
init_mouse()
{
mouse_map = arrow_pcx;
mouse_mode = 2;
while (1)
{
mouse_pos.x = pointer.x;
mouse_pos.y = pointer.y;
wait (1);
}
}
Wir
wählen eine Grafik für den Zeiger, setzen mouse_mode auf einen
Wert, der den Cursor anzeigt und dann erlauben wir der Maus, sich frei
zu bewegen, indem wir eine while-Schleife nutzen.
function
start_game()
{
highscore_handle = file_open_read("hiscore.dat");
max_clicks = file_var_read (highscore_handle);
while (timer > 0)
{
timer -= 1;
target_pan.pos_x = random(736); // 800 - 64
target_pan.pos_y = random(536); // 600 - 64
target_pan.visible = on;
waitt (16);
target_pan.visible = off;
waitt (32);
}
if (current_clicks > max_clicks) // new high score
{
highscore_handle = file_open_write("hiscore.dat");
file_var_write (highscore_handle, current_clicks);
file_close(highscore_handle);
}
while (mouse_right == 0) {wait (1);}
current_clicks = 0;
timer = 20;
main();
}
Die Funktion start_game erledigt (fast) alles andere. Als erstes wird die Datei "hiscore.dat" geöffnet und dann wird max_clicks auf den Wert gesetzt, der aus der Datei gelesen wurde. Diese Datei ist einfach eine Textdatei, genau wie die WDL Dateien. Ich habe sie im Texteditor erstellt, sie "hiscore.dat" genannt und eine "0" hineingeschrieben. Wenn Sie das Spiel also zum ersten Mal starten, ist der Highscore 0.
Der Timer ist auf 20 gesetzt, die Schleife läuft also 20 Mal durch:
while (timer > 0)
{
timer -= 1;
target_pan.pos_x = random(736); // 800 - 64
target_pan.pos_y = random(536); // 600 - 64
target_pan.visible = on;
waitt (16);
target_pan.visible = off;
waitt (32);
}
Der Code innerhalb der Schleife erzeugt eine zufällige Position für das Panel und zeigt es für 1 Sekunde an. Wenn der Spieler darauf klickt, wird die on_click Funktion des Panels ausgeführt:
function
add_clicks()
{
current_clicks += 1;
}
Diese Funktion addiert einfach einen Klick zur Variable current_clicks. Wenn das Spiel endet, wurde das Panel 20 Mal angezeigt und wir machen weiter:
if (current_clicks > max_clicks) // new high score -> save it
{
highscore_handle = file_open_write("hiscore.dat");
file_var_write (highscore_handle, current_clicks);
file_close(highscore_handle);
}
while (mouse_right == 0) {wait (1);}
current_clicks = 0;
timer = 20;
main();
}
Das Spiel ist hier vorbei; falls ein Hihscore erzielt wurde, wird er in hiscore.dat gespeichert und überschreibt den alten Wert in der Datei. Das Spiel wartet darauf, dass die rechte Maustaste gedrückt wird, dann setzt es die Punktzahl zurück und startet erneut.
Sie
können die Daten, die Sie speichern auch verschlüsseln, wenn
Sie möchten; der einfachste Weg das zu erreichen wird sein, die Zahlen
in einen String umzuwandeln, sie mit einem simplen Algorithmus zu verschlüsseln
und sie Strings dann zu speichern. Beim Spielstart müssen Sie dann
nur die Strings auslesen, sie entschlüsseln und in Zahlen konvertieren
und es kann losgehen.
"House of terror"
Fahrstuhl
Wie können Sie einen großen Fahrstuhl erzeugen, der mit großer Geschwindigkeit fährt? Entweder bauen Sie ein riesiges Level und wertvollen Speicher (und Framerate) damit verbrauchen oder Sie könnten den Code unten benutzen.
Falls Sie das Beispiel der office.wmp geladen haben, die bei dem Magazin dabei war, dann werden Sie bemerkt haben, dass beide Stockwerke in Wahrheit nah beieinander sind. Ich verwende einen Trick: ich bewege die Texturen an der Fahrstuhlwand aufwärts, so dass der Spieler denkt, dass er sich abwärts bewegt. Ich könnte die Texturen stundenlang bewegen und der Spieler würde denken, er wäre meilenweit gefahren.
action
platform
{
my.skill11 = 100;
my.skill10 = 100;
while (vec_dist (player.x, my.x) > 50) {wait (1);}
while (player.z > 50)
{
snd_tune (snd_handle, 100, my.skill10, 0);
if (snd_handle == 0)
{
snd_loop (elevator_snd, 100, 0);
snd_handle = result;
}
my.z -= start_speed * time * 1.1;
my.skill10 += 5 * time; // increase the frequency
player.z = my.z + 40;
wait (1);
}
while (my.skill11 > 0)
{
my.skill11 -= 1 * time;
elevator_pnt.v += max_speed * time;
wait (1);
}
while (my.z > -210)
{
snd_tune (snd_handle, 100, my.skill10, 0);
my.z -= start_speed * time * 1.1;
my.skill10 -= 5 * time; // decrease the frequency
player.z = my.z + 40;
wait (1);
}
snd_stop (snd_handle);
}
Die Plattform beginnt sich zu bewegen, wenn ihre Distanz zum Spieler weniger als 50 Quants beträgt; dies stellt sicher, dass der Spieler nah an ihrem Zentrum ist. Dann bewegt sich die Plattform abwärts, bis die Z Koordinate des Spielers unterhalb 50 ist (ein Punkt etwa in der Mitte des Fahrstuhls). Ich ändere auch die Frequenz des Geräusches (mit snd_tune und skill10), damit alles etwas "echter" aussieht. Die Plattform wird mit roher Gewalt bewegt (my.z und nicht ent_move), der Spieler muß also mit ihr mit bewegt werden - daher wird er 40 Quants über der Plattform plaziert (ein Schätzwert; Sie müssen es für ein anderen Playermodel eventuell ändern). Also, was haben wir bisher? Ganz normalen Fahrstuhl-Code. Falls die Z Koordinate des Spielers unter 50 sinkt, dann startet diese Schleife:
while (my.skill11 > 0)
{
my.skill11 -= 1 * time;
elevator_pnt.v += max_speed * time;
wait (1);
}
Ich habe einen Zeiger auf die Fahrstuhlwände definiert und nun bewege ich ihre Texturen nach oben, indem ich ihre v Koordinate ändere. Dieser Teil gibt die "Länge" des Effekts an: falls Sie skill11 am Anfang der Schleife auf größere Werte setzen, dann fährt der Fahrstuhl "tiefer". Für kleinere Fahrstühle reichen kleine Werte von skill11. Nachdem genug Zeit verstrichen ist, wird die letzte Schleife ausgeführt:
while (my.z > -210)
{
snd_tune (snd_handle, 100, my.skill10, 0);
my.z -= start_speed * time * 1.1;
my.skill10 -= 5 * time; // decrease the frequency
player.z = my.z + 40;
wait (1);
}
Der Fahrstuhl wird langsamer, bis er an einem gewissen Punkt (-210 in meinem Beispiel, ich habe den Wert aus WED) stoppt. Der "Hochgeschwindigkeits" Fahrstuhl wird wieder zu einem "Normal" Sound.
Normalerweise
sollten Sie Ihren Fahrstuhl abdecken, damit der Trick nicht bemerkt wird;
ich habe eine Plattform benutzt, damit Sie sehen, wie es funktioniert.