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);
}
}ahaa, tossa niinku kuolee ihan randomisti
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...)
shadez on selvästi pistänyt parastaan -g-
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
joo kiitti! mulla meni about 4 kuukautta tän tekemiseen, niin hyvä että työ ei oo menny ihan hukkaan.. huh
4 kuukautta matopelin tekoon!? Mitenkä siihen niin kauan meni?
Kyllähän C on vähän vaikeampaa kuin joku QB :)
emmää tiie oon vähä beginner jne :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.