"Topf"-Abfrage

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
ManiakFreak
Tastatursteuerer
Tastatursteuerer
Beiträge: 510
Registriert: 01.06.2005, 16:13
Wohnort: Thun (CH)
Kontaktdaten:

"Topf"-Abfrage

Beitrag von ManiakFreak »

Ich möchte gerne zwei Gegenstände (eine Banane und einen Apfel) bei AGS in einen Topf tun. Aber ich will, dass man die Reihenfolge des "Reintuns" selbst wählen kann, aber am Schluss in beiden Fällen eine Meldung kommt, wie z.B.: "Hmmmm.... Leckeres Birchermüsli!" :wink:

Ich weiss, dass man irgendwie eine Abfrage braucht, weiss aber nicht nach welchem Begriff ich im AGS-HELP fragen soll.

Kann mir jemand helfen?
Nein, Karussell fahren brauche ich nicht, mir wird schon allein von der Erdrotation schlecht.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

global script:

Code: Alles auswählen

int zutaten;
int muesli_fertig;
export zutaten, muesli_fertig;
script header:

Code: Alles auswählen

import int zutaten;
import int muesli_fertig;
Jetzt hast Du zwei globale Variablen, mit denen Du überprüfen kannst, wie weit das Müsli ist.

room script:

Code: Alles auswählen

function muesli_check() {
  if (zutaten==3) {
    muesli_fertig=1;
    player.Say("Hmmmm.... Leckeres Birchermüsli!");
    ...
  }
}
Diese Funktion wird nach jeder Zutat aufgerufen und überprüft, ob das Müsli fertig ist.

any_click_on topf:

Code: Alles auswählen

...
[else] if (UsedAction(LOOK_AT)) {
...
  if (zutaten==0) {
    player.Say("Da sind nur die Körner drin.");
  }
  else if (zutaten==1) {
    player.Say("Der Apfel ist drin, fehlt noch die Banane.");
  }
  else if (zutaten==2) {
    player.Say("Die Banane ist drin, fehlt noch der Apfel.");
  }
  else if (zutaten==3) {
    player.Say("Das Müsli ist endlich fertig.");
  }
}
else if (UsedAction(A_USE_INV)) {
  if (player.activeinv==iApfel.ID) {
...
    player.LoseInventory(iApfel);
    zutaten++;
    muesli_check();
  }
  else if (player.activeinv==iBanane.ID) {
...
    player.LoseInventory(iBanane);
    zutaten++;
    zutaten++;
    muesli_check();
  }
...
}
Und das ist der code für den Topf.
Zuletzt geändert von KhrisMUC am 26.10.2005, 18:56, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
Bissiger Witzbold
Tastatursteuerer
Tastatursteuerer
Beiträge: 554
Registriert: 28.09.2005, 19:13

Beitrag von Bissiger Witzbold »

Ich würde sicherheitshalber nicht einfach hochzählen, da sich hier eine Fehlerquelle einschleichen kann, wenn man mehrere Äpfel bekommen kann (sei es gewollt oder durch einen Fehler). Dann könnte man nämlich auch mit 2 Äpfeln ein Apfel-Banane-Müsli erstellen.

Ich würde die int für die Zutaten auf folgende Werte setzen:
0 = keine Zutat drin
1 = Apfel drin
2 = Banane drin
3 = Beides drin/Müsli fertig

Bei "Benutze Apfel mit Topf":

Code: Alles auswählen

if (zutaten==0) {
  -Apfel aus Inventory entfernen-
  zutaten = 1;
}
else if (zutaten==1) {
  -Figur sagen lassen: "Apfel ist schon drin"-
}
else if (zutaten==2) {
  -Apfel aus Inventory entfernen-
  -Figur sagen lassen: "Hmmmm.... Leckeres Birchermüsli!"-
  zutaten = 3;
}
else if (zutaten==3) {
  -Figur sagen lassen: "Mein Müsli ist doch schon fertig."-
}
Bei "Benutze Banane mit Topf":

Code: Alles auswählen

if (zutaten==0) {
  -Banane aus Inventory entfernen-
  zutaten = 2;
}
else if (zutaten==1) {
  -Banane aus Inventory entfernen-
  -Figur sagen lassen: "Hmmmm.... Leckeres Birchermüsli!"-
  zutaten = 3;
}
else if (zutaten==2) {
  -Figur sagen lassen: "Banane ist schon drin"-
}
else if (zutaten==3) {
  -Figur sagen lassen: "Mein Müsli ist doch schon fertig."-
}
Auf diese Weise kann man auch die Figur sagen lassen, welche Zutat sich bereits im Topf befindet, wenn sie diesen anschaut.

"Müsli fertig" müsste keine eigene int sein, hier kann man einfach überprüfen ob int zutaten auf 3 steht.
Benutzeravatar
KhrisMUC
Adventure-Gott
Adventure-Gott
Beiträge: 4674
Registriert: 14.03.2005, 00:55
Wohnort: München

Beitrag von KhrisMUC »

1. ich wollte es elegant machen
2. ich bin eben davon ausgegangen, dass das Spiel fehlerfrei programmiert wird und man somit keine zwei oder mehr Äpfel nehmen kann
3. in deinem code müssen ein paar "else"s vor die ifs, sonst gibts fehler

btw: hab meinen code editiert
Use gopher repellent on funny little man
Benutzeravatar
ManiakFreak
Tastatursteuerer
Tastatursteuerer
Beiträge: 510
Registriert: 01.06.2005, 16:13
Wohnort: Thun (CH)
Kontaktdaten:

Beitrag von ManiakFreak »

Hey! Danke, Khrismuc und Bissiger Witzbold!

OK, ich gebe nun ein virtuelles Birchermüsli auf meine Rechnung aus. :wink:
Nein, Karussell fahren brauche ich nicht, mir wird schon allein von der Erdrotation schlecht.
Benutzeravatar
Dusty D.
Hobby-Archäologe
Hobby-Archäologe
Beiträge: 153
Registriert: 18.04.2004, 20:03
Kontaktdaten:

Beitrag von Dusty D. »

Wofür gibbt datt eigentlich bitweise operatoren, Kinners?! :roll:

Bei "benutze apfel mit topf":

Code: Alles auswählen

int temp=GetGlobalInt(x);     // x=zutaten im topf
if (temp || 1) {
  DisplaySpeech(ego,"Apfel ist schon genug drin!");
}
else {
  SetGlobalInt(x,temp|1);     // apfel in topf
  LoseInventory(apfel);
}
Bei "benutze banane mit topf" dann entsprechend mit OR 2
Dann könnte man noch den muesli-check einbauen:

"Schau an topf":

Code: Alles auswählen

DisplaySpeech(ego,"Im Topf sehe ich...");
if(GetGlobalInt(x)||1) DisplaySpeech(ego,"Apfel...");
if(GetGlobalInt(x)||2) DisplaySpeech(ego,"Banane...");
if(GetGlobalInt(x)>2) DisplaySpeech(ego,"Also quasi ein fertiges Muesli!");
if(GetGlobalInt(x)==0) DisplaySpeech(ego,"Nix!");
Nebeneffekt: Man hat jederzeit in der GlobalInt(x) parat, ob(!=0) und welche(||y) Items im Topf sind und ob das Muesli fertig(>NoOfItemsForMuesli) ist oder nicht.
Das Long Trip-Projekt

"Lauf nicht weg!"
strazer
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 35
Registriert: 17.06.2005, 14:22

Beitrag von strazer »

Müsste es statt || nicht & sein, d.h.
if (temp & 1) {
?
[ZENSIERT]
Adventure-Gott
Adventure-Gott
Beiträge: 4575
Registriert: 13.07.2004, 14:04
Wohnort: Da wo muss
Kontaktdaten:

Beitrag von [ZENSIERT] »

Ja, weil | immer wahr wäre. Aber die Frage hat sich anscheinend schon geklärt.
Es heißt, Leute mit den originellsten Nicknames schreiben die besten Beiträge

Ausnahmen bestätigen die Regel
_________________
<Problem> Weil du denken kannst.

Zuletzt bearbeitet von [ZENSIERT] am 16.07.1759, 16:19, insgesamt 54743869-mal bearbeitet
Antworten