Cityrat 发表于 2004-6-9 14:48

MD!第二弹!!!这时候发机战搞笑漫画!

http://www.stage1st.com/bbs/upload/c53522ca914e9d084e3e73a07546ebd5.jpg
http://www.stage1st.com/bbs/upload/6ff71b8493a4a1bd4042f05ee3c75c59.jpg
http://www.stage1st.com/bbs/upload/2f20bf4d06d3e0022f3aa003ff74903a.jpg
http://www.stage1st.com/bbs/upload/cda098640d7a509346cb6a2c1ca9c230.jpg
http://www.stage1st.com/bbs/upload/fee0ddb1b58a3fbdca6d9bc8cddaba95.jpg
http://www.stage1st.com/bbs/upload/3f1404dde42ba19b887206ce02dc1f4a.jpg
http://www.stage1st.com/bbs/upload/e5c1efdc5b2ef9ca80075be1d014018e.jpg
http://www.stage1st.com/bbs/upload/5d2822c8fba7ce1c794bdb8e2d0fe00e.jpg
http://www.stage1st.com/bbs/upload/59bc548978b886ed79099da3da642772.jpg
http://www.stage1st.com/bbs/upload/90a1556b6e98df9943c9731fd7d6db43.jpg

sqf1981 发表于 2004-6-9 14:49

向大神献上我的最爱之1
http://home.pchome.com.tw/cool/usso/V2AB.jpg

dongdong-remix 发表于 2004-6-9 14:49

请大家排好队来月亮,哦,不,是太阳小白~

http://allgames.gamesh.com/srw/down/pic/desktop/gada36600.jpg

dongdong-remix 发表于 2004-6-9 14:50

最初由 鱼丸 发表
这贴垒的速度比我看的速度还快,受不了了

楼主,所谓Fans,就是听不进任何反面的声音的

以后提出意见,见解可以,但垃圾这个词儿是千万不敢乱说的啊

说什么是垃圾我不反对
但是空喊口号很讨厌
提出让人笑破肚皮的理论更讨厌
http://allgames.gamesh.com/srw/down/pic/desktop/pici/16.jpg

LALA 发表于 2004-6-9 14:50

最初由 fromhell 发表
天!
不懂装懂!??????
居然?!!!
我无语了。
是不是一定要我写一篇:“怎样用dx画点”的文章才行?????

写吧,写的好的话精华加顶
从这个角度看,我也能写个如何用PT上色……

change8224 发表于 2004-6-9 14:51

002 插个队 刚想到还没庆祝年度10大强贴第2个不二人选诞生呢

陌生的天 发表于 2004-6-9 14:51

XD~一页一首MID010
http://www.stage1st.com/bbs/temp/1bf1021f2fe28fbbbf28b9d55e3b842c.gif

fromhell 发表于 2004-6-9 14:51

dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb)

change8224 发表于 2004-6-9 14:53

最初由 鱼丸 发表
这贴垒的速度比我看的速度还快,受不了了

楼主,所谓Fans,就是听不进任何反面的声音的

以后提出意见,见解可以,但垃圾这个词儿是千万不敢乱说的啊

和反面没关系 机战我也有很多不满意的地方 不过没理由的乱说再用一些可笑的理论来掩饰再加不知道承认自己的不足实在是无法忍受啊























002 不过我真的是听了heats忍不住了才出手的啊 我真的有罪啊

明镜止水 发表于 2004-6-9 14:55

真顽强的楼主

http://imgphoto.21cn.com/albums/photos/7/2/2/7222494/1086761772.jpg

LALA 发表于 2004-6-9 14:55

最初由 fromhell 发表
dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb)

http://www.stage1st.com/bbs/temp/604fe25834d1163335510377d998cce9.gif

change8224 发表于 2004-6-9 14:56

最初由 fromhell 发表
dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb)

中心点是咋找到的涅?

john 发表于 2004-6-9 14:57

最初由 change8224 发表
中心点是咋找到的涅?... 指针啊,指针
真废柴,用指针往那里一指就出来了
<bgsound src=http://www.12101.com/john/midi/gm.mid loop=-1>

dongdong-remix 发表于 2004-6-9 14:57

我想楼主大概小白论坛混长了
以为自己很了不起吧~!
http://allgames.gamesh.com/srw/down/pic/gpic/G/G-04.jpg

Pluto_Shi 发表于 2004-6-9 14:58

果然是达人,不用任何函数就能得到指针地址……
拜,请把程序写出来让我们外行瞻仰瞻仰

fromhell 发表于 2004-6-9 15:00

给你个函数,自己去看吧。
void AlphaBlt(LPDIRECTDRAWSURFACE7 lpDDS,int lpDDSX,int lpDDSY,int RectTopX,int RectTopY,int RectBottomX,int RectBottomY){
        ZeroMemory(&ddsd_src,sizeof(ddsd_src));
        ddsd_src.dwSize=sizeof(ddsd_src);
        ZeroMemory(&ddsd_dest,sizeof(ddsd_dest));
        ddsd_dest.dwSize=sizeof(ddsd_dest);
        lpDDSBuffer->Lock(NULL,&ddsd_src,DDLOCK_WAIT,NULL);
        lpDDS->Lock(NULL,&ddsd_dest,DDLOCK_WAIT,NULL);
        _int64 mask=0x7f7f7f7f7f7f7f7f;
        int FirstPoint_src=lpDDSY*ddsd_src.lPitch+lpDDSX*4;
        int FirstPoint_dest=RectTopY*ddsd_dest.lPitch+RectTopX*4;
        int lpDDSHeight=RectBottomY-RectTopY;
        int lpDDSWidth=(RectBottomX-RectTopX)/2;
        _int64 Black=0x00000000ffffffff;
        _asm{
                mov eax,ddsd_src.lpSurface
                add eax,FirstPoint_src
                mov ebx,ddsd_dest.lpSurface
                add ebx,FirstPoint_dest
                mov edi,lpDDSHeight
FirstLoop:
                push eax
                push ebx
                mov esi,lpDDSWidth
SecondLoop:
                movq mm0,
                movq mm1,
          add ,0
                jnz NoBlack
                add ,0
                jz ColorKey
                pand mm1,Black
NoBlack:               
                psrlw mm0,1
                pand mm0,mask
                pand mm1,mask
                paddusb mm0,mm1
ColorKey:               
                movq ,mm0
                add eax,8
                add ebx,8
                dec esi
                jnz SecondLoop
                pop ebx
      pop eax
                add eax,ddsd_src.lPitch
                add ebx,ddsd_dest.lPitch
                dec edi
                jnz FirstLoop
                emms
        }
        lpDDSBuffer->Unlock(NULL);
        lpDDS->Unlock(NULL);
}
buffer是我建的一个后台缓存,放在内存里面,这样速度快。
lpdds是存我们要向上面贴的图的缓存,理论上跟buffer没有区别。
次函数的效果是将图贴到buffer上,并半透明。
好久没弄了,有些忘了。
像创建页面这种事情,形式基本固定,没有必要记住,只要关键的地方懂就行(我就记不住,每次都要照着看)

change8224 发表于 2004-6-9 15:01

最初由 john 发表
指针啊,指针
真废柴,用指针往那里一指就出来了
&lt;bgsound src=http://www.12101.com/john/midi/gm.mid loop=-1&gt;

040 我怎么给忘了。。。。该打

fxf 发表于 2004-6-9 15:01

过来留个位子,无他

Pluto_Shi 发表于 2004-6-9 15:02

可惜啊,这本书我也有
directdraw programming,坚果出版社出品,作者为bret timmins

john 发表于 2004-6-9 15:03

最初由 change8224 发表
040 我怎么给忘了。。。。该打... 真该打
调用的函数就是ppo,全称PointPointOut

fromhell 发表于 2004-6-9 15:03

补充一点:上面的函数还有将black作为颜色键的功能。
也就是说,black是不会贴到buffer上的。

fromhell 发表于 2004-6-9 15:03

最初由 Pluto_Shi 发表
可惜啊,这本书我也有
directdraw programming,坚果出版社出品,作者为bret timmins


这个,你看仔细了,可不同了!!

Pluto_Shi 发表于 2004-6-9 15:04

用不用我把页数也告诉你

fromhell 发表于 2004-6-9 15:05

而且,我也没有你说的书。摆托!!

dongdong-remix 发表于 2004-6-9 15:06

神奇了啊

http://allgames.gamesh.com/srw/down/pic/gpic/0093/0093-36.jpg

LALA 发表于 2004-6-9 15:07

楼主,我听说改神是自己做金手指的

你也做个给我们吧,那东西我感觉很复杂,一直不太会用,你这么厉害,能在功能不缩水的情况下简化一下么?

fromhell 发表于 2004-6-9 15:08

int PASCAL WinMain(HINSTANCE hinstance,HINSTANCE hPrevhinstance,LPSTR lpCmdLine,int windowmode){
        if(!initwindow(\"ExpForCopy\",hinstance,windowmode)||!initddraw()){
                MessageBox(hwnd,\"MyFish\",\"There must be something wrong!\",MB_OK);
                return false;
        }
        InitPicture();
        MSG msg;       
    for(;;){
                if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)){
                        if(msg.message==WM_QUIT){
                                MessageBox(hwnd,\"Let\'s us get out of this window\",\"gogogo\",MB_OK);
                                break;
                        }
                        TranslateMessage(&msg);
                        DispatchMessage(&msg);
                }
          else Refresh();
        }
        return msg.lParam;
}
bool initwindow(char *windowname,HINSTANCE hinstance,int windowmode){
        WNDCLASSEX win;
        win.cbSize=sizeof(WNDCLASSEX);
        win.style=CS_HREDRAW|CS_VREDRAW;
        win.lpfnWndProc=(WNDPROC)WinProc;
        win.cbClsExtra=0;
        win.cbWndExtra=0;
        win.hInstance=hinstance;
        win.hIcon=NULL;
        win.hCursor=NULL;
        win.hbrBackground=CreateSolidBrush(RGB(255,255,255));
        win.lpszMenuName=NULL;
        win.lpszClassName=windowname;
        win.hIconSm=NULL;
        RegisterClassEx(&win);
        hwnd=CreateWindow(windowname,windowname,WS_POPUP|WS_MAXIMIZE,CW_USEDEFAULT,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),NULL,NULL,hinstance,NULL);
        if(!hwnd)return false;
        ShowWindow(hwnd,windowmode);
        UpdateWindow(hwnd);
        return true;
}
LRESULT CALLBACK WinProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
        switch(message){
        case WM_KEYDOWN:
                switch(wParam){
                case VK_ESCAPE:
                        KillTimer(hwnd,0);
                        PostMessage(hwnd,WM_CLOSE,0,0);
                        break;
                case VK_DOWN:
                        if(snake.direction!=2)snake.direction=3;
                        break;
                case VK_UP:
                        if(snake.direction!=3)snake.direction=2;
                        break;
                case VK_LEFT:
                        if(snake.direction!=0)snake.direction=1;
                        break;
                case VK_RIGHT:
                        if(snake.direction!=1)snake.direction=0;
                        break;
                }
                return 0;
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hwnd,message,wParam,lParam);
}
bool initddraw(){
        if(DirectDrawCreateEx(NULL,(void**)&lpDD,IID_IDirectDraw7,NULL)!=DD_OK)return false;
        if(lpDD->SetCooperativeLevel(hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN|DDSCL_NOWINDOWCHANGES|DDSCL_ALLOWREBOOT)!=DD_OK)return false;
        if(lpDD->SetDisplayMode(1024,768,32,0,DDSDM_STANDARDVGAMODE)!=DD_OK)return false;
        memset(&ddsd,0,sizeof(DDSURFACEDESC2));
        ddsd.dwSize=sizeof(ddsd);
        ddsd.dwFlags=DDSD_CAPS;
        ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
        if(lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL)!=DD_OK)return false;
        ddsd.dwFlags=DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT;
        ddsd.ddsCaps.dwCaps=DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY;
        ddsd.dwHeight=768;
        ddsd.dwWidth=1024;
        if(lpDD->CreateSurface(&ddsd,&lpDDSBuffer,NULL)!=DD_OK)return false;
        for(int i=0;i<3;i++)if(lpDD->CreateSurface(&ddsd,&lpDDSBack,NULL)!=DD_OK)return false;
        for(int o=0;o<18;o++)if(lpDD->CreateSurface(&ddsd,&IpDDSBack,NULL)!=DD_OK)return false;
        hdc=::CreateCompatibleDC(NULL);
        return true;
}
bool LoadPicture(char *PictureName,int i,int Iorl){
        bitmap=(HBITMAP)::LoadImage(NULL,PictureName,IMAGE_BITMAP,1024,768,LR_LOADFROMFILE);
        ::SelectObject(hdc,bitmap);
        if(Iorl==1){
                if(lpDDSBack->GetSurfaceDesc(&ddsd)!=DD_OK)return false;
          if(lpDDSBack->GetDC(&hdc1)!=DD_OK)return false;
          ::BitBlt(hdc1,0,0,ddsd.dwWidth,ddsd.dwHeight,hdc,0,0,SRCCOPY);
          lpDDSBack->ReleaseDC(hdc1);
        }
        else{
                if(IpDDSBack->GetSurfaceDesc(&ddsd)!=DD_OK)return false;
          if(IpDDSBack->GetDC(&hdc1)!=DD_OK)return false;
          ::BitBlt(hdc1,0,0,ddsd.dwWidth,ddsd.dwHeight,hdc,0,0,SRCCOPY);
          IpDDSBack->ReleaseDC(hdc1);
        }
        return true;
}
void InitPicture(){
        LoadPicture(\"snakebody.bmp\",1,1);
        LoadPicture(\"rikku.bmp\",0,1);
        LoadPicture(\"fish.bmp\",2,1);
        LoadPicture(\"fishwater6.bmp\",5,0);
        LoadPicture(\"fishwater5.bmp\",4,0);
        LoadPicture(\"fishwater4.bmp\",3,0);
        LoadPicture(\"fishwater3.bmp\",2,0);
        LoadPicture(\"fishwater2.bmp\",1,0);
        LoadPicture(\"fishwater1.bmp\",0,0);
        LoadPicture(\"FishMonster6.bmp\",17,0);
        LoadPicture(\"FishMonster5.bmp\",16,0);
        LoadPicture(\"FishMonster4.bmp\",15,0);
        LoadPicture(\"FishMonster3.bmp\",14,0);
        LoadPicture(\"FishMonster2.bmp\",13,0);
        LoadPicture(\"FishMonster1.bmp\",12,0);
        LoadPicture(\"FishMonsterLeft6.bmp\",11,0);
        LoadPicture(\"FishMonsterLeft5.bmp\",10,0);
        LoadPicture(\"FishMonsterLeft4.bmp\",9,0);
        LoadPicture(\"FishMonsterLeft3.bmp\",8,0);
        LoadPicture(\"FishMonsterLeft2.bmp\",7,0);
        LoadPicture(\"FishMonsterLeft1.bmp\",6,0);
}
int RandEx(int max){
        srand(GetTickCount()*10000);
    return rand()%max;
}

bool IsTouch(LPDIRECTDRAWSURFACE7 lpDDS_src,int lpDDS_srcX,int lpDDS_srcY){
        ZeroMemory(&ddsd_src,sizeof(ddsd_src));
        ddsd_src.dwSize=sizeof(ddsd_src);
        lpDDS_src->Lock(NULL,&ddsd_src,DDLOCK_WAIT,NULL);
        BYTE *lPsrc=(BYTE*)ddsd_src.lpSurface;
        int Distance=lpDDS_srcY*ddsd_src.lPitch+lpDDS_srcX*4;
        int IsTouch=0;
        _asm{
                mov eax,lPsrc
                add eax,Distance
                mov ebx,
                cmp ebx,0
                jz NoTouch
                mov IsTouch,1
NoTouch:
                emms
        }
        lpDDS_src->Unlock(NULL);
        return IsTouch;
}
void CopyBlt(LPDIRECTDRAWSURFACE7 lpDDS_src,LPDIRECTDRAWSURFACE7 lpDDS_dest,int lpDD_srcX,int lpDD_srcY,int lpDD_destTopX,int lpDD_destTopY,int lpDD_destBottomX,int lpDD_destBottomY){
        ZeroMemory(&ddsd_src,sizeof(ddsd_src));
        ddsd_src.dwSize=sizeof(ddsd_src);
        ZeroMemory(&ddsd_dest,sizeof(ddsd_dest));
        ddsd_dest.dwSize=sizeof(ddsd_dest);
        lpDDS_src->Lock(NULL,&ddsd_src,DDLOCK_WAIT,NULL);
        lpDDS_dest->Lock(NULL,&ddsd_dest,DDLOCK_WAIT,NULL);
        BYTE *lPsrc=(BYTE*)ddsd_src.lpSurface;
        BYTE *lPdest=(BYTE*)ddsd_dest.lpSurface;
        int FirstPoint_src=lpDD_srcY*ddsd_src.lPitch+lpDD_srcX*4;
        int FirstPoint_dest=lpDD_destTopY*ddsd_dest.lPitch+lpDD_destTopX*4;
        int lpDD_destHeight=lpDD_destBottomY-lpDD_destTopY;
        int lpDD_destWidth=(lpDD_destBottomX-lpDD_destTopX)/2;
        _asm{
                mov eax,lPsrc
                add eax,FirstPoint_src
                mov ebx,lPdest
                add ebx,FirstPoint_dest
                mov edi,lpDD_destHeight
FirstLoop:
                push eax
                push ebx
                mov esi,lpDD_destWidth
SecondLoop:
                movq mm0,
                movq ,mm0
                add ebx,8
                add eax,8
                dec esi
                jnz SecondLoop
                pop ebx
                pop eax
                add eax,ddsd_src.lPitch
                add ebx,ddsd_dest.lPitch
                dec edi
                jnz FirstLoop
                emms
        }
    lpDDS_src->Unlock(NULL);
        lpDDS_dest->Unlock(NULL);
}
void AlphaBlt(LPDIRECTDRAWSURFACE7 lpDDS,int lpDDSX,int lpDDSY,int RectTopX,int RectTopY,int RectBottomX,int RectBottomY){
        ZeroMemory(&ddsd_src,sizeof(ddsd_src));
        ddsd_src.dwSize=sizeof(ddsd_src);
        ZeroMemory(&ddsd_dest,sizeof(ddsd_dest));
        ddsd_dest.dwSize=sizeof(ddsd_dest);
        lpDDSBuffer->Lock(NULL,&ddsd_src,DDLOCK_WAIT,NULL);
        lpDDS->Lock(NULL,&ddsd_dest,DDLOCK_WAIT,NULL);
        _int64 mask=0x7f7f7f7f7f7f7f7f;
        int FirstPoint_src=lpDDSY*ddsd_src.lPitch+lpDDSX*4;
        int FirstPoint_dest=RectTopY*ddsd_dest.lPitch+RectTopX*4;
        int lpDDSHeight=RectBottomY-RectTopY;
        int lpDDSWidth=(RectBottomX-RectTopX)/2;
        _int64 Black=0x00000000ffffffff;
        _asm{
                mov eax,ddsd_src.lpSurface
                add eax,FirstPoint_src
                mov ebx,ddsd_dest.lpSurface
                add ebx,FirstPoint_dest
                mov edi,lpDDSHeight
FirstLoop:
                push eax
                push ebx
                mov esi,lpDDSWidth
SecondLoop:
                movq mm0,
                movq mm1,
          add ,0
                jnz NoBlack
                add ,0
                jz ColorKey
                pand mm1,Black
NoBlack:               
                psrlw mm0,1
                pand mm0,mask
                pand mm1,mask
                paddusb mm0,mm1
ColorKey:               
                movq ,mm0
                add eax,8
                add ebx,8
                dec esi
                jnz SecondLoop
                pop ebx
      pop eax
                add eax,ddsd_src.lPitch
                add ebx,ddsd_dest.lPitch
                dec edi
                jnz FirstLoop
                emms
        }
        lpDDSBuffer->Unlock(NULL);
        lpDDS->Unlock(NULL);
}
void SnakeMove(){
        if(NumberOfSnake>=1)for(int i=NumberOfSnake;i>=1;i--){
                if(snake.direction==0){
                          if(snake.x>=10)snake.x=snake.x-10;
                                else snake.x=0;
                                snake.y=snake.y;
                }
                else if(snake.direction==1){
                        if(snake.x<=895)snake.x=snake.x+10;
                                else snake.x=905;
                                snake.y=snake.y;
                }
          else if(snake.direction==2){
            if(snake.y<=610)snake.y=snake.y+10;
                        else snake.y=620;
                        snake.x=snake.x;
                }
                else if(snake.direction==3){
                        if(snake.y>=10)snake.y=snake.y-10;
                        else snake.y=0;
                        snake.x=snake.x;
                }
        }
   if(snake.direction==0){
                if(snake.x<=925)snake.x=snake.x+snake.speed;
                else snake.death=1;
        }
        else if(snake.direction==1){
                if(snake.x>=5)snake.x=snake.x-snake.speed;
          else snake.death=1;
        }
        else if(snake.direction==2){
                if(snake.y>=5)snake.y=snake.y-snake.speed;
                else snake.death=1;
        }
        else if(snake.direction==3){
          if(snake.y<=680)snake.y=snake.y+snake.speed;
                else snake.death=1;
        }
}
void Refresh(){
        Dead();
        if(snake.death==0){
                FishInWater();
          eated();
      SnakeMove();       
          Rendfish();
          for(int i=0;i<=NumberOfSnake;i++)AlphaBlt(lpDDSBack,snake.x,snake.y,snake.ImageTopX,snake.ImageTopY,snake.ImageButtomX,snake.ImageButtomY);
          DisplayScore(\"你的分数:\",0,0);
      DisplayScore(ItoA(),100,0);
          CopyBlt(lpDDSPrimary,lpDDSBuffer,0,0,0,0,1024,768);
        }
        else{
                CopyBlt(lpDDSPrimary,lpDDSBack,0,0,0,0,1024,768);
        }
}
void Rendfish(){
        if(fish.exist==0){
                fish.x=RandEx(100)*9.5;
                fish.y=RandEx(100)*6.5;
                fish.exist=1;
        }
}
void eated(){
        if(fish.exist==1)if(snake.y-fish.y>=snake.ImageTopY-snake.ImageButtomY&&snake.y-fish.y<=fish.ImageButtomYL-fish.ImageTopYL&&snake.x-fish.x<=fish.ImageButtomXL-fish.ImageTopXL&&snake.x-fish.x>=snake.ImageTopX-snake.ImageButtomX){
                if(fish.Direction==0){
                        if(snake.direction==1){
                                if(IsTouch(IpDDSBack,fish.ImageTopXL+(snake.x+snake.width-fish.x),fish.ImageTopYL+(snake.y+snake.height/2-fish.y))){   
                      fish.exist=0;
                      junction();
                                  score=score+interval;
                                  interval+=5;
                                }
                        }
                else if(snake.direction==0){
                         if(IsTouch(IpDDSBack,fish.ImageTopXL+(snake.x-fish.x),fish.ImageTopYL+snake.y+(snake.height/2-fish.y))){   
                           fish.exist=0;
                         junction();
                                 score=score+interval;
                                 interval+=5;
                               }
                        }
                  else if(snake.direction==2){
                             if(IsTouch(IpDDSBack,fish.ImageTopXL+(snake.x+snake.width/2-fish.x),fish.ImageTopYL+(snake.y-fish.y))){   
                     fish.exist=0;
                         junction();
                                 score=score+interval;
                                 interval+=5;
                               }
                        }
                  else{
                          if(IsTouch(IpDDSBack,fish.ImageTopXL+(snake.x+snake.width/2-fish.x),fish.ImageTopYL+(snake.y+snake.height-fish.y))){   
                  fish.exist=0;
                      junction();
                                score=score+interval;
                                interval+=5;
                                }
                        }
                }
          if(fish.Direction==6){
                        if(snake.direction==1){
                                if(IsTouch(IpDDSBack,fish.ImageTopXR+(snake.x+snake.width-fish.x),fish.ImageTopYR+(snake.y+snake.height/2-fish.y))){   
                      fish.exist=0;
                      junction();
                                  score=score+interval;
                                  interval+=5;

                                }
                        }
             else if(snake.direction==0){
                     if(IsTouch(IpDDSBack,fish.ImageTopXR+(snake.x-fish.x),fish.ImageTopYR+(snake.y+snake.height/2-fish.y))){   
                           fish.exist=0;
                       junction();
                             score=score+interval;
                             interval+=5;
                           }
                   }
                  else if(snake.direction==2){
                           if(IsTouch(IpDDSBack,fish.ImageTopXR+(snake.x+snake.width/2-fish.x),fish.ImageTopYR+(snake.y-fish.y))){   
                   fish.exist=0;
                       junction();
                             score=score+interval;
                             interval+=5;
                           }
                  }
               else{
                          if(IsTouch(IpDDSBack,fish.ImageTopXR+(snake.x+snake.width/2-fish.x),fish.ImageTopYR+(snake.y+snake.height-fish.y))){   
                  fish.exist=0;
                      junction();
                              score=score+interval;
                              interval+=5;
                          }
               }
                }
        }
}
void junction(){
        NumberOfSnake++;
        switch(snake.direction){
        case 0:
                if(snake.x>=10)snake.x=snake.x-10;
                else snake.x=0;
                snake.y=snake.y;
                break;
        case 1:
                if(snake.x<=895)snake.x=snake.x+10;
                else snake.x=905;
                snake.y=snake.y;
          break;
        case 2:
      if(snake.y<=610)snake.y=snake.y+10;
                else snake.y=620;
                snake.x=snake.x;
          break;
        case 3:
                if(snake.y>=10)snake.y=snake.y-10;
                else snake.y=0;       
                snake.x=snake.x;
          break;
        }
}
void DisplayScore(char *Score,int x,int y){
        if (lpDDSBuffer->GetDC(&hdc) == DD_OK) {
            SetBkColor(hdc, RGB(0, 0, 255));
      SetTextColor(hdc, RGB(255, 255, 0));
      TextOut(hdc,x,y, Score, strlen(Score));
            lpDDSBuffer->ReleaseDC(hdc);
        }
}
char *ItoA(){
        int s=score;
        char* a=(char*)malloc(sizeof(char));
        a=itoa(score,a,10);
        return a;
}
void Dead(){
        if(NumberOfSnake>=10)for(int i=NumberOfSnake;i>=10;i--){
          if(snake.y-snake.y>=snake.ImageTopY-snake.ImageButtomY&&snake.y-snake.y<=snake.ImageButtomY-snake.ImageTopY&&snake.x-snake.x<=snake.ImageButtomX-snake.ImageTopX&&snake.x-snake.x>=snake.ImageTopX-snake.ImageButtomX){
         if(snake.direction==0){
                          if(IsTouch(IpDDSBack,snake.ImageTopX+(snake.x-snake.x),snake.ImageTopY+snake.y+(snake.height/2-snake.y))){   
                           snake.death=1;
                               }
                }
                else if(snake.direction==1){
                                if(IsTouch(lpDDSBack,snake.ImageTopX+(snake.x+snake.width-snake.x),snake.ImageTopY+(snake.y+snake.height/2-snake.y))){   
                         snake.death=1;
                                }
                }
          else if(snake.direction==2){
                       if(IsTouch(IpDDSBack,snake.ImageTopX+(snake.x+snake.width/2-snake.x),fish.ImageTopYL+(snake.y-snake.y))){   
                     snake.death=1;
                               }
                }
                else if(snake.direction==3){
                       if(IsTouch(IpDDSBack,snake.ImageTopX+(snake.x+snake.width/2-snake.x),snake.ImageTopY+(snake.y+snake.height-snake.y))){   
                  snake.death=1;
                                }
                }
          }
        }
}

/////////////////////////////////////////////////////////////////////////////////////////////
void FishInWater(){
        if(water.exist==0){
                while(!(water.height=RandEx(5)*21*(WaterNumber+1))||water.height>=703);
          water.width=RandEx(10)*7*(WaterNumber+1);
                water.WaterSize=2;
      water.exist=1;
                }
        if(PictureNumber>5){
                        PictureNumber=RandEx(5);
                }
        CopyBlt(lpDDSBuffer,IpDDSBack,0,0,0,0,1024,768);
        if(!(FishTimer%4)){
                if(fish.IsStop==1){
                        fish.FishSpeed--;
                        if(fish.FishSpeed<=1)fish.FishSpeed=1;
                  FishMoveNumber=6+fish.Direction;
                }
          else{
                  FishMoveNumber++;
                        fish.FishSpeed++;
                }
                if(fish.x<=2){
                        fish.Direction=6;
                        FishMoveNumber+=fish.Direction;
                        }
                else if(fish.x>=650){
                        FishMoveNumber-=fish.Direction;
                        fish.Direction=0;
                        }
                if(FishMoveNumber>11+fish.Direction)FishMoveNumber=6+fish.Direction;
                if(fish.FishSpeed>=5)fish.FishSpeed=5;
                else if(fish.FishSpeed<=0)fish.FishSpeed=0;
                if(fish.Direction==0){
                        fish.x-=fish.FishSpeed;
                }
                else{
                        fish.x+=fish.FishSpeed;
                }
           if(!(FishTimer%160)){
                        if(RandEx(99)>50)FishUpDown=1;
                        else FishUpDown=0;
                }
                if(FishUpDown==0){
                        fish.y--;
                        if(fish.y<148)fish.y=148;
                }
                else{
                        fish.y++;
                        if(fish.y>678)fish.y=678;
                }
        }
        if(fish.IsStop==0)
                if(RandEx(100)<1){
                        fish.IsStop=1;
                }
        for(int i=0;i<=9;i++){
               if(water.exist==1){
                       if(water.height<=148){
                               water.exist=0;
                        }
               else if(!(WaterPointTimer%5)){
                          if(water.height<700&&water.height>600)water.width-=10;
                          else if(water.height<500&&water.height>400)water.width-=7;
            else if(water.height<300&&water.height>200)water.width-=5;
                          else {
                                water.width+=10;
                                water.WaterSize++;
                          }
                        water.height-=15;
                   }
                DrawWater(i);
                }
        }
        if(fish.Direction==0)AlphaBlt(IpDDSBack,fish.x,fish.y,fish.ImageTopXL,fish.ImageTopYL,fish.ImageButtomXL,fish.ImageButtomYL);
    else AlphaBlt(IpDDSBack,fish.x,fish.y,fish.ImageTopXR,fish.ImageTopYR,fish.ImageButtomXR,fish.ImageButtomYR);
        if(!(WaterTimer%8))PictureNumber++;
        if(fish.IsStop==1)if(RandEx(100)<5)fish.IsStop=0;
        WaterTimer++;
        FishTimer++;
        WaterPointTimer++;
}
void DrawWater(int i){
        lpDDSBuffer->GetDC(&hdc);
        SelectObject(hdc,hpen);
        SelectObject(hdc,hbrush1);
        Ellipse(hdc,water.width,water.height,water.width+water.WaterSize,water.height+water.WaterSize);
        SelectObject(hdc,hbrush2);
        Ellipse(hdc,water.width+water.WaterSize/4,water.height+water.WaterSize/4,water.width+water.WaterSize/2,water.height+water.WaterSize/2);
    lpDDSBuffer->ReleaseDC(hdc);
}
void Light(int CircleHalfLong,int CircleX,int CircleY,int Bright){
       
        for(int H=0;H<768;H++)
                for(int W=0;W<1024;W++){
                        int l=((H-CircleY)*(H-CircleY)+(W-CircleX)*(W-CircleX))/(CircleHalfLong*CircleHalfLong);
                        if(l<=1)
                                BaseLightTable=Bright/3;
                        else BaseLightTable=Bright;
                }
        ZeroMemory(&ddsd,sizeof(ddsd));
        ddsd.dwSize=sizeof(ddsd);
        lpDDSBuffer->Lock(NULL,&ddsd,DDLOCK_WAIT,NULL);
        _int8 *lPsrc=(_int8*)ddsd.lpSurface;
        _int8 *LightTable=(_int8*)BaseLightTable;
        _asm{
                mov eax,lPsrc
                mov ebx,LightTable
                mov edi,768
FirstLoop:
                push eax
                mov esi,512
SecondLoop:
                movq mm0,
                movq mm1,
                punpcklbw mm1,mm1
                punpcklbw mm1,mm1
                psubusb mm0,mm1
                movq ,mm0
                add eax,8
                add ebx,2
                dec esi
                jnz SecondLoop
                pop eax
                add eax,ddsd.lPitch
                dec edi
                jnz FirstLoop
                emms
        }
        lpDDSBuffer->Unlock(NULL);
}
贴不下了!
你逼我的!

fromhell 发表于 2004-6-9 15:10

最初由 LALA 发表
楼主,我听说改神是自己做金手指的

你也做个给我们吧,那东西我感觉很复杂,一直不太会用,你这么厉害,能在功能不缩水的情况下简化一下么?

我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)

dongdong-remix 发表于 2004-6-9 15:11

那您给我们看您的演示吧
您不是说要画面好吗?

http://allgames.gamesh.com/srw/down/pic/gpic/0093/0093-24.jpg

change8224 发表于 2004-6-9 15:11

最初由 fromhell 发表
我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)...

023 奇怪了 谁说过你是改神了

LALA 发表于 2004-6-9 15:11

最初由 fromhell 发表
我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)...

……

我知道你不是改神,改神是跟你程序大战的那位

古话说:知己知彼,百战不殆……

杨 泉 发表于 2004-6-9 15:12

最初由 fromhell 发表
我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)...
楼主画一个前凸后翘腿子长的MM给我瞻仰下行不行
我快睡着了

john 发表于 2004-6-9 15:12

最初由 fromhell 发表
我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)... 那您为什么还有兴趣陪我们一帮小P孩讨论一个垃圾游戏中基本得不能再基本的问题<bgsound src=http://www.12101.com/john/midi/aisenshi.mid loop=-1>

Pluto_Shi 发表于 2004-6-9 15:12

那本书是带盘的,里面有无数程序代码
马上下课了,晚上再来看

fromhell 发表于 2004-6-9 15:12

那你也要给我画才行呀!

fromhell 发表于 2004-6-9 15:13

最初由 Pluto_Shi 发表
那本书是带盘的,里面有无数程序代码
马上下课了,晚上再来看


好吧,那我的都是抄的,行了吧!!

杨 泉 发表于 2004-6-9 15:13

最初由 fromhell 发表
那你也要给我画才行呀!

救命啊....我用意念制止了你么?
难道我的NT力如此强?

fromhell 发表于 2004-6-9 15:13

最初由 john 发表
那您为什么还有兴趣陪我们一帮小P孩讨论一个垃圾游戏中基本得不能再基本的问题&lt;bgsound src=http://www.12101.com/john/midi/aisenshi.mid loop=-1&gt;...


兴趣不能多样吗?

cloudcc 发表于 2004-6-9 15:13

杨 泉 发表于 2004-6-9 15:13

最初由 fromhell 发表
好吧,那我的都是抄的,行了吧!!

行了
不用谢
页: 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21
查看完整版本: 拜神!精彩!!不看不算来过S1!!!关于机战中做得不到