找回密码
 立即注册
搜索
楼主: fromhell

拜神!精彩!!不看不算来过S1!!!关于机战中做得不到

  [复制链接]
     
发表于 2004-6-9 14:48 | 显示全部楼层

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










回复

使用道具 举报

     
发表于 2004-6-9 14:49 | 显示全部楼层
向大神献上我的最爱之1
回复

使用道具 举报

发表于 2004-6-9 14:49 | 显示全部楼层
请大家排好队来月亮,哦,不,是太阳小白~

回复

使用道具 举报

发表于 2004-6-9 14:50 | 显示全部楼层
最初由 鱼丸 发表
[B]这贴垒的速度比我看的速度还快,受不了了

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

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


说什么是垃圾我不反对
但是空喊口号很讨厌
提出让人笑破肚皮的理论更讨厌
回复

使用道具 举报

发表于 2004-6-9 14:50 | 显示全部楼层
最初由 fromhell 发表
[B]天!
不懂装懂!??????
居然?!!!
我无语了。
是不是一定要我写一篇:“怎样用dx画点”的文章才行????? [/B]


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

使用道具 举报

     
发表于 2004-6-9 14:51 | 显示全部楼层
[m]002[/m] 插个队 刚想到还没庆祝年度10大强贴第2个不二人选诞生呢
回复

使用道具 举报

发表于 2004-6-9 14:51 | 显示全部楼层
XD~一页一首MID[m]010[/m]
回复

使用道具 举报

 楼主| 发表于 2004-6-9 14:51 | 显示全部楼层
dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb)
回复

使用道具 举报

     
发表于 2004-6-9 14:53 | 显示全部楼层
最初由 鱼丸 发表
[B]这贴垒的速度比我看的速度还快,受不了了

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

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


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























[m]002[/m] 不过我真的是听了heats忍不住了才出手的啊 我真的有罪啊
回复

使用道具 举报

     
发表于 2004-6-9 14:55 | 显示全部楼层
真顽强的楼主

回复

使用道具 举报

发表于 2004-6-9 14:55 | 显示全部楼层
最初由 fromhell 发表
[B]dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb) [/B]


回复

使用道具 举报

     
发表于 2004-6-9 14:56 | 显示全部楼层
最初由 fromhell 发表
[B]dx8.0虽然把ddraw和dx3d合成了dxgraph,但个人才疏学浅,还是习惯于ddraw。
要画点,我们首先将页面LOCK,此时可以得到页面的首指针。
然后,我们可以通过将指针移动到我们要的点,在mov给它一个32bit的值(rgb) [/B]


中心点是咋找到的涅?
回复

使用道具 举报

     
发表于 2004-6-9 14:57 | 显示全部楼层
最初由 change8224 发表
[B]中心点是咋找到的涅?... [/B]
指针啊,指针
真废柴,用指针往那里一指就出来了
<bgsound src=http://www.12101.com/john/midi/gm.mid loop=-1>
回复

使用道具 举报

发表于 2004-6-9 14:57 | 显示全部楼层
我想楼主大概小白论坛混长了
以为自己很了不起吧~!
回复

使用道具 举报

发表于 2004-6-9 14:58 | 显示全部楼层
果然是达人,不用任何函数就能得到指针地址……
拜,请把程序写出来让我们外行瞻仰瞻仰
回复

使用道具 举报

 楼主| 发表于 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,[eax]
                movq mm1,[ebx]
            add [ebx],0
                jnz NoBlack
                add [ebx+4],0
                jz ColorKey
                pand mm1,Black
NoBlack:               
                psrlw mm0,1
                pand mm0,mask
                pand mm1,mask
                paddusb mm0,mm1
ColorKey:               
                movq [eax],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上,并半透明。
好久没弄了,有些忘了。
像创建页面这种事情,形式基本固定,没有必要记住,只要关键的地方懂就行(我就记不住,每次都要照着看)
回复

使用道具 举报

     
发表于 2004-6-9 15:01 | 显示全部楼层
最初由 john 发表
[B]指针啊,指针
真废柴,用指针往那里一指就出来了
&lt;bgsound src=http://www.12101.com/john/midi/gm.mid loop=-1&gt; [/B]


[m]040[/m] 我怎么给忘了。。。。该打
回复

使用道具 举报

发表于 2004-6-9 15:01 | 显示全部楼层
过来留个位子,无他
回复

使用道具 举报

发表于 2004-6-9 15:02 | 显示全部楼层
可惜啊,这本书我也有
directdraw programming,坚果出版社出品,作者为bret timmins
回复

使用道具 举报

     
发表于 2004-6-9 15:03 | 显示全部楼层
最初由 change8224 发表
[B][m]040[/m] 我怎么给忘了。。。。该打... [/B]
真该打
调用的函数就是ppo,全称PointPointOut
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:03 | 显示全部楼层
补充一点:上面的函数还有将black作为颜色键的功能。
也就是说,black是不会贴到buffer上的。
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:03 | 显示全部楼层
最初由 Pluto_Shi 发表
[B]可惜啊,这本书我也有
directdraw programming,坚果出版社出品,作者为bret timmins [/B]



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

使用道具 举报

发表于 2004-6-9 15:04 | 显示全部楼层
用不用我把页数也告诉你
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:05 | 显示全部楼层
而且,我也没有你说的书。摆托!!
回复

使用道具 举报

发表于 2004-6-9 15:06 | 显示全部楼层
神奇了啊

回复

使用道具 举报

发表于 2004-6-9 15:07 | 显示全部楼层
楼主,我听说改神是自己做金手指的

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

使用道具 举报

 楼主| 发表于 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[0].direction!=2)snake[0].direction=3;
                        break;
                case VK_UP:
                        if(snake[0].direction!=3)snake[0].direction=2;
                        break;
                case VK_LEFT:
                        if(snake[0].direction!=0)snake[0].direction=1;
                        break;
                case VK_RIGHT:
                        if(snake[0].direction!=1)snake[0].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[o],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,[eax]
                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,[ebx]
                movq [eax],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,[eax]
                movq mm1,[ebx]
            add [ebx],0
                jnz NoBlack
                add [ebx+4],0
                jz ColorKey
                pand mm1,Black
NoBlack:               
                psrlw mm0,1
                pand mm0,mask
                pand mm1,mask
                paddusb mm0,mm1
ColorKey:               
                movq [eax],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[0].direction==0){
                            if(snake[i-1].x>=10)snake.x=snake[i-1].x-10;
                                else snake.x=0;
                                snake.y=snake[i-1].y;
                }
                else if(snake[0].direction==1){
                        if(snake[i-1].x<=895)snake.x=snake[i-1].x+10;
                                else snake.x=905;
                                snake.y=snake[i-1].y;
                }
            else if(snake[0].direction==2){
            if(snake[i-1].y<=610)snake.y=snake[i-1].y+10;
                        else snake.y=620;
                        snake.x=snake[i-1].x;
                }
                else if(snake[0].direction==3){
                        if(snake[i-1].y>=10)snake.y=snake[i-1].y-10;
                        else snake.y=0;
                        snake.x=snake[i-1].x;
                }
        }
   if(snake[0].direction==0){
                if(snake[0].x<=925)snake[0].x=snake[0].x+snake[0].speed;
                else snake[0].death=1;
        }
        else if(snake[0].direction==1){
                if(snake[0].x>=5)snake[0].x=snake[0].x-snake[0].speed;
            else snake[0].death=1;
        }
        else if(snake[0].direction==2){
                if(snake[0].y>=5)snake[0].y=snake[0].y-snake[0].speed;
                else snake[0].death=1;
        }
        else if(snake[0].direction==3){
            if(snake[0].y<=680)snake[0].y=snake[0].y+snake[0].speed;
                else snake[0].death=1;
        }
}
void Refresh(){
        Dead();
        if(snake[0].death==0){
                FishInWater();
            eated();
        SnakeMove();       
            Rendfish();
            for(int i=0;i<=NumberOfSnake;i++)AlphaBlt(lpDDSBack[1],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,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[0].y-fish.y>=snake[0].ImageTopY-snake[0].ImageButtomY&&snake[0].y-fish.y<=fish.ImageButtomYL-fish.ImageTopYL&&snake[0].x-fish.x<=fish.ImageButtomXL-fish.ImageTopXL&&snake[0].x-fish.x>=snake[0].ImageTopX-snake[0].ImageButtomX){
                if(fish.Direction==0){
                        if(snake[0].direction==1){
                                if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXL+(snake[0].x+snake[0].width-fish.x),fish.ImageTopYL+(snake[0].y+snake[0].height/2-fish.y))){   
                        fish.exist=0;
                        junction();
                                    score=score+interval;
                                    interval+=5;
                                }
                        }
                else if(snake[0].direction==0){
                         if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXL+(snake[0].x-fish.x),fish.ImageTopYL+snake[0].y+(snake[0].height/2-fish.y))){   
                             fish.exist=0;
                         junction();
                                 score=score+interval;
                                 interval+=5;
                                 }
                        }
                    else if(snake[0].direction==2){
                             if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXL+(snake[0].x+snake[0].width/2-fish.x),fish.ImageTopYL+(snake[0].y-fish.y))){   
                     fish.exist=0;
                         junction();
                                 score=score+interval;
                                 interval+=5;
                                 }
                        }
                    else{
                            if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXL+(snake[0].x+snake[0].width/2-fish.x),fish.ImageTopYL+(snake[0].y+snake[0].height-fish.y))){   
                    fish.exist=0;
                        junction();
                                score=score+interval;
                                interval+=5;
                                }
                        }
                }
            if(fish.Direction==6){
                        if(snake[0].direction==1){
                                if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXR+(snake[0].x+snake[0].width-fish.x),fish.ImageTopYR+(snake[0].y+snake[0].height/2-fish.y))){   
                        fish.exist=0;
                        junction();
                                    score=score+interval;
                                    interval+=5;

                                }
                        }
               else if(snake[0].direction==0){
                       if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXR+(snake[0].x-fish.x),fish.ImageTopYR+(snake[0].y+snake[0].height/2-fish.y))){   
                           fish.exist=0;
                       junction();
                               score=score+interval;
                               interval+=5;
                           }
                   }
                  else if(snake[0].direction==2){
                           if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXR+(snake[0].x+snake[0].width/2-fish.x),fish.ImageTopYR+(snake[0].y-fish.y))){   
                   fish.exist=0;
                       junction();
                               score=score+interval;
                               interval+=5;
                           }
                  }
                 else{
                          if(IsTouch(IpDDSBack[FishMoveNumber],fish.ImageTopXR+(snake[0].x+snake[0].width/2-fish.x),fish.ImageTopYR+(snake[0].y+snake[0].height-fish.y))){   
                  fish.exist=0;
                      junction();
                              score=score+interval;
                              interval+=5;
                          }
                 }
                }
        }
}  
void junction(){
        NumberOfSnake++;
        switch(snake[0].direction){
        case 0:
                if(snake[NumberOfSnake-1].x>=10)snake[NumberOfSnake].x=snake[NumberOfSnake-1].x-10;
                else snake[NumberOfSnake].x=0;
                snake[NumberOfSnake].y=snake[NumberOfSnake-1].y;
                break;
        case 1:
                if(snake[NumberOfSnake-1].x<=895)snake[NumberOfSnake].x=snake[NumberOfSnake-1].x+10;
                else snake[NumberOfSnake].x=905;
                snake[NumberOfSnake].y=snake[NumberOfSnake-1].y;
            break;
        case 2:
        if(snake[NumberOfSnake-1].y<=610)snake[NumberOfSnake].y=snake[NumberOfSnake-1].y+10;
                else snake[NumberOfSnake].y=620;
                snake[NumberOfSnake].x=snake[NumberOfSnake-1].x;
            break;
        case 3:
                if(snake[NumberOfSnake-1].y>=10)snake[NumberOfSnake].y=snake[NumberOfSnake-1].y-10;
                else snake[NumberOfSnake].y=0;       
                snake[NumberOfSnake].x=snake[NumberOfSnake-1].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[0].y-snake.y>=snake[0].ImageTopY-snake[0].ImageButtomY&&snake[0].y-snake.y<=snake.ImageButtomY-snake.ImageTopY&&snake[0].x-snake.x<=snake.ImageButtomX-snake.ImageTopX&&snake[0].x-snake.x>=snake[0].ImageTopX-snake[0].ImageButtomX){
         if(snake[0].direction==0){
                          if(IsTouch(IpDDSBack[1],snake.ImageTopX+(snake[0].x-snake.x),snake.ImageTopY+snake[0].y+(snake[0].height/2-snake.y))){   
                           snake[0].death=1;
                                 }
                }
                else if(snake[0].direction==1){
                                if(IsTouch(lpDDSBack[1],snake.ImageTopX+(snake[0].x+snake[0].width-snake.x),snake.ImageTopY+(snake[0].y+snake[0].height/2-snake.y))){   
                         snake[0].death=1;
                                }
                }
            else if(snake[0].direction==2){
                         if(IsTouch(IpDDSBack[1],snake.ImageTopX+(snake[0].x+snake[0].width/2-snake.x),fish.ImageTopYL+(snake[0].y-snake.y))){   
                     snake[0].death=1;
                                 }
                }
                else if(snake[0].direction==3){
                         if(IsTouch(IpDDSBack,snake.ImageTopX+(snake[0].x+snake[0].width/2-snake.x),snake.ImageTopY+(snake[0].y+snake[0].height-snake.y))){   
                    snake[0].death=1;
                                }
                }
          }
        }
}

/////////////////////////////////////////////////////////////////////////////////////////////
void FishInWater(){
        if(water[WaterNumber=RandEx(9)].exist==0){
                while(!(water[WaterNumber].height=RandEx(5)*21*(WaterNumber+1))||water[WaterNumber].height>=703);
            water[WaterNumber].width=RandEx(10)*7*(WaterNumber+1);
                water[WaterNumber].WaterSize=2;
        water[WaterNumber].exist=1;
                }
        if(PictureNumber>5){
                        PictureNumber=RandEx(5);
                }
        CopyBlt(lpDDSBuffer,IpDDSBack[PictureNumber],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[FishMoveNumber],fish.x,fish.y,fish.ImageTopXL,fish.ImageTopYL,fish.ImageButtomXL,fish.ImageButtomYL);
    else AlphaBlt(IpDDSBack[FishMoveNumber],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[W+H*1024]=Bright/3;
                        else BaseLightTable[W+H*1024]=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,[eax]
                movq mm1,[ebx]
                punpcklbw mm1,mm1
                punpcklbw mm1,mm1
                psubusb mm0,mm1
                movq [eax],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);
}
贴不下了!
你逼我的!
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:10 | 显示全部楼层
最初由 LALA 发表
[B]楼主,我听说改神是自己做金手指的

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


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

使用道具 举报

发表于 2004-6-9 15:11 | 显示全部楼层
那您给我们看您的演示吧
您不是说要画面好吗?

回复

使用道具 举报

     
发表于 2004-6-9 15:11 | 显示全部楼层
最初由 fromhell 发表
[B]我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)... [/B]


[m]023[/m] 奇怪了 谁说过你是改神了
回复

使用道具 举报

发表于 2004-6-9 15:11 | 显示全部楼层
最初由 fromhell 发表
[B]我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)... [/B]


……

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

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

使用道具 举报

     
发表于 2004-6-9 15:12 | 显示全部楼层
最初由 fromhell 发表
[B]我不是什么改神!
我的兴趣主要是怎样做好的画面(现研究3d)... [/B]

楼主画一个前凸后翘腿子长的MM给我瞻仰下行不行
我快睡着了
回复

使用道具 举报

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

使用道具 举报

发表于 2004-6-9 15:12 | 显示全部楼层
那本书是带盘的,里面有无数程序代码
马上下课了,晚上再来看
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:12 | 显示全部楼层
那你也要给我画才行呀!
回复

使用道具 举报

 楼主| 发表于 2004-6-9 15:13 | 显示全部楼层
最初由 Pluto_Shi 发表
[B]那本书是带盘的,里面有无数程序代码
马上下课了,晚上再来看 [/B]



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

使用道具 举报

     
发表于 2004-6-9 15:13 | 显示全部楼层
最初由 fromhell 发表
[B]那你也要给我画才行呀! [/B]


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

使用道具 举报

 楼主| 发表于 2004-6-9 15:13 | 显示全部楼层
最初由 john 发表
[B]那您为什么还有兴趣陪我们一帮小P孩讨论一个垃圾游戏中基本得不能再基本的问题&lt;bgsound src=http://www.12101.com/john/midi/aisenshi.mid loop=-1&gt;... [/B]



兴趣不能多样吗?
回复

使用道具 举报

头像被屏蔽
     
发表于 2004-6-9 15:13 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2004-6-9 15:13 | 显示全部楼层
最初由 fromhell 发表
[B]好吧,那我的都是抄的,行了吧!! [/B]


行了
不用谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-11-26 06:41 , Processed in 0.296652 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表