Express-Hilfe benötigt



  • Moinmoin

    Da ich jetzt auch noch von meinem Betreuer gezwungen wurde für meine Maturarbeit so schnell mal ein bisschen C++ zu schreiben, was ich absolut nicht kann bitte ich euch um Hilfe.

    Wer könnte mir diesen Code:

    #include "stdafx.h"
    #include "resource.h"
    
    #define MAX_LOADSTRING 100
    
    #define	ROWS			50
    #define	COLS			50
    #define	ROW_SIZE		10
    #define	COL_SIZE		10
    #define	CLIP_SIZE	50
    #define	OTHER_SIZE	150
    
    #define	TABLE_WIDTH		(ROWS*ROW_SIZE)
    #define	TABLE_HEIGHT	(COLS*COL_SIZE)
    #define	TABLE_X			(CLIP_SIZE)
    #define	TABLE_Y			(CLIP_SIZE)
    #define	WINDOW_WIDTH	(CLIP_SIZE + TABLE_WIDTH + OTHER_SIZE + CLIP_SIZE)
    #define	WINDOW_HEIGHT	(CLIP_SIZE + TABLE_HEIGHT + CLIP_SIZE)
    
    HANDLE	hBitBuffer, hBitBack, hBitAlive, hBitDead;
    
    HANDLE	hBitButClear, hBitButNext, hBitButStart[2], hBitButStop,
    			hBitButSlow[2], hBitButNormal[2], hBitButFast[2],
    			hBitButClose;
    
    HMENU		menu;
    
    unsigned char	table[ROWS][COLS], dtable[ROWS][COLS];
    
    #define	CAP_MOVE		1
    #define	CAP_TABLE	2
    int		captured = 0, cap_button;
    POINT		cap_point, table_point;
    
    #define	TD_SLOW		1000
    #define	TD_NORMAL	400
    #define	TD_FAST		100
    
    unsigned int	timer_delay = TD_NORMAL;
    bool				timer_working = FALSE;
    
    HWND		hWndButtonClear,
    			hWndButtonNext,
    			hWndButtonStart,
    			hWndButtonStop,
    			hWndButtonSlow,
    			hWndButtonNormal,
    			hWndButtonFast,
    			hWndButtonClose;
    
    // Global Variables:
    HINSTANCE hInst;								// current instance
    TCHAR szTitle[MAX_LOADSTRING];								// The title bar text
    TCHAR szWindowClass[MAX_LOADSTRING];								// The title bar text
    
    // Foward declarations of functions included in this code module:
    ATOM				MyRegisterClass(HINSTANCE hInstance);
    BOOL				InitInstance(HINSTANCE, int);
    LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);
    LRESULT CALLBACK	About(HWND, UINT, WPARAM, LPARAM);
    
    /*****************************************************************************/
    void	table_clear(void)
    {
    	int	x, y;
    
    	for(y=0; y<ROWS; y++)
    		for(x=0; x<COLS; x++)
    			table[y][x] = 0;
    }
    
    void	table_set(int row, int col, unsigned char val)
    {
    	table[row][col] = val;
    }
    
    int	table_neighbors(int y, int x)
    {
    	int	n=0;
    
    	if (table[y-1][x-1])
    		n++;
    	if (table[y-1][x])
    		n++;
    	if (table[y-1][x+1])
    		n++;
    
    	if (table[y][x-1])
    		n++;
    	if (table[y][x+1])
    		n++;
    
    	if (table[y+1][x-1])
    		n++;
    	if (table[y+1][x])
    		n++;
    	if (table[y+1][x+1])
    		n++;
    
    	return(n);
    }
    
    void	table_next(void)
    {
    	int	x, y, n;
    
    	for(y=1; y<ROWS-1; y++)
    	{
    		for(x=1; x<COLS-1; x++)
    		{
    			n = table_neighbors(y, x);
    			if (table[y][x])
    			{
    				if (n == 2 || n == 3)
    					dtable[y][x] = 0;
    				else
    					dtable[y][x] = 1;
    			}
    			else
    			{
    				if (n == 3)
    					dtable[y][x] = 1;
    				else
    					dtable[y][x] = 0;
    			}
    		}
    	}
    
    	for(y=0; y<ROWS; y++)
    		for(x=0; x<COLS; x++)
    			table[y][x] = dtable[y][x];
    }
    
    /*****************************************************************************/
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
     	// TODO: Place code here.
    	MSG msg;
    	HACCEL hAccelTable;
    
    	// Initialize global strings
    	LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    	LoadString(hInstance, IDC_LIFE, szWindowClass, MAX_LOADSTRING);
    	MyRegisterClass(hInstance);
    
    	hBitAlive = LoadImage(hInstance, MAKEINTRESOURCE(IDB_ALIVE), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitAlive)
    		return FALSE;
    	hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_DEAD), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitDead)
    		return FALSE;
    	hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_SICK), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitSick)
    		return FALSE;
    	hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_INFECTED), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitInfected)
    		return FALSE;
    	hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_INFECTIOUS), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitInfectious)
    		return FALSE;
    	hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_IMMUNE), IMAGE_BITMAP, 0, 0, 0);
    	if (!hBitImmune)
    		return FALSE;
    
    	// Perform application initialization:
    	if (!InitInstance (hInstance, nCmdShow)) 
    		return FALSE;
    
    	table_clear();
    
    	hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_LIFE);
    
    	// Main message loop:
    	while (GetMessage(&msg, NULL, 0, 0)) 
    	{
    		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
    		}
    	}
    
    	return msg.wParam;
    }
    
    //
    //  FUNCTION: MyRegisterClass()
    //
    //  PURPOSE: Registers the window class.
    //
    //  COMMENTS:
    //
    //    This function and its usage is only necessary if you want this code
    //    to be compatible with Win32 systems prior to the 'RegisterClassEx'
    //    function that was added to Windows 95. It is important to call this function
    //    so that the application will get 'well formed' small icons associated
    //    with it.
    //
    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    	WNDCLASSEX wcex;
    
    	wcex.cbSize = sizeof(WNDCLASSEX); 
    
    	wcex.style			= CS_HREDRAW | CS_VREDRAW;
    	wcex.lpfnWndProc	= (WNDPROC)WndProc;
    	wcex.cbClsExtra		= 0;
    	wcex.cbWndExtra		= 0;
    	wcex.hInstance		= hInstance;
    	wcex.hIcon			= LoadIcon(hInstance, (LPCTSTR)IDI_LIFE);
    	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
    	wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
    	wcex.lpszMenuName	= NULL;//(LPCSTR)IDC_LIFE;
    	wcex.lpszClassName	= szWindowClass;
    	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_LIFE);
    
    	return RegisterClassEx(&wcex);
    }
    
    //
    //   FUNCTION: InitInstance(HANDLE, int)
    //
    //   PURPOSE: Saves instance handle and creates main window
    //
    //   COMMENTS:
    //
    //        In this function, we save the instance handle in a global variable and
    //        create and display the main program window.
    //
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
       HWND	hWnd;
    	RECT	rect;
    	DWORD	style;
    	HRGN	region;
    
       hInst = hInstance; // Store instance handle in our global variable
    
    	rect.left = 100;										//x
    	rect.top = 100;										//y
    	rect.right = rect.left + WINDOW_WIDTH;			//width
    	rect.bottom = rect.top + WINDOW_HEIGHT;		//height
    
    	style = WS_CLIPSIBLINGS | WS_OVERLAPPED | WS_SYSMENU | 
    		WS_MINIMIZEBOX | WS_CLIPCHILDREN;
    
    	if (!AdjustWindowRect(&rect, style, false))
    		return FALSE;
    
    	region = CreateRectRgn(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
    	if (!region)
    		return FALSE;
    
    	hWnd = CreateWindow(szWindowClass, szTitle, style,
          rect.left, rect.top, rect.right-rect.left, rect.bottom-rect.top,
    		NULL, NULL, hInstance, NULL);
       if (!hWnd)
          return FALSE;
    
    	if (!SetWindowRgn(hWnd, region, FALSE))
    		return FALSE;
    
    	menu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU_CLPOPUP));
    	if (!menu)
    		return FALSE;
    
    	int	x, y;
    
    	x = TABLE_X + TABLE_WIDTH + 30;
    	y = TABLE_Y;
    
    	hWndButtonClear = CreateWindow("Button","Clear",
    		WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=40;
    
    	hWndButtonNext = CreateWindow("Button", "Next",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=50;
    
    	hWndButtonStart = CreateWindow("Button", "Start",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=40;
    
    	hWndButtonStop = CreateWindow("Button", "Stop",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=50;
    
    	hWndButtonSlow = CreateWindow("Button", "Slow",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=40;
    
    	hWndButtonNormal = CreateWindow("Button", "Normal",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=40;
    
    	hWndButtonFast = CreateWindow("Button", "Fast",
    		WS_VISIBLE | WS_CHILD | BS_BITMAP, 
    		x, y, 120, 40, hWnd, NULL, hInstance, NULL);
    	y+=40;
    
    	hBitButClear = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTCLEAR));
    	SendMessage(hWndButtonClear, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButClear);
    
    	hBitButNext = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTNEXT));
    	SendMessage(hWndButtonNext, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButNext);
    
    	hBitButStart[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTSTART));
    	hBitButStart[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTSTART_ON));
    	SendMessage(hWndButtonStart, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButStart[0]);
    
    	hBitButStop = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTSTOP));
    	SendMessage(hWndButtonStop, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButStop);
    
    	hBitButSlow[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTSLOW));
    	hBitButSlow[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTSLOW_ON));
    	SendMessage(hWndButtonSlow, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButSlow[0]);
    
    	hBitButNormal[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTNORMAL));
    	hBitButNormal[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTNORMAL_ON));
    	SendMessage(hWndButtonNormal, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButNormal[1]);
    
    	hBitButFast[0] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTFAST));
    	hBitButFast[1] = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_BUTFAST_ON));
    	SendMessage(hWndButtonFast, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    		(LPARAM)(HANDLE)hBitButFast[0]);
    
    	   ShowWindow(hWnd, nCmdShow);
       UpdateWindow(hWnd);
    
       return TRUE;
    }
    
    //
    //  FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
    //
    //  PURPOSE:  Processes messages for the main window.
    //
    //  WM_COMMAND	- process the application menu
    //  WM_PAINT	- Paint the main window
    //  WM_DESTROY	- post a quit message and return
    //
    //
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	//int	wmId, wmEvent;
    	int			x, y;
    	POINT			point;
    	int			id = LOWORD(wParam);
    	HWND			handle = (HWND)lParam;
    	PAINTSTRUCT	ps;
    	HDC			hdc;
    	TCHAR			szHello[MAX_LOADSTRING];
    
    	LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
    
    	switch (message) 
    	{
    		case WM_TIMER:
    			if (wParam == 1)
    			{
    				table_next();
    				InvalidateRect(hWnd, NULL, FALSE);
    			}
    
    			break;
    
    		case WM_COMMAND:
    
    			switch(HIWORD(wParam))
    			{
    				case	BN_CLICKED:
    					if (handle == hWndButtonClear)
    					{
    						table_clear();
    						InvalidateRect(hWnd, NULL, FALSE);
    					}
    					else if (handle == hWndButtonNext)
    					{
    						table_next();
    						InvalidateRect(hWnd, NULL, FALSE);
    					}
    					else if (handle == hWndButtonStart)
    					{
    						SetTimer(hWnd, 1, timer_delay, NULL);
    						timer_working = TRUE;
    						SendMessage(hWndButtonStart, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButStart[1]);
    					}
    					else if (handle == hWndButtonStop)
    					{
    						if (timer_working)
    							KillTimer(hWnd, 1);
    						timer_working = FALSE;
    						SendMessage(hWndButtonStart, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButStart[0]);
    					}
    					else if (handle == hWndButtonSlow)
    					{
    						timer_delay = TD_SLOW;
    						if (timer_working)
    							SetTimer(hWnd, 1, timer_delay, NULL);
    						SendMessage(hWndButtonSlow, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButSlow[1]);
    						SendMessage(hWndButtonNormal, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButNormal[0]);
    						SendMessage(hWndButtonFast, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButFast[0]);
    					}
    					else if (handle == hWndButtonNormal)
    					{
    						timer_delay = TD_NORMAL;
    						if (timer_working)
    							SetTimer(hWnd, 1, timer_delay, NULL);
    						SendMessage(hWndButtonSlow, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButSlow[0]);
    						SendMessage(hWndButtonNormal, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButNormal[1]);
    						SendMessage(hWndButtonFast, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButFast[0]);
    					}
    					else if (handle == hWndButtonFast)
    					{
    						timer_delay = TD_FAST;
    						if (timer_working)
    							SetTimer(hWnd, 1, timer_delay, NULL);
    						SendMessage(hWndButtonSlow, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButSlow[0]);
    						SendMessage(hWndButtonNormal, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButNormal[0]);
    						SendMessage(hWndButtonFast, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP,
    							(LPARAM)(HANDLE)hBitButFast[1]);
    					}
    					else if (handle == hWndButtonClose)
    					{
    						DestroyWindow(hWnd);
    					}
    
    					break;
    			}
    
    			switch (LOWORD(wParam))
    			{
    				case	IDM_CL_CLOSE:
    					DestroyWindow(hWnd);
    					break;
    				case	IDM_CL_MINIMIZE:
    					break;
    			}
    			break;
    
    		case WM_PAINT:
    			HDC		hdc_buf, hdc_temp;
    			HGDIOBJ	temp;
    
    			hdc = BeginPaint(hWnd, &ps);
    
    			// Run once
    			if (!hBitBuffer)
    				hBitBuffer = CreateCompatibleBitmap(hdc, WINDOW_WIDTH, WINDOW_HEIGHT);
    
    			// Double-Buffer DC
    			hdc_buf = CreateCompatibleDC(hdc);
    			SelectObject(hdc_buf, hBitBuffer);
    
    			// Background DC
    			hdc_temp = CreateCompatibleDC(hdc_buf);
    			temp = SelectObject(hdc_temp, hBitBack);
    
    			// Copy background onto back-buffer
    			BitBlt(hdc_buf, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, hdc_temp, 0, 0, SRCCOPY);
    			SelectObject(hdc_temp, temp);
    
    			// Copy table
    			for(y=0; y<ROWS; y++)
    			{
    				for(x=0; x<COLS; x++)
    				{
    					temp = SelectObject(hdc_temp, (table[y][x])?hBitAlive:hBitDead:hBitSick:hBitInfected:hBitInfectious:hBitImmune);
    					BitBlt(hdc_buf, TABLE_X + x*COL_SIZE, TABLE_Y + y*ROW_SIZE, COL_SIZE, ROW_SIZE,
    						hdc_temp, 0, 0, SRCCOPY);
    					SelectObject(hdc_temp, temp);
    				}
    			}
    
    			DeleteDC(hdc_temp);
    
    			BitBlt(hdc, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, hdc_buf, 0, 0, SRCCOPY);
    
    			DeleteDC(hdc_buf);
    
    			EndPaint(hWnd, &ps);
    			break;
    
    		case WM_ERASEBKGND:
    			break;
    
    		case WM_DESTROY:
    			PostQuitMessage(0);
    			break;
    
    		case	WM_LBUTTONDOWN:
    			x = (LOWORD(lParam) - TABLE_X);
    			y = (HIWORD(lParam) - TABLE_Y);
    
    			if ((x>=0) && (y>=0) && (x<COLS*COL_SIZE) && (y<ROWS*ROW_SIZE))
    			{
    				captured = CAP_TABLE;
    				cap_button = 1;
    				SetCapture(hWnd);
    				SetCursor(LoadCursor(NULL, IDC_CROSS));
    
    				x /= COL_SIZE;
    				y /= ROW_SIZE;
    				table_set(y, x, 1);
    				table_point.x = x;
    				table_point.y = y;
    
    				InvalidateRect(hWnd, NULL, FALSE);
    			}
    			else
    			{
    				captured = CAP_MOVE;
    				SetCapture(hWnd);
    				cap_point.x = LOWORD(lParam);
    				cap_point.y = HIWORD(lParam);
    				SetCursor(LoadCursor(NULL, IDC_SIZEALL));
    			}
    			break;
    
    		case	WM_RBUTTONDOWN:
    			x = (LOWORD(lParam) - TABLE_X);
    			y = (HIWORD(lParam) - TABLE_Y);
    
    			if ((x>=0) && (y>=0) && (x<COLS*COL_SIZE) && (y<ROWS*ROW_SIZE))
    			{
    				captured = CAP_TABLE;
    				cap_button = 2;
    				SetCapture(hWnd);
    				SetCursor(LoadCursor(NULL, IDC_CROSS));
    
    				x /= COL_SIZE;
    				y /= ROW_SIZE;
    				table_set(y, x, 0);
    				table_point.x = x;
    				table_point.y = y;
    
    				InvalidateRect(hWnd, NULL, FALSE);
    			}
    			break;
    
    		case	WM_MOUSEMOVE:
    			if (captured == CAP_MOVE)
    			{
    				point.x = LOWORD(lParam);
    				point.y = HIWORD(lParam);
    
    				ClientToScreen(hWnd, &point);
    
    				point.x -= cap_point.x;
    				point.y -= cap_point.y;
    
    				SetWindowPos(hWnd, NULL, point.x, point.y, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
    			}
    			else if (captured == CAP_TABLE)
    			{
    				x = (LOWORD(lParam) - TABLE_X);
    				y = (HIWORD(lParam) - TABLE_Y);
    
    				if ((x>=0) && (y>=0) && (x<COLS*COL_SIZE) && (y<ROWS*ROW_SIZE))
    				{
    					x /= COL_SIZE;
    					y /= ROW_SIZE;
    					if (x != table_point.x || y != table_point.y)
    					{
    						table_point.x = x;
    						table_point.y = y;
    						table_set(y, x, (cap_button==1)?1:0);
    
    						InvalidateRect(hWnd, NULL, FALSE);
    					}
    				}
    			}
    			break;
    
    		case	WM_LBUTTONUP:
    
    			if (captured == CAP_MOVE)
    			{
    				captured = 0;
    				ReleaseCapture();
    				SetCursor(LoadCursor(NULL, IDC_ARROW));
    			}
    			else if (captured == CAP_TABLE)
    			{
    				captured = 0;
    				ReleaseCapture();
    			}
    			break;
    
    		case	WM_RBUTTONUP:
    
    			if (captured == CAP_TABLE)
    			{
    				if (cap_button == 2)
    				{
    					captured = 0;
    					ReleaseCapture();
    				}
    			}
    		default:
    			return DefWindowProc(hWnd, message, wParam, lParam);
       }
       return 0;
    }
    
    // Mesage handler for about box.
    LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    		case WM_INITDIALOG:
    				return TRUE;
    
    		case WM_COMMAND:
    			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
    			{
    				EndDialog(hDlg, LOWORD(wParam));
    				return TRUE;
    			}
    			break;
    	}
        return FALSE;
    }
    

    so ändern, dass alle Zustände (Alive, Dead, Sick, Infected, Infectious, Immune) dargestellt werden können und nicht wie bisher nur Dead oder Alive.

    Der Zustand hängt immer vom vorherigen ab:

    Alive wird bei genügend Kontakt mit infizierten Nachbarn auch infiziert und damit INFEcted und Infectious.Dann entscheidet eine Wahrscheinlichkeit darüber, ob der Agent erkrankt und Sick und Infectious oder Immune und nicht mehr Infectious wird. Falls er Sick wurde, entscheidet noch die Wahrscheinlichkeit darüber , ob die Person Dead oder Immune wird.

    Ich hoffe ich habe mich klar ausgedrückt.

    Ich wäre euch sehr sehr dankbar für schnelle Hilfe, da ich sonst ein ernsthaftes Problem habe.

    MfG
    Florian Eichenberger



  • Viel Glück !!

    👍

    🤡

    Gruß,

    Simon2.



  • Du erwartest doch nicht ernsthaft, daß wir uns durch diesen Code durchwühlen, um die relevanten Stellen zu finden.

    Such dir doch mal den Punkt heraus, wo der richtige Zustand ausgewählt wird, und arbeite dann dort weiter.



  • Doch, so böse wie ich bin, denke ich das. Ich habe sehr wenig Ahnung von C++ und ich weiss nicht, wie man dieses Problem am besten löst. Ich dachte, es gibt vielleicht Leute hier denen das Spass macht.



  • Hallo,
    die Aufgabe eines Forums ist nicht deine Maturarbeit zu lösen. Wenn du dein Problem einschränkst und du ein Mindestmaß von Eigeninitiative zeigst, wird dir hier sicher jemand helfen. Einfach Code hinklatschen und dann "macht mal" rufen, funktioniert aber ganz sicher nicht.

    Andere Alternative: stell deine Frage im Projekteforum und bietet potentiellen Bearbeitern eine angemessene Aufwandsentschädigung, also genügend Euros.



  • fl4shchischte schrieb:

    ...Ich habe sehr wenig Ahnung von C++ ...

    Mit der Herangehensweise wird das wohl auch so bleiben..... und das wirft ein interessantes Licht auf Dein Maturthema.
    Naja, soweit ich weiß, darf man Maturarbeiten wiederholen. Vielleicht probierst Du es das nächste Mal mit etwas, wofür Du mehr Energie als ein wenig Copy&Paste aufbringen kannst.

    Gruß,

    Simon2.



  • Lol Simon2 Ich sehe du weisst sehr viel über mich. Du hast zwar keinerlei Ahnung von meiner Maturarbeit, ich denke ich werde sie ganz sicher nicht wiederholen müssen, da die erste Note bis jetz die beste war, die man kriegen kann. Ich brauche nur Hilfe in dieser C++ Frage und sonst gar nicht. Das es eine freche Frage ist, ist mir auch klar, aber wieso soll ich C++ lernen ich werde es nicht brauchen. Trotzdem danke, dass du mir mit deinem qualifizierten Kommentar gholfen hast. Irgendwie muss man ja den Counter heben....

    btw. Meine Maturarbeit handel von einem Vergleich von Vogelgrippe und Tuberkulose rein mathematisch eigentlich ohne programmier (aber eben eigentlich ...)



  • fl4shchischte schrieb:

    aber wieso soll ich C++ lernen ich werde es nicht brauchen.

    Warum brauchst du es dann in deiner Arbeit? Ein Arzt wird auch keine Programmiersprache brauchen, auch nicht in seiner Doktorarbeit.



  • Wenn es denn wenigstens C++ gewesen wäre, hätte sich vielleicht sogar jemand gefunden. Aber bei dem Spaghetticode (der im übrigen nicht eine Spur C++ enthält) sicher nicht.



  • Ich brauch es ganz allein aus dem einen Grund, dass mein Betreuer mich noch etwas(graphisch) untersuchen lassen will. Es ist ein ziemich abstraktes Referat, wenn man von Class 4 behaviour spricht und sie nicht zeigen kann. Für mich stellt es kein Problem dar, aber der Betreuer hat Angst, dass es niemand verstehen wird ...



  • Und du meinst nicht, dass es andere Werkzeug gibt, mit denen man das einfacher erledigen kann?

    Zum Beispiel kann man mit LabVIEW sehr einfach grafische Oberflächen mit Funktionalität versehen, ohne groß programmieren zu können.

    Und ich denke, dass du mathematische Zusammenhänge (ich rate jetzt mal ins Blaue, weiß nicht, worum sich der Code da oben dreht) auch in MATLAB oder anderen Mathematiksystemem gut visualisieren kannst.



  • Dann denkst du ähnlich wie ich, nur leider denkt mein Betreuer nicht so ... Es muss das ganze geschrieben werden als Programm und in VisualC++ ... Ich glaube ich lass mir von der blöden Teilnote den Schnitt vermiesen x)



  • fl4shchischte schrieb:

    Ich brauch es ganz allein aus dem einen Grund, dass mein Betreuer mich noch etwas(graphisch) untersuchen lassen will. Es ist ein ziemich abstraktes Referat, wenn man von Class 4 behaviour spricht und sie nicht zeigen kann. Für mich stellt es kein Problem dar, aber der Betreuer hat Angst, dass es niemand verstehen wird ...

    OK,
    ich nehm' alles zurück: dein Betreuer scheint eine Pflaume zu sein (kann es sein, dass der Code von ihm ist ?). Ich würde ihm klar sagen, dass Programmieren nicht Bestandteil Deiner Arbeit (und damit der Note) sein kann und wenn er sich da nicht einsichtig zeigt, da nochmal mit Eurem "Prüfungsvorsitzenden" drüber reden. ... kann ja nicht sein, dass Dein Betreuer da so sein Privatspäßchen mit Dir feiert (bzw. Dich dazu benutzt, seinen Code weiterzuentwickeln).

    Sorry, aber es kommt hier seeeehr häufig vor, dass Leute hier die Forenmitglieder die Arbeit machen lassen wollen, um selbst gute Informatiknoten zu bekommen.
    Es klang mir bei Dir halt auch so.

    Tut mir leid, wenn ich Dir damit Unrecht getan habe.

    Gruß,

    Simon2.

    P.S.: 675 Zeilen fremden Spaghetticode durchzuwühlen ist genauso anstrengend wie zeitraubend und unerfreulich. So ziemlich das Gegenteil von "Spaß dran" - deswegen hier die Reaktion. 😉



  • Ne gecodet ists nicht von ihm, er hat den Code als Vorschlag gebracht weiterzuentwickeln. Und wehren dagegen kann ich mich nicht ... Ist so ein bisschen Mafia like... Betreuer Experte und Co-Betreuer sitzen unter einer Decke 😎 Aber egal vielleicht hat ja jemand ein anständig aussehendes Game of Life parat, welches er mir erklären kann bzw. vielleicht sogar umschreiben und wenn nicht, auch egal.



  • Naja, man könnte ja was mit reiner polymorphie und rein virtuellen Methoden machen. Am besten noch auf modernste Technik aufgesetzt und die CLR verwendet.

    Vllt wendet man ja aber, da es ja um eine Graphische darstellung geht, auch das Entwurfsmuster "Dekorierer" an. Da es ja aber um das Verhalten von Objekten geht eines der vielen Verhaltensmuster anwenden. z.B. die zuständigkeitskette...

    Aber vllt. haben die leute hier im Forum auch nur Angst das Du es nicht verstehen könntest wenn man Dir das einfach vor die Nase setzt ^^ 🤡



  • Öhm ich versteh zwar nicht was du hier sagt aber nur noch so generell : Tricksen ist nicht 🙂 Entweder ich brings hin ohne zu tricksen oder ich lasse es sein. Es muss streng den Regeln folgen das Programm kein Zufall.



  • iiih...Class 4 behavior 😮
    Pass bloss auf damit 🤡

    Durch den Code wühlen ist, wie schon gesagt, naja...öd

    hBitAlive = LoadImage(hInstance, MAKEINTRESOURCE(IDB_ALIVE), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitAlive)
            return FALSE;
        hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_DEAD), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitDead)
            return FALSE;
        hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_SICK), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitSick)
            return FALSE;
        hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_INFECTED), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitInfected)
            return FALSE;
        hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_INFECTIOUS), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitInfectious)
            return FALSE;
        hBitDead = LoadImage(hInstance, MAKEINTRESOURCE(IDB_IMMUNE), IMAGE_BITMAP, 0, 0, 0);
        if (!hBitImmune)
            return FALSE;
    

    Hier zB ladest Du 5 verschiedene Bilder und weist sie dem hBitDead Handle, prüfst aber hBitInfected etc. Kann so nicht funktionieren.

    Find grad die Stelle nicht, wo Du die Werte für Infected und soweiter setzt. Wenn ichs richtig sehe benutzt du set_table immer nur mit 0 oder 1. Du musst die anderen Zustände auch noch speichern.

    Edit:

    Aber vllt. haben die leute hier im Forum auch nur Angst das Du es nicht verstehen könntest wenn man Dir das einfach vor die Nase setzt ^^ 🤡

    Jetzt wo Dus sagst..



  • Game Of Life?

    Hab ich vor zwei Wochen als Entwurfsarbeit abgegeben, allerdings in Java. Sieht sehr schön aus, man kann Zellen per Mausklick setzen und andere Regelwerke einstellen ... 😉



  • Ok 1310-Logik ich hab nur einfach das was mir eingeleuchtet hat, gerade eingesetzt, z.B. die Bilder laden. Kannst du mir sagen wie ich die andere Zustände nun einführen kann ?

    Class 4 behaviour ist kewl 🙂

    @DarthZiu: Dann schreib mal andere funktionierende Regeln 😉



  • fl4shchischte schrieb:

    @DarthZiu: Dann schreib mal andere funktionierende Regeln 😉

    Wie meinst du das? Regelwerke im Programm umsetzen? No Prob

    Neue Regelwerke schreiben? Brauch ich nicht, bin Informatiker und kein Biologe, theoretischer Mathematiker oder ähnliches ... 👍



  • fl4shchischte schrieb:

    Class 4 behaviour ist kewl 🙂

    😮 Schonmal damit gearbeitet? Mir reicht Level 2 (Baculoviren und Staph Aureus, ausserdem Humanblut sprich potentiell Hep. und HIV ), is gar nicht so kuhl 👎

    btt: ich blick irgendwie nicht, wo Du malst.
    Also Deine table besteht ja aus chars, da kannst du für jeden Zustand ein Zeichen definieren (btw, würd ich eher mit unsigned short machen) 0 = tot, 1 = krank, 2 = infektiös...
    Dann musst Du in table_next entsprechend mehr Schritte einbauen, sind 2 oder 3 Nachbarn infektiös oder krank, wird xy infiziert, zwei Zyklen später infektiös, 3 Zyklen später krank und nochmal später stirbt xy.

    Im Prinzip ein Game of Life mit mehreren Zuständen/Lebensphasen,
    aber das Auscodieren überlass ich Dir. :p

    edit: Ausserdem gibts solche Programme doch schon wie Sand am Meer, warum verlangen die das von Dir?


Anmelden zum Antworten