Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: C++: Matopeli

Sivun loppuun

shadez [14.05.2003 19:43:47]

#

Tämä peli on matopeli. Voit itse korjata koodia ja kehittää siitä maailman parhaan matopelin!

#include <windows.h>
#include <ddraw.h>
#include <mmsystem.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>


HWND hWnd;
LPDIRECTDRAW lpDD;
LPDIRECTDRAWSURFACE surf;
DDSURFACEDESC ddsd;
unsigned int *dBuffer;
LONGLONG last,cur;
float skip;
int score=0;

float matox, matoy;
int len=100;
float xw[20000],yw[20000];
float xd,yd;

#define WIDTH 320
#define HEIGHT 240
#define MAX 320*240
#define SPEED 4.0

int herkux,herkuy;


inline unsigned int fastrand()
{
	static int seed=0xcafebabe;
	return (unsigned)(seed=seed*0x97654321+1)>>17;
}
inline unsigned int rgb(short r, short g, short b)
{
	return ((r<<16)+(g<<8)+b);
}

bool ded=false;


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	hWnd = CreateWindowEx(WS_EX_TOPMOST, "STATIC",
                             0,
                             WS_POPUP | WS_VISIBLE,
                             0, 0,
                             WIDTH, HEIGHT,
                             0, 0, 0, 0);
	ShowCursor(FALSE);
	ShowWindow(hWnd,SW_SHOW);
	DirectDrawCreate(NULL,&lpDD,NULL);
	lpDD->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN);
	lpDD->SetDisplayMode(WIDTH,HEIGHT,32);
	ddsd.dwSize=sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
	ddsd.dwBackBufferCount = 1;
	ddsd.ddsCaps.dwCaps = DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY | DDSCAPS_PRIMARYSURFACE;
	lpDD->CreateSurface(&ddsd,&surf,NULL);
	dBuffer=new unsigned int[320*240];
	unsigned int *taust=new unsigned int[320*240];
	//generoiTaustaKuva
	memset(taust,0,320*240*4);
	for(int y=0;y<240;y++)
	{
		for(int x=0;x<320;x++)
		{
			int r=sinf(x*0.02f+y*0.15f)*127+127;
			int g=cosf(x*0.03f*x+y*0.4f)*64+64;
			int b=sinf(x*0.01f-y*0.2f)*20+20;
			taust[y*320+x]=rgb(r,g,b);
		}
	}

	int c;
	xd=4.0f;yd=0.0f;
	for(c=0;c<len;c++)
	{
		xw[c]=50;
		yw[c]=50;
	}

	herkux=rand()%300+10;
	herkuy=rand()%220+10;



	bool done=false;
	last=timeGetTime();


	while(!done)
	{
		// frameskipperi
		cur=timeGetTime();
		skip=(cur-last)*0.02f;
		last=cur;

		//kopioidaan tausta
		memcpy(dBuffer,taust,320*240*4);

		xw[0]+=xd*skip;
		yw[0]+=yd*skip;
		if(xw[0]>319)
		{
			ded=true;
			done=true;
		}
		if(xw[0]<1)
		{
			ded=true;
			done=true;
		}
		if(yw[0]>239)
		{
			ded=true;
			done=true;
		}
		if(yw[0]<1)
		{
			ded=true;
			done=true;
		}

		if(len>200)
		{
			for(c=10;c<len;c++)
			{
				if((int)xw[0]==(int)xw[c] &&
					(int)yw[0]==(int)yw[c])
				{
					ded=true;
					done=true;
				}
			}
		}



		for(c=0;c<len;c++)
		{
			dBuffer[((int)yw[c])*320+(int)xw[c]]=0x00ffffff;
		}
		for(int f=int(herkux-5.0f);f<int(herkux+5.0f);f++)
		{
			for(int g=int(herkuy-5.0f);g<int(herkuy+5.0f);g++)
			{
				dBuffer[g*320+f]=255;
			}
		}
		for(c=len-1;c>0;c--)
		{
			xw[c]=(int)xw[c-1];
			yw[c]=(int)yw[c-1];
		}
		if(xw[0]>=(herkux-5.0f) && xw[0]<=(herkux+5.0f) &&
			yw[0]>=(herkuy-5.0f) && yw[0]<=(herkuy+5.0f) )
		{
			// kerättiin herkku
			herkux=rand()%300+10;
			herkuy=rand()%220+10;

			len+=200;
			++score;

		}






		surf->Lock(NULL, &ddsd, DDLOCK_WAIT, NULL);

		int w=ddsd.dwWidth;
		int h=ddsd.dwHeight;
		int bpl=ddsd.lPitch;
		int bpp=32;
		char *dest = (char *) ddsd.lpSurface;
		char *src = (char *)dBuffer;
		_asm
		{
			mov edi,dest
			mov esi,src

			mov eax,w
			shl eax,2
			mov ebx,bpl
			sub ebx,eax
			mov eax,w
			mov ecx,h
        looppi:
			mov edx,ecx
			mov ecx,eax
			rep movsd
			add edi,ebx

		    mov ecx,edx
	        loop looppi
		}
		surf->Unlock(NULL);
		if(GetAsyncKeyState(VK_UP) & 0x8000)
		{
			yd=-SPEED;
			xd=0;
		}
		if(GetAsyncKeyState(VK_DOWN) & 0x8000)
		{
			yd=SPEED;
			xd=0;
		}
		if(GetAsyncKeyState(VK_LEFT) & 0x8000)
		{
			yd=0;
			xd=-SPEED;
		}
		if(GetAsyncKeyState(VK_RIGHT) & 0x8000)
		{
			yd=0;
			xd=SPEED;
		}
		if(GetAsyncKeyState(VK_ESCAPE) & 0x8000)
		{
			done=true;
		}
	}
	DestroyWindow(hWnd);
	if(ded)
	{
		char jal[255];
		sprintf(jal,"Kuolit, pisteet: %d",score);
		MessageBox(NULL,jal,"lutka",MB_OK);
	}

}

shadez [14.05.2003 19:46:22]

#

http://koti.mbnet.fi/~moonh/files/kukko.exe on binary

GeoHound [20.05.2003 15:59:27]

#

ahaa, tossa niinku kuolee ihan randomisti

T.M. [21.05.2003 13:25:13]

#

iha siisti

GeoHound, jos sulla ei oo mitää järkevää kommentoitavaa yleensäkki näistä koodivinkeistä, niin voit pitää pääs kiinni. (aina vaa valitusta...)

thefox [21.05.2003 17:52:59]

#

shadez on selvästi pistänyt parastaan -g-

nomic [22.05.2003 14:11:14]

#

toi on hauska itse innostuin täysin :D
toi on kuin suunniteltu mulle koska olen aloittanu vasta n. vuosi sitten
ja tosta sain uusia ideoita sekä pääsin leikkimään valmiilla koodilla niin ettei se turmeltuisi
:D
hienosti onnistunut minun mielestäni

shadez [22.05.2003 16:25:50]

#

joo kiitti! mulla meni about 4 kuukautta tän tekemiseen, niin hyvä että työ ei oo menny ihan hukkaan.. huh

Sami [25.05.2003 18:48:21]

#

4 kuukautta matopelin tekoon!? Mitenkä siihen niin kauan meni?

Dj Wolf [27.05.2003 09:24:04]

#

Kyllähän C on vähän vaikeampaa kuin joku QB :)

shadez [27.05.2003 17:57:30]

#

emmää tiie oon vähä beginner jne :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta