|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
dgorski Mini JLI'ler
Anmeldedatum: 01.12.2003 Beiträge: 12 Wohnort: Borken Medaillen: Keine
|
Verfasst am: 09.12.2003, 07:39 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
|