编译出现无可用源错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jingzhewangzi/article/details/38931965
无可用源 没有可用于当前位置的源代码

其实是文件的源代码错误引发的系列结果

调用堆栈位置:Snake1.exe!_VEC_memset()
为“f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c”查找源。Checksum: MD5 {f8 2b c1 a7 1 0 c7 c2 83 28 86 be 83 1e 7b 1c}
文件“f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c”不存在。
正在脚本文档中查找“f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c”...
正在项目中查找“f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c”。
在项目中未找到该文件。
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src\”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src\vccorlib\”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfc\”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\src\atl\”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\include”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfc”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\src\mfcm”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\src\atl”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\crt\src”中查看...
正在目录“”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\include”中查看...
正在目录“C:\Program Files\Microsoft Visual Studio 11.0\VC\atlmfc\include”中查看...
正在目录“C:\Program Files\Windows Kits\8.0\Include\um”中查看...
正在目录“C:\Program Files\Windows Kits\8.0\Include\shared”中查看...
正在目录“C:\Program Files\Windows Kits\8.0\Include\winrt”中查看...
调试器将要求用户查找文件: f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c。
用户在“查找源”对话框中按了“取消”。活动解决方案的调试源文件设置已修改,这样调试器将不会要求用户查找文件: f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c。
调试器未能找到源文件“f:\dd\vctools\crt_bld\self_x86\crt\prebuild\string\i386\p4_memset.c”。


之后做了一些调试,改了一下,逻辑错误:
void Logic()
{
static int iStep = timeGetTime();//速度太快了,限制一下
if(timeGetTime()-iStep > 300) //300毫秒移动一次,想快点可以改,可作为难度递增,改小值
{
iStep = timeGetTime();

//控制蛇运动
if(iKey ==VK_UP) //如果按下“向上键”
{
if(iSnakeDir ==DIR_LT||iSnakeDir ==DIR_RT)//若蛇正在往左右走时才能改变
{
iSnakeDir = DIR_UP;
}
}
else if(iKey ==VK_DOWN) //如果按下“向下键”
{
if(iSnakeDir ==DIR_LT||iSnakeDir ==DIR_RT)//若蛇正在往左右走时才能改变
{
iSnakeDir = DIR_DN;
}
}
else if(iKey ==VK_LEFT) //如果按下“向左键”
{
if(iSnakeDir ==DIR_UP||iSnakeDir ==DIR_DN)//若蛇正在往左右走时才能改变
{
iSnakeDir = DIR_LT;
}
}
else if(iKey ==VK_RIGHT) //如果按下“向右键”
{
if(iSnakeDir ==DIR_UP||iSnakeDir ==DIR_DN)//若蛇正在往左右走时才能改变
{
iSnakeDir = DIR_RT;
}
}
//错误代码  }if ,移动到下面了
//蛇运动,其实蛇的运动就是蛇头根据方向向前走一步,而蛇尾去掉一步,
//如果转为算法就是在队列前根据方向加多一个节点,去掉队列最后一个节点
POINT ptHead = g_SnakeDeque.front();//获取第一个节点
if(iSnakeDir == DIR_UP)
{
ptHead.y -= 30;
}
else if(iSnakeDir == DIR_DN)
{
ptHead.y += 30;
}
else if(iSnakeDir == DIR_LT)
{
ptHead.x -= 30;
}
else if(iSnakeDir == DIR_RT)
{
ptHead.x += 30;
}

//蛇出界或者吃到自己则死亡
if(ptHead.x<0||ptHead.x>=600||ptHead.y<0||ptHead.y>=600||isInSnake(ptHead))
{
mciSendString("play dieMusic from 0",NULL,0,NULL);//播放死亡音乐
g_SnakeDeque.clear();//全清
POINT ptSnake = {300,300};//定义蛇的位置
g_SnakeDeque.push_back(ptSnake);//放入蛇的节点

iLife--;

if(iLife<=0)
{// MessageBox(NULL,"GameOver!","贪吃蛇",MB_OK|MB_ICONWARNING);

DestroyWindow(g_hWnd);//摧毁关闭窗口
return;
}
iSnakeDir = rand()%4;//随机蛇运动方向

}
else if(ptHead.x == g_FoodPos.x && ptHead.y == g_FoodPos.y)//蛇吃到食物
{
mciSendString("play eatMusic from 0",NULL,0,NULL);//播放吃到食物音乐
g_SnakeDeque.push_front(ptHead);//新的位置加入蛇头,蛇头往前移动
RandFood();//重新随机生成食物
}
else //无出界,无吃到自身,无吃到食物,正常行走
{
g_SnakeDeque.push_front(ptHead); //新的位置加入蛇头,蛇头往前移动
g_SnakeDeque.pop_back(); //删除最后节点,蛇尾往前收
}
}//if ——移动到此处


//以下为绘画内容
RECT rc = {0,0,600,600};
FillRect(g_hBufDC,&rc,(HBRUSH)GetStockObject(WHITE_BRUSH));//清除缓冲DC内容

//内容先绘图如缓冲DC
g_Bg.Draw(g_hBufDC,0,0);

for(UINT i = 0;i<g_SnakeDeque.size();i++)  //遍历蛇的节点,绘画蛇的样子
{
if(i==0)//蛇头
{
g_Head.Draw(g_hBufDC,g_SnakeDeque[i].x,g_SnakeDeque[i].y);//把蛇头的样子画到指定位置节点上
}
else if(i == g_SnakeDeque.size()-1)//蛇尾
{
g_Rear.Draw(g_hBufDC,g_SnakeDeque[i].x,g_SnakeDeque[i].y);//把蛇尾的样子画到指定位置节点上
}
else
{
g_Snake.Draw(g_hBufDC,g_SnakeDeque[i].x,g_SnakeDeque[i].y);//把蛇身的样子画到指定位置节点上
}
}

//绘画食物
g_Food.Draw(g_hBufDC,g_FoodPos.x,g_FoodPos.y);

//绘画生命数
char sz[32] = {0};
for(int i = 0;i<iLife;i++)
{
strcat_s(sz,"★");
}

SetTextColor(g_hBufDC,RGB(255,0,0));//设置字体颜色
SetBkMode(g_hBufDC,TRANSPARENT);//设置字体背景颜色为透明
TextOut(g_hBufDC,0,0,sz,strlen(sz));//输出字体


//缓冲DC的内容写入主DC显示
BitBlt(g_hDC,0,0,600,600,g_hBufDC,0,0,SRCCOPY);
}

主页面没有图像显示也是类似的错误:
// 主消息循环:
ZeroMemory(&msg,sizeof(MSG));
while (msg.message != WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

}//if
else
{
Logic();//有消息则处理消息,无则处理Logic()
}
}//while


最后一个错误是:输入错误,导致上面的错误代码。在调试时,真心看不懂内部函数,原来是调用MCI时的函数 出错了。
编译出现无可用源错误

mciSendString("open  bg.mp3 alias bgMusic",NULL,0,NULL);//发送MIC命令:打开bgMusic.mp3文件,并命名为bgMusic 记住这名字很重要  bg.mp3才是我的资源文件。
mciSendString("play bgMusic from O repeat",NULL,0,NULL);//从0开始播放bgMusic,并重复播放,其他的命令还算有stop,pause等 ,0和o是明显区别的,新手常错啊。。


//以此类推,先读取吃到食物和死亡的音乐,在指定位置播放
mciSendString("open eat.wav alias eatMusic",NULL,0,NULL);//能支持CD,MP3,WAV,MIDI,AVI等格式,不支持RM或RMVB/OGG等
mciSendString("open die.wav alias dieMusic",NULL,0,NULL);


解决以上问题之后还是出现中断问题,但是后台音乐播放可以正常了

错误之库函数参数错误:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // 将实例句柄存储在全局变量中

   int iW = 600+GetSystemMetrics(SM_CXFIXEDFRAME)*2;
   int iH = 600+GetSystemMetrics(SM_CYFIXEDFRAME)*2+GetSystemMetrics(SM_CYCAPTION);// 之前传错了参数 SM_CYSMCAPTION

   int iX = (GetSystemMetrics(SM_CXSCREEN)-iW)/2;
   int iY = (GetSystemMetrics(SM_CYSCREEN)-iH)/2;

   hWnd = CreateWindow(szWindowClass,"贪吃蛇1.0",WS_SYSMENU,
  iX,iY,
  iW,iH,
  NULL,NULL,hInstance,NULL);

  // hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
    //  CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);




   if (!hWnd)
   {
      return FALSE;
   }

   g_hWnd = hWnd;//获得窗口句柄,以便往后控制窗口
   Start();//显示窗口前调用Start()完成初始化工作

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

展开阅读全文

没有更多推荐了,返回首页