Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kleines Hühnerspiel - Munition kaufen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
k4rsten



Anmeldungsdatum: 01.01.2010
Beiträge: 18
Wohnort: Dortmund

BeitragVerfasst am: 02.01.2010, 21:41    Titel: Kleines Hühnerspiel - Munition kaufen Antworten mit Zitat

Hallo liebe Community!
Ich schreibe gerade ein Hühnerspiel. Ihr kennt das - man schiesst auf Hühner und entsprechend wird das Huhn abgeknallt, man kann Punkte gegen Munition eintauschen etc.

Erstmal der Code:

//Edit: Ich weiss das meine Hühner erstmal aussehen wie Kreise grinsen

Code:

DIM AS INTEGER x, y, i, buttons, rnd_richtung
SCREEN 9
RANDOMIZE TIMER

TYPE spieler
    s_name AS STRING
    punkte AS INTEGER
    frags AS INTEGER
    munition AS INTEGER
END TYPE

TYPE huhn
    x AS SINGLE
    y AS SINGLE
    richtung AS INTEGER     'Richtung - 1 = Nach Links - 2 = Nach Rechts
    status AS INTEGER       'Status des Huhnes - 1 = Fliegend - 2 = Fallend - 3 = Tot
END TYPE

REDIM huehner(5) AS huhn
DIM human AS spieler
human.punkte = 150000
huehner(1).status = 3
huehner(2).status = 3
huehner(3).status = 3
huehner(4).status = 3
huehner(5).status = 3

DO
    SCREENLOCK                                  'Bildschrm sperren
        CLS                                     'Bildschirm löschen
        GETMOUSE x, y, , buttons                'Mauskoordinaten definieren
        PRINT X, Y , BUTTONS, human.munition, human.punkte   'Debuginformationen ausgeben
       
        IF buttons = 2 AND human.punkte > 150 THEN
            human.munition = human.munition + 15
            human.punkte = human.punkte - 150
        END IF
       
        IF UBOUND(huehner) < 6 THEN
                FOR i = 1 TO UBOUND(huehner)
                    IF huehner(i).status = 3 OR huehner(i).x < 0 OR huehner(i).x > 630 THEN
                        IF RND < 0.5 THEN
                            rnd_richtung = 1
                        ELSE
                            rnd_richtung = 2
                        END IF
                        huehner(i).richtung = rnd_richtung
                        huehner(i).x = RND * 1000
                        huehner(i).y = RND * 350
                        huehner(i).status = 1
                    END IF
                NEXT
        END IF
       
        FOR i = 1 TO UBOUND(huehner)
            CIRCLE(huehner(i).x, huehner(i).y), 10, 9
           
            IF huehner(i).richtung = 1 THEN
                huehner(i).x = huehner(i).x - 0.5
            ELSEIF huehner(i).richtung = 2 THEN
                huehner(i).x = huehner(i).x + 0.5
            END IF
        NEXT
    SCREENUNLOCK
    SLEEP 10
LOOP


Mein Problem ist nur, dass wenn der Spieler die rechte Maustaste drückt, ständig Munition gekauft wird. Ist ja auch logisch, die zweite Maustaste ist ja solange gedrückt, bis der Spieler sie loslässt.
Allerdings sollte die Munition nur einmal gekauft werden - also pro Tastendruck.

Hat da wer ´ne Idee?
Wäre sehr dankbar!

Viele Grüße,

Karsten grinsen grinsen grinsen grinsen
_________________
you cannot kill what you did not create
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.01.2010, 22:06    Titel: Antworten mit Zitat

Einfach zwischendrin auf das Loslassen der Maustaste warten:
Code:
DO
  GETMOUSE x, y,, buttons
  SLEEP 1
LOOP UNTIL buttons <>2

(wird aber das Spiel anhalten)
oder in einer Variablen merken, dass die Maustaste gedrückt wurde:
Code:
IF buttons = 2 AND human.punkte > 150 AND rechtsdruck = 0 THEN
  human.munition = human.munition + 15
  human.punkte = human.punkte - 150
  rechtsdruck = 1
END IF
IF buttons <> 2 THEN rechtsdruck = 0

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 02.01.2010, 22:12    Titel: Antworten mit Zitat

Code:
        IF buttons = 2 THEN RMBpressed=1  'das RMB gedrückt wurde merken in RMBpressed
                                          'Wichtig solange gehalten wird, passiert gar nichts weiter

        if buttons = 0 then               'erst wenn keine Maustaste mehr gedrückt ist, nachfragen ob eine gedrückt wurde

          if RMBpressed=1 AND human.punkte > 150 then 'sollte RMB gedrückt gewesen sein + deiner Punktebedingung dann...
            human.munition = human.munition + 15
            human.punkte = human.punkte - 150
            RMBpressed=0                'Wichtig!! RMBpressed nach Abarbeitung wieder auf 0 setzen
          end if

        end if


oops, nemored war schneller... und eleganter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz