 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
k4rsten

Anmeldungsdatum: 01.01.2010 Beiträge: 18 Wohnort: Dortmund
|
Verfasst am: 02.01.2010, 21:41 Titel: Kleines Hühnerspiel - Munition kaufen |
|
|
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
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  _________________ you cannot kill what you did not create |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.01.2010, 22:06 Titel: |
|
|
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 |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 02.01.2010, 22:12 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|