Programm zählt falsch

  • Wenn ich bei mir das Programm ausführe, und die Antworten der 3 Spieler eingebe, und dann die 1.Antwort eingebe, kommt gleich die nächste Frage!

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{F9}", "_exit")
    HotKeySet("{NUMPAD1}", "_antwort_1")
    HotKeySet("{NUMPAD2}", "_antwort_2")
    HotKeySet("{NUMPAD3}", "_antwort_3")

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    Local $AktuellerSpieler = 1, $PfadZuFragen = @ScriptDir & "\Fragen.ini"
    Local $StiftBlauDike8, $StiftGrunDike12, $StiftGrunDike8, $StiftLilaDike12, $StiftRotDike8
    Dim $SpielerAntworten[3] = [0, 0, 0], $SpielerPunkte[3] = [0, 0, 0]
    Dim $FragenDaten[10] = [1, IniRead($PfadZuFragen, 1, 1, ""), IniRead($PfadZuFragen, 1, 2, ""), IniRead($PfadZuFragen, 1, 3, ""), IniRead($PfadZuFragen, 1, 4, ""), IniRead($PfadZuFragen, 1, 5, ""), IniRead($PfadZuFragen, 1, 6, ""), IniRead($PfadZuFragen, 1, 7, ""), IniRead($PfadZuFragen, 1, 8, ""), IniRead($PfadZuFragen, "Anzahl", "Anzahl", 1)]

    [/autoit] [autoit][/autoit] [autoit]

    $QuizFenster = GUICreate("QuizFenster", @DesktopWidth, @DesktopHeight, 0, 0, 0x80000000, BitOR(0x00000080, 0x00000008))
    GUISetBkColor(0xFFFF00, $QuizFenster)
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    $QuizGraphikobjekt = _GDIPlus_GraphicsCreateFromHWND($QuizFenster)

    [/autoit] [autoit][/autoit] [autoit]

    _Zeichne()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Zeichne()
    $StiftRotDike8 = _GDIPlus_PenCreate(0xFFFF0000, 8)
    $KatigorieRechtck = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 10, 800, 70, $StiftRotDike8)
    $KatigorieText = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, "Katigorie: <-------------->", 10, 0, "Arial Black", 50)

    [/autoit] [autoit][/autoit] [autoit]

    $StiftGrunDike8 = _GDIPlus_PenCreate(0xFF00FF00, 8)
    $StiftBlauDike8 = _GDIPlus_PenCreate(0xFF0000FF, 8)
    $TeilnemerAlleRechteck = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 1080, 0, 530, 250, $StiftBlauDike8)
    $TeilnemerNr1Rechteck = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 1090, 10, 500, 70, $StiftGrunDike8)
    $TeilnemerNr1Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, "<Name1>: " & $SpielerPunkte[0] & " P.", 1090, 0, "Arial Black", 50)
    $TeilnemerNr2Rechteck = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 1090, 90, 500, 70, $StiftGrunDike8)
    $TeilnemerNr2Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, "<Name2>: " & $SpielerPunkte[1] & " P.", 1090, 80, "Arial Black", 50)
    $TeilnemerNr3Rechteck = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 1090, 170, 500, 70, $StiftGrunDike8)
    $TeilnemerNr3Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, "<Name3>: " & $SpielerPunkte[2] & " P.", 1090, 160, "Arial Black", 50)

    [/autoit] [autoit][/autoit] [autoit]

    $StiftLilaDike12 = _GDIPlus_PenCreate(0xFFFF00FF, 12)
    $StiftGrunDike12 = _GDIPlus_PenCreate(0xFF00FF00, 12)
    $InfoKastenGesammt = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 250, 1070, 640, $StiftLilaDike12)
    $FrageTeil1 = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[3], 15, 240, "Arial Black", 50)
    $FrageTeil2 = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[4], 15, 300, "Arial Black", 50)
    $Antwort1Kasten = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 450, 1070, 80, $StiftGrunDike12)
    $Antwort1Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[5], 15, 440, "Arial Black", 50)
    $Antwort2Kasten = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 560, 1070, 80, $StiftGrunDike12)
    $Antwort2Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[6], 15, 550, "Arial Black", 50)
    $Antwort3Kasten = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 670, 1070, 80, $StiftGrunDike12)
    $Antwort3Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[7], 15, 660, "Arial Black", 50)
    $Antwort4Kasten = _GDIPlus_GraphicsDrawRect($QuizGraphikobjekt, 10, 780, 1070, 80, $StiftGrunDike12)
    $Antwort4Text = _GDIPlus_GraphicsDrawString($QuizGraphikobjekt, $FragenDaten[8], 15, 770, "Arial Black", 50)
    EndFunc ;==>_Zeichne

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _VergebePunkte()
    If $SpielerAntworten[0] = $FragenDaten[1] Then $SpielerPunkte[0] = $SpielerPunkte[0] + $FragenDaten[2]
    If $SpielerAntworten[1] = $FragenDaten[1] Then $SpielerPunkte[1] = $SpielerPunkte[1] + $FragenDaten[2]
    If $SpielerAntworten[2] = $FragenDaten[1] Then $SpielerPunkte[2] = $SpielerPunkte[2] + $FragenDaten[2]
    EndFunc ;==>_VergebePunkte

    [/autoit] [autoit][/autoit] [autoit]

    Func _NachsteFrage()
    Dim $SpielerAntworten[3] = [0, 0, 0]
    Local $LetzteFrage = $FragenDaten[0]
    Local $AktuellerSpieler = 1
    Dim $FragenDaten[10]
    $FragenDaten[0] = $LetzteFrage + 1
    $FragenDaten[1] = IniRead($PfadZuFragen, $FragenDaten[0], 1, "")
    $FragenDaten[2] = IniRead($PfadZuFragen, $FragenDaten[0], 2, "")
    $FragenDaten[3] = IniRead($PfadZuFragen, $FragenDaten[0], 3, "")
    $FragenDaten[4] = IniRead($PfadZuFragen, $FragenDaten[0], 4, "")
    $FragenDaten[5] = IniRead($PfadZuFragen, $FragenDaten[0], 5, "")
    $FragenDaten[6] = IniRead($PfadZuFragen, $FragenDaten[0], 6, "")
    $FragenDaten[7] = IniRead($PfadZuFragen, $FragenDaten[0], 7, "")
    $FragenDaten[8] = IniRead($PfadZuFragen, $FragenDaten[0], 8, "")
    $FragenDaten[9] = IniRead($PfadZuFragen, "Anzahl", "Anzahl", 1)

    [/autoit] [autoit][/autoit] [autoit]

    _Zeichne()
    EndFunc ;==>_NachsteFrage

    [/autoit] [autoit][/autoit] [autoit]

    Func _antwort_1()
    $SpielerAntworten[$AktuellerSpieler - 1] = 1
    If $AktuellerSpieler = 3 Then
    _WinAPI_RedrawWindow($QuizFenster)
    _VergebePunkte()
    _NachsteFrage()
    Else
    $AktuellerSpieler += 1
    EndIf
    EndFunc ;==>_antwort_1

    [/autoit] [autoit][/autoit] [autoit]

    Func _antwort_2()
    $SpielerAntworten[$AktuellerSpieler - 1] = 2
    If $AktuellerSpieler = 3 Then
    _WinAPI_RedrawWindow($QuizFenster)
    _VergebePunkte()
    _NachsteFrage()
    Else
    $AktuellerSpieler += 1
    EndIf
    EndFunc ;==>_antwort_2

    [/autoit] [autoit][/autoit] [autoit]

    Func _antwort_3()
    $SpielerAntworten[$AktuellerSpieler - 1] = 3
    If $AktuellerSpieler = 3 Then
    _WinAPI_RedrawWindow($QuizFenster)
    _VergebePunkte()
    _NachsteFrage()
    Else
    $AktuellerSpieler += 1
    EndIf
    EndFunc ;==>_antwort_3

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    _GDIPlus_PenDispose($StiftRotDike8)
    _GDIPlus_PenDispose($StiftGrunDike8)
    _GDIPlus_PenDispose($StiftBlauDike8)
    _GDIPlus_PenDispose($StiftLilaDike12)
    _GDIPlus_PenDispose($StiftGrunDike12)
    _GDIPlus_GraphicsDispose($QuizGraphikobjekt)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Folgende INI benötigt:

    Magnus

    Einmal editiert, zuletzt von Magnus (23. Oktober 2009 um 08:25)

  • Ich verstehe dein Programm nicht so richtig!

    Was soll passieren, wenn ich Numpad1,2,3 drücke?

    Weiter würde ich die While...WEnd Schleife mit einem Sleep beglücken, damit die CPU nicht zur Heizung wird (es ist zwar kalt, aber...) ;)

    [autoit]


    While 1 * Sleep(30)
    WEnd

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Sry, aber ich verstehe auch nicht, was gemacht werden soll.
    Du musst schon ein bisschen konkreter werden, was nicht funktioniert, bzw. was du machen willst.

    PS. Was ist eine Katigorie? ^^

  • Wenn man auf 1 drückt, wird gespeichert dass er 1.Spieler die Antwort Nummer 1 gegeben hat. Oder bei 2 die 2.Antwort, bei 3 die 3.Antwort. funktioniert
    Anschließend kommt die Antwort des 2.Spielers. Danach die des 3.Spielers. funktioniert
    Dann werden die Antworten ausgewertet -> Punkte vergeben. funktioniert
    Die nächste Frage wird angezeigt. funktioniert
    Wenn man dann die Antwort des 1.Spielers eingibt, wird sofort die 3.Frage angezeigt! falsch!

    Magnus

  • Hi!

    Ein paar Vorschläge.

    1.) in deine while Schleife ein Sleep(250) damit die CPU nicht auf 100% geht.
    2.) Deine Arrays könntest du mit Schleifen einlesen oder schau dir mal

    [autoit]

    IniReadSection ( "filename", "section" )

    [/autoit]

    an.
    3.) Kategorie nicht Katigorie
    4.) Bin ich noch nicht ganz durchgestiegen wie dein Script funktioniert

    Ich schau aber noch ein wenig weiter.
    lg
    Concara

    Edit:
    Deine Fagen.ini hat soweit ich das sehe auch einen Fehler. In der Section 3 der erste Wert(Key) ist gleich wie bei der 2 Section. Warum liest du das noch mal separat ein?
    Das ist doch die Fragenummer oder? Das hast du ja schon über die Section deiner Inidatei.
    Was stellt der 2 Wert(Key) dar? (sind das die zu vergebenen Punkte?)

    Spoiler anzeigen

    If not :?: then ?( else :thumbup:

    4 Mal editiert, zuletzt von Concara (22. Oktober 2009 um 17:16)

  • Dass ist nur die Angabe der richtigen Antwort.
    Die Kategorien sollen doch gar nicht per INI eingelesen werden, sondern nur die Fragen, die Antworten, die Punkte für die richtige Antwort, die Richtige Antwort.

    Bedienung:

    Spoiler anzeigen

    Wenn man auf die 1 drückt, wird gespeichert, dass der 1.Spieler die Antwort Nr.1 gegeben hat.
    Oder: Wenn man auf die 2 drückt, wird gespeichert, dass der 1.Spieler die Antwort Nr.2 gegeben hat.
    Oder: Wenn man auf die 3 drückt, wird gespeichert, dass der 1.Spieler die Antwort Nr.3 gegeben hat.

    Wenn man auf die 1 drückt, wird gespeichert, dass der 2.Spieler die Antwort Nr.1 gegeben hat.
    Oder: Wenn man auf die 2 drückt, wird gespeichert, dass der 2.Spieler die Antwort Nr.2 gegeben hat.
    Oder: Wenn man auf die 3 drückt, wird gespeichert, dass der 2.Spieler die Antwort Nr.3 gegeben hat.

    Wenn man auf die 1 drückt, wird gespeichert, dass der 3.Spieler die Antwort Nr.1 gegeben hat.
    Oder: Wenn man auf die 2 drückt, wird gespeichert, dass der 3.Spieler die Antwort Nr.2 gegeben hat.
    Oder: Wenn man auf die 3 drückt, wird gespeichert, dass der 3.Spieler die Antwort Nr.3 gegeben hat.

    Nächste Frage wird angezeigt.
    Das selbe noch einmal.

    Funkionenerklärung:

    Spoiler anzeigen
    [autoit]

    _Zeichne()

    [/autoit]


    Zeichnet das Fenster.

    [autoit]

    _VergebePunkte()

    [/autoit]


    Vergibt die Punkte an die Spieler, nachdem alle Antworten gegeben wurden.

    [autoit]

    _NachsteFrage()

    [/autoit]


    Lädt die Daten der nächsten Frage und zeichnet die nächste Frage.

    [autoit]

    _antwort_1()

    [/autoit]


    Speichert das der aktuelle Spieler die Antwort Nr.1 gegeben hat.

    [autoit]

    _antwort_2()

    [/autoit]


    Speichert das der aktuelle Spieler die Antwort Nr.2 gegeben hat.

    [autoit]

    _antwort_3()

    [/autoit]


    Speichert das der aktuelle Spieler die Antwort Nr.3 gegeben hat.

    Fehler:

    Spoiler anzeigen

    Wenn ich die Antworten zur ersten Frage eingebe, erscheint die nächste. funktioniert
    Die 2.Frage wird angezeigt. funktioniert
    Wenn ich die Antwort das 1.Spieler eingebe, erscheint sofort die 3.Frage! Fehler!

    Magnus

  • Ohne zu testen:

    In der Funktion für die nächste Frage setzt du den Aktuellen Spieler wieder auf Nummer 1,
    allerdings nur Local.
    Global scheint die Nummer noch auf '3' zu stehen, weshalb im nächsten Durchgang nur eine
    Antwort angenommen wird.

    limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.