⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qq堂小游戏 (原创 vc++实现).txt

📁 Vc++入门的捷径 一些c++的小问题 以及代码大全 maybe something about the difficulty in studying C
💻 TXT
字号:
QQ堂小游戏 (原创 VC++实现)
评论/浏览(16/78)发表时间:2007年5月29日 21时3分 
 
[%repeat_0 match="/data/option"%] [%=@title%] [%=@count%]票 [[%=@percent%]%] 
[%_repeat_0%] 
 
 
最近研究游戏编程(学了差不多1个星期),嫌着上课无事,写了个五子棋游戏,在这里发下.因为里面有用到一些图片,这里又发不下,如果有兴趣的朋友,留下邮箱,我把完整的程序发到你们邮箱里面去. #include <windows.h> 
#include<time.h> 
#include<stdio.h> 
HINSTANCE hInst; 
HWND hWnd; 

ATOM    MyRegisterClass(HINSTANCE hInstance); 
BOOL    InitInstance(HINSTANCE, int); 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
void MyPaint(); 
void Move(WPARAM key); 
void FangLei(); 
void ShowBaoZha(int k); 
void BaoZha(int k); 
void Computer(); 
void ShowInfo(); 
unsigned long now,pass; 
int pH=40,pW=40; 
const int bmpNum=14; 
HBITMAP bmp[bmpNum],bufBmp; 
HDC mdc,hdc,bufDC; 
int manY=1; 
const int bMaxNum=10; 
const int w=13,h=8; 
const int bgW=614,bgH=555; 
const int bMaxLen=10; 
int manNum=0; 
int cptNum=0; 
struct Man 
{ 
int x; 
int y; 
int bCount; 
int bExist; 
int bNum; 
int bLen; 
}man,cpt; 

struct b 
{ 
int x; 
int y; 
int t; 
BOOL exist; 
}b[bMaxNum]; 
int map[w][h]; 
void RandMap() 
{ 
srand(time(0)); 

for(int i=0; i<w; i++) 
  for(int j=0; j<h; j++) 
  { 
   int r=rand()%5+1; 
   if(r==1) 
   { 
    map[i][j]=0; 
   } 
   else if(r==2) 
   { 
    map[i][j]=12; 
   } 
   else 
   { 
    map[i][j]=2; 
   } 
  } 
  map[0][0]=1; 
  map[0][1]=0; 
        map[1][0]=0; 
  map[1][1]=0; 
   
  map[w-2][h-1]=0; 
        map[w-2][h-2]=0; 
  map[w-1][h-1]=13; 
  map[w-1][h-2]=0; 
   
} 
int APIENTRY WinMain(HINSTANCE hInstance, 
                     HINSTANCE hPrevInstance, 
                     LPSTR     lpCmdLine, 
                     int       nCmdShow) 
{ 
MSG msg; 

MyRegisterClass(hInstance); 


if (!InitInstance (hInstance, nCmdShow)) 
{ 
  return FALSE; 
} 


    while( msg.message!=WM_QUIT ) 
    { 
        if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) ) 
        { 
            TranslateMessage( &msg ); 
            DispatchMessage( &msg ); 
        } 
  else 
  { 
   now=GetTickCount(); 
   if(pass-now>=100) 
   { 
    MyPaint(); 
   } 
  } 
    } 

return msg.wParam; 
} 

ATOM MyRegisterClass(HINSTANCE hInstance) 
{ 
WNDCLASSEX wcex; 

wcex.cbSize = sizeof(WNDCLASSEX); 
wcex.style   = CS_HREDRAW | CS_VREDRAW; 
wcex.lpfnWndProc = (WNDPROC)WndProc; 
wcex.cbClsExtra  = 0; 
wcex.cbWndExtra  = 0; 
wcex.hInstance  = hInstance; 
wcex.hIcon   = NULL; 
wcex.hCursor  = NULL; 
wcex.hCursor  = LoadCursor(NULL, IDC_ARROW); 
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 
wcex.lpszMenuName = NULL; 
wcex.lpszClassName = "canvas"; 
wcex.hIconSm  = NULL; 

return RegisterClassEx(&wcex); 
} 

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 
{ 

hInst = hInstance; 

hWnd = CreateWindow("canvas", "QQ堂" , WS_OVERLAPPEDWINDOW, 
  100, 100, 1000, 500, NULL, NULL, hInstance, NULL); 

if (!hWnd) 
{ 
  return FALSE; 
} 

MoveWindow(hWnd,10,10,640,480,true); 
ShowWindow(hWnd, nCmdShow); 
UpdateWindow(hWnd); 
SetWindowPos(hWnd,NULL,100,50,850,600,SWP_SHOWWINDOW); 

bmp[0]=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,bgW,bgH,LR_LOADFROMFILE); 
bmp[1]=(HBITMAP)LoadImage(NULL,"man.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[2]=(HBITMAP)LoadImage(NULL,"qian.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[3]=(HBITMAP)LoadImage(NULL,"lei.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[4]=(HBITMAP)LoadImage(NULL,"baozha1.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[5]=(HBITMAP)LoadImage(NULL,"baozha2.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[6]=(HBITMAP)LoadImage(NULL,"baozhaleft.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[7]=(HBITMAP)LoadImage(NULL,"baozharight.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[8]=(HBITMAP)LoadImage(NULL,"baozhatop.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[9]=(HBITMAP)LoadImage(NULL,"baozhabottom.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[10]=(HBITMAP)LoadImage(NULL,"xiezi.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[11]=(HBITMAP)LoadImage(NULL,"jiadan.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[12]=(HBITMAP)LoadImage(NULL,"xiang.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
bmp[13]=(HBITMAP)LoadImage(NULL,"cpt.bmp",IMAGE_BITMAP,pW,pH,LR_LOADFROMFILE); 
//初始化 
man.x=0; 
man.y=0; 
man.bCount=3; 
man.bExist=3; 
man.bNum=0; 
    man.bLen=1; 
cpt.x=w-1; 
cpt.y=h-1; 
RandMap(); 

hdc=GetDC(hWnd); 
mdc=CreateCompatibleDC(hdc); 
bufDC=CreateCompatibleDC(hdc); 
bufBmp=CreateCompatibleBitmap(hdc,bgW,bgH); 
SelectObject(mdc,bufBmp); 

MyPaint(); 

SetTimer(hWnd,1001,200,NULL); 
SetTimer(hWnd,999,30,NULL); 
return TRUE; 
} 


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
int i=0; 
int k=0; 
int z=0; 
switch (message) 
{ 
case WM_TIMER: 
   
  if(wParam==1000) 
  { 
   for(k=0; k<bMaxNum; k++)  //是否有炸弹要爆炸 
   { 
    for(int z1=0; z1<w; z1++) 
    { 
     for(int z2=0; z2<h; z2++) 
     { 
       
      if(map[z1][z2]==4 ||map[z1][z2]==5||map[z1][z2]==6 || 
       map[z1][z2]==7 ||map[z1][z2]==8 ||map[z1][z2]==9 ) 
      { 
       map[z1][z2]=0; 
      } 
     } 
     
    } 
     
   } 
   
  } 
  if(wParam==1001) 
  { 
   Computer(); 
   ShowInfo(); 
  } 
  if(wParam==999) 
  { 
   for(int k=0; k<bMaxNum; k++)  //是否有炸弹要爆炸 
   { 
    if(b[k].exist==TRUE) 
    { 
     if(b[k].t <= 0)  //炸弹爆炸 
     { 
      PlaySound (TEXT ("baozha.wav"), NULL, SND_FILENAME | SND_ASYNC) ; 
      ShowBaoZha(k); 
      man.bNum--; 
      man.bExist++; 
      b[k].exist=FALSE; 
      SetTimer(hWnd,1000,180,NULL); 
     } 
     b[k].t--; 
    } 
     
   } 
  } 
  break; 
case WM_KEYDOWN: 
  if(wParam==VK_SPACE) 
  { 
   FangLei(); 
  } 
  Move(wParam); 
  MyPaint(); 
   
  if(wParam==VK_F1) 
  { 
   InvalidateRect(hWnd,NULL,TRUE); 
   man.x=0; 
   man.y=0; 
   man.bCount=3; 
   man.bExist=3; 
   man.bNum=0; 
   man.bLen=1; 
   cpt.x=w-1; 
   cpt.y=h-1; 
   manNum=0; 
   cptNum=0; 
   RandMap(); 
  } 
  break; 
   
case WM_DESTROY: 
  for(; i<bmpNum; i++) 
   DeleteObject(bmp[i]); 
  ReleaseDC(hWnd,mdc); 
  ReleaseDC(hWnd,hdc); 
  PostQuitMessage(0); 
  KillTimer(hWnd,1000); 
  break; 
   
default: 
  return DefWindowProc(hWnd, message, wParam, lParam); 
} 
return 0; 
}   
   

发表评论共16条评论,第1页/共2页 上一页下一页 長髮為伱而留 
 
 
 
  
 引用删除1楼  長髮為伱而留 
  评论时间:2007年5月29日 21时5分 
void Move(WPARAM key)
{
 
    switch(key)
 {
    case VK_LEFT:
  if(map[man.x-1][man.y]==0 && man.x>0 || map[man.x-1][man.y]==10 || 
   map[man.x-1][man.y]==11     )
  {
   
   if(map[man.x-1][man.y]==10 || map[man.x-1][man.y]==11 )
   {
    PlaySound (TEXT ("chi.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
   }
   if(map[man.x-1][man.y]==10 && man.bLen<bMaxLen)
    man.bLen++;
   if(map[man.x-1][man.y]==11 && man.bExist<bMaxNum)
    man.bExist++;
   if(map[man.x][man.y]!=3)
    map[man.x][man.y]=0;
   map[--man.x][man.y]=1;
  }
  break;
 case VK_RIGHT:
  if(map[man.x+1][man.y]==0 && man.x<w-1 || map[man.x+1][man.y]==10 ||
   map[man.x+1][man.y]==11 )
  {
   if(map[man.x+1][man.y]==10 ||
    map[man.x+1][man.y]==11)
   {
    PlaySound (TEXT ("chi.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
   }
   if(map[man.x+1][man.y]==10 && man.bLen<bMaxLen)
    man.bLen++;
   if(map[man.x+1][man.y]==11 && man.bExist<bMaxNum)
    man.bExist++;
   if(map[man.x][man.y]!=3)
    map[man.x][man.y]=0;
   map[++man.x][man.y]=1;
  }
  break; 
 case VK_DOWN:
  if(map[man.x][man.y+1]==0 && man.y<h-1 ||map[man.x][man.y+1]==10 ||
   map[man.x][man.y+1]==11 )
  {
   if(map[man.x][man.y+1]==10 ||
    map[man.x][man.y+1]==11 )
   {
    PlaySound (TEXT ("chi.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
   }
   if(map[man.x][man.y+1]==10 && man.bLen<bMaxLen)
    man.bLen++;
   if(map[man.x][man.y+1]==11 && man.bExist<bMaxNum)
    man.bExist++;
   if(map[man.x][man.y]!=3)
    map[man.x][man.y]=0;
   map[man.x][++man.y]=1;
  }
  break;
 case VK_UP:
  if(map[man.x][man.y-1]==0 && man.y>0 || map[man.x][man.y-1]==10 ||
   map[man.x][man.y-1]==11 )
  {
   if(map[man.x][man.y-1]==10 ||
    map[man.x][man.y-1]==11 )
   {
    PlaySound (TEXT ("chi.wav"), NULL, SND_FILENAME | SND_ASYNC) ;
   }
   if(map[man.x][man.y-1]==10 && man.bLen<bMaxLen)
    man.bLen++;
   if(map[man.x][man.y-1]==11 && man.bExist<bMaxNum)
    man.bExist++;
   if(map[man.x][man.y]!=3)
    map[man.x][man.y]=0;
   map[man.x][--man.y]=1;
  }
  break;
  
 }
}


void FangLei()
{ 
 if(man.bExist>0 && map[man.x][man.y]!=3 &&  man.bNum<=bMaxNum)  //当炸弹的数目大于0的时候
 {
  if(b[man.bNum].exist)
  {
   for(int i=0; i<bMaxNum; i++)
   {
    if(b[i].exist==FALSE)
    { 
     man.bNum=i;
    }
   }
  }
  map[man.x][man.y]=3;
  b[man.bNum].x=man.x;
  b[man.bNum].y=man.y;
  man.bExist--;
  b[man.bNum].t=50;
  b[man.bNum].exist=TRUE;
  man.bNum++;
 }
 
 
}


void MyPaint()
{
 SelectObject(bufDC,bmp[0]);
 BitBlt(mdc,0,0,bgW,bgH,bufDC,0,0,SRCCOPY);
    for(int i=0; i<w; i++)
 {
  for(int j=0; j<h; j++)
  {
   if(map[i][j]!=0)
   {
    SelectObject(bufDC,bmp[map[i][j]]); 
    BitBlt(mdc,46+i*pW,190+j*pH,bgW,bgH,bufDC,0,0,SRCCOPY);
   }
  }
  
 }
 BitBlt(hdc,0,0,bgW,bgH,mdc,0,0,SRCCOPY);
 
 pass=GetTickCount();
}

int FindBobm(int x,int y)
{
 for(int i=0; i<bMaxNum; i++)
 {
  if(b[i].x==x && b[i].y==y)
  {
   return i;
  }
 }
 
 return -1;
}
  
  
長髮為伱而留 
 
 
 
  
 引用删除2楼  長髮為伱而留 
  评论时间:2007年5月29日 21时6分 
void ShowBaoZha(int k)
{
 int r;
    static const int jiLu=2;

 for(int z=b[k].x; z>b[k].x-man.bLen; z--)
 {
  if(map[z-1][b[k].y]==12)
   break;
  if(map[z-1][b[k].y]==1 && man.y==b[k].y)  //炸到玩家了
  {
   manNum++; 
   break;
  }
 
  if(map[z-1][b[k].y]==13 && cpt.y==b[k].y)
  {
   cptNum++;
   break;
  }
  if(z<0 )
  {
   break;
  }
  if(map[z-1][b[k].y]==2)
  {
   r=rand()%jiLu+1;
   if(r==1)
   {
    map[z-1][b[k].y]=10;
   }
   else if(r==2)
   {
    map[z-1][b[k].y]=11;
   }
   else
   {
    map[z-1][b[k].y]=0;
   }
   break;
  }
  if(map[z-1][b[k].y]==3)
  {
   b[FindBobm(z-1,b[k].y)].t=0;
   break;
  }
  
  map[z][b[k].y]=4;
 }
 if(z>=0)
  map[z][b[k].y]=6;
 
 for( z=b[k].x; z<b[k].x+man.bLen; z++)
 {
  if(map[z+1][b[k].y]==12)
   break;
  if(map[z+1][b[k].y]==1 && man.y==b[k].y)  //炸到玩家了
  {
   manNum++; 
   break;
  }
  if(map[z+1][b[k].y]==13 && cpt.y==b[k].y)
  {
   cptNum++;
   break;
  }
  if(map[z+1][b[k].y]==2)
  {
   r=rand()%jiLu+1;
   if(r==1)
   {
    map[z+1][b[k].y]=10;
   }
   else if(r==2)
   {
    map[z+1][b[k].y]=11;
   }
   else
   {
    map[z+1][b[k].y]=0;
   }
   break;
  }
  if(map[z+1][b[k].y]==3)
  {
   b[FindBobm(z+1,b[k].y)].t=0;
   break;
  }
  if(z>w-1 )
  {
   break;
  }
  map[z][b[k].y]=4;
 } 
 if(z<w-1)
  map[z][b[k].y]=7;
 
 for( z=b[k].y; z>b[k].y-man.bLen; z--)
 {
  if(map[b[k].x][z-1]==12)
   break;
  if(map[b[k].x][z-1]==1 && man.x==b[k].x)  //炸到玩家了
  {
   manNum++; 
   break;
  }
  if(map[b[k].x][z-1]==13 && cpt.x==b[k].x)  //炸到玩家了
  {
   cptNum++; 
   break;
  }
  if(map[b[k].x][z-1]==2)
  {
   r=rand()%jiLu+1;
   if(r==1)
   {
    if(z>0)
     map[b[k].x][z-1]=10;
   }
   else if(r==2)
   {
    if(z>0)
     map[b[k].x][z-1]=11;
   }
   else
   {
    map[z+1][b[k].y]=0;
   }
   if(z>0)
   {
    map[b[k].x][z-1]=8;
   }
   else
            {
    break;
   }
   z=-1;
   break;
  }
  if(map[b[k].x][z-1]==3)
  {
   b[FindBobm(b[k].x,z-1)].t=0;
   break;
  }
  if(z<0)
  {
   break;
  }
  map[b[k].x][z]=5;
 } 
    if(z>=0)
  map[b[k].x][z]=8;
 for( z=b[k].y; z<b[k].y+man.bLen; z++)
 {
  if(map[b[k].x][z+1]==13 && cpt.x==b[k].x)  //炸到玩家了
  {
   cptNum++; 
   break;
  }
  if(map[b[k].x][z+1]==12)
   break;
  if(map[b[k].x][z+1]==1 && man.x==b[k].x)  //炸到玩家了
  {
   manNum++; 
   break;
  }
  if(map[b[k].x][z+1]==2 )
  {
   r=rand()%jiLu+1;
   if(r==1  )
   {
    if(z<h-1)
     map[b[k].x][z+1]=10;
   }
   else if(r==2)
   {
    if(z<h-1)
     map[b[k].x][z+1]=11;
   }
   else
   {
    if(z<h-1)
     map[b[k].x][z+1]=0;
   }
   if( z<h-1 )
   {
    map[b[k].x][z+1]=0;
    break;
   }
  }
  if(map[b[k].x][z+1]==3)
  {
   b[FindBobm(b[k].x,z+1)].t=0; 
   break;
  }
  if(z>h-1)
  {
   break;
  }
  map[b[k].x][z]=5;
 }
 if(z<=h-1)
  map[b[k].x][z]=9;
 
}

void Computer()
{int r=rand()%2+1;
 if(r==1)
 {
  if(cpt.x>man.x)
  {
   if(map[cpt.x-1][cpt.y]==0 || map[cpt.x-1][cpt.y]==1 && cpt.x>0    )
   { 
    if(map[cpt.x-1][cpt.y]==1)
    {
     manNum++;
    }
    if(map[cpt.x][cpt.y]!=3)
     map[cpt.x][cpt.y]=0;
    map[--cpt.x][cpt.y]=13;
    
   }
   return ;
  }
  else
  {
   if(map[cpt.x+1][cpt.y]==0 && cpt.x<w-1 || map[cpt.x+1][cpt.y]==1  )
   {
    if(map[cpt.x+1][cpt.y]==1)
    {
     manNum++;
    }
    if(map[cpt.x][cpt.y]!=3)
     map[cpt.x][cpt.y]=0;
    map[++cpt.x][cpt.y]=13;
   }
   return ; 
  }
 }
 else
 {
  if(cpt.y<man.y)
  {
   if(map[cpt.x][cpt.y+1]==0 && cpt.y<h-1 || map[cpt.x][cpt.y+1]==1)
   {
    if(map[cpt.x][cpt.y+1]==1)
     manNum++;
    if(map[cpt.x][cpt.y]!=3)
     map[cpt.x][cpt.y]=0;
    map[cpt.x][++cpt.y]=13;
   
   return ;
  }
  else
  {
   if(map[cpt.x][cpt.y-1]==0 && cpt.y>0  || map[cpt.x][cpt.y-1]==1)
   {
    if(map[cpt.x][cpt.y-1]==1)
     manNum++;
    if(map[cpt.x][cpt.y]!=3)
     map[cpt.x][cpt.y]=0;
    map[cpt.x][--cpt.y]=13;
   }
   return ;
  }
 }
}

void ShowInfo()
{
 char str1[50], str2[50];
    sprintf(str1,"你被怪物炸了%d次",manNum);
    sprintf(str2,"怪物被你炸了%d次",cptNum);
 TextOut(hdc,650,90,"按F1重新开始游戏",strlen("按F1重新开始游戏"));
 TextOut(hdc,650,120,str1,strlen(str1));
 TextOut(hdc,650,150,str2,strlen(str2));
 if(cptNum>=10 )
 {
 SendMessage(hWnd,WM_KEYDOWN,VK_F1,0);
 }
 if(manNum>=10)
 {
 SendMessage(hWnd,WM_KEYDOWN,VK_F1,0);
 }

}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -