hilfe bei einer Programmierung

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

BladeRunner

Moderator

BeitragSa, März 08, 2008 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Beispiel:
Code: [AUSKLAPPEN]
Repeat

   Gosub test
   Gosub test2
   Delay(100)
Until KeyHit (1)

.test
Print "ich bin die uhr und mache was ne uhr so macht.... tick tack"
Return

.test2
x=x+1
Print "ich Bin ne schleife und schon "+x+" mal durchlaufen"
Return


test und test 2 sind getrennt voneinander, werden aber beide in der Hauptschleife aufgerufen und daher beide bearbeitet.
Damit also Codes "scheinbar" simultan laufen musst du sie so aufbauen dass die schleife in der sie laufen die Hauptschleife ist.


Dazu würde ich persönlich jedoch zu ql:function raten. Gosub geht, aber Funktionen sind besser gekapselt (das heisst sie haben ihren eigenen Variablenraum, was oft sehr sinnig ist).
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

SNIPER

BeitragSa, März 08, 2008 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
gut des hab ich jetzt eingesetzt aber jetzt wegselt des die ganze zeit und die uhr taucht nur auf aber zählt nicht die tore fallen wenn ich die tastn drücke aber sie bleiben nicht stehn

Code: [AUSKLAPPEN]
Repeat

   Gosub test
   Gosub test2

   Delay(100)
Until KeyHit (1)

 
.test
Graphics 1420,300
ClsColor 0,0,0
Color 23,26,87

schrift = LoadFont("calibri",120,1)
SetFont schrift

start = MilliSecs()
SetBuffer BackBuffer()
Repeat
Cls

time = MilliSecs()-start

sec = time / 1000
min = time / 60000
sec=sec-(minuten*60)

If sec<10 Then
sec3$="0"+sec
Else sec3$=sec
EndIf

If min<10 Then
min2$="0"+min
Else min2$=min
EndIf

Text 20,35,"Zeit: " + min2+ ":" + sec3+ ":" + Mid(time,(Len(sec)+1),2)

Flip
Return
Until KeyHit(1)

End




.test2
Graphics 1420,300
ClsColor 0,0,0
Color 23,26,87
font1=LoadFont("calibri",120,0,0,0)   
font2=LoadFont("calibri",50,0,0,1)
For t = 1 To 5400
A=GetKey()
tor = LoadSound("tooor.wav")

SetFont font2
If A=103 Then
 Rect 70,210,130,20
 Rect 70,90,130,20
 Rect 70,120,20,80
 Rect 180,120,20,80
 Rect 1000,60,10,45
 Rect 1110,60,10,45
 Rect 1000,50,120,10
 Oval 1120,200,30,30
 Oval 1120,200,30,30 
 Oval 1118,198,30,30
 Oval 1000,100,30,30
 PlaySound tor
 Text 100,250, "Die Gastmannschaft hat ein Tor geschossen"
EndIf


If A=104 Then
 Rect 570,210,130,20
 Rect 570,90,130,20
 Rect 570,120,20,80
 Rect 680,120,20,80
 PlaySound tor
 Text 100,250, "Die Heimmannschaft hat ein Tor geschossen"
EndIf



SetFont font1
falsch = LoadSound ("tooor.wav")
If A=103 Then x=x+1;G
If A=104 Then y=y+1;H
If A=116 Then x=x-1;T
If A=116 Then PlaySound falsch
If A=122 Then y=Y-1;Z
If A=122 Then PlaySound falsch
SetFont font1                              ; der geladene Font kommt zum Einsatz
Text 100,100,x                        
Text 350,100,":"                           ; Text funktioniert wie Print+Locate
Text 600,100,y



Delay 1000
Cls
Return 
Next

BladeRunner

Moderator

BeitragSa, März 08, 2008 16:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Weil Test und Test2 bei dir immer noch komplette Schleifen sind und du das ganze ganz offensichtlich nicht verstanden hast.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

SNIPER

BeitragSo, März 09, 2008 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
leider bin ich da nicht sehr gut drin und vllt kannst du mir ja auch einfach in meiner programmierung zeigen wie und wo ich das hin schreiben muss

BladeRunner

Moderator

BeitragSo, März 09, 2008 11:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry, aber nein, denn wenn ich Dir den ganzen Code schreibe ist der Lerneffekt für dich gleich Null. Du hast ja einfach meinen Code kopiert (selbst das delay welches ich nur für den Vorführeffekt drinhatte) und ihn blind versucht. So klappt das einfach nicht.
Wenn Du sie noch nicht hast, besorg dir die deutsche Onlinehilfe, dort sind alle Befehle drin und reichlich Beispiele dazu.
Das adaptieren an deine Wünsche musst du selbst erledigen, sonst programmierst du nämlich nicht, sondern die die Dir die Lösungen fabrizieren.

Als Tip zu deinem Problem:

Code: [AUSKLAPPEN]
.test
repeat
    print "test"
until keyhit(1)
return


.test2
repeat
    print"noch ein test"
until keyhit(1)
return



Diese beiden Subfunktionen werden in der Hauptschleife NICHT funktionieren, denn es sind selbst Schleifen. Bau sie mal ein und Starte sie, dann siehst Du vielleicht was ich meine. Der Rechner arbeitet eben stur ab was als nächstes da steht, und wenn da steht er soll was wiederholen dann tut er das auch.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

SNIPER

BeitragSo, März 09, 2008 16:05
Antworten mit Zitat
Benutzer-Profile anzeigen
gut ok also muss ich die zeit und die torstände eigenlcih aus der hauptschleife nehmen das ich se gleichzeitig leufen lassen kann aber dann gehn sie warscheinlich nicht mehr gibt da irgend welche besonderen befehle die so was können
und es ist doch bestimmt so da irgen wie des geht das man beides gleichzeit laufen lassen soll.

und zu dem lernen ich versuche es ja zu lernen aber da es mir keiner beibringen will oder kann und selber erlenen sehr viel zeit bracht und die ich aber net habe muss ichs irgen wie andes hin bekommen

skey-z

BeitragSo, März 09, 2008 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
So ist es nun mal, programmieren lernen braucht Zeit, das geht nicht von heute auf morgen.

Falls du es noch nicht gemerkt haben solltest, wir versuchen dir ja zu helfen, aber entweder kannst oder willst du uns nicht verstehen, wir haben dir hier einiges an Möglichkeiten aufgezeigt, wie du es realiseren kannst und was du in deinem Programm falsch machst.

Für die Umsetzung bist du alleine Verantwortlich, wenn wir dir das ganze Programm vorschreiben lernst du nichts, wie BladeRunner schon versucht hat dir zu erklären.

Außerdem ist dein Ausdruck sehr schlecht zu verstehen, dass man manchmal nicht weiß, was du überhaupt von uns willst. Wenn du zuerst daran arbeiten würdest, tätest du uns einen riesen Gefallen.

Besondere Befehle gibt es ganz viele, die stehen alle unter www.blitzbase.de
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

SNIPER

BeitragSo, März 09, 2008 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
aber genau bei der umsetzung hab ich mein proplem
ich kann eure bsp. nicht in meine programmierung umsetzten

kriD

BeitragSo, März 09, 2008 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
dann hast dus scheinbar nicht richtig verstanden.

guck dir die tuts nochmal an, und nochmal, bis dus kapiert hast.. der rest kommt von allein..


MfG kriD
Wenn ich du wäre, wäre ich lieber ich!

biggicekey

BeitragSo, März 09, 2008 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
um es nochmalauf den punkt zu bringen, du kannst nix gleichzeitig ablaufen lassen.
es läuft alles nacheinander ab.
die hauptschleife beginnt bei bladerunner mit "repeat" und endet mit "until keyhit"
in dieser schleife muss sich alles abspielen und wird nacheinander abgearbeitet.
dabei springt das programm mithilfe von "gosub" aus der offensichtilichen hauptschleife und kehrt in diese mit "return" zurück. prinzipiel könnte auch alles ohne diese sprünge in der hauptschleife stehen.

vor die hauptschleife gehören dinge wie "graphics ...", "setbuffer...", bilder laden etc.

in die hauptschleife gehört nur was wiederholt werden soll: bilder zeichnen, text anzeigen, tasten abfragen.

du hast den fehler gemacht in deine "gosub" unterfunktion eine weitere hauptschleife packen zu wollen, und in dieser auch noch grundlegende fehler gemacht, wie graphicmodus setzen, bilder laden etc...
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller
Nothing more to register - you've cleaned us out![/size]

BladeRunner

Moderator

BeitragSo, März 09, 2008 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz nebenbei: Da diese Hauptschleife im Regelfall mindestens 60 mal in der Sekunde durchlaufen wird wirken die in einem Durchlauf gemachten Operationen als ob sie gleichzeitig ablaufen würden Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

SNIPER

BeitragMo, März 10, 2008 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habe die digitaluhr und den torstand gleichzeitig auf einem bildschirm aber man sieht nix davon nur wenn man esc drückt sieht man das etwas abgelaufen ist. Ausserdem überschreibt es die ziffern was es vorher nicht gemacht hatte wenn man das "flip" jetzt über das "Until KeyHit(1)" setzt geht die uhr wieder normal aber der torstand ist nicht mehr dabei.






Code: [AUSKLAPPEN]

Graphics 1420,300
ClsColor 0,0,0
Color 23,26,87

schrift = LoadFont("calibri",120,1)
SetFont schrift

start = MilliSecs()
SetBuffer BackBuffer()
Repeat
Cls

time = MilliSecs()-start

sec = time / 1000
min = time / 60000
sec=sec-(minuten*60)

If sec<10 Then
sec3$="0"+sec
Else sec3$=sec
EndIf

If min<10 Then
min2$="0"+min
Else min2$=min
EndIf

Text 20,35,"Zeit: " + min2+ ":" + sec3+ ":" + Mid(time,(Len(sec)+1),2)
 
Until KeyHit(1)


font1=LoadFont("calibri",120,0,0,0)   
font2=LoadFont("calibri",50,0,0,1)
For t = 1 To 5400
A=GetKey()
tor = LoadSound("tooor.wav")

SetFont font2
If A=103 Then
 Rect 70,210,130,20
 Rect 70,90,130,20
 Rect 70,120,20,80
 Rect 180,120,20,80
 Rect 1000,60,10,45
 Rect 1110,60,10,45
 Rect 1000,50,120,10
 Oval 1120,200,30,30
 Oval 1120,200,30,30
 Oval 1118,198,30,30
 Oval 1000,100,30,30
 PlaySound tor
 Text 100,250, "Die Gastmannschaft hat ein Tor geschossen"
EndIf


If A=104 Then
 Rect 570,210,130,20
 Rect 570,90,130,20
 Rect 570,120,20,80
 Rect 680,120,20,80
 PlaySound tor
 Text 100,250, "Die Heimmannschaft hat ein Tor geschossen"
EndIf



SetFont font1
falsch = LoadSound ("tooor.wav")
If A=103 Then x=x+1;G
If A=104 Then y=y+1;H
If A=116 Then x=x-1;T
If A=116 Then PlaySound falsch
If A=122 Then y=Y-1;Z
If A=122 Then PlaySound falsch
SetFont font1                              ; der geladene Font kommt zum Einsatz
Text 100,100,x                       
Text 350,100,":"                           ; Text funktioniert wie Print+Locate
Text 600,100,y







Flip
Delay 1000
Cls
Repeat
Return
Forever
Next

ozzi789

BeitragMo, März 10, 2008 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Wen ich etwas bemerken darf.

Vergiss diesen Code lies ein Tutorial durch http://www.robsite.de/bbkurs2/index.htm

Und dan versuch es von neuem, sei jetz einfach ned entäuscht das kommt schon noch Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

SNIPER

BeitragMo, März 10, 2008 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm des geht aber net weil ich dieses thma in der schule habe
könnt ihr mir vllt sagen was an dem code falsch ist bitte. thx

ShadowJumper

BeitragMo, März 10, 2008 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
was ich bisher vermisse: ein Hinweis auf Funktionen...

nach wenigem Suchen: http://www.robsite.de/bbkurs2/...ruktur.htm
da steht neben Goto und Gosub etwas über Funktionen (Functions)
du solltest diese bevorzugt nehmen und auf Goto und Gosub gänzlch verzichten

wie schon gesagt ist es nicht möglich etwas gleichzeitig laufen zu lassen
selbst wenn man eine Sprache nutzt, die Threads unterstützt muss man das Programm unter einem PC mit min. 2-Kern-Prozessor ausführen (solche können nunmal mehrere Dinge gleichzeitig machen, wie viele ist von der Anzahl der Kerne abhängig), weil es sonst (genaugenommen) nicht gleichzeitig ist
das, was euer Lehrer eher will, ist, dass ihr ihm etwas liefert, wo man meinen kann, dass es zeitgleich abläuft (was aber in wirklichkeit nur nacheinander läuft)

Edit:
auf was für einer Schule bist du eigentlich?

Edit2:
ui, BladeRunner hats schonma angesprochen... ^^
Bilder kostenlos hosten
lest und weint:
RAM - 512 MB; GrafikRAM - 32 MB; CPU - 800 MHz
Ps: ... und weint (vor lachen)

BladeRunner

Moderator

BeitragMo, März 10, 2008 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
was ich bisher vermisse: ein Hinweis auf Funktionen...


*hust* https://www.blitzforum.de/foru...904#287904 *hust*

Wenn euer Lehrer nicht mehr Grundlagen vermittelt darf er sich nicht wundern wenn es nicht funktioniert.
Und ich kann nur zustimmen: ihr solltet ganz von vorne beginnen, der Code ist so nicht wirklich zu gebrauchen. Euch mangelt es massiv an Grundwissen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ShadowJumper

BeitragMo, März 10, 2008 20:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ShadowJumper hat Folgendes geschrieben:
Edit2:
ui, BladeRunner hats schonma angesprochen... ^^

xP
oder sag deinem Lehrer mal, dass er unter folgender Telefonnummer anrufen soll, um sich n Ohr abkauen zu lassen

Nummer: +49 xxxxx/xxxxx (ausgeblendet, dahe Sessionid abgelaufen^^)
Bilder kostenlos hosten
lest und weint:
RAM - 512 MB; GrafikRAM - 32 MB; CPU - 800 MHz
Ps: ... und weint (vor lachen)

The_Nici

BeitragMo, März 10, 2008 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
SNIPER hat Folgendes geschrieben:
hmm des geht aber net weil ich dieses thma in der schule habe
könnt ihr mir vllt sagen was an dem code falsch ist bitte. thx


Und weil du das Thema in der Schule hast darfst du kein Robsite lesen? ouch.

skey-z

BeitragMo, März 10, 2008 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich wollte ich hier nichts mehr schreiben, da ich denke, dass es sowieso alles nur Zeitverschwendung ist, aber gut, ein letztes mal erbarme ich mich noch.

Dein Lernerfolg seit deinem ersten Post scheint gleich Null zu sein.

du rufst die Zeit ab und startest dann die schleife, wo du auch wieder die Zeit abfragst und mit der Startzeit vergleichst.
Soweit ist es alles gut.

Bis auf die Tatsache, dass die Fensterauflösung total fürn Arsch ist. nimm ne maximale breite von 1280, das sollten heutzutage min. 80% aller hier aktiven User darstellen können. Die Höhe kannst du ja dann anpassen, wie du es brauchst, aber nicht höher als 1024.

In der schleife willst du einen Text darstellen, da du Setbuffer Backbuffer eingestellt hast, schreibt er diesen auch auf den Backbuffer(welcher ohne weiteres ja nicht zu sehen ist, da er auf der Rückseite von dem Blatt gezeichnet wird).

Wo ist das Flip in der Schleife, um den Backbuffer zum Frontbuffer(sichtbar auf dem Bildschirm) zu machen?

Danach folgen noch irgendwelche anweisungen, die aber erst nach beendigung der Schleife aufgerufen werden, entweder musts du Sie in der schleife mit gosub oder Function aufrufen, damit diese in der Schleife abgearbeitet werden.

Und was ist das bitte für ein Konstrukt am Ende des Codes
Code: [AUSKLAPPEN]

Flip
Delay 1000
Cls
Repeat
Return
Forever
Next


Du Flipst die Buffer, ok, du hast irgendwo vorher eine For/Next schleife angefangen, die von 1 bis 5400 zählt, dazu habe ich dir schon zig mal abgeraten, da es so nicht funktionieren wird.
Was soll Repeat/Return/Forever dort, das hat in der Schleife nichts zu suchen und macht garnnichts.

Fange nochmal ganz von vorne an, mit den ganzen Tipps die du hier schon bekommen hast.

ansonsten kannst du von mir keine Hilfe mehr erwarten, da du sie konsequent ignorierst.
Wir wollen dir ja nichts böses, aber irgendwann ist unsere Gedult auch mal am Ende
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

nils2771989

BeitragMo, März 10, 2008 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja...dann versuch ich´s mal Razz

Vlt wird Dein Lernerfolg nicht allzu groß sein, aber von dem, was man bisher so gesehen hat, wirst Du danach wohl eh nicht viel programmieren....(sry, wenn das jetzt ein bisschen zu direkt ist)

Also:

Zuerst zum Beginn:

Code: [AUSKLAPPEN]


Graphics 1420,300
ClsColor 0,0,0
Color 23,26,87

schrift = LoadFont("calibri",120,1)
SetFont schrift

start = MilliSecs()
SetBuffer BackBuffer()


an sich ist das schon mal richtig, bis auf die Auflösung(die wie schon erwähnt recht abnormal ist, guck einfach nur mal im I-net, was die Standartauflösungen sind)...

Die For/Next Schleife ist total falsch....besonders das loadsound...d.h der sound "tooooor"
wird 5400 mal geladen...-> overkill für den Arbeitsspeicher...das muss auch vor die Schleife NICHT in die Schleife...und loadsound bedeutet nicht gleich, dass der sound abgespielt wird, da musst du den Befehl herraussuchen, mit dem ein Sound abgespielt wird, der vorher >>>1<<<mal geladen wurde

Die "Repeat"..."Until" kann so nicht gehen, zumindest nicht so, wie Du das willst.

Also erstens, du benutzt einen Backbuffer, dass heißt, dass alles, was auf dem Bildschirm geschrieben wird, erst (sozusagen) auf der Rückseite des Monitors geschrieben wird, erst mir dem dem Befehl "Flip" wird es dann für einen sichtbar.
Den Befehl benutzt du zwar, aber nicht an der richtigen Stelle. Er muss am Ende der "Repeat"/"Until" Schleife stehe, nicht am Ende des ganzen Programms, das bringt nichts.

Die "Repeat"/"Until" Schleife bedeutet, dass der PC solange von "Until" zu "Repeat" springt und die Befehle, die dazwischenstehen aufführt, bis die Bedingung von "Until" erfüllt ist, in diesem Fall der Druck der Esc-Taste.
Da das "Flip" bei dir nach der Schleife steht, kannst du nichts sehen, da der PC nicht den Befehl ausführt.

Alle Befehle, die nach der "Repeat"/"Until" -Schleife stehen, werden also defacto erst ausgeführt, nachdem der PC nich mehr in der Schleife ist.

Übrigens die beiden Loadfont Befehle für Font1 und Font2 müssen auch vor der "Repeat"/"Until" Schleife gesetzt werden.

Dafür hat man die "Function","Goto" und "Gosub" Befehle, wenn einer dieser Befehle in der Schleife ausgeführt wird, dann springt der PC aus der Schleife raus zu der angegebenen Marke...z.b ".Ablauf1"
und kehrt dann , wenn er zu return gelangt wieder in die Schleife zurück

einfacher ist da aber "Function"

geht eigentlich fast wie "if" und "endif". Am Anfang setzt Du
Code: [AUSKLAPPEN]

Function irgenteinfunctionsname()
mache dies
mache das
mache jenes

end function

wenn du das hast, dann kannst Du diese einfach mit dem namen der Funtion in der Schleife aufrufen...hier währe das dann "irgenteinfunctionsname()"

dass sähe dann im code so aus:

Code: [AUSKLAPPEN]

repeat

dingsda()

until keyhit(1)

function dingsda()
mache ein paar Sachen

end function


Den rest mit:

Flip
Delay 1000
Cls
Repeat
Return
Forever
Next

kannst du, wie schon gesagt wurde weglassen, da sie absolut sinnfrei sind und im Endeffekt Nichts machen.

Die Zeitanzeige ist auch nicht richtig, erstens werden die Millisekunden in der ersten Sekunde falsch angezeigt und der Sekundenzähler geht bei 60 Sec nicht wieder auf Null zurück.
Da musst Du noch mit einfügen dass die Anzahl der Min*60 von der Sekundenzahl abgezogen wird.
Schummle nicht, aber spiele nach eigenen Regeln.
Sei nicht verrückt, sondern einfach nur wahnsinnig.
Sei nicht böse, führ nur nichts Gutes im Schilde.
Verändere dich nicht, bleib immer anders.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group