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

📄 编辑.cpp

📁 学游戏不错的实例教程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  FILE *f;
  int i,j;
  f=fopen(name,"w");
  if(f==NULL) {AfxMessageBox("不能写文件!!!");return;}
  fprintf(f,"%s\n",mapbak);			//地图块名
  fprintf(f,"%d\n",rs);				//对象数
  for (i=0;i<rs;i++)
	{fprintf(f,"%d,",man[i].jisu);	//序号
	 fprintf(f,"%d,",man[i].lb);	//类别:  [0人1兽2景]
	 fprintf(f,"%d,",man[i].js);	//角色:人[0男1女]
									//角色:兽[0豹1狼2鹿3马4雀5羊6猪]
	 fprintf(f,"%d,",man[i].p);		//静物图形号
	 fprintf(f,"%d,",man[i].xix);	//当前位置x
	 fprintf(f,"%d,\n",man[i].xiy);	//当前位置y
	}
  fclose(f);
//	B、保存障碍表(.map)
  char cc[256];
  strcpy(cc,name);cc[lstrlen(name)-3]=0;//变换文件名
  strcat(cc,"map");
  f=fopen(cc,"w");
  if(f==NULL) {AfxMessageBox("不能写文件!!!");return;}
  fprintf(f,"%d,%d\n",WIDTH*SCRP0/GX,HEIGHT*SCRP0/GY);
  for(i=0;i<WIDTH*SCRP0/GX;i++)
  {for(j=0;j<HEIGHT*SCRP0/GY;j++)
	 fprintf(f,"%c",m_fid.map[i][j]);
   fprintf(f,"\n");
  }
  fclose(f);
/*  //========DDB转换为DIB=======================================================
	HPALETTE  hPal= GetSystemPalette();// 获取系统调色板
	HANDLE hDIB = BitmapToDIB(mapbit,hPal);// DDB->DIB转化
	DeleteObject(hPal);
//========将图形拷入tmp缓冲
	LPBITMAPINFOHEADER bi1 = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	strcpy(cc,name);cc[lstrlen(name)-3]=0;//变换文件名
	strcat(cc,"bmp");
	SaveBmp(cc,bi1); //存位图
	GlobalUnlock(hDIB); 
	DeleteObject(hDIB);GlobalFree(hDIB);*/
}
//**************************************************
//	newmap()//新建地图
//	根据新建地图选定的角色,初始化对象表和地图大小。
//**************************************************
void gmedit::newmap()//新建地图
{	rs=1;
	man[0].jisu=0;//序号
	man[0].lb=0;  //类别:  [0人1兽2景]
//	man[0].js=1;  //角色:人[0男1女]
				  //角色:兽[0豹1狼2鹿3马4雀5羊6猪]
	man[0].p=0;	  //静物图形号
	man[0].xix=WIDTH/2;		//当前位置x
	man[0].xiy=HEIGHT/2;	//当前位置y

	man[0].x0=man[0].xix;	//目标位置x
	man[0].y0=man[0].xiy;	//目标位置y
	man[0].fw=1;	//方位:  [0南1西南2西3西北4北5东北6东7东南]
	man[0].zs=0;	//动作:人[0站1走2刺3劈4倒]
					//动作:兽[0站1走2跑3斗4倒5尸]
	man[0].pk =-1;	//路径长
	man[0].fid=-1;	//路径计数
	man[0].zd=0;
	setman(man[0].jisu);	//设置活动对象初值
	getobjwh(0);			//取对象的尺寸
	//设地图大小
	m_fid.map_w=WIDTH*SCRP0/GX;	//
	m_fid.map_h=HEIGHT*SCRP0/GY;//
	int i,j;
	for(i=0;i<m_fid.map_w;i++)
		for(j=0;j<m_fid.map_h;j++)
				m_fid.map[i][j]='0';	
	getsmap();	//生成小地图
}
void gmedit::SaveBmp(CString fileName,LPBITMAPINFOHEADER bi1) //存位图
{   BITMAPFILEHEADER hdr;
    DWORD dwTmp;
	if(bi1==NULL){AfxMessageBox("无图形数据!");return;}
    HANDLE hf = CreateFile(fileName, GENERIC_READ | GENERIC_WRITE,(DWORD) 0,NULL,
					CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); 
    hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M" 
    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) +bi1->biSize + bi1->biClrUsed 
                 * sizeof(RGBQUAD) + bi1->biSizeImage); 
    hdr.bfReserved1 = 0; hdr.bfReserved2 = 0;  
    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) +bi1->biSize
						+bi1->biClrUsed * sizeof (RGBQUAD); 
    WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER), 
        (LPDWORD) &dwTmp,  NULL);  
    WriteFile(hf, (LPVOID) bi1, sizeof(BITMAPINFOHEADER)-bi1->biSize
                  + bi1->biClrUsed * sizeof (RGBQUAD),(LPDWORD) &dwTmp, (NULL)); 
    DWORD dwTotal = bi1->biSizeImage;
    WriteFile(hf, (LPSTR) bi1, (int) dwTotal, (LPDWORD) &dwTmp,NULL);
	CloseHandle(hf);
}
HANDLE BitmapToDIB(HBITMAP hBitmap, HPALETTE hPal)// DDB->DIB转化
{
    BITMAP              bm;       
    BITMAPINFOHEADER    bi;       
    LPBITMAPINFOHEADER  lpbi;     
    DWORD               dwLen;    
    HANDLE              hDIB, h;  
    HDC                 hDC;      
    WORD                biBits;   

    if (!hBitmap) return NULL;
    if (!GetObject(hBitmap, sizeof(bm), (LPBYTE)&bm)) return NULL;
    if (hPal == NULL) hPal = (HPALETTE)GetStockObject(DEFAULT_PALETTE);
    biBits = bm.bmPlanes * bm.bmBitsPixel;
    if (biBits <= 1) biBits = 1;
    else if (biBits <= 4) biBits = 4;
	else if (biBits <= 8) biBits = 8;
    else biBits = 16;// if greater than 8-bit, force to 24-bit
    // initialize BITMAPINFOHEADER
    bi.biSize = sizeof(BITMAPINFOHEADER);
    bi.biWidth = bm.bmWidth;
    bi.biHeight = bm.bmHeight;
    bi.biPlanes = 1;
    bi.biBitCount = biBits;
    bi.biCompression = BI_RGB;
    bi.biSizeImage = 0;
    bi.biXPelsPerMeter = 0;
    bi.biYPelsPerMeter = 0;
    bi.biClrUsed = 0;
    bi.biClrImportant = 0;
    // calculate size of memory block required to store BITMAPINFO
    dwLen = bi.biSize + PaletteSize((LPBYTE)&bi);
    hDC = GetDC(NULL);
    hPal = SelectPalette(hDC, hPal, FALSE);
    RealizePalette(hDC);
    hDIB = GlobalAlloc(GHND, dwLen);
    if (!hDIB)
    {	SelectPalette(hDC, hPal, TRUE);
		RealizePalette(hDC);
		ReleaseDC(NULL, hDC);
		return NULL;
    }
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
    *lpbi = bi; 
	GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, NULL, (LPBITMAPINFO)lpbi,
        DIB_RGB_COLORS);
    bi = *lpbi;
    GlobalUnlock(hDIB);
    if (bi.biSizeImage == 0)
        bi.biSizeImage = WIDTHBYTES_E((DWORD)bm.bmWidth * biBits) * bm.bmHeight;
    dwLen = bi.biSize + PaletteSize((LPBYTE)&bi) + bi.biSizeImage;
    if (h = GlobalReAlloc(hDIB, dwLen, 0)) hDIB = h;
    else
    {   GlobalFree(hDIB);
        hDIB = NULL;
        SelectPalette(hDC, hPal, TRUE);
        RealizePalette(hDC);
        ReleaseDC(NULL, hDC);
        return NULL;
    }
    lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
	if (GetDIBits(hDC, hBitmap, 0, (UINT)bi.biHeight, (LPBYTE)lpbi +
            (WORD)lpbi->biSize + PaletteSize((LPBYTE)lpbi), (LPBITMAPINFO)lpbi,
            DIB_RGB_COLORS) == 0)
    {   GlobalUnlock(hDIB);
        hDIB = NULL;
        SelectPalette(hDC, hPal, TRUE);
        RealizePalette(hDC);
        ReleaseDC(NULL, hDC);
        return NULL;
    }	
    bi = *lpbi;
    GlobalUnlock(hDIB);
    SelectPalette(hDC, hPal, TRUE);
    RealizePalette(hDC);
    ReleaseDC(NULL, hDC);
    return hDIB;
}
WORD PaletteSize(LPBYTE lpDIB)// 计算调色板长度
{   WORD wBitCount;  
    DWORD dwClrUsed;
    dwClrUsed = ((LPBITMAPINFOHEADER)lpDIB)->biClrUsed;
    if (dwClrUsed) return (WORD)dwClrUsed*sizeof(RGBQUAD);
    wBitCount = ((LPBITMAPINFOHEADER)lpDIB)->biBitCount;
    switch (wBitCount)
    {   case 1:return 2*sizeof(RGBQUAD);
        case 4:return 16*sizeof(RGBQUAD);
        case 8:return 256*sizeof(RGBQUAD);
        default:return 0;
    }
}
HPALETTE GetSystemPalette()// 获取系统调色板
{   HDC hDC;               
    static HPALETTE hPal = NULL;
    HANDLE hLogPal;         
    LPLOGPALETTE lpLogPal;  
    int nColors;            
    hDC = GetDC(NULL);
    if (!hDC)return NULL;
    nColors = PalEntriesOnDevice(hDC);   // Number of palette entrie
    hLogPal = GlobalAlloc(GHND, sizeof(LOGPALETTE) + nColors * sizeof(PALETTEENTRY));
    if (!hLogPal)return NULL;
    lpLogPal = (LPLOGPALETTE)GlobalLock(hLogPal);
    lpLogPal->palVersion = PALVERSION;
    lpLogPal->palNumEntries = nColors;
    GetSystemPaletteEntries(hDC, 0, nColors,(LPPALETTEENTRY)(lpLogPal->palPalEntry));
    hPal = CreatePalette(lpLogPal);
    GlobalUnlock(hLogPal);
    GlobalFree(hLogPal);
    ReleaseDC(NULL, hDC);
    return hPal;
}

int PalEntriesOnDevice(HDC hDC)// 获取颜色位
{   int nColors;
    nColors = (1 << (GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES)));
    ASSERT(nColors);
    return nColors;
}

⌨️ 快捷键说明

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