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.