Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

habe da ein problem und zwar müssen wir für die schule ein spiel

mit c++ programmieren! Da ich noch keine ahnung habe wollte ich mir jetzt ein geeignetes Buch zulegen! Aber weiß nicht welches am besten ist?

Habe mal bei amazon geguckt und es gibt ja mehere was haltet ihr den von den beiden büchern?

http://www.amazon.de/exec/obidos/ASIN/3446221522/ref=br_lf_b_0/302-0018197-3631244

ist aber glaub ich schon für erfahrende spiele programmierer oder das hört sich schon besser an:

http://www.amazon.de/exec/obidos/ASIN/3827264537/ref=br_lf_b_1/302-0018197-3631244

also in 21tagen.

Oder habt ihr noch andere Bücher die vieleicht noch besser sind?

Danke

Geschrieben

Was da geeignet ist, hängt sicherlich davon ab, was du machen willst. Spiel ist nicht gleich Spiel. Geht es um ein einfaches Konsolenspiel ("Nimm", Zahl erraten, evtl. TicTacToe), oder soll da eine richtige grafische Oberfläche rein?

Wenn es um ein text/konsolenbasiertes Spiel geht, brauchst du keine speziellen Tutorials. Wenn es um mehr geht (was ich mir bei einem Schulprojekt allein aus zeitlichen Gründen nicht recht vorstellen kann), hängt vieles davon ab, welche Grafikbibliothek/Schnittstelle du verwendest.

Geschrieben

Also ich wollte wenn dann ein grafisches spiel programmieren was so in der art wie zum beispiel giana sisters ist! Das sollte wenn dann in c++ sein und unter Microsoft visual c++ programmiert werden! Soweit ich weiß muß es nicht mit direct x programmiert sein! Also wie man sieht habe ich noch nicht so ein plan worum es genau geht! Weiß aber wie man Bitmaps einfügt :-)

und?

Geschrieben

Sorry fuer mein fettes Grinsen vorhin....war nicht boese gemeint, aber es hat mich einfach amuesiert :)

Du sagst du hast keine Ahnung davon. Du sagst du hast pro Tag 5 Stunden maximal.

Waeren so 25 Stunden zusammen. Du sagst auch es soll ein kleines grafisches Spielchen werden.

Glaubst etwa dass du mit deiner Planung hinkommst? :D

Giana Sisters ist sicher auch nicht in 25 Stunden gemacht worden ;)

Selbst wenn du alle Grafiken schon vorgefertigt haettest und da nichts mehr machen muesstest, dann wuerdest in den 25 Stunden wohl eher den Code abtippen koennen, als das Spiel ansich selbst gestalten.

Ich wuerde dir also raten es doch etwas einfacher anzugehen, denn ansonsten schreibst nur mehr oder weniger ein Tutorial ab. Du kannst dann auch davon ausgehen, dass dein Lehrer dich zu deinem Werk befragt und du dann das entsprechende Wissen nicht aufweisen kannst. Tja und wenn er merkt, dass du ansich nur was abgeschrieben hast, dann gibts auch keine guten Noten.

Goos

Geschrieben

Grafikbibliotheken wie Direct X benötigen eine enorme Einarbeitungszeit. In 25 Stunden kommst du da nicht weit, und ein fertiges Spiel bekommst du ohne gutes Vorwissen auf keinen Fall hin.

Verabschiede dich besser von allem, was animierte Grafik beinhaltet. Ein rundenbasiertes Spiel wäre zu empfehlen, damit du dich nicht auch noch um das Zeitverhalten kümmern musst.

Wie wäre es denn mit so was wie "4 gewinnt" mit einfacher Windows-Grafik? Das sollte machbar sein.

Geschrieben

Huhu Keks *mampf* ;)

es hat doch keiner hier was von 3D geredet.

....und in 25 Stunden hat man sicher auch noch nichtmal das halbe Buch durchgearbeitet, oder etwa doch?

(wie schon gesagt...nur abschreiben aus nem Buch ist ja auch nicht so toll)

Goos

Geschrieben

Schöner Spaß Spiel in einer Woche programmieren. Aber mal ernsthaft du solltest dich nicht selber überfordern. Das Entwicklen von Computerspielen ist nicht mal eben in einer Woche gemacht. In der Regel sitzen immer mehrer Programmierer wochenlang an einem Spiel. Und da du ja noch keien ahnung auf dem Gebiet hast, solltest du kleine anfangen.

Ich denke der Vorschlag mit "Vier gewinnt" ist recht gut. Das ganze ich relativ einfach nachzuvollziehen. Und du kannst bei fragen deines Lehrers auch Antworten geben.

Wenn du dannach immer noch Interresse hast, könntest du dich ja mal an deiner eigenen Monopolyversion setzen. Das ist schon etwas schwieriger und Komplexer aber dennoch lösbar.

kleiner Linktip

Viel Spaß dabei.

MVG

need-some-blood

Geschrieben

Also erstmal danke für die antworten!

War doch ein bisl zu hoch von mir zu glauben das ich so eben giana sisters programmieren kann! Aber habe echt keine ahnung vom spiele programmieren und weiß der einer ein gutes tutorial wo man zum spiel hin kommt also was man nur abtippen muß usw. und es läuft?! Dann wüßte ich vieleicht was ich da genau machen müßte und würde nen schritt weiter kommen!?

Weil habe wie gesagt das visual C++ buch in 21 tagen und habe auch schon mehere dialoge gemacht mit bitmaps drin....aber wie kann ich damit ein spiel machen?! Naja wäre nett wenn mir noch einer helfen würde.....

Geschrieben
Original geschrieben von dgorski

weiß der einer ein gutes tutorial wo man zum spiel hin kommt also was man nur abtippen muß usw. und es läuft?! Dann wüßte ich vieleicht was ich da genau machen müßte und würde nen schritt weiter kommen!?

Siehe meinen Linktip ein Posting höher. Aber ich glaube nicht, dass du etwas lernst wenn du ein Tutorial stur abtippst. Der Lerneffekt ist irgendwo in Richtung 0 anzusiedeln.

Und wenn du deinem Lehrer ein fertiges Spiel hinsetzt du aber seine Fragen nicht beantworten kannst, dann stehst du verdammt doof da.

Also in jedem Fall selber versuchen!

MVG

need-some-blood

Geschrieben

Also habe mir mal die tutorials durch gelesen aber hat mir nicht wirklich weiter geholfen! Da gibt es zwar einen workshop wo erklärt wird wie man ein spiel progrmmiert aber auch nicht wirklich mit dialogen. Unter wir sollen ja ein spiel unter visual c++ 6.0 programmieren und dieses mit dialogen anfertigen! hat den schonmal einer mit visual c++ ein spiel mit dem buch visual c++ in 21 tagen programmiert?! Und das anhand mit bitmaps gestaltet? Also weiß nicht mehr wie ich das schaffen soll.....weil ich keinen plan habe!

Geschrieben

Irgendwie steig ich noch nicht so ganz dahinter:rolleyes:

Ihr sollt für die Schule ein Spiel innerhalb einer Woche programmieren, ohne das ihr Ahnung von C oder einer anderen Programmiersprache habt?:confused:

Selbst wenn man schon einschlägige Erfahrungen im programmieren hat, erweist sich die Spieleprogrammierung (ohne jetzt großartige Grafikprogrammierung zu berücksichtigen) als Kraftakt, bei dem man schon sehr Erfahren sein sollte (glaub mir, ich habs auch schon des öfteren probiert:( ).

Wenn du es aber unbedingt machen musst, würde ich dir eine Art Memory empfehlen, bei dem halt immer 2 gleiche Bilder gefunden werden müssen. Das sollte weitaus einfacher sein wie Monopoly oder so.

Gruß

Guybrush

Geschrieben

Okay memorie würde ja auch schon reichen! Aber ich weiß doch noch nicht einmal wie ich mehere Bitmaps laden kann?! Weil es müssen ja zumindestens so um die 30 stück sein, sonst lohnt es sich ja nicht! Wie mache ich das zum beispiel? Wenn ich mal irgendwo ein beispiel finden würde, aber suche immer vergebens!

Geschrieben

Mach dein Konzept und programmier dein Spiel von Grundgeruest (der Logik) her. Wenn es dann soweit laeuft, kannst du dich auch daran machen irgendwelche Bitmaps zu verwenden. Du hast dann auch wenigstens schon nen Code anhand dessen man dir weiterhelfen kann. Zuerst aber bei den Bildern anzufangen ist nicht unbedingt der richtige Weg ;)

Original geschrieben von Guybrush Threepwood

Irgendwie steig ich noch nicht so ganz dahinter:rolleyes:

Ihr sollt für die Schule ein Spiel innerhalb einer Woche programmieren, ohne das ihr Ahnung von C oder einer anderen Programmiersprache habt?:confused:

Hi Guybrush :D

Ich denk mal das mit der Woche ist nun nicht so schlimm, da die Woche seit Threaderstellung eh schon rum ist ;)

Goos

Geschrieben

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!

Geschrieben

Okay schade das sich keiner gemeldet hat aber habe da eine weitere frage:

Kann ich zum beispiel ein maus ereignis vortä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

Geschrieben

Ja dann erklär mal bitte wie du das meinst?

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 = &dc;

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+88)) && ((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?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...