Aktuelle Zeit: 23.05.2013 05:08

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit Linked List
BeitragVerfasst: 03.01.2010 18:14 
Offline

Registriert: 30.12.2009 19:20
Hallo
Ich habe mal begonnen eine Art Tetris-Klon zu programmieren bin aber gleich am Anfang auf ein Problem gestoßen.
Zuerst klappt alles ganz normal, der Klotz bewegt sich nach unten, bis er unten angekommen ist und bleibt dort stehen, wenn aber dann ein neuer Klotz entstehen soll entstehen statt einem gleich unendlich viele neue Klötze, jedenfalls entsteht ein roter "Batzen" der immer länger wird, je weiter er sich nach unten bewegt.

Hier ist der Code:

Code:
Structure brick
  PosX.l
  PosY.l
  Speed.l
  Stuck.l
EndStructure

Global NewList Brick.brick()

Procedure NewBrick(PosX,PosY,Speed,Stuck)
  AddElement(Brick())
  Brick()\PosX = PosX
  Brick()\PosY = PosY
  Brick()\Speed = Speed
  Brick()\Stuck = Stuck
EndProcedure

Global delay

InitSprite()
InitKeyboard()

OpenScreen(800,600,32,"Tetris")

Repeat
  ExamineKeyboard()
  ClearScreen(RGB(255,255,255))
   
  If delay = 0
    NewBrick(200,0,1,0)
    delay = 1
  EndIf
   
  Gosub display

  FlipBuffers()
 
  If KeyboardPushed(1)
    End
  EndIf 

Until KeyboardPushed(1)

display:
  StartDrawing(ScreenOutput())
 
  ResetList(Brick())
  While NextElement(Brick())
    ;Display
    Box(Brick()\PosX,Brick()\PosY,50,20,RGB(255,0,0))   
    ;Movement down
    If Brick()\Stuck = 0
      Brick()\PosY + Brick()\Speed
    EndIf
    If Brick()\PosY = 580
      Brick()\Stuck = 1
      delay = 0
    EndIf 
  ;Movement Left\Right
    If KeyboardPushed(#PB_Key_Right) And Brick()\Stuck = 0
      Brick()\PosX + 2
    ElseIf KeyboardPushed(#PB_Key_Left) And Brick()\Stuck = 0
      Brick()\PosX - 2
    EndIf   
  Wend   
 
  StopDrawing()   

Return


Vielleicht kann mir ja jemand sagen was ich falsch gemacht habe...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Linked List
BeitragVerfasst: 03.01.2010 18:59 
Offline

Registriert: 11.06.2007 12:55
aus:
Code:
    If Brick()\Stuck = 0
      Brick()\PosY + Brick()\Speed
    EndIf
    If Brick()\PosY = 580
      Brick()\Stuck = 1
      delay = 0
    EndIf

muss
Code:
   If Brick()\Stuck = 0
      Brick()\PosY + Brick()\Speed
      If Brick()\PosY = 580
        Brick()\Stuck = 1
        delay = 0
      EndIf
  EndIf

werden weil er sonst wenn das Teil ankommt, und Stuck=1 ist, auch noch das delay auf 0 zurücksetz


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Linked List
BeitragVerfasst: 03.01.2010 19:00 
Offline
Benutzeravatar

Registriert: 01.08.2007 14:28
Du prüfst, ob ein Stein unten angekommen ist, um dann den "delay switch" umzulegen. Soweit so gut. Nun prüfst du aber immer ob irgendein Stein unten angekommen ist und die Bedingung ist immer Wahr, wenn ersteinmal ein Stein unten angekommen ist.
Also müsstest du einen bereits platzierten Stein markieren, sodass dieser nichtmehr daraufhin geprüft wird, ob er so langsam mal unten ist (denn das ist er ja bereits)

_________________
pb 4.51


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Problem mit Linked List
BeitragVerfasst: 03.01.2010 19:15 
Offline

Registriert: 30.12.2009 19:20
Ah, OK Vielen Dank.
Die logischen Fehler sind immer die schlimmsten...


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye