Problem bei if abfrage

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Bassmaster

Betreff: Problem bei if abfrage

BeitragMi, Feb 06, 2008 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe folgendes Problem und zwar wenn ich zu einem NPC in meine Spiel gehe und denn anspreche dann lässt der einen nicht mehr weiter gehen -.-

Also wenn ich z.b. die 1 für wieder gehen eingebe dann bleibt der trotzdem in der Funktion es sei den ich drücke wie wild die Pfeil taste nach unten und gebe dabei eine 1 ein und bestätige diese dann bewegt sich die Figur von dem NPC weg und nach ein paar Schritten ist meine Figut wieder frei und ich kann weiter laufen.



Code: [AUSKLAPPEN]

Function npc_hallo()

If px = 3 Then
   If py = 8 Then
   
   Local a = 315
   Local b = 180
   Locate a,b
   Local npc_hallo
      
      npc_hallo = Input ("Was wollen sie tuen: (1) Wiedergehen ")
      
      If npc_hallo = 1 Then
      Print "cya"
      End If
      
            
   End If
End If

BigMaexle

BeitragMi, Feb 06, 2008 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
npc_hallo sollte ein String sein. Also mit "$" deklarieren und dann auch nach dem Zeichen "1" und nicht der Zahl abfragen.
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber
 

Bassmaster

BeitragMi, Feb 06, 2008 23:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ok thx ich werds morgen mal testen jetzt ist schon zu spät^^

peacemaker

BeitragDo, Feb 07, 2008 0:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso sollte es ein String sein?

Er muss ja nur eine Zahl speichern. Und wenn diese 2 ist, dann wird halt das zwischen if npc_say... und end if ausgeführt ...

mfG
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/

Lunatix

BeitragDo, Feb 07, 2008 8:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Sache ist ganz einfach die, das der Spieler, ob er nun eine "1" eingibt oder nicht, nach eben dieser Eingabe immernoch auf Position x/y steht und deine Abfrage wieder eingeschaltet wird.
Eine einfache Lösung wäre, das man zuerst eine Taste (z.b. Enter) drücken muss, und wenn man dann auf Position x/y steht, wird das in einer Variable vermerkt, danach gibt man 1/2/xxx ein und wenn nun nichts passieren soll oder die Konversation zu Ende ist wird diese Variable wieder auf "0" gesetzt - der Spieler kann weiterlaufen.
[size=9]Pro|gram|mier|er: Ein Organismus, der Koffein in Software umwandelt.
Geben Sie eine beliebige 11-stellige Primzahl ein, um fortzusetzen...
 

Bassmaster

BeitragDo, Feb 07, 2008 10:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Meine 1te Idee

Hier gerät leider die ganze Kollisions abfrage durcheinander.


Code: [AUSKLAPPEN]

If px = 3 Then
   If py = 8 Then
   
   
   
   Local a = 315
   Local b = 180
   Locate a,b
   Local npc_hallo
      
      npc = Input ("Was wollen sie tuen: (1) Wiedergehen ")
   
      If npc = 1 Then
      Print"cya"
      Delay 1000
      
      
      px = 3
      py = 9
      
End If       
   End If
       End If





ich hab das jetzt mal so versucht, aber das funktioniert auch nicht richtig die abfrage was man tuen viel blink nur kurz auf auch hier Gerät die Kollisios abfrage ausseinander. Ich auch schon die Variablen für die Kollision geändert aber ging trotzdem net. Sad

Meine 2te Idee
Code: [AUSKLAPPEN]

Function npc_hallo()

   

If KeyHit(28)
If px = 3 Then
   If py = 8 Then
   
   
   
   Local a = 315
   Local b = 180
   Locate a,b
   Local npc_hallo
      
      npc = Input ("Was wollen sie tuen: (1) Wiedergehen ")
   
      If npc = 1 Then
      Print"cya"
      Delay 1000
      
      
      px = 3
      py = 9
      
End If       
   End If
       End If
       End If
 








So muss es doch eigentlich gehen aber der Satz "Was kann ich für sie tuen" der blinkt nur einmal kurz auf wenn ich die enter taste drücke was ist den hierdran falsch Sad

Code: [AUSKLAPPEN]

Function npc_hallo()

If KeyHit(28) Then

If px = 3 Then
   If py = 8 Then

      npc = Input ("Was wollen sie tuen: (1) Wiedergehen ")

       If npc = 1 Then
       Print "Cya"
      
End If       
   End If
       End If
         End If
 













Der komplette Source Code

Code: [AUSKLAPPEN]

Graphics 640,480,32,0


Global Tileset = LoadAnimImage("tileset1.png" ,32,32,0,7)
Global char      = LoadImage  ("char.png")



;-----------------------------------
Global ppx = 10*32 ;X-Position des Charackters
Global ppy = 7*32  ;Y-Position des Charackters

Global py = 7      ;Kollisions X-Position des Charackters
Global px = 10     ;Kollisions Y-Position des Charackters

Global scrolly     ;Die Variable fr die ScrollY-Position
Global scrollx     ;Die Variable fr die ScrollX-Position
;--------------------------------


; 0 = wiese
; 1 = sand
; 2 = hebel
; 3 = wasser
; 4 = tür
; 5 = feuer
; 6 = baum


Dim map(25,25)

;26 nach rechts   ;26 nach unten
Data 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5

Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,6,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 1,1,1,1,1, 0,0,0,0,0, 0,0,0,0,0, 5

Data 5,5,5,5,5, 5,5,4,5,5, 5,5,4,5,5, 5,5,5,5,5, 5,5,5,5,5, 5
Data 5,0,0,0,0, 0,0,2,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5

Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5

Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5

Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5
Data 5,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 0,0,0,0,0, 5

Data 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5,5,5,5,5, 5




For x = 0 To 25
For y = 0 To 25
Read map(x,y)
Next
Next




Repeat
SetBuffer BackBuffer()
Cls


For x = 0 To 25
For y = 0 To 25

DrawBlock tileset,x*32-scrollx,y*32-scrolly,map(x,y)  ;map malen
Next
Next

DrawImage char,ppx-scrollx,ppy-scrolly   ;figur male


;----Bewegungsroutinen----------------------------------------------------------------------------------
Print px
Print py

Select move
 
 ;links
   Case 1
      ;Spielerposition ndern
      scrollx = scrollx - 2
      ppx = ppx - 2
      ;Variable, die zhlt wie weit der Spieler bereits bewet wurde
      counter=counter+1
      If counter = 16 Then
         px = px - 1
         counter = 0
         move = 0
      EndIf
   
;Rechts
   Case 2
      ;Spielerposition ndern
      scrollx = scrollx + 2
      ppx = ppx + 2
      ;Variable, die zhlt wie weit der Spieler bereits bewet wurde
      counter = counter+1
      If counter = 16 Then
         px = px + 1
         counter = 0
         move = 0
      EndIf


;runter
Case 3
    ;Spielerposition ndern
      scrolly = scrolly + 2
      ppy = ppy + 2
      ;Variable, die zhlt wie weit der Spieler bereits bewet wurde
      counter = counter+1
      If counter = 16 Then
         py = py + 1
         counter = 0
         move = 0
      EndIf


;rauf
Case 4
    ;Spielerposition ndern
      scrolly = scrolly - 2
      ppy = ppy - 2
      ;Variable, die zhlt wie weit der Spieler bereits bewet wurde
      counter = counter+1
      If counter = 16 Then
         py = py - 1
         counter = 0
         move = 0
      EndIf

End Select

;Cursor Rechts
If KeyDown(205) Then
   ;Kollision checken, wie ihr es schon kennt
   If map(px+1,py) < 3 Then
      ;der nchste Tastatur-eingabe-impuls wird mglich sobald die vorige Bewegung abgeschlossen ist
      ;das heit in der Zeit wo keine Tastatur-eingabe erfolgen kann wird zur Zeit gescrollt
      If move=0 Then
         ;die Scrollroutine move=2   (  Case 2 ) wird aufgerufen
         move = 2
      End If
   End If
End If

;Cursor Links
If KeyDown(203) Then
   ;Kollision checken, wie ihr es schon kennt
   If map(px-1,py) < 3 Then
      ;der nchste Tastatur-eingabe-impuls wird mglich sobald die vorige Bewegung abgeschlossen ist
      ;das heit in der Zeit wo keine Tastatur-eingabe erfolgen kann wird zur Zeit gescrollt
      If move=0 Then
         ;die Scrollroutine move=1    ( Case 1 ) wird aufgerufen
         move = 1
      End If
   End If
End If


;runter key
   If KeyDown(208) Then
      If map(px,py+1) < 3 Then
         If move = 0 Then
         move = 3           
         End If
      End If
   End If




;rauf key
   If KeyDown(200) Then
      If map(px,py-1) < 3 Then
         If move = 0 Then
         move = 4           
         End If
      End If
   End If



;-------funktionen----

hebel_trigger()
npc_hallo()

      
Flip
Forever
   
   


Function hebel_trigger()
   If KeyHit(57) Then
   ;und die spielerposition auf den hebel-tile befindet
   If map(px,py) = 2 Then
   ;dann wird die gesamte karte eingelesen und alle tür-tiles in graß-tiles
   ;umgewandelt
      For y = 0 To 25
         For x = 0 To 25
            If map(x,y) = 4 Then
            map(x,y) = 0
   End If
      Next
         Next
      End If
         End If    
End Function   


Function npc_hallo()

   

If KeyHit(28)
If px = 3 Then
   If py = 8 Then
   
   
   
   Local a = 315
   Local b = 180
   Locate a,b
   Local npc_hallo
      
      npc = Input ("Was wollen sie tuen: (1) Wiedergehen ")
   
      If npc = 1 Then
      Print"cya"
      Delay 1000
      
      
      px = 3
      py = 9
      
End If       
   End If
       End If
      End If
 




If px = 4 Then
   If py = 7 Then
      Local c = 284
      Local d = 210
      Locate c,d
   
      Print "Hallo"
   
   End If
End If



If px = 3 Then
   If py = 6 Then
      Local g = 315
      Local h = 255
      Locate g,h
      
      Print "Hallo"
   
   End If
End If





If px = 2 Then
   If py = 7 Then
      Local e = 348
      Local f = 211
      Locate e,f
      
      Print "Hallo"
   
   End If
End If


End Function






So hätte ich ein Teil vom Problem gelöst aber jetzt kann ich keine anderen if abfragen mehr machen weil da ist dann auch wieder alles durcheinander Crying or Very sad

Code: [AUSKLAPPEN]

   If KeyHit(57) Then
   ;und die spielerposition auf den hebel-tile befindet
   If map(px,py) = 2 Then
   ;dann wird die gesamte karte eingelesen und alle tür-tiles in graß-tiles
   ;umgewandelt
   
      For y = 0 To 25
         For x = 0 To 25
            If map(x,y) = 4 Then
            map(x,y) = 0
   End If
      Next
         Next
      End If
         End If    
End Function   


Function npc_hallo()

If KeyHit(28) Then

If px = 3 Then
   If py = 8 Then
   
      FlushKeys
      npc = Input ("NPC: Was wollen sie tuen: (1) Wiedergehen")   
         
         FlushKeys
          If npc = 1 Then   
         
         Print "Cya"
         Delay 500
         FlushKeys
   

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group