Seite 2 von 4

Verfasst: 15.06.2009 19:31
von Kumpu
Da das ja geklärt wäre: Könnt ihr erkennen warum die Kanone nicht angezeigt wird?

Verfasst: 15.06.2009 19:34
von KeyKon
Also wenn ich ganz ehrlich bin, ich blick bei deinem Code nich so recht durch, unkompliziert Testen kann ihn auch niemand ohne Grafiken...

Und allein die Tatsache das du bei einem solch simplen Prog einen Thread verwendest bringt mich leicht ins grübeln...

Verfasst: 15.06.2009 19:45
von Kumpu
Naja, wenn ich das recht verstanden habe ist ein Threat ein internes nebenher laufundes Unterprogramm (ich hoffe wirklich es ist so^^). Je länger ich drüber nachdenke desto mehr denke ich ich sollte den Winkel direkt in der Hauptroutine berechnen... Aber eigl sollte das ja trotzdem funktionieren.

Verfasst: 15.06.2009 20:00
von Fluid Byte
Kumpu hat geschrieben:Naja, wenn ich das recht verstanden habe ist ein Threat ein internes nebenher laufundes Unterprogramm (ich hoffe wirklich es ist so^^). Je länger ich drüber nachdenke desto mehr denke ich ich sollte den Winkel direkt in der Hauptroutine berechnen...
Thread, nicht Threat. Threat bedeutet übersetzt "Bedrohung". <)
Kumpu hat geschrieben:Aber eigl sollte das ja trotzdem funktionieren.
Keineswegs. Threads sind eine komplexe Sache die meist mehr Probleme als Abhilfe schaffen. Sofern du nicht genau weißt was du tust bzw. es keine Alternativen gibt solltest du die Finger davon lassen.

Verfasst: 15.06.2009 20:28
von Kaeru Gaman
also, es ist sehr schwierig diesen code zu lesen.
eine oder zwei kurze einrückungen sind die ausnahme, da fehlt jegliche übersicht.

mir kommt das so vor, als wenn du zwei repeats in deiner Proc aufmachst,
aber nur ein Until drin hast... aber dann müßte er ja auch nen Error melden...
also, man sieht wirklich so wenig wie bei nebel.
das da ein Goto drin ist fällt auf... also, würde ich ganz rausnehmen!

du hast da ne menge ExamineKeyboard drin, da solltest du nur eines von nehmen.
und das ganze etwas klarer anordnen, besser strukturieren.

... und ja, am besten ohne Thread lösen, gibt keine Veranlassung dazu, einen zu verwenden.

Verfasst: 15.06.2009 22:26
von Vermilion
Manche Leute haben einen Schreibstil, da fragt man sich, ob die das überhaupt selber lesen können. /:-> :wink:

Verfasst: 16.06.2009 16:20
von Kumpu
Quelltexte ohne Absätze bin ich von Casio Basic gewöhnt :)
Also, hier ist der Code mit mehr Übersicht und einer (nicht funktionierenden) Kanone in der Hauptschleife.

Code: Alles auswählen

MP = MessageRequester("WasDuWolle?", "2-Spieler", #PB_MessageRequester_YesNo)
MP = MP - 5
If MP = 1
 MessageRequester("Achtung:", "Steuerung Spieler 2: Keypad 8 & 2", 0)
EndIf
If InitSprite() = 0
 MessageRequester("!", "Fehler beim Sprite-Initialisieren^^", 0)
 End
EndIf
If OpenScreen(640, 480, 16, "Paddle") = 0
 MessageRequester("!", "Fehler beim Screen-Loaden^^", 0)
 End
EndIf
Speed = 5
CatchSprite(0, ?Paddle)
CatchSprite(1, ?Ball)
CatchSprite(2, ?Kanone,#PB_Sprite_Texture)
InitSprite3D()
CreateSprite3D(0,2)
ShowPaddle2=1
ShowPaddle1=1
quadrat = 0 
x_Ball = 30
y_Ball = 10
End=0
Waagerecht_Ball = 1
Senkrecht_Ball = 1
Paddle_1 = 200
Paddle_2 = 200
Hs = 0
Start=0
If InitSound() = 0
 MessageRequester("!!!", "Der Sound konnte nicht geladen werden! Was soll denn das???", 0)
 End
EndIf
CatchSound(0, ?Sound)
If InitKeyboard() = 0
 MessageRequester("!", "Fehler beim Keyboard-Initialisieren^^", 0)
 End
EndIf

Repeat
Delay(60)
x_Ball = x_Ball + (Waagerecht_Ball * Speed)
y_Ball = y_Ball + Senkrecht_Ball

ExamineKeyboard()

If KeyboardPushed(#PB_Key_Up) And Paddle_1 > 1
 Paddle_1 = Paddle_1 - 10
EndIf
If KeyboardPushed(#PB_Key_Down) And Paddle_1 < 430
 Paddle_1 = Paddle_1 + 10
EndIf

If y_Ball < 2 Or y_Ball > 449
 Senkrecht_Ball = Senkrecht_Ball - (2 * Senkrecht_Ball)
EndIf

ClearScreen(0,0,0)
If ShowPaddle1=1
 DisplaySprite(0, 1, Paddle_1)
EndIf
If ShowPaddle2=1
 DisplaySprite(0, 625, Paddle_2)
EndIf
DisplaySprite(1, x_Ball, y_Ball)

If Start=1
 If Waagerecht_Ball=1
  ShowPaddle2=0
  Gun_x=620
 Else
  ShowPaddle1=0
  Gun_x=1
 EndIf
 If Waagerecht_Ball=1
  If y_Ball>paddle_2
   quadrat=4
  Else
   quadrat=3
  EndIf
 Else
  If y_Ball>paddle_1
   quadrat=2
  Else
   quadrat=1
  EndIf
 EndIf
 If Waagerecht_Ball=1
  Gun_y=Paddle_2
  GK=Abs(y_ball-paddle_2)
  AK=Abs(x_ball-625)   
 Else
  Gun_y=Paddle_1
  GK=Abs(y_ball-paddle_1)
  AK=Abs(x_ball-1) 
 EndIf
 Winkel=ATan(GK/AK)
 If Showgun=0
 ShowGun=1
 EndIf
 End=End+1
 If End=200
  End=0
  Start=0
  ShowPaddle1=1
  ShowPaddle2=1
  Waagerecht_Ball*-1=Waagerecht_Ball
 EndIf
 Start3D()
 RotateSprite3D(0, (360-quadrat*90+Winkel),0)
 DisplaySprite3D(0, Gun_x,Gun_y)
 Stop3D()
EndIf

FlipBuffers()

If MP = 2
 If Waagerecht_Ball = 1
  If Paddle_2+20 > y_Ball
   Paddle_2 = Paddle_2 - 3
  EndIf
  If Paddle_2+20 < y_Ball
   Paddle_2 = Paddle_2 + 3
  EndIf
 EndIf
EndIf

If Mp = 1
 If KeyboardPushed(#PB_Key_Pad8) And Paddle_2 > 1
 Paddle_2 = Paddle_2 - 10
 EndIf
 If KeyboardPushed(#PB_Key_Pad2) And Paddle_2 < 430
 Paddle_2 = Paddle_2 + 10
 EndIf
EndIf

If x_Ball < 21 
 If Paddle_1 + 49 > y_Ball And Paddle_1 < y_Ball + 20
  Waagerecht_Ball = Waagerecht_Ball - (2 * Waagerecht_Ball)
  Speed = Speed + 1
  PlaySound(0)
  If MP = 2
   HS = HS + 100
  EndIf
 Else
  CloseScreen()
  If MP = 2
  MessageRequester("=(", "Verloren... "+Str(HS)+" Punkte", 0)
  Else 
  MessageRequester("={", "Spieler 2 gewinnt!!!!!", 0)
  EndIf
  End
 EndIf
EndIf

If x_Ball > 600 
 If Paddle_2 + 49 > y_Ball And Paddle_2 < y_Ball+20
  Waagerecht_Ball = Waagerecht_Ball - (2 * Waagerecht_Ball)
  Speed = Speed + 1
  PlaySound(0)
 Else
  CloseScreen()
  If Mp = 2
  MessageRequester("=)", "Gewonnen!!!... "+Str(HS)+" Punkte", 0)
  Else 
  MessageRequester("={", "Spieler 1 gewinnt!!!!!", 0)
  EndIf
  End
 EndIf
EndIf

If KeyboardPushed(#PB_Key_Escape)
 CloseScreen()
 MessageRequester("Ciaobella^^", "Auf Wiedersehen geehrter Spieler!", 0)
 End
EndIf
If KeyboardPushed(#PB_key_Add)
 Speed = Speed +1
EndIf
If KeyboardPushed(#PB_Key_PadEnter)
 Senkrecht_Ball+1
EndIf
If KeyboardPushed(#PB_Key_C)
 MessageRequester("Hallöle", "C) David F^^ Cool wa?", 0)
EndIf

If Int(Random(100))>60 And Start=0
 If Waagerecht_Ball=1 And x_Ball<400 And Speed<15 Or Waagerecht_Ball=-1 And x_Ball>150 And Speed<15
 Start=1
 EndIf
EndIf

ForEver

Paddle:
 IncludeBinary "paddle.bmp"
Ball:
 IncludeBinary "ball.bmp"
Sound:
 IncludeBinary "chop.wav"
Kanone:
 IncludeBinary "gun.bmp"
Netterweise zeigt das Programm die Kanone immer nur an der linken Seite an, wie gesagt, die Drehung funktioniert auch nicht...
Hier sind die verwendeten Bilder:
paddle- http://img19.imageshack.us/img19/6885/paddle.png
ball- http://img87.imageshack.us/img87/1738/balld.png
kanone- http://img230.imageshack.us/img230/680/gunu.png

Verfasst: 16.06.2009 16:38
von Kaeru Gaman
---------------------------
PureBasic
---------------------------
Line 26: Syntax error.
---------------------------
OK
---------------------------

Code: Alles auswählen

End=0
/:->

Verfasst: 16.06.2009 16:50
von Fluid Byte
=)

Verfasst: 16.06.2009 17:10
von Kumpu
Was ist den falsch an linie 26?? Darf End etwa nicht 0 sein?
End=0
Außerdem ist Linie 26 "Waagerecht_Ball = 1"...