Schussbalken für kleines Fußballgame

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Challenger

Betreff: Schussbalken für kleines Fußballgame

BeitragMi, Jun 16, 2010 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo liebes Forum!

Ich habe mich gerade frisch angemeldet und habe natürlich schon meine erste Frage: Ich habe ein kleines Programm geschrieben, das auch schon sehr gut funktioniert: Es werden Fragen gestellt wie "Wohin möchtest du schießen" und "Wieviel Risiko möchtest du bei dem Schuss eingehen" (es geht um Fußball, was sonst Cool ). Nach der Eingabe erscheint das passende Video, in dem der Schuss entweder vorbeigeht oder eben reingeht.

Meine Programmierkenntnisse sind nur leider noch sehr bescheiden (bin eigentlich ein Grafiker), sodass ich selbst für dieses kleine, simple Programm fast 2 Nachmittage gebraucht habe. Ich möchte aber eine Kleinigkeit in meinem Code ändern:

Ich hätte gerne, dass sich eine Art Schussbalken aufzieht, sobald man eine bestimmte Taste drückt. Denn die Frage "Wieviel Risiko man in den Schuss legen möchte" ist doch recht blöd. Stattdessen soll die Länge des Schussbalkens darüber entscheiden, wieviel Risiko der Spieler eingehen möchte.


Meine Fragen lauten also:

1. Wie kann ich eine kleine Grafik anhand der Länge des Tastendrucks erstellen lassen? Wie in den Fußballgames typisch sollte der Balken über die Breite des Bildschirms gehen.

2. Wie kann ich das Programm erkennen lassen, wie lange ich die Taste gedrückt habe (bzw. wie lang der Balken geworden ist)?

Danke im Voraus!

Silver_Knee

BeitragMi, Jun 16, 2010 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Damit müsstest du es schaffen:

BlitzBasic: [AUSKLAPPEN]
Repeat
x=x+1
Rect 0,0,x,10
Flip
Cls
Forever


Keydown Exit

empet

BeitragMi, Jun 16, 2010 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
vielleicht etwa so:
BlitzBasic: [AUSKLAPPEN]

i=0
While Not KeyDown(2);warten bis key gedrückt
Wend
Repeat
If KeyDown(2) Then
i=i+1 ;wenn taste gedrückt zähler +1
Else
e=1 ;sonst abbrechen
End If
Line 1,1,i,1 ;balken anzeigen (kannst du verschönern)
Until e=1
;am schluss kannst du i auslesen :-)
 

Challenger

BeitragMi, Jun 16, 2010 22:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow was für ein genialer, schneller Support! Jetzt muss ich den Code nur noch in meinen großen, unübersichtlichen integriert und ausgelesen bekommen, dann müsste es funktionieren! Danke schonmal!

EDIT: Sollte ich deinen Code in eine Funktion packen oder geht das auch anders? Bin mir noch nicht so ganz sicher, wie ich das Ding in meinen Code packe. Wenn ich es einfach einfüge, kommt kein Balken zustande sondern das Video wird sofort abgespielt.

Silver_Knee

BeitragDo, Jun 17, 2010 0:17
Antworten mit Zitat
Benutzer-Profile anzeigen
vllt vor dem code nochmal flushkeys damit man neu anschlagen muss...

und bitte pack wenigstens ein Delay 100 in die erste While-Wend schleide sonst rennt dein pc sich kaput im nichts tun
 

Challenger

BeitragDo, Jun 17, 2010 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay sorry, aber ich bekomme es einfach nicht gebacken. Mein Wissen über das Programmieren ist einfach noch zu limitiert. Ich habe zwar versucht mich in die Befehle hineinzulesen, aber ich weiß gar nicht, wie ich da jetzt vorgehen soll. Hier mal der Code:

Code: [AUSKLAPPEN]
Const WIDTH = 1680
Const HEIGHT = 1050

Graphics WIDTH, HEIGHT
SetBuffer BackBuffer()
ClsColor 0,0,0
Color 0,255,0

SeedRnd MilliSecs()

b=Rnd(1,2)
c=Rnd(1,3)
d=Rnd(1,4)
e=Rnd(1,6)
f=Rnd(1,7)

richtung1$=Input$("Wo möchtest du hinschießen? Links, Mitte oder Rechts?")

If richtung1$="links"
i=1
ElseIf richtung1$="mitte"
i=2
ElseIf richtung1$="rechts"
i=3
EndIf

richtung2$=Input$("Wo möchtest du hinschießen? Unten oder oben?")

If richtung2$="unten"
j=0
ElseIf richtung2$="oben"
j=10
EndIf


i=0
While Not KeyDown(30);warten bis key gedrückt
Wend
Repeat
If KeyDown(30) Then
i=i+1 ;wenn taste gedrückt zähler +1
Else
e=1 ;sonst abbrechen
End If
Line 1,1,i,1 ;balken anzeigen (kannst du verschönern)
Until e=1
;am schluss kannst du i auslesen :-)

If i<800
z=0
ElseIf i>800
z=100
EndIf


a=i+j+z


If a=1 And b=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 12.avi")
ElseIf a=1 And b=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 14.avi")
EndIf

If a=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")
EndIf

If a=3 And b=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")
ElseIf a=3 And b=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi")
EndIf

If a=11 And b=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi")
ElseIf a=11 And b=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 3.avi")
EndIf

If a=12 And c=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 9.avi")
ElseIf a=12 And c=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi")
ElseIf a=12 And c=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi")
EndIf

If a=13 And b=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi")
ElseIf a=13 And b=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi")
EndIf

If a=101 And c=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 2.avi")
ElseIf a=101 And c=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 15.avi")
ElseIf a=101 And c=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 25.avi")
EndIf

If a=102
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")
EndIf

If a=103 And d=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 21.avi")
ElseIf a=103 And d=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi")
ElseIf a=103 And d=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 7.avi")
ElseIf a=103 And d=4
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 20.avi")
EndIf

If a=111 And e=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 4.avi")
ElseIf a=111 And e=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi")
ElseIf a=111 And e=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 13.avi")
ElseIf a=111 And e=4
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 16.avi")
ElseIf a=111 And e=5
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 11.avi")
ElseIf a=111 And e=6
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 26.avi")
EndIf

If a=112 And c=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi")
ElseIf a=112 And c=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi")
ElseIf a=112 And c=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 24.avi")
EndIf

If a=113 And f=1
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi")
ElseIf a=113 And f=2
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi")
ElseIf a=113 And f=3
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi")
ElseIf a=113 And f=4
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi")
ElseIf a=113 And f=5
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi")
ElseIf a=113 And f=6
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi")
ElseIf a=113 And f=7
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi")
EndIf


;Now determine the size of the movie
w=MovieWidth(movie) ; the width of the movie
h=MovieHeight(movie) ; the height of the movie

; Now set up the starting position and timing variables
x=(WIDTH-w)/2 ; the x position of the movie on screen
y=(HEIGHT-h-100)/2 ; the y position of the movie on screen
period=400 ; the interval between frames
time=MilliSecs() ; the time of the last frame update

Repeat
Until MilliSecs()-time>=period
time=MilliSecs() ; save the current time for the next frame
Repeat
; do nothing

Cls ; clear the screen
DrawMovie movie,x,y,w,h ; draw the movie

; Flip the buffers
Flip

Until KeyHit(1) ; Escape to exit

; Remove the movie from memory before closing down
CloseMovie(movie)

End ; bye!





WaitKey





Wenn ich das Programm so starte, füllt sich weder ein Balken noch funktioniert das Video: Memory Access Violation.

ozzi789

BeitragDo, Jun 17, 2010 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine MAV deutet darauf hin das du zB etwas Abspielen (drawmovie) oder Anzeigen (drawimage) möchtest aber das passende File nicht geladen wurde.
Hast du den Debugger an?
Sag doch welche Zeile er makiert Wink

Zudem ein kleiner Tipp, verwende nicht ganze Pfade, also nur zmb "/movies/Video 10.avi".
So können auch andere Leute dein Programm nutze. (Da nicht jeder einen User hat der Paul heisst Wink)
Im Sinne von:

Zitat:
[+]Game
,,,,,,-spiel.exe
,,,,,,[+]movies
,,,,,,,,,,,,-Video 10
,,,,,,,,,,,,-Video 11
,,,,,,,,,,,,- ....



mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

Challenger

BeitragDo, Jun 17, 2010 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Debugger markiert genau die Zeile unterhalb den ganzen If-Bedingungen, unter den Pfaden, die du eben kritisiert hast (danke für den Tipp btw).

Genau hier:

;Now determine the size of the movie
w=MovieWidth(movie) ; the width of the movie
h=MovieHeight(movie) ; the height of the movie

Diese Zeilen. Den Fehler hat ich auch schon oft und weiß daher, was er ungefähr bedeutet. Allerdings müsste das Video geladen werden können. Ich glaube das Problem liegt viel eher darin, dass mein Schussbalken noch nicht ganz funktioniert.

Silver_Knee

BeitragDo, Jun 17, 2010 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm setz mal über die beiden Zeilen

If movie=0 then RuntimeError "Ich habe keine Datei geladen"

sollte der fehler auftauchen konnte blitz entweder das movie nicht laden oder es kam zu garkeinem laden befehl weil alle ifs da oben nicht zu trafen
 

Challenger

BeitragDo, Jun 17, 2010 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Seltsam, es wird tatsächlich angezeigt, dass er die Datei nicht laden konnte. Wenn ich das Schussbalkensystem jedoch wieder durch mein altes System ersetze (sprich, einfach die Frage stelle, ob man riskant schießen möchte oder nicht) und den Rest unverändert lasse, funktioniert es reibungslos!

Midimaster

BeitragDo, Jun 17, 2010 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
klar...aus dem Schussbalken wird ja irgendwie I, J und Z erstellt, oder? und daraus wiederum A berechnet. Und das sorgt dafür, dass eines der Videos geladen wird. wenn nun A einen Wert annimmt, der in deinen IF-Verzweigungen gar nicht vorkommt, dann wird auch kein Video geladen.


Ich rate dir zum mehr DEBUGLOGs.

z.b
BlitzBasic: [AUSKLAPPEN]
....
a=i+j+z

DebugLog " A=" + A

If a=1 And b=1
DebugLog "Video 12 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 12.avi")
ElseIf a=1 And b=2
DebugLog "Video 14 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 14.avi")
EndIf

.....



Und hier noch ein Tipp zur Struktur deines Codes:


die IF-Abfragen lassen sich übersichtlicher zusammenfassen, was Fehlerquellen reduziert:


BlitzBasic: [AUSKLAPPEN]

If a=1
If b=1
LadeMovie="Video 12.avi"
ElseIf b=2
LadeMovie="Video 14.avi"
EndIf

ElseIf a=2
LadeMovie="Video 10.avi"

ElseIf a=3
If b=1
LadeMovie="Video 10.avi"
ElseIf b=2
LadeMovie="Video 8.avi"
EndIf

ElseIf a=11
If b=1
LadeMovie="Video 1.avi"
ElseIf b=2
LadeMovie="Video 3.avi"
EndIf

ElseIf a=12
If c=1
LadeMovie="Video 9.avi"
ElseIf c=2
.....usw usw
.....
EndIf
.....
Pfad="C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\"
DebugLog "Dieses Video wird geladen: " + LadeMovie + "!"
movie=OpenMovie(Pfad + LadeVideo)
.....
 

Challenger

BeitragDo, Jun 17, 2010 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Also diese neue Ordnung von den if Schleifen habe ich schon einmal vorgenommen und tatsächlich hat sich etwas geändert: Jetzt kommt der Fehler nicht mehr bei "Ich kann das Video nicht laden", sondern jetzt kommt wieder danach (in den Zeilen, die ich vorhin angegeben habe) der MAV Fehler!

Midimaster

BeitragDo, Jun 17, 2010 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
stell bitte mal den aktuellen code hier rein....


und gleich noch eine Frage: Was zeigen denn in diesem Moment die DEBUGLOGs an?

und dieZeilen nach den IFs sehen bei dir so aus?:

BlitzBasic: [AUSKLAPPEN]
.....
EndIf
.....
Pfad="C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\"
DebugLog "Dieses Video wird geladen: " + LadeMovie + "!"
movie=OpenMovie(Pfad + LadeVideo)
If movie = 0 Then
DebugLog "... und konnte nicht geladen werden"
End
EndIf
;Now determine the size of the movie
w=MovieWidth(movie) ; the width of the movie
h=MovieHeight(movie) ; the height of the movie

.....
 

Challenger

BeitragFr, Jun 18, 2010 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also: Ich habe diese ganzen Debug Logs eingefügt und tatsächlich tut jetzt ein Teil der Videos! Für kleine i/z Zahlen (geringes Risiko/kurzer Schussbalken) jedoch funktioniert es noch nicht. Da zeigt er wieder die angegebene Zeile als Fehler an (MAV). Außerdem zeigt er den Schussbalken noch nicht als Grafik an.

Hier der aktuelle Code:

Code: [AUSKLAPPEN]
Const WIDTH = 1680
Const HEIGHT = 1050

Graphics WIDTH, HEIGHT
SetBuffer BackBuffer()
ClsColor 0,0,0
Color 0,255,0

SeedRnd MilliSecs()

b=Rnd(1,2)
c=Rnd(1,3)
d=Rnd(1,4)
e=Rnd(1,6)
f=Rnd(1,7)

richtung1$=Input$("Wo möchtest du hinschießen? Links, Mitte oder Rechts?")

If richtung1$="links"
i=1
ElseIf richtung1$="mitte"
i=2
ElseIf richtung1$="rechts"
i=3
EndIf

richtung2$=Input$("Wo möchtest du hinschießen? Unten oder oben?")

If richtung2$="unten"
j=0
ElseIf richtung2$="oben"
j=10
EndIf


i=0
While Not KeyDown(30);warten bis key gedrückt
Wend
Repeat
If KeyDown(30) Then
i=i+1 ;wenn taste gedrückt zähler +1
Else
e=1 ;sonst abbrechen
End If
Line 1,1,i,1 ;balken anzeigen (kannst du verschönern)
Until e=1
;am schluss kannst du i auslesen :-)

If i<800
z=0
ElseIf i>800
z=100
EndIf


a=i+j+z

DebugLog " A=" + A

If a=1
    If b=1
DebugLog "Video 12 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 12.avi")
    ElseIf b=2
DebugLog "Video 14 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 14.avi")
EndIf

ElseIf a=2
DebugLog "Video 10 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")

ElseIf a=3
    If b=1
DebugLog "Video 10 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")
    ElseIf b=2
DebugLog "Video 8 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi")
EndIf

ElseIf a=11
    If b=1
DebugLog "Video 1 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi")
    ElseIf b=2
DebugLog "Video 3 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 3.avi")
EndIf

ElseIf a=12
    If c=1
DebugLog "Video 9 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 9.avi")
    ElseIf c=2
DebugLog "Video 23 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi")
    ElseIf c=3
DebugLog "Video 28 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi")
EndIf

ElseIf a=13
    If b=1
DebugLog "Video 5 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi")
    ElseIf b=2
DebugLog "Video 6 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi")
EndIf

ElseIf a=101
    If c=1
DebugLog "Video 2 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 2.avi")
    ElseIf c=2
DebugLog "Video 15 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 15.avi")
    ElseIf c=3
DebugLog "Video 25 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 25.avi")
EndIf

ElseIf a=102
DebugLog "Video 10 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 10.avi")


ElseIf a=103
    If d=1
DebugLog "Video 21 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 21.avi")
    ElseIf d=2
DebugLog "Video 8 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi")
    ElseIf d=3
DebugLog "Video 7 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 7.avi")
    ElseIf d=4
DebugLog "Video 20 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 20.avi")
EndIf

ElseIf a=111
    If e=1
DebugLog "Video 4 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 4.avi")
    ElseIf e=2
DebugLog "Video 1 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 1.avi")
    ElseIf e=3
DebugLog "Video 13 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 13.avi")
    ElseIf e=4
DebugLog "Video 16 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 16.avi")
    ElseIf e=5
DebugLog "Video 11 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 11.avi")
    ElseIf e=6
DebugLog "Video 26 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 26.avi")
EndIf

ElseIf a=112
    If c=1
DebugLog "Video 23 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 23.avi")
    ElseIf c=2
DebugLog "Video 28 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 28.avi")
    ElseIf c=3
DebugLog "Video 24 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 24.avi")
EndIf

ElseIf a=113
    If f=1
DebugLog "Video 5 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi")
    ElseIf f=2
DebugLog "Video 6 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi")
    ElseIf f=3
DebugLog "Video 27 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi")
    ElseIf f=4
DebugLog "Video 18 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi")
    ElseIf f=5
DebugLog "Video 17 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi")
    ElseIf f=6
DebugLog "Video 19 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi")
    ElseIf f=7
DebugLog "Video 22 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi")
EndIf



If movie=0 Then RuntimeError "Ich habe keine Datei geladen"
EndIf

;Now determine the size of the movie
w=MovieWidth(movie) ; the width of the movie
h=MovieHeight(movie) ; the height of the movie

; Now set up the starting position and timing variables
x=(WIDTH-w)/2 ; the x position of the movie on screen
y=(HEIGHT-h-100)/2 ; the y position of the movie on screen
period=100 ; the interval between frames
time=MilliSecs() ; the time of the last frame update

Repeat
Until MilliSecs()-time>=period
time=MilliSecs() ; save the current time for the next frame
Repeat
; do nothing

Cls ; clear the screen
DrawMovie movie,x,y,w,h ; draw the movie

; Flip the buffers
Flip

Until KeyHit(1) ; Escape to exit

; Remove the movie from memory before closing down
CloseMovie(movie)

End ; bye!





WaitKey

Midimaster

BeitragFr, Jun 18, 2010 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
also, die DEBUGLOGs sind nicht dafür verantwortlich, dass der Code plötzlich funktioniert. Mit diesem Befehl kannst Du aber im DEBUG-Fenster sehen, welchen Wert A zu dem Zeitpunkt des Problems hatte. Außerdem siehst du in dem DEBUG-Fenster wie genau der Name der Video-Datei lautete, die aktuell geladen werden sollte.

Beides gibt dir Informationen, wo ein Denkfehler stecken könnte.

Also check mal, bei welchem A der Fehler auftritt.

Und kürze bitte den Code noch so, dass nicht in jedem IF eine eigenes OPENMOVIE steht, sondern dass in den IFs nur der Dateiname festgelegt wird, das Laden aber nur 1x ganz am Ende der IF-Zeilen erfolgt. Nur so stelltst Du fest, ob irgendeine Kombination zu überhaupt keinem sinnvollen Movie-Laden führt. Schau dir dazu nochmal mein Beispiel aus dem letzten Post an.


Schussbalken als Grafik

probiers mal so:

BlitzBasic: [AUSKLAPPEN]
i=0
While Not KeyDown(30);warten bis key gedrückt
Wend
Color 255,0,0
SetBuffer BackBuffer()
Repeat
Cls
If KeyDown(30) Then
i=i+1 ;wenn taste gedrückt zähler +1
Else
e=1 ;sonst abbrechen
End If
Rect 1, 10, i, 5
Flip 1
Until e=1

;am schluss kannst du i auslesen :-)

If i<800
z=0
ElseIf i>800
z=100
EndIf

 

Challenger

BeitragFr, Jun 18, 2010 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha, exzellenter Tipp und aufgrund deines neuen Schussbalken-Codes funktioniert auch dieser nun. Das Problem ist nun folgendes:

Der A-Wert scheint sich ausschließlich darauf zu berufen, wie groß mein Schussbalken wird. Deshalb geht das Video manchmal und manchmal nicht: Wenn ich lange die Schusstaste drücke, ist A=14, doch für diesen A-Wert existiert überhaupt kein Video. Wenn ich sie lang drücke, wird der A-Wert bis zu 200 und noch größer! Verstehe ich nicht, was ich da falsch gemacht habe...

EDIT: Ok habe endlich einmal einen Fehler alleine gefunden! Zufälligerweise überschnitten sich zwei Variablen aus meinem Code mit einem von euch geposteten!

Midimaster

BeitragFr, Jun 18, 2010 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
du findest alle deine Fehler, wenn du mehr mit DEBUGLOG arbeitest. Vielleicht hast du ja mal Lust mein "Fehler finden"-Tutorial zu lesen? https://www.blitzforum.de/foru...hp?t=33510

Dort steh auch was zu Variablen-Namen drin, die dir ja auch bei diesem Fehler zum Verhängnis geworden sind.

A oder Z oder N taugen einfach nicht als Varialbennamen! Nenn die Dinger nach dem,was sie sind:

Zitat:
RichtungsWert%
ObenUnten%
KraftAnteil%
ZufallA%, ZufallB%, ...
FilmBreit%, FilmHoch%, FilmX%, FilmY%


...soviel Zeit sollte sein. Und dann spart dir das viel Zeit bem Fehlersuchen.


Not-Nagel

Außerdem sollte es am Ende der IF-Zeilen eine Abfrage geben, die nicht existierende Filme durch den 0815-Film ersetzt:

BlitzBasic: [AUSKLAPPEN]
If Movie=0 Then
Movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 8.avi")
EndIf

Dann hast du 100% keinen undefinierten Zustand mehr.
 

Challenger

BeitragSa, Jun 19, 2010 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh man ich verstehe das einfach nicht. Der Code von oben ist nach wie vor der aktuelle, nur mit dem Unterschied der sich überschneidenden Variablen: Die Videos funktionieren zwar, jedoch wird pro Richtung immer nur ein und das selbe Video abgespielt. Der Zufallsgenerator funktioniert anscheinend nicht! Könnte sich jemand meine Rnd Geschichte oben kurz anschauen?

Midimaster

BeitragSa, Jun 19, 2010 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@Challenger

Du könntest doch auch mal die in diesem Moment auftretenden DEBUGGER-Meldungen hier dazuschreiben. Was sagen denn die Variablen A, Z ,etc...? Da ja keiner deine Videos hat, kann man das Ganze schlecht ausprobieren.

Würdest Du den Code so umstellen, wie ich es in der letzten Post geschrieben habe, gäbe es nur noch eine OPENMOVIE-Stelle und Dritte könnten das Programm simulieren, weil ja nur eine Codezeile ausmaskiert werden muss.

Außerdem darfst du jederzeit den aktuellen Code reinstellen. Das ist für Dritte leichter als wenn Du beschreibst, welche Änderungen du seither gemacht hast. Es ist sogar möglich den Code immer wieder in deinem allerersten Beitrag zu ändern. Klick auf deinen ersten Beitrag auf "Beitrag bearbeiten", lösche den alten Code und geben den aktuellen Code rein. Anschließend kannst du in den zukünftigen Posts immer darauf hinweisen, dass oben der akt. Code zu finden ist. Wie wäre das?

Dein Code enthält sehr viele Möglichkeiten für Eingabe-Fehler. Hier mal, wie so etwas sicherer zu programmieren wäre:

BlitzBasic: [AUSKLAPPEN]
Const WIDTH = 800
Const HEIGHT = 600

Graphics WIDTH, HEIGHT
SetBuffer BackBuffer()
ClsColor 0,0,0
Color 0,255,0

SeedRnd MilliSecs()

b=Rnd(1,2)
c=Rnd(1,3)
d=Rnd(1,4)
e=Rnd(1,6)
f=Rnd(1,7)
Print "Die Zufallswerte sind: "
Print "B=" + B
Print "C=" + c
Print "D=" + d
Print "E=" + e
Print "F=" + f

richtung1$=Input$("Wo möchtest du hinschießen? Links, Mitte oder Rechts?")

If richtung1$="links"
i=1
ElseIf richtung1$="mitte"
i=2
ElseIf richtung1$="rechts"
i=3
Else
i=2
EndIf
Print "Eingabe war :" + Richtung1 + " und I= " + i



Print
richtung2$=Input$("Wo möchtest du hinschießen? Unten oder oben?")

If richtung2$="unten"
j=0
ElseIf richtung2$="oben"
j=10
EndIf
Print "Eingabe war :" + Richtung2 + " und J= " + j



Print
Print "Jetzt Taste <A> solange drücken, bis die gewünschte Stärke erreicht ist"
i=0
Rect 100,200,i+5,50 ;balken anzeigen (kannst du verschönern)
Flip 1
While Not KeyDown(30);warten bis key gedrückt
Wend
Repeat
If KeyDown(30) Then
i=i+1 ;wenn taste gedrückt zähler +1
Else
e=1 ;sonst abbrechen
End If
Rect 100,200,i+5,50 ;balken anzeigen (kannst du verschönern)
Flip 1
Until e=1
;am schluss kannst du i auslesen :-)

If i<800
z=0
Else
z=100
EndIf
Print "Stärke= " + i + " und Z=" + z


a=i+j+z
Print "Daraus erreichnet sich A= " + a


DebugLog " A=" + A
.....


Die Verbesserungen sind:

1. Anzeige der Zufallswerte

2. Für Richtung1$ ein zusätzliches ELSE, falls der User keines der drei gewünschten Worte drückt. Laut deiner Anweisung soll man z.b. "Links" großgeschrieben eingeben, die IF-Abfrage erwartet aber ein kleingeschriebenes. Vielleicht solltest du hier noch ein wenig genauer werden.

3. Anzeige, was bei Richtung1 herausgekommen ist

4. Das gleiche für Richtung2

5. Eine Anweisung, welche Taste eigentlich zu drücken ist. Zusätzlich wird der Balken schon ein bißchen gemalt, damit der User sieht, was gleich kommen wird. Der Balken wirkt auch besser mit RECT als mit LINE! Außerdem eine Verbesserung beim Festlegen von Z. In deinem code gibt es eine Situation wo Z gar keinen Wert annimmt. Nämlich wenn I zufällig genau 800 ist!

Code-Fehler

In diesem Gewühle habe ich außerdem einen Code-Fehler entdeckt. Weil Du noch nicht korrekt einrückst, fällt er leider nicht auf. Die entscheidende Codezeile mit dem IF movie=0 wird daher so gut wie nie arbeiten können:
Code: [AUSKLAPPEN]
ElseIf a=113
    If f=1
DebugLog "Video 5 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 5.avi")
    ElseIf f=2
DebugLog "Video 6 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 6.avi")
    ElseIf f=3
DebugLog "Video 27 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 27.avi")
    ElseIf f=4
DebugLog "Video 18 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 18.avi")
    ElseIf f=5
DebugLog "Video 17 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 17.avi")
    ElseIf f=6
DebugLog "Video 19 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 19.avi")
    ElseIf f=7
DebugLog "Video 22 geladen"
    movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\Video 22.avi")
EndIf

If movie=0 Then RuntimeError "Ich habe keine Datei geladen"
EndIf

Wenn du richtig einrückst, wir der Fehler klar:

BlitzBasic: [AUSKLAPPEN]
ElseIf a=113
If f=1
DebugLog "Video 5 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\...")
ElseIf f=2
DebugLog "Video 6 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\....")
ElseIf f=3
DebugLog "Video 27 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\....")
ElseIf f=4
DebugLog "Video 18 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\...")
ElseIf f=5
DebugLog "Video 17 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\....")
ElseIf f=6
DebugLog "Video 19 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\....")
ElseIf f=7
DebugLog "Video 22 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\...")
EndIf
If movie=0 Then RuntimeError "Ich habe keine Datei geladen"
EndIf


Das movie=0 befindet sich also noch in der A=113 If-Abfrage! richtig wäre:

BlitzBasic: [AUSKLAPPEN]
     .....
ElseIf f=7
DebugLog "Video 22 geladen"
movie=OpenMovie("C:\Dokumente und Einstellungen\....")
EndIf
EndIf

If movie=0 Then
RuntimeError "Ich habe keine Datei geladen"
EndIf




So und hier nun mal der zweite Teil, in der Art wie ich es mir vorstelle. Und da wird nun ziemlich schnell klar, dass es einige undefinierte Werte A gibt, die logischerweise zu keinem Video führen:
BlitzBasic: [AUSKLAPPEN]
a=i+j+z
Print "Daraus erreichnet sich A= " + a

Print:Print:Print:Print:Print

MovieDatei$=""
If a=1
If b=1
movieDatei="Video 12.avi"
ElseIf b=2
movieDatei="Video 14.avi"
EndIf

ElseIf a=2
movieDatei="Video 10.avi"

ElseIf a=3
If b=1
movieDatei="Video 10.avi"
ElseIf b=2
movieDatei="Video 8.avi"
EndIf

ElseIf a=11
If b=1
movieDatei="Video 1.avi"
ElseIf b=2
movieDatei="Video 3.avi"
EndIf

ElseIf a=12
If c=1
movieDatei="Video 9.avi"
ElseIf c=2
movieDatei="Video 23.avi"
ElseIf c=3
movieDatei="Video 28.avi"
EndIf

ElseIf a=13
If b=1
movieDatei="Video 5.avi"
ElseIf b=2
movieDatei="Video 6.avi"
EndIf

ElseIf a=101
If c=1
movieDatei="Video 2.avi"
ElseIf c=2
movieDatei="Video 15.avi"
ElseIf c=3
movieDatei="Video 25.avi"
EndIf

ElseIf a=102
movieDatei="Video 10.avi"


ElseIf a=103
If d=1
movieDatei="Video 21.avi"
ElseIf d=2
movieDatei="Video 8.avi"
ElseIf d=3
movieDatei="Video 7.avi"
ElseIf d=4
movieDatei="Video 20.avi"
EndIf

ElseIf a=111
If e=1
movieDatei="Video 4.avi"
ElseIf e=2
movieDatei="Video 1.avi"
ElseIf e=3
movieDatei="Video 13.avi"
ElseIf e=4
movieDatei="Video 16.avi"
ElseIf e=5
movieDatei="Video 11.avi"
ElseIf e=6
movieDatei="Video 26.avi"
EndIf

ElseIf a=112
If c=1
movieDatei="Video 23.avi"
ElseIf c=2
movieDatei="Video 28.avi"
ElseIf c=3
movieDatei="Video 24.avi"
EndIf

ElseIf a=113
If f=1
movieDatei="Video 5.avi"
ElseIf f=2
movieDatei="Video 6.avi"
ElseIf f=3
movieDatei="Video 27.avi"
ElseIf f=4
movieDatei="Video 18.avi"
ElseIf f=5
movieDatei="Video 17.avi"
ElseIf f=6
movieDatei="Video 19.avi"
ElseIf f=7
movieDatei="Video 22.avi"
EndIf
EndIf


Print "versuche zu laden: !" + movieDatei + "!"
movie=OpenMovie("C:\Dokumente und Einstellungen\Paul\Eigene Dateien\Eigene Videos\" + movieDatei)

If movie=0 Then
RuntimeError "Ich habe keine Datei geladen"
EndIf

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group