AMIGA-RESISTANCE

Die Projektseite für alles rund um den Amiga
Aktuelle Zeit: 28 Mär 2024, 12:56

Alle Zeiten sind UTC


 

 

 



Ein neues Thema erstellen  Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1 2 »
Autor Nachricht
BeitragVerfasst: 23 Mai 2017, 08:48 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
Endlich kommt ein deutsches Handbuch und ich versuche mich mal mit Programmieren. Bin blutiger Anfänger seit meinen C64- Zeiten. Ziel ist ein Quiz für meine Schulungen zum Thema Demenz zu erstellen. Beim Lernen muß ich aber jeden einzelnen Schritt verstehen, deswegen sind einfache Lösungen besser für mich als die "beste". Um Buttons zu kreieren habe ich RapaGUI gewählt, da hat das jedenfalls auf Anhieb geklappt. Mein Problem ist, daß ich gerade "Spaghetticode" schreibe, weil ich neue Fragen bei einer richtigen Antwort nachladen möchte und es schon bei der zweiten Frage unübersichtlich wird, da ich anscheinend bei jeder neuen Frage eine neue Funktion schreiben muß. Neue Fragen zu laden, muß doch auch einfacher zu machen sein, als meine Chaos-Lösung, oder?
Hier einmal das hws-Script:
;Hollywood-Version
@VERSION 6,1
;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"
;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"
;Bildschirm
;Festlegung der Brushes
;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"
;Beenden des Programmes
EscapeQuit(True)
;Intro
;Score
score=0
;Fragen
moai.CreateApp(FileToString("silvia.xml"))
Function p_Frage1(msg)

	Switch msg.action
	Case "RapaGUI":
		Switch msg.attribute
		Case "Pressed":
			If msg.id = "bt2"	;richtige Antwort
				PlaySample(3)
				moai.Request("", "Glückwunsch! Das ist richtig!" , "OK")
				moai.Request("", "Die Silviahemmet Stiftung wurde 1996 in Schweden durch die Königin Silvia ins Leben gerufen" , "OK")
				score=score+1
				moai.CreateApp(FileToString("silvia2.xml"))
				Function p_Frage2(msg)

						Switch msg.action
						Case "RapaGUI":
						Switch msg.attribute
							Case "Pressed":
							If msg.id = "bt2"	;richtige Antwort
							PlaySample(3)
							moai.Request("", "Glückwunsch! Das ist richtig!" , "OK")
							moai.Request("", "Das Nervensystem unterteilt sich in ein autonomes und peripheres" , "OK")
							score=score+1
							moai.CreateApp(FileToString("silvia2.xml"))

				ElseIf msg.id = "bt1"	;falsche Antwort
					PlaySample(4)
					moai.Request("", "leider falsch" , "OK")
				ElseIf msg.id = "bt3"	;falsche Antwort
					PlaySample(4)
					moai.Request("", "leider falsch" , "OK")
				ElseIf msg.id = "bt4"	;falsche Antwort
					PlaySample(4)
					moai.Request("", "leider falsch" , "OK")
				ElseIf msg.id = "bt5"	;Lernen
					PlaySample(4)

					moai.Request("", "leider falsch" , "OK")
				EndIf			
			EndSwitch
		EndSwitch

		EndFunction
		InstallEventHandler({RapaGUI = p_Frage2})

			ElseIf msg.id = "bt1"	;falsche Antwort
				PlaySample(4)
				moai.Request("", "leider falsch" , "OK")
			ElseIf msg.id = "bt3"	;falsche Antwort
				PlaySample(4)
				moai.Request("", "leider falsch" , "OK")
			ElseIf msg.id = "bt4"	;falsche Antwort
				PlaySample(4)
				moai.Request("", "leider falsch" , "OK")
			ElseIf msg.id = "bt5"	;Lernen
				PlaySample(4)

				moai.Request("", "leider falsch" , "OK")
			EndIf			
		EndSwitch
	EndSwitch

EndFunction
InstallEventHandler({RapaGUI = p_Frage1})

; Hauptschleife
Repeat
	WaitEvent
Forever

liefert zusammen mit folgenden xml-Dateien
Silvia.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<application id="app">
	<window title="Frage 1">
		<hgroup>
			<vgroup frame="true" frametitle="Wann wurde die Silviahemmet-Stiftung gegründet?" id="frage1">
					<vgroup>
					<button id="bt1">1994</button>
					<button id="bt2">1996</button>
					<button id="bt3">1999</button>
					<button id="bt4">2002</button>
					<button id="bt5">2004</button>
									
					<rectangle/>
				</vgroup>
			</vgroup>
		</hgroup>
	</window>

</application>

Silvia2.xml
<?xml version="1.0" encoding="iso-8859-1"?>
<application id="app2">
	<window title="Frage 2">
		<hgroup>
			<vgroup frame="true" frametitle="Wie ist das Nervensystem eingeteilt?" id="frage2">
					<vgroup>
					<button id="bt1">peripher und autonom</button>
					<button id="bt2">autonom und zentral</button>
					<button id="bt3">es gibt nur ein Nervensystem</button>
					<button id="bt4">zentral und peripher</button>
					<button id="bt5">die Frage nervt</button>
									
					<rectangle/>
				</vgroup>
				</vgroup>
		</hgroup>
	</window>
</application>
zwar ist das nun ein funktionierendes 2 Fragen Quiz, aber ich kann ja nicht immer weiter nach hinten verschachteln, spätestens bei Frage 5 wäre ich dann endgültig wahnsinnig. Geht das vielleicht über die id von xml, die man aufrufen kann oder mit einem Goto- Befehl....?
Für jede Hilfe bin ich dankbar....


Nach oben
   
BeitragVerfasst: 23 Mai 2017, 17:19 
Offline
Administrator
Benutzeravatar

Registriert: 30 Aug 2005, 19:42
Beiträge: 5303
Postleitzahl: 46047
Land: Deutschland
Wohnort: 46047 Oberhausen
Hi Mr_Blues
Erstmal ein herzliches willkommen hier in der Deutschen Hollywood Ecke. :winke:

Hab mir mal erlaubt deinen Quelltext in die Code Zeichen zu packen, damit der besser erkennbar ist.

Leider kann ich dir da nicht weiterhelfen, weil ich bis jetzt noch nicht dazu gekommen bin mal mehr in die
Programierung mit Hollywood reinzuschuppern. Aber es gibt hier ein paar (Tipsi, Murmel, msu, ...) die echt fit im Umgang mit Hollywood sind und dir sicherlich da was zu schreiben können sobald sie es hier lesen.

_________________
Gruß Helmut
Amiga 2000, Amiga 500, Amiga One XE, Amiga One X5000


Nach oben
   
BeitragVerfasst: 23 Mai 2017, 22:58 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

RapaGUI ist leider auch für mich absolutes Neuland. Ich habe
mich bis jetzt nicht mit dieser GUI befasst, darum kann ich Dir
nicht 100% helfen. Aber mal schauen, was das Handbuch uns
mitteilen kann.

Wenn ich das richtig gelesen habe, kann man den Text von einem
Knopf/Taster (Button) während der Laufzeit mit folgendem Befehl
ändern:
moai.Set(id$, attr1$, val1$, ...)
Um also den Text vom Button "bt1" zu ersetzten, verwende diese
Zeile:
moai.Set("bt1", "Text", "Das ist der neue Text")
Ich hoffe, das es so funktioniert. Falls Ja, dann sollte die
Frage mit folgender Zeile geändert werden können:
moai.Set("frage1", "Title", "Und hier die neue Frage")
Ob das wirklich geht, musst Du mal testen.

Die Fragen, Antworten und welche Antwort die richtige ist,
würde ich alles extern vom Programm in eine Datei schreiben.
So kann dann Dein Programm die Frage und die möglichen
Antworten Zeile für Zeile aus der Datei laden. Aber ich muss
nun ins Bett und ich erkläre das gerne nach dem Schlafen. :D

Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 24 Mai 2017, 20:01 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

Ich kämpfe im Moment gerade damit, dass der Fragetext, der
als Titel in der vgroup geschrieben ist, nicht mit MUI unter
Version 4.0 geändert werden kann. Auch die Möglichkeit, den
Titel des Fensters zu ändern, versteckt sich vor mir.

Hab noch etwas Geduld.

Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 24 Mai 2017, 21:06 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

So auf die schnelle fand ich nicht die richtigen Möglichkeiten,
um die Fragen in einem guten Objekt unterzubringen. Ich war
so frei und habe mal Buttons dafür misbraucht. Ist aber nicht
die Lösung.

Trotzdem denke ich, dass es Dir helfen kann, die richtigen Objekte
zu finden. Ausserdem kannst Du damit mal Arbeiten und schauen,
wie die Fragen geladen werden. Ich habe mehrere Funktionen
geschrieben und Dein Code ein wenig umgemodelt. Schaue ihn
in aller Ruhe an. Hier mal der Hollywood-Code:
;Hollywood-Version
@VERSION 6,1
;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"
;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"
;Bildschirm
;Festlegung der Brushes
;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"
;Intro
;Fragen
moai.CreateApp(FileToString("silvia3.xml"))

;                        -----------------
;----------------------- Globale Variablen -------------------------
;                        -----------------

;Score
score=0

;Fragen und Antworten
Frage = {}                       ;mit = {} werden Tabellen deklariert
RichtigeAntwort = {}
AntwortZusatz = {}
Antwort1 = {}
Antwort2 = {}
Antwort3 = {}
Antwort4 = {}
Antwort5 = {}

AntwortRichtig1 = False          ;wird auf True gesetzt, falls es..
AntwortRichtig2 = False          ;..die richtige Antwort ist.
AntwortRichtig3 = False
AntwortRichtig4 = False
AntwortRichtig5 = False

;Zähler
AktuelleFrage = 0
FragenZaehler = 0                ;Die Felder in Tabellen fangen..
                                 ;..bei 0 an


;                        ----------
;----------------------- Funktionen -----------------------
;                        ----------

Function p_FragenLaden()
  Local Vorhanden = False        ;Alle lokalen Variablen werden beim..
  Local Datei = "Fragen.txt"     ;..Verlassen der Funktion p_FragenLaden()..
  Local Leerzeile = ""           ;..aus dem Speicher gelöscht
  Local Weiter = 0

  Vorhanden=Exists(Datei)

  If Vorhanden=True              ;Wenn Datei vorhanden, wird sie geöffnet
    OpenFile(1,Datei,#MODE_READ)
      
    While Not Eof(1)
      Frage[FragenZaehler] = ReadLine(1)
      RichtigeAntwort[FragenZaehler] = ReadLine(1)
      AntwortZusatz[FragenZaehler] = ReadLine(1)
      Antwort1[FragenZaehler] = ReadLine(1)
      Antwort2[FragenZaehler] = ReadLine(1)
      Antwort3[FragenZaehler] = ReadLine(1)
      Antwort4[FragenZaehler] = ReadLine(1)
      Antwort5[FragenZaehler] = ReadLine(1)

      If Not Eof(1)               ;Falls am Ende der Datei die Leerzeile..
        Leerzeile = ReadLine(1)   ;..vergessen wurde, wird kein Fehler..
      EndIf                       ;..gemeldet

      FragenZaehler = FragenZaehler+1
    Wend

    CloseFile(1)
  Else                           ;Datei ist nicht vorhanden
    Weiter = SystemRequest("Fehler","Datei mit Fragen nicht gefunden!","Programm beenden")
    End()
  EndIf
EndFunction

Function p_NaechsteFrage()
  Local FrageNummer = AktuelleFrage+1

  moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
  moai.Set("fbt2", "Text", Frage[AktuelleFrage])
  moai.Set("bt1", "Text", Antwort1[AktuelleFrage])
  moai.Set("bt2", "Text", Antwort2[AktuelleFrage])
  moai.Set("bt3", "Text", Antwort3[AktuelleFrage])
  moai.Set("bt4", "Text", Antwort4[AktuelleFrage])
  moai.Set("bt5", "Text", Antwort5[AktuelleFrage])

  If RichtigeAntwort[AktuelleFrage] = "1"
    AntwortRichtig1 = True
  Else
    AntwortRichtig1 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "2"
    AntwortRichtig2 = True
  Else
    AntwortRichtig2 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "3"
    AntwortRichtig3 = True
  Else
    AntwortRichtig3 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "4"
    AntwortRichtig4 = True
  Else
    AntwortRichtig4 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "5"
    AntwortRichtig5 = True
  Else
    AntwortRichtig5 = False
  EndIf

EndFunction

Function p_Richtig()
  PlaySample(3)
  moai.Request("", "Glückwunsch! Das ist richtig!" , "OK")
  moai.Request("", AntwortZusatz[AktuelleFrage] , "OK")
  score = score+1
  AktuelleFrage = AktuelleFrage+1
  p_NaechsteFrage()
EndFunction

Function p_Falsch()
  PlaySample(4)
  moai.Request("", "leider falsch" , "OK")
  ;AktuelleFrage = AktuelleFrage+1  ;falls nächste Frage (;) entfernen
  ;p_NaechsteFrage()                ;falls nächste Frage (;) entfernen
EndFunction

Function p_AntwortAuswertung(msg)
  Switch msg.action
  Case "RapaGUI":

    Switch msg.attribute
    Case "Pressed":

      If msg.id = "bt1"
        If AntwortRichtig1 = True
          p_Richtig()
        Else
          p_Falsch()
        EndIf
      ElseIf msg.id = "bt2"
        If AntwortRichtig2 = True
          p_Richtig()
        Else
          p_Falsch()
        EndIf
      ElseIf msg.id = "bt3"
        If AntwortRichtig3 = True
          p_Richtig()
        Else
          p_Falsch()
        EndIf
      ElseIf msg.id = "bt4"
        If AntwortRichtig4 = True
          p_Richtig()
        Else
          p_Falsch()
        EndIf
      ElseIf msg.id = "bt5"
        If AntwortRichtig5 = True
          p_Richtig()
        Else
          p_Falsch()
        EndIf
      EndIf

    EndSwitch

  EndSwitch
EndFunction

;                        -------------
;----------------------- Hauptprogramm -----------------------
;                        -------------

;Beenden des Programmes
EscapeQuit(True)

InstallEventHandler({RapaGUI = p_AntwortAuswertung})

p_FragenLaden()
p_NaechsteFrage()

; Hauptschleife
Repeat
   WaitEvent
Forever
Und nun folgt der angepasste XML-Code. Speichere diesen
unter silvia3.xml ab:
<?xml version="1.0" encoding="iso-8859-1"?>
<application id="app">
   <window title="Hier muss noch ein guter Fenstertitel rein">
      <hgroup>
         <vgroup frame="true" frametitle="                                " id="frage1">
            <vgroup>
               <button id="fbt1">-</button>
               <button id="fbt2">-</button>
               <text>                </text>
               <button id="bt1">-</button>
               <button id="bt2">-</button>
               <button id="bt3">-</button>
               <button id="bt4">-</button>
               <button id="bt5">-</button>

               <rectangle/>
            </vgroup>
         </vgroup>
      </hgroup>
   </window>

</application>  
Da steht noch <rectangle/> in einer Zeile. Damit konnte ich
nichts anfangen, liess es aber drinnen.

Als Textdatei im ASCII-Format kannst Du mal folgenden
Text nehmen und unter dem Dateinamen Fragen.txt abspeichern:
Wann wurde die Silviahemmet-Stiftung gegründet?
2
"Die Silviahemmet Stiftung wurde 1996 in Schweden durch die Königin Silvia ins Leben gerufen"
1994
1996
1999
2002
2004

Wie ist das Nervensystem eingeteilt?
2
Das Nervensystem unterteilt sich in ein autonomes und peripheres
peripher und autonom
autonom und zentral
es gibt nur ein Nervensystem
zentral und peripher
die Frage nervt

Wir testen nun den ersten Knopf:
1
Jawoll
Richtig
Falsch
Falsch
Falsch
Falsch

Wir testen nun den zweiten Knopf:
2
Geht doch
Falsch
Richtig
Falsch
Falsch
Falsch

Wir testen nun den dritten Knopf:
3
Potz donner
Falsch
Falsch
Richtig
Falsch
Falsch

Wir testen nun den vierten Knopf:
4
Das läuft ja so, wie es soll
Falsch
Falsch
Falsch
Richtig
Falsch

Wir testen nun den fünften Knopf:
5
Und auch Nummer 5 funktioniert
Falsch
Falsch
Falsch
Falsch
Richtig
        
Das Format ist so gewählt, dass pro Frage 9 Zeilen in
Anspruch genommen werden.

Zeile 1: Das ist die Frage
Zeile 2: Hier steht die Nummer für die richtige Antwort
Zeile 3: Das ist der Text, welcher nach der richtigen Antwort als
---- Ergänzung/Erklärung erscheint
Zeile 4: Die erste Antwortmöglichkeit
Zeile 5: Die zweite Antwortmöglichkeit
Zeile 6: Die dritte Antwortmöglichkeit
Zeile 7: Die vierte Antwortmöglichkeit
Zeile 8: Die fünfte Antwortmöglichkeit
Zeile 9: Leerzeile, damit die Fragen optisch von einander getrennt sind

Ich hoffe, Du kannst etwas damit anfangen. Hier noch die
direkten Links zu den von mir verwendeten Befehlen:

..
CloseFile(1)
End()
Eof()
Exists()
Lokale Variablen
Local
Not
OpenFile()
ReadLine()
SystemRequest()
Tabellen
Wend
While

Soodeli, viel Vergnügen beim Testen.

Griessli
Tipsi

Tante Edit: Die Links wieder auf den neusten Stand gebracht.


Zuletzt geändert von Tipsi am 11 Okt 2021, 07:31, insgesamt 1-mal geändert.

Nach oben
   
BeitragVerfasst: 25 Mai 2017, 09:41 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
:moin: erst einmal vielen Dank für die tollen Antworten :daumen: . Ich werde so übers Wochenende mir das mal in Ruhe ansehen und mich nochmal melden.
Danke!
Arnim


Nach oben
   
BeitragVerfasst: 25 Mai 2017, 09:57 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

Bitte, gern geschehen. Veilleicht noch ein paar Gedanken
allgemein zu Deiner Frage, wie Du Spaghetticode vermeiden
kannst:

a) Verwende nie und nimmer den Befehl Goto. Er steht zwar
noch in Hollywood zur Verfügung, ist aber seit Version 2.0
veraltet.

b) Schreibe Präprozessorbefehle an den Anfang des Skripts.
Das hast Du so gemacht. Sehr gut.

c) Deklariere alle globalen Variablen auch am Anfang des Skripts.
Wenn Du während dem Programmieren eine neue Variable einfürst,
welche global ist, dann schreibe auch diese an den Anfang des Skripts.

d) Verwende so oft als möglich lokale Variablen. Diese werden automatisch
aus dem Speicher gelöscht, wenn die Funktion oder der Block verlassen
wird. Globale Variablen musst Du bei RAM-Mangel von Hand aus dem
Speicher löschen. Bei diesem Punkt muss ich mich auch selber an der
Nase nehmen, da globale Variablen am Anfang viel bequemer sind, dafür
aber auch Fehleranfälliger. Ausserdem sind globale Variablen bei grösseren
Programmen langsamer, da Hollywood im ganzen Programm danach sucht
und nicht nur z.B. in der Funktion.

e) Definiere Funktionen immer vor dem Hauptprogramm. Wenn es sich
vermeiden lässt, dann definiere diese Funktionen nicht in einer anderen
Funktion. Das führt zu unübersichtlichen Verschachtelungen bei längeren
Skripts. Wenn das Skript länger wird, kann es gut helfen, wenn die Definitionen
der Funktionen sortiert sind (z.B. alphabetisch).

f) Versuche nach Deinen Vorstellungen den Code optisch fürs Auge zu
unterteilen. Dafür eignet sich der Strichpunkt (;) für die Einleitung eines
Kommentars.
;                        -----------------
;----------------------- Globale Variablen -------------------------
;                        -----------------

;----------------------- Alle Berechnungen -------------------------

;************** Verschiedene Formen zeichen *************
Das sind nur drei Beispiele. Verwende auch Zwischenräume (Leerzeilen)
zwischen was auch immer. Das Auge dankt Dir. So würde ich zum Beispiel
Dein Code am Anfang
;Hollywood-Version
@VERSION 6,1
;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"
;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"
;Bildschirm
;Festlegung der Brushes
;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"
;Intro
;Fragen
moai.CreateApp(FileToString("silvia3.xml"))
so schreiben:
;Hollywood-Version
@VERSION 6,1

;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"

;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"

;Bildschirm
;Festlegung der Brushes

;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"

;Intro
;Fragen

moai.CreateApp(FileToString("silvia3.xml"))
Oder ein anderes Beispiel, womit die Grundeinstellungen der
Karten von meinem Programm KoKa eingelesen werden. Hier
mal das schlechte Beispiel:
          Karten25000=ReadLine(2)
          Karten25000Z=ReadLine(2)
          Karten25000TZ=ReadLine(2)
          Karten25000SwissMap=ReadLine(2)
          Karten33333T=ReadLine(2)
          Karten50000=ReadLine(2)
          Karten50000Z=ReadLine(2)
          Karten50000T=ReadLine(2)
          Karten50000TZ=ReadLine(2)
          Karten50000S=ReadLine(2)
          Karten50000SwissMap=ReadLine(2)
          Karten75000=ReadLine(2)
          Karten100000=ReadLine(2)
          Karten100000Z=ReadLine(2)
          Karten100000Veloland2008=ReadLine(2)
          KartenCoopVelorouten2008=ReadLine(2)
          KartenCoopHistorische2008=ReadLine(2)
          KartenVeloThurgau=ReadLine(2)
          Karten200000=ReadLine(2)
          KartenBurgen=ReadLine(2)
          KartenBurgenDetail=ReadLine(2)
          Karten200000Strasse=ReadLine(2)
          Karten25000Alt=ReadLine(2)
          Karten25000ZAlt=ReadLine(2)
          Karten25000Siegfried=ReadLine(2)
          Karten25000SiegfriedZ=ReadLine(2)
          Karten25000TZAlt=ReadLine(2)
          Karten50000Alt=ReadLine(2)
          Karten50000ZAlt=ReadLine(2)
          Karten50000Siegfried=ReadLine(2)
          Karten50000SiegfriedZ=ReadLine(2)
          Karten50000TAlt=ReadLine(2)
          Karten50000TZAlt=ReadLine(2)
          Karten50000SAlt=ReadLine(2)
          Karten50000HalbAlt=ReadLine(2)
          Karten100000ZAlt=ReadLine(2)
          Karten100000Dufour=ReadLine(2)
          Karten100000DufourZ=ReadLine(2)
          Karten100000Veloland2002=ReadLine(2)
          Karten100000Veloland1998=ReadLine(2)
          KartenVeloThurgauAlt=ReadLine(2)
          KartenBurgen4=ReadLine(2)
          KartenBurgenDetail4=ReadLine(2)
          Karten250000General=ReadLine(2)
          Karten250000Eisenbahn=ReadLine(2)
          KartenKulturgueter1995=ReadLine(2)
          KartenKulturgueter1970=ReadLine(2)
          KartenKulturgueter1964=ReadLine(2)
          KartenMuseumAlt=ReadLine(2)
          KartenZehnSchoene=ReadLine(2)
          KartenZehnSchoeneVelo=ReadLine(2)
          KartenGeplante25=ReadLine(2)
          KartenAndereNamen50=ReadLine(2)
          KartenAareWanderVeloAlt=ReadLine(2)
          Programmstart=ReadLine(2)
          TasteNeu=ReadLine(2)
          Quit=ReadLine(2)
          Schliessknopf=ReadLine(2)
          ESC=ReadLine(2)
          TastaturSteuerung=ReadLine(2)
          TastaturKuerzel=ReadLine(2)
          TastaturKuerzelGroesse=ReadLine(2)
          TastaturKuerzelFeld=ReadLine(2)
          TastaturKuerzelTrennzeichen=ReadLine(2)
          TastaturKuerzelDateirequester=ReadLine(2)
          ProgrammstartName=ReadLine(2)
          TasteNeuName=ReadLine(2)
          KoordinatenSystemLV=ReadLine(2)
          WaitEventDoppel=ReadLine(2)
Mit Zwischenräumen und Kommentaren wird das ganze schon übersichtlicher:
          ;Karten
          Karten25000=ReadLine(2)
          Karten25000Z=ReadLine(2)
          Karten25000TZ=ReadLine(2)
          Karten25000SwissMap=ReadLine(2)

          Karten33333T=ReadLine(2)

          Karten50000=ReadLine(2)
          Karten50000Z=ReadLine(2)
          Karten50000T=ReadLine(2)
          Karten50000TZ=ReadLine(2)
          Karten50000S=ReadLine(2)
          Karten50000SwissMap=ReadLine(2)

          Karten75000=ReadLine(2)

          Karten100000=ReadLine(2)
          Karten100000Z=ReadLine(2)
          Karten100000Veloland2008=ReadLine(2)
          KartenCoopVelorouten2008=ReadLine(2)
          KartenCoopHistorische2008=ReadLine(2)
          KartenVeloThurgau=ReadLine(2)

          Karten200000=ReadLine(2)
          KartenBurgen=ReadLine(2)
          KartenBurgenDetail=ReadLine(2)
          Karten200000Strasse=ReadLine(2)

          ;alte Karten
          Karten25000Alt=ReadLine(2)
          Karten25000ZAlt=ReadLine(2)
          Karten25000Siegfried=ReadLine(2)
          Karten25000SiegfriedZ=ReadLine(2)
          Karten25000TZAlt=ReadLine(2)

          Karten50000Alt=ReadLine(2)
          Karten50000ZAlt=ReadLine(2)
          Karten50000Siegfried=ReadLine(2)
          Karten50000SiegfriedZ=ReadLine(2)
          Karten50000TAlt=ReadLine(2)
          Karten50000TZAlt=ReadLine(2)
          Karten50000SAlt=ReadLine(2)
          Karten50000HalbAlt=ReadLine(2)

          Karten100000ZAlt=ReadLine(2)
          Karten100000Dufour=ReadLine(2)
          Karten100000DufourZ=ReadLine(2)
          Karten100000Veloland2002=ReadLine(2)
          Karten100000Veloland1998=ReadLine(2)
          KartenVeloThurgauAlt=ReadLine(2)

          KartenBurgen4=ReadLine(2)
          KartenBurgenDetail4=ReadLine(2)

          Karten250000General=ReadLine(2)
          Karten250000Eisenbahn=ReadLine(2)
          KartenKulturgueter1995=ReadLine(2)
          KartenKulturgueter1970=ReadLine(2)
          KartenKulturgueter1964=ReadLine(2)
          KartenMuseumAlt=ReadLine(2)
          KartenZehnSchoene=ReadLine(2)
          KartenZehnSchoeneVelo=ReadLine(2)
          KartenGeplante25=ReadLine(2)
          KartenAndereNamen50=ReadLine(2)
          KartenAareWanderVeloAlt=ReadLine(2)

          ;Diverses
          Programmstart=ReadLine(2)
          TasteNeu=ReadLine(2)
          Quit=ReadLine(2)
          Schliessknopf=ReadLine(2)
          ESC=ReadLine(2)

          TastaturSteuerung=ReadLine(2)
          TastaturKuerzel=ReadLine(2)
          TastaturKuerzelGroesse=ReadLine(2)
          TastaturKuerzelFeld=ReadLine(2)
          TastaturKuerzelTrennzeichen=ReadLine(2)
          TastaturKuerzelDateirequester=ReadLine(2)

          ProgrammstartName=ReadLine(2)
          TasteNeuName=ReadLine(2)
          KoordinatenSystemLV=ReadLine(2)
          WaitEventDoppel=ReadLine(2)
Sonst hat auch Andreas einige Vorschläge verfasst, die das Leben
mit Skripts erleichtern können: Gestaltungsrichtlinien

Ein Profiprogrammierer hätte sicher noch weitere Vorschläge. Aber eben,
es sind Vorschläge, nicht Gesetze. Aber es kann vor allem bei längeren
Skripts sehr hilfreich sein, auch wenn das Gehirn zeitweise mehr in Anspruch
genommen werden muss.

So, nun gehe ich die Sonne geniessen.

Griessli
Tipsi


Tante Edit: URL zu den Gestaltungsrichtlinien angepasst.


Zuletzt geändert von Tipsi am 21 Jun 2019, 09:35, insgesamt 1-mal geändert.

Nach oben
   
BeitragVerfasst: 26 Mai 2017, 11:10 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
Vierlen Dank für die Hilfe. Jetzt ist es mir gelungen ein Quiz aufzubauen, nur mit dem Spielende hapert es noch. Ich habe eine Funtion p_Spielende() geschrieben, die ich aufrufen möchte, wenn der FragenZaehler bei 25 liegt. Nach diversen Versuchen bricht das Script nach der 25ten Frage mit Fehlermeldung ab. Was mache ich falsch?

; ----------------
;----------------------- Voreinstellungen ----------------------------
; ----------------

;Hollywood-Version
@VERSION 6,1

;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"

;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"
;Bildschirm

;Festlegung der Brushes

;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"
;Intro

;Fragen
moai.CreateApp(FileToString("silvia3.xml"))

; -----------------
;----------------------- Globale Variablen -------------------------
; -----------------

;Score
score=0

;Fragen und Antworten
Frage = {} ;mit = {} werden Tabellen deklariert
RichtigeAntwort = {}
AntwortZusatz = {}
Antwort1 = {}
Antwort2 = {}
Antwort3 = {}
Antwort4 = {}
Antwort5 = {}

AntwortRichtig1 = False ;wird auf True gesetzt, falls es die richtige Antwort ist.
AntwortRichtig2 = False
AntwortRichtig3 = False
AntwortRichtig4 = False
AntwortRichtig5 = False

;Zähler
AktuelleFrage = 0
FragenZaehler = 0 ;Die Felder in Tabellen fangen bei 0 an


; ----------
;----------------------- Funktionen -----------------------
; ----------

Function p_FragenLaden()
Local Vorhanden = False ;Alle lokalen Variablen werden beim Verlassen der Funktion p_FragenLaden() aus dem Speicher gelöscht
Local Datei = "Fragen.txt"
Local Leerzeile = ""
Local Weiter = 0

Vorhanden=Exists(Datei)



If Vorhanden = True ;Wenn Datei vorhanden, wird sie geöffnet
OpenFile(1,Datei,#MODE_READ)

While Not Eof(1)
Frage[FragenZaehler] = ReadLine(1)
RichtigeAntwort[FragenZaehler] = ReadLine(1)
AntwortZusatz[FragenZaehler] = ReadLine(1)
Antwort1[FragenZaehler] = ReadLine(1)
Antwort2[FragenZaehler] = ReadLine(1)
Antwort3[FragenZaehler] = ReadLine(1)
Antwort4[FragenZaehler] = ReadLine(1)
Antwort5[FragenZaehler] = ReadLine(1)

If Not Eof(1) ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
Leerzeile = ReadLine(1)
EndIf

FragenZaehler = FragenZaehler+1

If FragenZaehler = 25
p_Spielende()
EndIf
Wend

CloseFile(1)
EndIf
EndFunction

Function p_NaechsteFrage()
Local FrageNummer = AktuelleFrage+1

moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
moai.Set("fbt2", "Text", Frage[AktuelleFrage])
moai.Set("bt1", "Text", Antwort1[AktuelleFrage])
moai.Set("bt2", "Text", Antwort2[AktuelleFrage])
moai.Set("bt3", "Text", Antwort3[AktuelleFrage])
moai.Set("bt4", "Text", Antwort4[AktuelleFrage])
moai.Set("bt5", "Text", Antwort5[AktuelleFrage])

If RichtigeAntwort[AktuelleFrage] = "1"
AntwortRichtig1 = True
Else
AntwortRichtig1 = False
EndIf

If RichtigeAntwort[AktuelleFrage] = "2"
AntwortRichtig2 = True
Else
AntwortRichtig2 = False
EndIf

If RichtigeAntwort[AktuelleFrage] = "3"
AntwortRichtig3 = True
Else
AntwortRichtig3 = False
EndIf

If RichtigeAntwort[AktuelleFrage] = "4"
AntwortRichtig4 = True
Else
AntwortRichtig4 = False
EndIf

If RichtigeAntwort[AktuelleFrage] = "5"
AntwortRichtig5 = True
Else
AntwortRichtig5 = False
EndIf

EndFunction

Function p_Richtig()
PlaySample(3)
moai.Request("", "Glückwunsch! Das ist richtig!" , "OK")
moai.Request("", AntwortZusatz[AktuelleFrage] , "OK")
score = score+1
AktuelleFrage = AktuelleFrage+1
p_NaechsteFrage()
EndFunction

Function p_Falsch()
PlaySample(4)
moai.Request("", "leider falsch" , "OK")
moai.Request("", AntwortZusatz[AktuelleFrage] , "OK")
AktuelleFrage = AktuelleFrage+1
p_NaechsteFrage()
EndFunction

Function p_AntwortAuswertung(msg)
Switch msg.action
Case "RapaGUI":

Switch msg.attribute
Case "Pressed":

If msg.id = "bt1"
If AntwortRichtig1 = True
p_Richtig()
Else
p_Falsch()
EndIf
ElseIf msg.id = "bt2"
If AntwortRichtig2 = True
p_Richtig()
Else
p_Falsch()
EndIf
ElseIf msg.id = "bt3"
If AntwortRichtig3 = True
p_Richtig()
Else
p_Falsch()
EndIf
ElseIf msg.id = "bt4"
If AntwortRichtig4 = True
p_Richtig()
Else
p_Falsch()
EndIf
ElseIf msg.id = "bt5"
If AntwortRichtig5 = True
p_Richtig()
Else
p_Falsch()
EndIf
EndIf

EndSwitch

EndSwitch
EndFunction

Function p_Spielende()
If score = 25 /* wenn der score 25 =alle Fragen richtig ist */
moai.Request("","Das ist der Hammer, Du hast von 25 Fragen alle richtig beantwortet. Sehr gut" , "OK")
PlaySample(1)
ElseIf score >= 20 /* ist der score größer gleich 20 */
moai.Request("","Richtig gut!, Du hast mehr als 20 Fragen richtig beantwortet. Schlaufuchs!" , "OK")
PlaySample(1)
ElseIf score >= 13 /* ist der score größer gleich 50 */
moai.Request("","Du hast mehr als 13 Fragen richtig beantwortet. Da geht sicher noch mehr" , "OK")
PlaySample(1)
Else /* ist der score schlechter als 13 */
moai.Request("","Du hast weniger als 13 Fragen richtig beantwortet. Bitte übe noch einmal" , "OK")
PlaySample(2)

EndIf

moai.Request("","Drücke die ESC Taste oder den linken Mausknopf zum Beenden" , "OK")

WaitLeftMouse

End

EndFunction

; -------------
;----------------------- Hauptprogramm -----------------------
; -------------

;Beenden des Programmes
EscapeQuit(True)

InstallEventHandler({RapaGUI = p_AntwortAuswertung})

p_FragenLaden()
p_NaechsteFrage()
; Hauptschleife
Repeat
WaitEvent
Forever


Nach oben
   
BeitragVerfasst: 26 Mai 2017, 11:18 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
oder ist das eine Möglichkeit?

If FragenZaehler = 25
p_Spielende()
Else
p_NaechsteFrage()
EndIf

Aber irgendwie bin ich da nicht erfolgreich.


Nach oben
   
BeitragVerfasst: 26 Mai 2017, 15:00 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

Wenn Du Code mit Einrückungen hier abbilden möchtest, dann
setzte diesen Code zwischen die beiden Tags
[code]
[/code]

Du kannst auch dein Skript hier hinein kopieren, nur das Skript
markieren und oben auf den Knopf "Code" drücken.

Oder Du drückst zuerst auf den Knopf "Code", und kopierst Dein
Skript da hinein (der Cursor sollte schon zwischen den beiden
eckigen Klammern ][ stehen).

Zum Beenden von Deinem Programm. Die Variable FragenZaehler
enthält die Gesammtzahl der Fragen, die geladen wurden. Die
Variable AktuelleFrage beinhaltet die Zahl der gerade gestellten
Frage.

Wenn die Datei Fragen.txt 31 Fragen enthält, wird die Funktion p_FragenLaden()
diese 31 Fragen alle in den Speicher laden und der FragenZaehler
erhält am Schluss die Zahl 31.

Wenn nun die erste Frage auf dem Bildschirm erscheint, ist die Variable
AktuelleFrage auf Null gesetzt (Tabellen fangen bei 0 an). Damit
aber der Benutzer nicht verwirrt dreinschaut, wird ihm durch die Zeile
Local FrageNummer = AktuelleFrage+1 die Frage Nr.1 gestellt.

Wenn Du somit das Quiz nach der letzten Frage beenden möchtest,
dann musst Du das in etwa so schreiben:
If AktuelleFrage=FragenZaehler
  p_Spielende()
EndIf
Der Vorteil ist, dass der FragenZaehler immer auf dem neusten Stand ist.
Du kannst in der Datei Fragen.txt mehrere neue Fragen hinzufügen, ändern
oder gar entfernen. Dein Programm lädt die Fragen (egal wie viele), zählt diese
und setzt die Zahl in die Variable FragenZaehler. Darum musst Du in Deinem
Skript nie die Gesammtzahl der Fragen von Hand eintragen.

Jetzt müssen diese drei Zeilen nur noch am richtigen Ort im Skript hineinkopiert
werden. Du rufst die Funktion p_Spielende() beim Laden der Fragen auf.
Dann würde eigentlich das Programm beendet, nachdem alle Fragen geladen wurden.
Der Benutzer wird nie eine Frage zu Gesicht bekommen.

Also lösche folgende Zeilen aus der Funktion p_FragenLaden():
If FragenZaehler = 25
p_Spielende()
EndIf
Kopiere nun diese drei Zeilen
If AktuelleFrage=FragenZaehler
  p_Spielende()
EndIf
und füge sie in der Funktion p_NaechsteFrage() ein:
Function p_NaechsteFrage()
  Local FrageNummer = AktuelleFrage+1

  If AktuelleFrage=FragenZaehler
    p_Spielende()
  EndIf

  moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
Ich weiss leider nicht, welche Fehlermeldung Du erhalten hast. Wichtig wäre
dabei die Fehlernummer, Fehlertext und die Zeilennummer. Falls Dein Editor
keine Fehlermeldung ausspuckt (ist leider ab und zu bei CubicIDE der Fall),
dann starte Dein Programm über die Hollywood-GUI.

Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 28 Mai 2017, 11:10 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
Vielen Dank für die Hilfe. Also Fragen laden funktioniert schon einmal, bewertet mit einem Score wird die Sache auch. Also das Grundprogramm steht schon einmal, vielen Dank für die Hilfe! :top:

Jetzt bin ich am Herumprobieren:
-Ich würde gerne ein Intro implementieren. So in einem ersten Versuch hat es geklappt (ohne den Quiz Code), jetzt sagt mir allerdings die Hollywood IDE "Done", es zeigt sich aber nichts. Hat das vielleicht mit RapaGUI zu tun?
-Auch hätte ich gerne ein Hauptmenü, um von dort aus weitere Fragen zu schreiben.
-Gerne hätte ich einen "FullScreen", das scheint gar nicht zu funktiuonieren
-Und auch noch wichtig: Zu jeder Frage hätte ich gerne ein Bild geladen. Ich habe da überhaupt keine Idee wie das funktionieren soll

Hier jetzt einmal der funktionierende Code, mit der neuen Funktion p_Intro()
[color=#008040];                        ----------------
;----------------------- Voreinstellungen ----------------------------
;		         ----------------

;Hollywood-Version
@VERSION 6,1

;Einbinden von RAPAGUI
@REQUIRE "RapaGUI"

;Progranmminfo
@APPTITLE "Silviahemmet-Quiz"
@APPCOPYRIGHT "(C) 2017 Arnim Wolff"
@APPAUTHOR "Arnim Wolff"
@APPDESCRIPTION "Fragen zur Silviahemmet-Schulung"
;Bildschirm

;Festlegung der Bilder (Intro)
@BRUSH 1, "Title.png"
@BRUSH 2, "0.jpg"
@BRUSH 3, "1.jpg"
@BRUSH 4, "2.jpg"

;Festlegung der Sounds
@SAMPLE 1, "Good.wav"
@SAMPLE 2, "Poor.wav"
@SAMPLE 3, "True.wav"
@SAMPLE 4, "False.wav"
;Intro

;Fragen
moai.CreateApp(FileToString("silvia3.xml"))
;                        -----------------
;----------------------- Globale Variablen -------------------------
;                        -----------------

;Score
score=0

;Fragen und Antworten
Frage = {}                       ;mit = {} werden Tabellen deklariert
RichtigeAntwort = {}
AntwortZusatz = {}
Antwort1 = {}
Antwort2 = {}
Antwort3 = {}
Antwort4 = {}
Antwort5 = {}

AntwortRichtig1 = False          ;wird auf True gesetzt, falls es die richtige Antwort ist.
AntwortRichtig2 = False          
AntwortRichtig3 = False
AntwortRichtig4 = False
AntwortRichtig5 = False

;Zähler
AktuelleFrage = 0
FragenZaehler = 0                ;Die Felder in Tabellen fangen bei 0 an


;                        ----------
;----------------------- Funktionen -----------------------
;                        ----------

Function p_Intro()
	DisplayBrush(2, 0, 0, {Width = 640, Height = 480})
	MoveBrush(4,640,400,-200,200,1)

	MoveBrush(3,-200,200,640,100,1)
	Print ("Silviahemmet-Quiz...Linke Maustaste drücken...")
	WaitLeftMouse 

EndFunction

Function p_FragenLaden()
  Local Vorhanden = False        ;Alle lokalen Variablen werden beim Verlassen der Funktion p_FragenLaden() aus dem Speicher gelöscht
  Local Datei = "Fragen.txt"     
  Local Leerzeile = ""           
  Local Weiter = 0

  Vorhanden=Exists(Datei)
  


  If Vorhanden = True              ;Wenn Datei vorhanden, wird sie geöffnet
    OpenFile(1,Datei,#MODE_READ)
     
    While Not Eof(1)
      Frage[FragenZaehler] = ReadLine(1)
      RichtigeAntwort[FragenZaehler] = ReadLine(1)
      AntwortZusatz[FragenZaehler] = ReadLine(1)
      Antwort1[FragenZaehler] = ReadLine(1)
      Antwort2[FragenZaehler] = ReadLine(1)
      Antwort3[FragenZaehler] = ReadLine(1)
      Antwort4[FragenZaehler] = ReadLine(1)
      Antwort5[FragenZaehler] = ReadLine(1)

      If Not Eof(1)               ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
	Leerzeile = ReadLine(1)   
      EndIf                       

      FragenZaehler = FragenZaehler+1

      Wend

    CloseFile(1)
  EndIf
EndFunction

Function p_NaechsteFrage()
  Local FrageNummer = AktuelleFrage+1

	If AktuelleFrage=FragenZaehler
  	p_Spielende()
	EndIf

  moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
  moai.Set("fbt2", "Text", Frage[AktuelleFrage])
  moai.Set("bt1", "Text", Antwort1[AktuelleFrage])
  moai.Set("bt2", "Text", Antwort2[AktuelleFrage])
  moai.Set("bt3", "Text", Antwort3[AktuelleFrage])
  moai.Set("bt4", "Text", Antwort4[AktuelleFrage])
  moai.Set("bt5", "Text", Antwort5[AktuelleFrage])

  If RichtigeAntwort[AktuelleFrage] = "1"
    AntwortRichtig1 = True
  Else
    AntwortRichtig1 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "2"
    AntwortRichtig2 = True
  Else
    AntwortRichtig2 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "3"
    AntwortRichtig3 = True
  Else
    AntwortRichtig3 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "4"
    AntwortRichtig4 = True
  Else
    AntwortRichtig4 = False
  EndIf

  If RichtigeAntwort[AktuelleFrage] = "5"
    AntwortRichtig5 = True
  Else
    AntwortRichtig5 = False
  EndIf

EndFunction

Function p_Richtig()
  PlaySample(3)
  moai.Request("", "Glückwunsch! Das ist richtig!" , "OK")
  moai.Request("", AntwortZusatz[AktuelleFrage] , "OK")
  score = score+1
  AktuelleFrage = AktuelleFrage+1
  p_NaechsteFrage()
EndFunction

Function p_Falsch()
  PlaySample(4)
  moai.Request("", "leider falsch" , "OK")
  moai.Request("", AntwortZusatz[AktuelleFrage] , "OK")
  AktuelleFrage = AktuelleFrage+1  
  p_NaechsteFrage()                
EndFunction

Function p_AntwortAuswertung(msg)
  Switch msg.action
  Case "RapaGUI":

    Switch msg.attribute
    Case "Pressed":

      If msg.id = "bt1"
	If AntwortRichtig1 = True
	  p_Richtig()
	Else
	  p_Falsch()
	EndIf
      ElseIf msg.id = "bt2"
	If AntwortRichtig2 = True
	  p_Richtig()
	Else
	  p_Falsch()
	EndIf
      ElseIf msg.id = "bt3"
	If AntwortRichtig3 = True
	  p_Richtig()
	Else
	  p_Falsch()
	EndIf
      ElseIf msg.id = "bt4"
	If AntwortRichtig4 = True
	  p_Richtig()
	Else
	  p_Falsch()
	EndIf
      ElseIf msg.id = "bt5"
	If AntwortRichtig5 = True
	  p_Richtig()
	Else
	  p_Falsch()
	EndIf
      EndIf

    EndSwitch

  EndSwitch
EndFunction

Function p_Spielende()
	If score = 25 /* wenn der score 25 =alle Fragen richtig ist */
		moai.Request("","Sehr Gut!Von 25 Fragen hast Du richtig beantwortet:",(score), "OK")
		PlaySample(1)
	ElseIf score >= 20 /* ist der score größer gleich 20 */
		moai.Request("","Gut!Von 25 Fragen hast Du richtig beantwortet:",(score), "OK")
		PlaySample(1)
	ElseIf score >= 13 /* ist der score größer gleich 50 */
		moai.Request("","Da geht noch was! Von 25 Fragen hast Du richtig beantwortet:",(score), "OK")

		PlaySample(1)	
	Else /* ist der score schlechter als 13 */
		moai.Request("","Übe noch einmal! Von 25 Fragen hast Du richtig beantwortet:",(score), "OK")

		PlaySample(2)	
	
	EndIf
	moai.Request("","Zum Beenden ESC-Taste drücken, für noch mehr Fragen Button drücken"  , "OK")

	End
	
EndFunction

;                        -------------
;----------------------- Hauptprogramm -----------------------
;                        -------------

;Beenden des Programmes
EscapeQuit(True)

InstallEventHandler({RapaGUI = p_AntwortAuswertung})
p_FragenLaden()
p_NaechsteFrage()
; Hauptschleife
Repeat
   WaitEvent
Forever
[/color]
Vielen Dank für die Tipps! Vielleicht wird das Programm ja doch noch rechtzeitig zum Trainer-Treffen in Köln fertig, es soll ein Schulungsquiz für Malteser- Mitarbeiter werden.


Nach oben
   
BeitragVerfasst: 28 Mai 2017, 14:15 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

Wünsche hast Du. :D

Wegen dem Intro. Versuche mal das Intro vor dem
RapaGUI-Aufbau aufzurufen.

Verschiebe die Zeile moai.CreateApp(FileToString("silvia3.xml"))
von
;Fragen
moai.CreateApp(FileToString("silvia3.xml"))
;                        -----------------
;----------------------- Globale Variablen -------------------------
;                        -----------------
nach unten in das Hauptprogramm und füge noch die Zeile
p_Intro() ein. Dann sollte das Hauptprogramm so
aussehen:
;                        -------------
;----------------------- Hauptprogramm -----------------------
;                        -------------

;Beenden des Programmes
EscapeQuit(True)

InstallEventHandler({RapaGUI = p_AntwortAuswertung})
p_Intro()
moai.CreateApp(FileToString("silvia3.xml"))
p_FragenLaden()
p_NaechsteFrage()
; Hauptschleife
Repeat
   WaitEvent
Forever
Funktioniert es jetzt mit dem Intro?

Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 29 Mai 2017, 09:19 
Offline
User

Registriert: 20 Jan 2014, 21:44
Beiträge: 6
Postleitzahl: 24939
Land: Deutschland
Nein leider nicht. Hollywood scheint aber zufrieden zu sein und gibt aus:

Loading sample Good.wav...done
Loading sample Poor.wav...done
Loading sample True.wav...done
Loading sample False.wav...done
Preparing display...done
And Action!

Aber es tut sich...nichts. Ich habe aber herausgefunden, daß wenn ich @REQUIRE RAPAGUI auskommentiere es funktioniert (dann alerdings nur das Intro), also scheint meine Vermutung richtig, daß es mit dem GUI zu tun hat. Hmm :?
Hast Du noch eine Idee zum Bilder einbinden?


Nach oben
   
BeitragVerfasst: 29 Mai 2017, 10:30 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

Mist, dann musst Du mal Andreas per Mail fragen,
wie das Intro da mit RapaGUI eingebunden werden
kann. Ich habe zwar einige Beispiele in RapaGUI
angeschaut, komme aber nicht hinter das "Geheimnis".
Ich bin ja leider auch ein völliger Neuling dieser
GUI. Auch das mit dem Vollbildschirm habe ich noch
nicht gelüftet. Aber vielleicht hat auch da Andreas
eine Antwort.

Wenn es für jede Frage ein anderes Bild sein soll,
dann würde ich die Dateinamen in die Datei Fragen.txt
bei der jeweiligen Frage aufnehmen. Aber wie und wo
das Bild angezeigt wird, weiss ich noch nicht.
Ich muss mich auch durch die Dokumentation von
RapaGUI kämpfen, da Englisch alles andere als meine
Stärke ist.

Griessli
Tipsi


Nach oben
   
BeitragVerfasst: 30 Mai 2017, 16:22 
Offline
Schreiberling
Benutzeravatar

Registriert: 17 Okt 2007, 21:48
Beiträge: 1392
Postleitzahl: 4132
Land: Schweiz
Wohnort: Muttenz
Salli Mr_Blues

RapaGUI hat die Möglichkeit, Bilder anzuzeigen. Füge in die
XML-Datei folgende Zeile ein:
<image id="bild1" brush="1"/>
Und zwar hier:
<vgroup>
  <image id="bild1" brush="1"/>
  <button id="fbt1">-</button>
  <button id="fbt2">-</button>
Dann wird das Bild oberhalb der Fragen angezeigt.

Nun müssen wir das Format der Datei Fragen.txt ändern.
Für dieses Unterfangen kopiere folgenden Code und führe
das Programm aus. Es konvertiert Dein altes Dateiformat
in ein neues. Bitte benutze einen anderen Dateinamen und
überprüfe dann das Ergebnis.

Entweder Du löschst die alte Datei und nennst die neue um
oder Du änderst den Dateinamen im Programm auf den
neuen Namen. Hier das Konverterprogramm:
;                        ----------------
;----------------------- Voreinstellungen ----------------------------
;                        ----------------

;Hollywood-Version
@VERSION 6,1

;Bildschirm
@DISPLAY {Color = #WHITE}

;                        -----------------
;----------------------- Globale Variablen -------------------------
;                        -----------------

;Fragen und Antworten
Frage = {} ;mit = {} werden Tabellen deklariert
RichtigeAntwort = {}
AntwortZusatz = {}
Antwort1 = {}
Antwort2 = {}
Antwort3 = {}
Antwort4 = {}
Antwort5 = {}

;Zähler
AktuelleFrage = 0
FragenZaehler = 0 ;Die Felder in Tabellen fangen bei 0 an


;                        ----------
;----------------------- Funktionen -----------------------
;                        ----------

Function p_FragenLaden()
  Local Vorhanden = False ;Alle lokalen Variablen werden beim Verlassen der Funktion p_FragenLaden() aus dem Speicher gelöscht
  Local Datei = ""
  Local Leerzeile = ""
  Local Weiter = 0

  Datei=FileRequest("Wähle die Datei aus","",#REQ_NORMAL,GetCurrentDirectory(),"")

  If Datei=""
    Weiter = SystemRequest("Fehler","Keine Datei oder Abbruchtaste gewählt","Programm beenden")
    End()
  Else

    Vorhanden=Exists(Datei)

    If Vorhanden = True ;Wenn Datei vorhanden, wird sie geöffnet
      OpenFile(1,Datei,#MODE_READ)

      While Not Eof(1)
        Frage[FragenZaehler] = ReadLine(1)
        RichtigeAntwort[FragenZaehler] = ReadLine(1)
        AntwortZusatz[FragenZaehler] = ReadLine(1)
        Antwort1[FragenZaehler] = ReadLine(1)
        Antwort2[FragenZaehler] = ReadLine(1)
        Antwort3[FragenZaehler] = ReadLine(1)
        Antwort4[FragenZaehler] = ReadLine(1)
        Antwort5[FragenZaehler] = ReadLine(1)


        If Not Eof(1) ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
          Leerzeile = ReadLine(1)
        EndIf

        FragenZaehler = FragenZaehler+1

      Wend

      CloseFile(1)
      Weiter = SystemRequest("Fragen zählen","Es wurden "..FragenZaehler.." Fragen geladen","OK")
    Else
      Weiter = SystemRequest("Fehler","Datei ist nicht vorhanden","Programm beenden")
      End()
    EndIf
  EndIf
EndFunction

Function p_DateiSpeichern()
  NeuerDateiName=FileRequest("Neue Datei auswählen", "", #REQ_SAVEMODE)
  If NeuerDateiName=""
    Weiter = SystemRequest("Fehler","Keine Datei oder Abbruchtaste gewählt","Programm beenden")
    End()
  Else
    If Exists(NeuerDateiName)
      Weiter = SystemRequest("Datei vorhanden","Datei "..Chr(10)..NeuerDateiName..Chr(10).."ist bereits vorhanden. Überschreiben?","Ja, überschreiben|Nein, nicht überschreiben")
      If Weiter = 1
        DeleteFile(NeuerDateiName)
        p_FragenSpeichern()
      Else
        End()
      EndIf
    Else
      p_FragenSpeichern()
    EndIf
  EndIf
EndFunction

Function p_FragenSpeichern()
  OpenFile(2,NeuerDateiName,#MODE_WRITE)

  For AktuelleFrage=0 To FragenZaehler-1

    WriteLine(2,Frage[AktuelleFrage])
    WriteLine(2,RichtigeAntwort[AktuelleFrage])
    WriteLine(2,AntwortZusatz[AktuelleFrage])
    WriteLine(2,Antwort1[AktuelleFrage])
    WriteLine(2,Antwort2[AktuelleFrage])
    WriteLine(2,Antwort3[AktuelleFrage])
    WriteLine(2,Antwort4[AktuelleFrage])
    WriteLine(2,Antwort5[AktuelleFrage])
    WriteLine(2,"Ersatzbild.jpg")
    WriteLine(2,"-")
    WriteLine(2,"-")
    WriteLine(2,"-")
    WriteLine(2,"-")
    WriteLine(2,"-")
    WriteLine(2,"-")
  Next

  CloseFile(2)

  Weiter = SystemRequest("Datei vorhanden","Datei "..Chr(10)..NeuerDateiName..Chr(10).."wurde gespeichert","Programm beenden")

EndFunction

;                        -------------
;----------------------- Hauptprogramm -----------------------
;                        -------------

EscapeQuit(True)

p_FragenLaden()
p_DateiSpeichern()

End()
So, nun müssen wir uns um das Programm kümmern.

Bei den Globalen Variablen musst Du folgende Zeile einfügen:
FrageBild = {}
In der Funktion p_FragenLaden() ersetzt Du die ganze
Whiile-Wend-Schleife mit folgendem Code:
    While Not Eof(1)
      Frage[FragenZaehler] = ReadLine(1)
      RichtigeAntwort[FragenZaehler] = ReadLine(1)
      AntwortZusatz[FragenZaehler] = ReadLine(1)
      Antwort1[FragenZaehler] = ReadLine(1)
      Antwort2[FragenZaehler] = ReadLine(1)
      Antwort3[FragenZaehler] = ReadLine(1)
      Antwort4[FragenZaehler] = ReadLine(1)
      Antwort5[FragenZaehler] = ReadLine(1)
      FrageBild[FragenZaehler] = ReadLine(1)

      For i=1 To 6
        If Not Eof(1) ;Falls am Ende der Datei die Leerzeile vergessen wurde, wird kein Fehler gemeldet
          Leerzeile = ReadLine(1)
        EndIf
      Next

      FragenZaehler = FragenZaehler+1

      If FragenZaehler = 25
        p_Spielende()
      EndIf
    Wend
Damit laden wir neu in einer Zeile den Bildernamen aus der Datei
raus. Ausserdem lesen wir noch die restlichen Leerzeilen raus und
ignorieren sie anschliessend. Falls jemals in der Datei eine neue
Zeile zum herauslesen dazukommt, dann muss die Zahl der Leerzeilen
von aktuell 6 auf 5 reduziert werden (bei der Zeile For i=1 To 6 ).



In der Funktion p_NaechsteFrage() fügst Du zwischen
  If AktuelleFrage=FragenZaehler
    p_Spielende()
  EndIf
und der Zeile
moai.Set("fbt1", "Text", "Frage "..FrageNummer.." von "..FragenZaehler)
diesen Code ein. Du kannst den Kommentar auch weglassen, wenn
Du ihn eingeprägt hast:
  ;Wechsle zuerst immer in das Hauptverzeichnis, wo
  ;Dein Programm hockt. Mache das immer, bevor Du in
  ;ein Unterverzeichnis wechselst. In diesem kleinen
  ;Programm spielt das villeicht noch keine Rolle.
  ;Bei einem Programm mit mehreren Unterverzeichnissen
  ;kann das aber zu Fehlern führen.
  ChangeDirectory(Programmverzeichnis)
  ChangeDirectory("Bilder")
  LoadBrush(2,FrageBild[AktuelleFrage])

  moai.Set("bild1", "brush", "2")
Du musst also bei Deinem Programm von Hand ein neues
Verzeichnis mit dem Namen Bilder erstellen. Diese
Zeilen wechseln zuerst ins Programmverzeichnis (falls Du
vorher irgend wo anderst warst) und von da aus ins Verzeichnis
Bilder. Mit der Zeile moai.Set("bild1", "brush", "2") wird
das Bild geändert. Somit bist Du in der Lage, zu jeder Frage
ein eigenes Bild zu wählen. Dieser Bilddateiname musst Du
in die Fragedatei anstelle vom Namen Ersatzbild.jpg
einsetzen.

Um Fehler zu vermeiden, wähle ein Bild aus, nene es Ersatzbild.jpg
und speichere es im Programmverzeichnis (nicht bei den Bildern).
Somit wird nach dem Konvertieren der Datei das Ersatzbild angezeigt,
falls Du vergessen hast, den Bildernamen zu ändern. Das Programm
wird dadurch nicht abgebrochen.

So, und zum Schluss füge im Hauptprogramm zwischen den Zeilen
;Beenden des Programmes
EscapeQuit(True)
und
;Fragen
moai.CreateApp(FileToString("silvia3.xml"))
diesen Befehl ein:
;Bild:
CreateBrush(1,500,200)
Wir müssen einen Pinsel kreieren, da sonst RapaGUI einen
Fehler meldet, da er den Pinsel nicht finden kann.

Bei den Bildern musst Du eine einheitliche Grösse wählen,
da sonst das Programmfenster wahrscheinlich ständig die
Grösse ändern wird.

Übrigens, die Fenstergrösse ist auf das Bild beschränkt. Das
heisst, Du kannst das Fenster nicht grösser als die Bildbreite
ziehen. Warum das so ist, weiss ich nicht.

So, nun teste mal die ganze Geschichte. Ich hoffe, das
funktioniert so.

Da kommen mir noch wichtige Fragen in den Sinn:

- Mit was Entwickelst Du deine Hollywoodprogramme?
- Auf welcher Plattform/mit welchem OS?
- Auf wlecher Zielplattform wirst Du Dein Programm vorführen?

Griessli
Tipsi


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1 2 »

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


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.

Gehe zu: 

cron