Tan/ATan

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kumpu
Beiträge: 27
Registriert: 13.06.2009 16:07
Computerausstattung: Windows 7 Home Premium 64Bit
PB V4.3
Kontaktdaten:

Beitrag von Kumpu »

Da das ja geklärt wäre: Könnt ihr erkennen warum die Kanone nicht angezeigt wird?
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Benutzeravatar
Kumpu
Beiträge: 27
Registriert: 13.06.2009 16:07
Computerausstattung: Windows 7 Home Premium 64Bit
PB V4.3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

Manche Leute haben einen Schreibstil, da fragt man sich, ob die das überhaupt selber lesen können. /:-> :wink:
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Kumpu
Beiträge: 27
Registriert: 13.06.2009 16:07
Computerausstattung: Windows 7 Home Premium 64Bit
PB V4.3
Kontaktdaten:

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

---------------------------
PureBasic
---------------------------
Line 26: Syntax error.
---------------------------
OK
---------------------------

Code: Alles auswählen

End=0
/:->
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

=)
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kumpu
Beiträge: 27
Registriert: 13.06.2009 16:07
Computerausstattung: Windows 7 Home Premium 64Bit
PB V4.3
Kontaktdaten:

Beitrag 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"...
Antworten