|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 04.12.2003, 09:28 Titel: |
|
|
@Mr.X:
sagen wirs mal so: jeder Informatiker im Bereich Softwareentwicklung kann mehr oder weniger gut programmieren. Aber z.B. ein theoretischer Informatiker oder jemand aus dem KI-Bereich ist von Programmieren etwa soweit weg wie ein Bäcker. Ist jedenfalls bei uns an der Uni so...
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 04.12.2003, 09:44 Titel: |
|
|
@HotAcid
Aber Du musst doch zugeben, daß wenn einer Eurer theoretischen Informatiker nen Algorithmus an die Tafel schmiert, um ihn zu erklären, dann ähnelt dieser doch hauptsächlich im Aufbau (aber meist auch in der Syntax) immer (zumindest im entfernten Sinne) irgendeiner Programmiersprache
Naja egal, ist eh so'ne Aussage wo man sich streiten kann ^^ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.12.2003, 10:09 Titel: |
|
|
Was genau er ist weiss ich nicht eben nur Fachinformatiker. Und der kann nicht sonderlich gut proggen. Solche gibts bei der Informatik aber auch. Einen in meiner Gruppe musste man 3 Vorlesungen lang erklären wie man printf benutzt. Danach wusste er auch nicht viel mehr. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 04.12.2003, 11:05 Titel: |
|
|
Also möchte meinen teil auch mal dazu sagen was ich denke!
Also ich bin ja Fachinformatiker im bereich anwendungsentwicklung das heißt das ich mehr programmiere usw. Dann gibt es den ausbildungberuf als Fachinformatiker im Bereich Systemintergration, die beschäftigen sich mehr mit Rechnern und systemen! Was der unterschied zwischen Informatiker und fachinformatiker ist weiß ich nicht so ganz genau aber meine mal gehört zu haben das man sich nur informatiker schimpfen kann wenn man studiert hat, also ein studium abgeschlossen hat! |
|
Nach oben |
|
|
HotAcid Super JLI'ler
Alter: 43 Anmeldedatum: 04.08.2002 Beiträge: 372 Wohnort: Berlin Medaillen: Keine
|
Verfasst am: 04.12.2003, 11:15 Titel: |
|
|
@Mr. X: hm, ich habe in jetzt zweieinhalb Semestern (mit je 4 SWS) theoretischer Informatik noch nicht einen Algorithmus gesehen, der sich mehr doer weniger direkt in einer Programmiersprache umsetzten ließe.
Theor. Informatik ist von Programmieren ziemlich weit weg. Hier geht es eher um Automaten, Grammatiken, Logik, Signaturen, Algebren, Terme etc...
Man muss dazu sagen, dass ich von Uni-Informatikern spreche
cu Felix _________________ StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht. |
|
Nach oben |
|
|
Zo0oL Mini JLI'ler
Anmeldedatum: 02.12.2003 Beiträge: 11 Wohnort: Pb Medaillen: Keine
|
Verfasst am: 04.12.2003, 11:32 Titel: |
|
|
Informatiker ist meiner Meinung nach eher als Oberbegriff zu sehen. Es gibt Fachinformatiker und Diplominformatiker, etc.
Und davon können längst nicht alle Programmieren und müssen es auch garnicht können, dafür gibt es ja Programmierer (sozusagen die Handwerker der Informatik)
Daher: Informatiker != Programmierer
Natürlich heißt das nicht, dass kein Informatiker programmieren kann! |
|
Nach oben |
|
|
Mr.X Junior JLI'ler
Anmeldedatum: 15.04.2003 Beiträge: 88
Medaillen: Keine
|
Verfasst am: 04.12.2003, 14:09 Titel: ... |
|
|
@HotAcid
Das man an'ner Uni nicht alles "vorgekaut" bekommt is klar. Dazu isses ja auch'ne Uni.
AFAIK gibts keine Uni, wo einem Programmieren beigebracht wird! Das wird mehr oder weniger vorrausgesetzt. Du gehst zu Vorlesungen um Dir die Theorie anzuhören, und nicht um irgendeinen fertigen Programmcode abzuschreiben und auswendig zu lernen.
Und theoretische Informatik ist von Programmieren nicht so weit weg wie Du denkst, oder wie soll man sonst bestimmen, welcher Algorithmus (welches Programm) effizient abläuft, wenn es die theoretische Informatik und Ihre Laufzeitbestimmung (Omega von n und der ganze Spass) nicht gäbe.
Grammatiken sind eminent für Programmiersprachen, oder programmierst Du mit von Dir frei gewählten Wörtern in beliebiger Syntax. Automaten sind nunmal nur theoretisch zu erklären. Ich glaube nicht, das Du nen Automat verstehen würdest, wenn Dein Prof Dir einen Code in irgendeiner Programmiersprache gibt und sagt:"Das ist ein Automat, so hat er auszusehen. Jetzt implementieren Sie Ihren eigenen". Ausserdem würde das auch dem Anspruch keineswegs gerecht, den eine Uni stellt. |
|
Nach oben |
|
|
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 05.12.2003, 08:15 Titel: |
|
|
Hallo,
also habe eine Verlängerung bekommen und habe auch ein gutes tutorial gefunden:
http://www.henkessoft3000.de/
unter tutorial/c++/MFC/Bewegungsabläufe in MFC ohne DirectX
da ist ein spiel und zwar rennt eine prson los wo man drauf schießen kann jetzt habe ich nur eine frage. Wie kann ich es programmieren das die person bei einem schuß auf dem boden liegen bleibt? Oder das mehere Personen dann rum jumpen? Kann mir da einer zu helfen? Wenn einer interesse hat kann er mich mal unter dgorski2@web.de erreichen würde dann ihm das projekt schicken was ich gemacht habe! danke! |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 05.12.2003, 12:35 Titel: |
|
|
Wenn du mehrere Personen haben willst, kannst du doch einfach mehrere Sprites zeichnen und Parameter(z.B. Koordinaten) für jede Person nehmen.
Für sowas eignet sich allerdings OOP am besten. Dann kannst du einen Personenklasse erstellen mit allen Parametern und dann immer eine neue Person "erstellen". _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 08.12.2003, 10:37 Titel: |
|
|
Eine Frage kann ich zum beispiel ein maus ereignis vor täuschen? Also wenn ich mit der linken maustaste was starte und möchte das nach dem start und einer bestimmten bedingung die linke maus taste vor getäuscht wird, wie geht das? Also man soll nicht selber die linke maustaste drücken sondern das soll im prinzip von alleine passieren! Geht sowas? und wenn wie?
Danke |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.12.2003, 10:45 Titel: |
|
|
Ja mit dem Befehl SendMessage(...)
Für näheres schau mal in die MSDN bin grad in der Schule und kann nichts genaueres sagen _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.12.2003, 12:42 Titel: |
|
|
SendMessage(WM_LBUTTONDOWN,Handle_of_Window,Wparam,Lparam);
Die Mausposition setzt gliedert sich in lparam:
Code: | x=LOWORD(Lparam);
y=HIWORD(Lparam); |
Wie man das allerdings umgekehrt macht, weiß ich nicht. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 08.12.2003, 15:15 Titel: |
|
|
folgendes Problem bei diesem tutorial:
http://www.henkessoft3000.de/
unter tutorial/c++/MFC/Bewegungsabläufe in MFC ohne DirectX
Wenn der humor los läuft hinter läßt er einen schatten, was blöd aus sieht. Wenn ich die anwendung weiter laufen lassen und einmal ein anderes window fenster öffne und dann wieder zu anwendung zurück kehre dann ist komischer weise der schatten weg aber wenn er weiter rennt erscheint er wieder....woran liegt das? an der grafikkarte?[/url] |
|
Nach oben |
|
|
Hasenfuß Senior JLI'ler
Alter: 37 Anmeldedatum: 20.08.2002 Beiträge: 291
Medaillen: Keine
|
Verfasst am: 08.12.2003, 15:59 Titel: |
|
|
Hast du mit InvalidateRect die vorige Szene gelöscht? |
|
Nach oben |
|
|
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 09.12.2003, 07:38 Titel: |
|
|
So habe hier mal den quellcode, das läuft aber noch eine menge schief.
// GameDlg.cpp : Implementierungsdatei
//
#include "stdafx.h"
#include "Game.h"
#include "GameDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGameDlg Dialogfeld
CGameDlg::CGameDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGameDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGameDlg)
// HINWEIS: Der Klassenassistent fügt hier Member-Initialisierung ein
//}}AFX_DATA_INIT
// Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf benötigt
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGameDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGameDlg)
// HINWEIS: Der Klassenassistent fügt an dieser Stelle DDX- und DDV-Aufrufe ein
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGameDlg, CDialog)
//{{AFX_MSG_MAP(CGameDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGameDlg Nachrichten-Handler
BOOL CGameDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Symbol für dieses Dialogfeld festlegen. Wird automatisch erledigt
// wenn das Hauptfenster der Anwendung kein Dialogfeld ist
SetIcon(m_hIcon, TRUE); // Großes Symbol verwenden
SetIcon(m_hIcon, FALSE); // Kleines Symbol verwenden
// ZU ERLEDIGEN: Hier zusätzliche Initialisierung einfügen
Bild[0].LoadBitmap(IDB_HINTERGRUND);
Bild[1].LoadBitmap(IDB_MANN1);
Bild[2].LoadBitmap(IDB_MANN2);
Bild[3].LoadBitmap(IDB_KOPF3);
Bild[4].LoadBitmap(IDB_KOPF4);
abfrage = 1;
nBild=1;
X=80;
Y=330;
TrefferFlag=0;
int step=10;//schrittweite
int strecke=850;//bewegungsstrecke
for (int i=0;i<=10000000;i++);
//MSG msg;
//int Return=PeekMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST,PM_REMOVE);
//if (Return!=0)
//{
// TranslateMessage(&msg);
//DispatchMessage(&msg);
//}
return TRUE; // Geben Sie TRUE zurück, außer ein Steuerelement soll den Fokus erhalten
}
// Wollen Sie Ihrem Dialogfeld eine Schaltfläche "Minimieren" hinzufügen, benötigen Sie
// den nachstehenden Code, um das Symbol zu zeichnen. Für MFC-Anwendungen, die das
// Dokument/Ansicht-Modell verwenden, wird dies automatisch für Sie erledigt.
void CGameDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // Gerätekontext für Zeichnen
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Symbol in Client-Rechteck zentrieren
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Symbol zeichnen
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
CPaintDC* pDC = &
BITMAP bmBackround;
Bild[0].GetObject(sizeof(bmBackround),&bmBackround);
//Bild[0] --> BITMAP bm;
CDC memDC;
memDC.CreateCompatibleDC(pDC);
//memDC.CreateCompatibleDC(pDc);
memDC.SelectObject(&Bild[0]);
RECT Rect;
GetClientRect(&Rect);
pDC->StretchBlt(0,0,Rect.right,Rect.bottom,&memDC,0,0,
bmBackround.bmWidth,bmBackround.bmHeight,SRCCOPY);
if (nBild!=0)
{
BITMAP bm; //BITMAP-Struktur bm deklarieren
Bild[nBild].GetObject(sizeof(bm),&bm); //Größe und Adresse von CBitmap Bild[nBild] --> BITMAP bm
CDC SpeicherDC;
SpeicherDC.CreateCompatibleDC(pDC); //SpeicherDC initialisieren
CBitmap *pOldImageBitmap = SpeicherDC.SelectObject(&Bild[nBild]); //Bild[nBild] --> Speicher
CDC MaskDC;
MaskDC.CreateCompatibleDC(pDC); //MaskDC initialisieren
CBitmap MaskBitmap;
MaskBitmap.CreateBitmap( bm.bmWidth, bm.bmHeight, 1, 1, NULL );
CBitmap *pOldMaskBitmap = MaskDC.SelectObject( &MaskBitmap );
SpeicherDC.SetBkColor( RGB(0,0,0) );
MaskDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &SpeicherDC, 0, 0, SRCCOPY );
CDC OrDC;
OrDC.CreateCompatibleDC( pDC );
CBitmap OrBitmap;
OrBitmap.CreateCompatibleBitmap( &SpeicherDC, bm.bmWidth, bm.bmHeight );
CBitmap *pOldOrBitmap = OrDC.SelectObject( &OrBitmap );
OrDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &SpeicherDC, 0, 0, SRCCOPY );
OrDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &MaskDC, 0, 0, 0x220326 );
CDC TempDC;
TempDC.CreateCompatibleDC( pDC );
CBitmap TempBitmap;
TempBitmap.CreateCompatibleBitmap( &SpeicherDC, bm.bmWidth, bm.bmHeight );
CBitmap *pOldTempBitmap = TempDC.SelectObject( &TempBitmap );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, pDC, X, Y, SRCCOPY );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &MaskDC, 0, 0, SRCAND );
TempDC.BitBlt( 0, 0, bm.bmWidth, bm.bmHeight, &OrDC, 0, 0, SRCPAINT );
pDC->BitBlt( X, Y, bm.bmWidth, bm.bmHeight, &TempDC, 0, 0, SRCCOPY );
TempDC.SelectObject( pOldTempBitmap );
OrDC.SelectObject( pOldOrBitmap );
MaskDC.SelectObject( pOldMaskBitmap );
SpeicherDC.SelectObject( pOldImageBitmap );
if (TrefferFlag == 4)
{
if (nBild == 0)
{
abfrage = 5;
}
abfrage=2;
}
}
CDialog::OnPaint();
}
}
// Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, während der Benutzer
// das zum Symbol verkleinerte Fenster mit der Maus zieht.
HCURSOR CGameDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CGameDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
TrefferFlag=0;
BOOL flag = FALSE;
int c = 0; //Zaehler
int step = 10; //Schrittweite
int strecke = 850; //Bewegungsstrecke
X=80;
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadCursor(IDC_ZIELCURSOR); // Ziel-Cursor laden
SetCursor(hCursor); // Cursor anzeigen
//Cursor anzeigen;
for(c=0; c<=(strecke/step); c++)
{
if (flag == FALSE)
{
nBild = 1;
flag = TRUE;
}
else
{
nBild = 2;
flag = FALSE;
}
if(TrefferFlag==1)
{
int a=1;
nBild=4;
step=1;
strecke=0;
do
{
a++;
TrefferFlag=4;
}while(a!=99999999);
//if (TrefferFlag==2)
//{
// nBild=4;
// step=1;
// a=1;
// strecke=0;
// TrefferFlag=4;
// do
// {
// a++;
// }while(a!=99999999);
//}
if (TrefferFlag==4 && abfrage == 2)
{
if (nBild==4)
{
nBild=0;
}
}
//else
if (abfrage == 5 && nBild == 0)
{
TrefferFlag=0;
BOOL flag = FALSE;
int c = 0; //Zaehler
int step = 10; //Schrittweite
int strecke = 850; //Bewegungsstrecke
X=80;
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadCursor(IDC_ZIELCURSOR); // Ziel-Cursor laden
SetCursor(hCursor);
for(c=0; c<=(strecke/step); c++)
{
if (flag == FALSE)
{
nBild = 1;
flag = TRUE;
}
else
{
nBild = 2;
flag = FALSE;
}
}
}
}
X = X + step;
CRect rect;
rect.top = Y + 30;
rect.bottom = Y + 185;
rect.left = X + 45;
rect.right = X + 120;
InvalidateRect(&rect, FALSE);
UpdateWindow();
// Abfangen von WM_..., hier alle Maus-Nachrichten:
MSG msg;
int Return = PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE);
if (Return != 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
for(int i=0; i<=10000000; i++); //Pause
}
CDialog::OnLButtonDown(nFlags, point);
}
void CGameDlg::OnMouseMove(UINT nFlags, CPoint point)
{
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadCursor(IDC_ZIELCURSOR); // Ziel-Cursor laden
SetCursor(hCursor); // Cursor anzeigen
CDialog::OnMouseMove(nFlags, point);
}
void CGameDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
HCURSOR hCursor;
hCursor = AfxGetApp()->LoadCursor(IDC_ZIELCURSOR); //Ziel-Cursor laden
SetCursor(hCursor); //Cursor anzeigen
CDialog::OnMouseMove(nFlags, point);
}
void CGameDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// dc.LineTo((point.x+2),(point.y-3));
if( ((point.x > X+67) && (point.x < X+8) && ((point.y > Y+33) && (point.y < Y+87)) )
{
int a=1;
TrefferFlag=1;
nBild=3;
InvalidateRect(NULL,FALSE);
UpdateWindow();
MessageBeep(0);
}
CClientDC dc(this); // Zeichen-dc
dc.MoveTo(point);
dc.LineTo((point.x+1),(point.y-1)); // "Trefferloch"
dc.LineTo((point.x+1),(point.y+1));
dc.LineTo((point.x-1),(point.y+1));
dc.LineTo((point.x-1),(point.y-1));
dc.LineTo((point.x+1),(point.y-1));
dc.MoveTo(point);
dc.LineTo((point.x+4),(point.y-4)); // "Trefferausstrahlungen"
dc.MoveTo(point);
dc.LineTo((point.x+5),(point.y+3));
dc.MoveTo(point);
dc.LineTo((point.x-2),(point.y+5));
dc.MoveTo(point);
dc.LineTo((point.x-4),(point.y+3));
dc.MoveTo(point);
dc.LineTo((point.x-5),(point.y-4));
dc.MoveTo(point);
dc.LineTo((point.x-3),(point.y-5));
dc.MoveTo(point);
dc.LineTo((point.x+2),(point.y-3));
CDialog::OnRButtonDown(nFlags, point);
}
So in diesem Code kann ich doch auch die gleiche figur wieder los rennen lassen wenn ich sie abgeschossen habe oder? Sie soll dann einfach gelöscht werden die erschossene. Und das mit dem chatten bekomme ich auch nicht hin hat einer eine idee? |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|