probs mit schiess richtung

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

f-code

Betreff: probs mit schiess richtung

BeitragSa, Nov 06, 2004 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich lerne zur Zeit BBplus mit de hilfe des buches "jetzt lerne ich spieleprog mit bb" von rené meyer. Das buch erklärt sich eigentlich wie von selbst, und die sprache ist im gegensatz zu c++ auch einfacher. Sicherlich kommt es auch einfacher rüber weill Meyer alles gut erklärt.

Bis jetzt. Ich studiere nämlich schon lange am quellcode vom space shooter das er im buch als einfach bezeichnet. Es ist eigentlich nicht so kompliziert aber ich würde gerne den quellcode komplett verändern denn so verstehe ich besser was ich mache und was dort steht. Im shooter von Meyer schiesst das raumschiff die racketen nach oben. Der quellcode sieht so aus (laut buch)

Code: [AUSKLAPPEN]

; Schuß-Test
  If KeyHit(57) Then
  Schuss = Schuss + 1
  If Schuss = 101 Then Schuss = 1
  Rak(Schuss,0) = 1
  Rak(Schuss,1) = X+10
  Rak(Schuss,2) = Y-19
  PlaySound(schusston)
 EndIf

; ggf. Raketen zeichnen
 For I=1 To 100
  If Rak(I,0) = 1 Then
   DrawImage rakete, Rak(I,1), Rak(I,2)
   Rak(I,2) = Rak(I,2) - 10
  EndIf
 Next


ich möchte das mein raumschiff aber nach rechts schiesst. Der hintergrund konnte ich durch ein kleines vertuschen von 2 variablen dazu bringen nch links zu scrollen anstatt von oben nch unten.
Habe das gleiche (so in etwa) auch bei den racketen versucht. Jedoch kommen zum teil fehlermeldungen weill ich dann us dem Feld Rak(100,2) gehe.

Könnte mir jemand den oben erwähnten code beispiel vielleicht ein wenig besser erklären? Nicht umbedingt gleich die lösung sagen aber vielleicht so erklären das ich dan weiss welche variablen veratwortlich sind für die richtung die die rackete geht.

Danke im voraus.

Die rackete ist eine einfache bmp datei.

BladeRunner

Moderator

BeitragSa, Nov 06, 2004 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit Dim rak(100,2) wird ein Feld angelegt.
Es hat 101*3 Zellen (da Felder ja bei 0 beginnen).
Die erste Zahl in diesem feld ist die Indexnummer für die Rakete, d.h. Du kannst maximal 101 Raketen gleichzeitig abgefeuert haben.
Die Zweite Zahl ist ein Index auf verschiedene Eigenschaften der Rakete:
zB:
Code: [AUSKLAPPEN]
rak(5,0)=1

rak(5,1)=500

rak(5,2)=300

Die fünf ist wiegesagt die Nummer der Rakete.
rak (5,0) enthält dann eine Info ob die Rakete existiert (gefeuert wurde). Wenn 0 drin steht, heisst das nein, wenn 1 steht ja.
Rak (5,1) gibt die X-Koordinate der Rakete an und rak(5,2) die ykoordinate.

Das Beispiel oben sagt dem Computer also: Rakete 6 (Arrays beginnen bei null Wink) wurde abgefeuert und ihre Position ist 500x/300y.

Diese Festlegungen sind natürlich willkürlich- du als Programmierer entscheidest welche Zelle deines Dimfeldes welche Information enthält.

Um nun die Rakete von links nach rechts fliegen zu lassen musst du die x-Koordinate der Rakete verändern (anstatt der y-koord. bislang)

Hoffe das war verständlich.

Nebenbei würde ich empfehlen das Ganze mit types zu machen da sie wesentlich flexibler sind. aber wenn du ja mit RMs Buch lernen willst (welches nicht schlecht ist) denke ich versuch erstmal das Ganze mit den Dims in den Griff zu kriegen.
Good luck.
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

f-code

BeitragSa, Nov 06, 2004 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked wow!

Vielen Dank! mal schauen wie schnell ich das ganze nun zu 100% kapiere. Aber super erklärt! Aber was sind types?

Danke ber für die schnelle hilfe!
 

David

BeitragSa, Nov 06, 2004 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Steht alles in der Onlinehilfe, die standardgemäß bei Blitz mitgeliefert wird! Wink

grüße
http://bl4ckd0g.funpic.de

Hubsi

BeitragSa, Nov 06, 2004 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Types sind einmal verstanden eine wunderbare Sache. Gerade für Schüsse und so Zeugs bei denen die Anzahl der Objekte nicht bekannt ist und/oder ständig variiert. Aussehen könnte das ganze so:
Code: [AUSKLAPPEN]
; Das Typefeld anlegen
Type shoot
 Field x,y
End Type

; Hauptschleife
Repeat

If KeyHit(schiessen) ; Eintrag für Schuss erstellen
 variable.shoot = New shoot
 variable\x = start_pos_x
 variable\y = start_pos_y
 ; Hinweis: Die Variable 'variable' kann für nichts anderes mehr verwendet werden
EndIf

For variable.shoot = Each shoot ; Alle vorhandenen Einträge durchgehen
 DrawImage schussbild , variable\x , variable\y ; Schuss malen
 variable\x = variable\x + 10
 If variable\x > 800 ; Wenn Schuss den Bildschirm verlässt
  Delete variable.shoot ; wird er gelöscht
 EndIf
Next

Until KeyHit(1) ; Jo, das waren auch schon die wichtigsten Befehle
Der Code ist ungetestet, sollte aber schon funzen.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuche es jetzt mal trotzdem mit dim. Auch wenn type scherlich auch gut klingt. Aber jetzt häte ich da noch ne frage. Möchte da nicht noch 1000 threadds aufmachen. Ich verstehe nämlich nicht wieso mir der compiler immer die fehlermeldung 'until' without 'repeat' anzeigt .

Code: [AUSKLAPPEN]
Repeat
Cls

LoopSound music
PlaySound music

MaskImage player, 255,253,233



Dim Rak(100,2)
x = 305
y = 420

 
Cls
h = h-2
TileImage hinter,h,0
DrawImage player, x,y

;steuerung:::::::::::::::::
x=MouseX()
y=MouseY()
waffe = 0
If KeyHit(31) Then waffe = +2
If KeyHit(30) Then waffe = +1


; schuss:::::::::::::::::::::::::::::::::::::::::::
If GetMouse ()= 1 Then

   schuss = schuss +1
   If schuss = 100 Then schuss = 1
   Rak(schuss,0) = 1
   Rak(schuss,1) = x+60
   Rak(schuss,2) = y+20
   

EndIf


; Schuss zeichnen::::::::::::::::::::::::::::::::::::::


   If waffe = 1 Then
         For I=1 To 100
           If Rak(I,0) = 1 Then
            DrawImage rakete, Rak(I,1), Rak(I,2)
            Rak(I,1) = Rak(I,1) + 10

   ElseIf waffe = 2 Then
         For I=1 To 100
           If Rak(I,0) = 1 Then
            DrawImage rakete2, Rak(I,1), Rak(I,2)
            Rak(I,1) = Rak(I,1) + 10
   

 EndIf
 Next




; rand::::::::::::::::::::::::::::::::::::::::::::
If x<0 Then x=0
If x>985 Then x = 985
If y<0 Then y=0
If y>675 Then y=675



Flip

Until KeyDown(1)

BladeRunner

Moderator

BeitragSo, Nov 07, 2004 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du so eine Fehlermeldung erhälst ist in 99% der Fälle ein For..next oder in if..endif nicht korrekt abgeschlossen worden.

Bei dir ist nun 2 * for angefangen (ohne ein next, dass hast du nach dem endif. Vermute dass du beide forschleifen damit abschliessen wolltest. das geht so aber nicht.).
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

Hubsi

BeitragSo, Nov 07, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
LoopSound music ; Das hier
PlaySound music

MaskImage player, 255,253,233



Dim Rak(100,2) ; bis hierhin hat nichts in der Schleife zu suchen
x = 305 ; Das hier vermutlich auch nicht
y = 420
Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 19:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Tatsächlich hubsi! Du hattest recht. Aber nun werden die grafiken komischerweise falsch dargestelt. Als wären sie verwischt wenn sie sich bewegen. Sieht zwar toll aus aber war nicht geplannt. Als Programmierer hats man ja wirklich schwer leute. So viele probleme auf einmal. Jetzt verstehe ich endlich warum Duke nukem forever noch nicht fertig gestellt wurde. Very Happy

Hubsi

BeitragSo, Nov 07, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich danach an als hättest Du kein Doublebuffering initialisiert. Versuch mal Code: [AUSKLAPPEN]
Graphics 1024,768,16,1
SetBuffer BackBuffer()
ganz an den Anfang Deines Codes. Ansonsten kann ich keinen Fehler mehr entdecken. Wenns damit nicht funktioniert poste mal den ganzen Code.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

;-----------------------------------------------------------------------------------------------------
;Space Alpha :: coded by Fortuna :: www.f-code.ch
;-----------------------------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------------------------
;loadings
;-----------------------------------------------------------------------------------------------------

Graphics 1024, 768,16,1
SetBuffer BackBuffer()

font   = LoadFont("Neuropol",35,1,0,0)

hinter = LoadImage("gfx\star.jpg")
player = LoadImage("gfx\player.bmp")
rakete = LoadImage("gfx\shot.bmp")
rakete2= LoadImage("gfx\shot2.bmp")
music  = LoadSound("music.mp3")


;-----------------------------------------------------------------------------------------------------
;vorspann
;-----------------------------------------------------------------------------------------------------
Cls
SetFont font
Text 512,384, "SPACE  ALPHA  ONE  ::  DEMO",1,1
Flip
Delay 4000
Cls
Text 512,384, "CODED BY IVO ALEXANDER ROSA",1,1
Flip
Delay 2000
Cls
Text 512,384, "special thx to SoH Clan for testing",1,1
Flip
Delay 2000

Goto engine



;-----------------------------------------------------------------------------------------------------
; engine
;-----------------------------------------------------------------------------------------------------

.engine

Cls

LoopSound music
PlaySound music

MaskImage player, 255,253,233



Dim Rak(100,2)
x = 305
y = 420

 
Cls
Repeat
h = h-2
TileImage hinter,h,0
DrawImage player, x,y

;steuerung::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
x=MouseX()
y=MouseY()
Local waffe = 1
If KeyHit(31) Then waffe = 2
If KeyHit(30) Then waffe = 1


; schuss::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If GetMouse ()= 1 Then

   schuss = schuss +1
   If schuss = 100 Then schuss = 1
   Rak(schuss,0) = 1
   Rak(schuss,1) = x+60
   Rak(schuss,2) = y+20
   
   

EndIf



; Schuss zeichnen:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


   
         For I=1 To 100
           If Rak(I,0) = 1 Then
         Select waffe
               Case 1 DrawImage rakete, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
            Case 2 DrawImage rakete2, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
         End Select
         EndIf
         Next 

; rand::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If x<0 Then x=0
If x>985 Then x = 985
If y<0 Then y=0
If y>675 Then y=675



Flip

Until KeyDown(1)


Das Problem besteht leider immer noch. usserdem scheint das affenwechsel nicht zu funktionieren. Ausser ich betätige die s taste während ich schiesse.

Hubsi

BeitragSo, Nov 07, 2004 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Das hier:Code: [AUSKLAPPEN]
Cls
Repeat
sollte wohl so aussehen:Code: [AUSKLAPPEN]
Repeat
Cls
Das Goto engine ist übrigens auch für die Katz Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
I weiss. Ich möchte eben danach noch n menu machen. Habe deshalb schon mal das geschrieben da das menu noch nicht steht und ich das programm oft teste. aber danke für den tip! Wink

f-code

BeitragSo, Nov 07, 2004 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Lol! Du bist gut! Fehler behoben. Das Bild wurde j nie gelöscht. War es deswegen? Aber was kannst du mir für das waffenwechsel empfehlen? funzt einfach nicht.

Hubsi

BeitragSo, Nov 07, 2004 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mir nicht alles angeschaut, aber wenn Du dasCode: [AUSKLAPPEN]
Local waffe = 1
in Deiner Hauptschleife hast, wirst Du auch nie eine andere Waffe als die 1 bekommen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieder überascht. Ich überlege das nächste mal noch 1000 mal mehr bevor ich etwas poste. Nur etwas: Wenn die racketen oder schüsse unterwegs sind und ich da die taste drücke um die waffe zu wechseln, wechseln die schüsse noch während dem flug ihre farbe. Dabei sollten sie die farbe erst nach dem tastendruck wechseln. Aber eigentlich sind dann all meine fragen schon beantwortet. Damit kann ich mich dem rest weiter widmen.

Hubsi

BeitragSo, Nov 07, 2004 22:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst einfach nur einen weiteren Parameter:Code: [AUSKLAPPEN]
Graphics 1024, 768,16,1
SetBuffer BackBuffer()

font   = LoadFont("Neuropol",35,1,0,0)

hinter = LoadImage("gfx\star.jpg")
player = LoadImage("gfx\player.bmp")
rakete = LoadImage("gfx\shot.bmp")
rakete2= LoadImage("gfx\shot2.bmp")
music  = LoadSound("music.mp3")


;-----------------------------------------------------------------------------------------------------
;vorspann
;-----------------------------------------------------------------------------------------------------
Cls
SetFont font
Text 512,384, "SPACE  ALPHA  ONE  ::  DEMO",1,1
Flip
Delay 4000
Cls
Text 512,384, "CODED BY IVO ALEXANDER ROSA",1,1
Flip
Delay 2000
Cls
Text 512,384, "special thx to SoH Clan for testing",1,1
Flip
Delay 2000

Goto engine



;-----------------------------------------------------------------------------------------------------
; engine
;-----------------------------------------------------------------------------------------------------

.engine

LoopSound music
PlaySound music

MaskImage player, 255,253,233



Dim Rak(100,3) ; geändert
x = 305
y = 420

Local waffe = 1
 
Repeat
Cls
h = h-2
TileImage hinter,h,0
DrawImage player, x,y

;steuerung::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
x=MouseX()
y=MouseY()
If KeyHit(31) Then waffe = 2
If KeyHit(30) Then waffe = 1


; schuss::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If GetMouse ()= 1 Then

   schuss = schuss +1
   If schuss = 100 Then schuss = 1
   Rak(schuss,0) = 1
   Rak(schuss,1) = x+60
   Rak(schuss,2) = y+20
   rak(schuss,3)=waffe ; eingefügt
   
   

EndIf



; Schuss zeichnen:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


   
         For I=1 To 100
           If Rak(I,0) = 1 Then
         Select rak(i,3) ; Hier geändert
               Case 1 DrawImage rakete, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
            Case 2 DrawImage rakete2, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
         End Select
         EndIf
         Next

; rand::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If x<0 Then x=0
If x>985 Then x = 985
If y<0 Then y=0
If y>675 Then y=675



Flip

Until KeyDown(1)
Die geänderten Stellen sind kommentiert.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

f-code

BeitragSo, Nov 07, 2004 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok! Es funzt und ich habe nun keine fragen mehr................... Aber wenn ich jetzt mit dem raumschiff los düse hat er keine waffe aktiviert bis ich eines der knöpfe drücke.

würde es etwas ändere wenn ich den code so ändere ?
Code: [AUSKLAPPEN]

If GetMouse ()= 1 Then

   schuss = schuss +1
   If schuss = 100 Then schuss = 1
   Rak(schuss,0) = 1
   Rak(schuss,1) = x+60
   Rak(schuss,2) = y+20
   Rak(schuss,3) = waffe +1

BladeRunner

Moderator

BeitragSo, Nov 07, 2004 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Weise waffe einfach vor der Hauptschleife einen Wert zu, dann hast du eine Startwaffe.
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

f-code

BeitragMo, Nov 15, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab da wieder n prob....... Laughing

Das Spiel läuft eigentlich wie es soll. Nur ein prob gibts. Als es noch keine gegner gab konnte man ohne weiteres schiessen und waffe ändern. Jetzt hbe ich da mal die gegner von meyer's buch (so in etwa) eingebunden und meinem spiel entsprechend verändert. Sie bewegen sich auch . Nur kommen sie nicht wieder wenn sie am linken rand vorbei sind. Und sobald ich den feuer knopf drücke kommt eine fehlermeldung " array index out of bound" oder ähnlich....... Was bedeutet das? Was ist falsch?

Code: [AUSKLAPPEN]


;-------------------------------------------------------------------
; engine
;-------------------------------------------------------------------



MaskImage player, 255,253,233
MaskImage explosion, 255,0,255
MaskImage alienbild,255,0,255


waffe = 1
Dim Rak(100,3)
Dim Alien(5,2)
Dim AlienExplodiert(5,1)
x = 305
y = 420

 
Repeat
Cls 
h = h-2
TileImage hinter,h,0
DrawImage player, x,y

;steuerung::::::::::::::::::::::::::::::::::::
x=MouseX()
y=MouseY()
If KeyHit(31) Then waffe = 1
If KeyHit(30) Then waffe = 2


; schuss::::::::::::::::::::::::::::::::::::::::::::::::::::::
If GetMouse ()= 1 Then

   schuss = schuss +1
   If schuss = 100 Then schuss = 1
   Rak(schuss,0) = 1
   Rak(schuss,1) = x+60
   Rak(schuss,2) = y+20
   Rak(schuss,3) = waffe
   
   

EndIf



; Schuss zeichnen:::::::::::::::::::::::::::::::::::::::::::::::::


   
         For I=1 To 100
           If Rak(I,0) = 1 Then
         Select Rak(I,3)
               Case 1 DrawImage rakete, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
            Case 2 DrawImage rakete2, Rak(I,1), Rak(I,2) Rak(I,1) = Rak(I,1) + 10
         End Select
         EndIf
         Next 

; gegner:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

; Kollision testen
 For I=1 To 100
  If Rak(I,0) <> 0 Then
   For J=1 To 6
    If ImagesOverlap(alienbild, Alien(J,1), Alien(J,2), rakete, Rak(I,2),Rak(I,1)) Then
     Alien(J,0) = -1
    EndIf
   Next
  EndIf
 Next

; Explosion Alien zeichnen
 For I=1 To 5
  If Alien(I,0) = -1 Then
   If AlienExplodiert(I,1) + 100 < MilliSecs() Then
    AlienExplodiert(I,0) = AlienExplodiert(I,0) + 1
    AlienExplodiert(I,1) = MilliSecs()

    If AlienExplodiert(I,0) = 6 Then
     AlienExplodiert(I,0) = 0
     AlienExplodiert(I,1) = 0
     Alien(I,0) = 0
    EndIf
   EndIf 
   DrawImage explosion, Alien(I,1), Alien(I,2), AlienExplodiert(I,0)
  EndIf
 Next

; Alien-Steuerung
 For I=1 To 5
  If Alien(I,0) = 0 Then
   Alien(I,0) = Rand(100,400)
   Alien(I,1) = Rand(+1000,0)
   Alien(I,2) = Rand(+20,700)
  EndIf

  If Alien(I,0) <> -1 Then
   Alien(I,1) = Alien(I,1) - 1
   Alien(I,2) = 320 + Sin( Alien(I,1) ) * Alien(I,0)
  EndIf

  If Alien(I,1) > 1024 Then Alien(I,0) = 0

  If Alien(I,0) <> -1 Then DrawImage alienbild, Alien(I,1),Alien(I,2)
 Next



; rand::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
If x<0 Then x=0
If x>985 Then x = 985
If y<0 Then y=0
If y>675 Then y=675




; ende::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Flip

Until KeyDown(1)

SetFont font1
Text 512,384, "Danke für das testen!",1,1
Flip
Delay 5000

http://www.f-code.ch/ Schaut doch mal vorbei

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group