LNK2001;LNK1120【VC6.0】

代码如下:
疯狂的小鸟 C++
#include< stdlib.h>
#include
#include< time.h>
#include
#include< iostream>
#include< mmsystem.h>
#include "SDL_image.h"
#include "SDL_ttf.h"
#include "SDL.h"
using namespace std;
#pragma comment(lib, "winmm.lib")
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
intiii=0;
intscore =0;
inty=0;
intposi[3][2]= {{640,-300},{940,-300},{1240,-300}};
inti=0,n=3; //n为管道对数
SDL_Color textColor_1 = { 37, 134, 108 };//绿色
//SDL_Color textColor_2 = { 112, 112, 35 };
SDL_Color textColor_2 = { 255, 255, 255 }; //白色
SDL_Color textColor_3 = { 0, 88, 132 }; //白色
class Event
{
public:
SDL_Event event;
Uint8 keystates;
Event()
{
keystates=SDL_GetKeyState( NULL );
}
};
Event thing;
classData
{
public:
int bird_y;
int score;
int posi[20][2];
SDL_Rect bird_1;
SDL_Rect bird_2;
SDL_Rect bg;
SDL_Rect welcome;
SDL_Rect pipe_up;
SDL_Rect pipe_down;
SDL_Rect bird_cls;
SDL_Rect foot;
SDL_Surface
load_imag(char*s)
{
SDL_Surface* temp;
temp=IMG_Load(s);
bg.x=0;
bg.y=0;
bg.w=640;
bg.h=480;
welcome.x=681;
welcome.y=0;
welcome.w=640;
welcome.h=480;
bird_1.x=17;
bird_1.y=508;
bird_1.w=52;
bird_1.h=34;
bird_2.x=461;
bird_2.y=531;
bird_2.w=52;
bird_2.h=33;
bird_cls.w=52;
bird_cls.h=33;
bird_cls.x=0;
bird_cls.y=0;
pipe_up.x=1361;
pipe_up.y=11;
pipe_up.w=103;
pipe_up.h=410;
pipe_down.x=1487;
pipe_down.y=14;
pipe_down.w=103;
pipe_down.h=443;
foot.x=0;
foot.y=404;
foot.w=640;
foot.h=80;
return temp;//SDL_DisplayFormat( temp );
}
TTF_Font* load_font()
{
SDL_Init( SDL_INIT_EVERYTHING );
TTF_Init();
return TTF_OpenFont( "main_1.dat", 36 );
}
};
Data data;
class Pri
{
public:
SDL_Surface* out; //输出
SDL_Surface* main ; //主窗口
TTF_Font font;
SDL_Rect a; //设置初始位置
SDL_Surface*bird;
SDL_Rect xy;
SDL_Surface*font_1;
SDL_Surface*font_2;
SDL_Surface*font_11;
SDL_Surface*font_22;
Pri()
{
TTF_Font *font = NULL;
init();//初始化输出设备
}
int init()
{
SDL_Init( SDL_INIT_EVERYTHING );
TTF_Init();
main= SDL_SetVideoMode( 640, 478, 32, SDL_SWSURFACE );
SDL_WM_SetCaption("Flappy bird",NULL);//标题
font=data.load_font();
out=data.load_imag("main_2.dat");
y=150;
posi[0][0]=640;
posi[0][1]=-300;
posi[1][0]=940;
posi[1][1]=-300;
posi[2][0]=1240;
posi[2][1]=-300;
return 1;
}
int pipe()
{
}
int bir(int y)//x=150
{int ii;
i+=1;
xy.x=150;
xy.y=y;
if(i {
xy.x=150;
xy.y=y;
SDL_BlitSurface(out,&data.bg,main,NULL);
for(ii=0;ii {
xy.x=posi[ii][0];
xy.y=posi[ii][1];
SDL_BlitSurface(out,&data.pipe_down,main,&xy);
xy.x=posi[ii][0];
xy.y=posi[ii][1]+600;
SDL_BlitSurface(out,&data.pipe_up,main,&xy);
}
xy.x=150;
xy.y=y;
SDL_BlitSurface(out,&data.bird_1,main,&xy);
xy.x=0;
xy.y=404;
SDL_BlitSurface(out,&data.foot,main,&xy);
}
else
{
xy.x=150;
xy.y=y;
SDL_BlitSurface(out,&data.bg,main,NULL);
for(ii=0;ii {
xy.x=posi[ii][0];
xy.y=posi[ii][1];
SDL_BlitSurface(out,&data.pipe_down,main,&xy);
xy.x=posi[ii][0];
xy.y=posi[ii][1]+600;
SDL_BlitSurface(out,&data.pipe_up,main,&xy);
}
xy.x=150;
xy.y=y;
SDL_BlitSurface(out,&data.bird_2,main,&xy);
xy.x=0;
xy.y=404;
SDL_BlitSurface(out,&data.foot,main,&xy);
if(i>28)i=0;
}
return 0;
}
int bg()
{
SDL_BlitSurface(out,&data.bg,main,&xy);
return 0;
}
int over()
{
int x=0,y=0,i=0;
xy.x=250;
xy.y=150;
font_1=TTF_RenderText_Solid( font, "Game over !", textColor_3);
SDL_BlitSurface( font_1 , NULL, main,& xy);
SDL_Flip(main);
xy.x=350;
xy.y=200;
font_1=TTF_RenderText_Solid( font, "Retry game", textColor_1 );
font_11=TTF_RenderText_Solid( font, "Retry game", textColor_2 );
SDL_BlitSurface( font_1 , NULL, main,& xy);
xy.x=350;
xy.y=280;
font_2=TTF_RenderText_Solid( font, " Exit game", textColor_1 );
font_22=TTF_RenderText_Solid( font, " Exit game", textColor_2 );
SDL_BlitSurface( font_2 , NULL, main,& xy);
/

xy.x=10;
xy.y=440;
//野指针
SDL_BlitSurface( TTF_RenderText_Solid( font, "Esc:exit game Space:to jump hekun ", textColor_1 ) , NULL, main,& xy);
SDL_Flip( main ); //更新窗口
/
while(SDL_PollEvent(& thing.event ), 1)
{
i+=2;
Sleep(1);
if( thing.keystates[ SDLK_ESCAPE] )exit(0);
if( thing.event.type == SDL_QUIT )// 点击了SDL关闭按钮
{
exit(0);
}
if((x>350&&x200))
{
if(thing. event.type == SDL_MOUSEBUTTONDOWN)
if(thing.event.button.button== SDL_BUTTON_LEFT )
{
SDL_FreeSurface(font_1);
SDL_FreeSurface(font_11);
SDL_FreeSurface(font_22);
SDL_FreeSurface(font_2);
WinExec("Flappy bird.exe",NULL);
exit(0);
return 11;
}
}
else
{
}
if((x>350&&x280)) //结束游戏
{
if(thing. event.type == SDL_MOUSEBUTTONDOWN)
if(thing.event.button.button== SDL_BUTTON_LEFT )exit(0);
}
if(thing. event.type == SDL_MOUSEMOTION )
{
x=thing.event.motion.x;
y=thing.event.motion.y;
//获得鼠标坐标
if((thing.event.motion.x>350&&thing.event .motion .x200))
{
xy.x=350;
xy.y=200;
SDL_BlitSurface( font_11, NULL, main,& xy);
SDL_Flip(main);
}
else
{
xy.x=350;
xy.y=200;
SDL_BlitSurface( font_1 , NULL, main,& xy);
SDL_Flip(main);
}
if((thing.event.motion.x>350&&thing.event .motion .x280))
{
xy.x=350;
xy.y=280;
SDL_BlitSurface( font_22 , NULL, main,& xy);
SDL_Flip(main);
}
else
{
xy.x=350;
xy.y=280;
SDL_BlitSurface( font_2 , NULL, main,& xy);
SDL_Flip(main);
}
}
}
return 0;
}
intwelcome()
{
intx=0,y=0,i=0;
SDL_BlitSurface(out,&data.welcome,main,NULL);
bird=out;
xy.x=350;
xy.y=200;
font_1=TTF_RenderText_Solid( font, "Start game", textColor_1 );
font_11=TTF_RenderText_Solid( font, "Start game", textColor_2 );
SDL_BlitSurface( font_1 , NULL, main,& xy);
xy.x=350;
xy.y=280;
font_2=TTF_RenderText_Solid( font, " Exit game", textColor_1 );
font_22=TTF_RenderText_Solid( font, " Exit game", textColor_2 );
SDL_BlitSurface( font_2 , NULL, main,& xy);
xy.x=10;
xy.y=440;
//野指针
SDL_BlitSurface( TTF_RenderText_Solid( font, "Esc:exit game Space:to jump hekun ", textColor_1 ) , NULL, main,& xy);
SDL_Flip( main ); //更新窗口
while(SDL_PollEvent(& thing.event ), 1)
{
i+=2;
Sleep(1);
if( thing.keystates[ SDLK_ESCAPE] )exit(0);
if( thing.event.type == SDL_QUIT )// 点击了SDL关闭按钮
{
exit(0);
}
if((x>350&&x200))
{
if(thing. event.type == SDL_MOUSEBUTTONDOWN)
if(thing.event.button.button== SDL_BUTTON_LEFT )
{
SDL_FreeSurface(font_1);
SDL_FreeSurface(font_11);
SDL_FreeSurface(font_22);
SDL_FreeSurface(font_2);
return 0;
}
}
else
{
}
if((x>350&&x280)) //结束游戏
{
if(thing. event.type == SDL_MOUSEBUTTONDOWN)
if(thing.event.button.button== SDL_BUTTON_LEFT )exit(0);
}
if(thing. event.type == SDL_MOUSEMOTION )
{
x=thing.event.motion.x;
y=thing.event.motion.y;
//获得鼠标坐标
if((thing.event.motion.x>350&&thing.event .motion .x200))
{
xy.x=350;
xy.y=200;
SDL_BlitSurface( font_11, NULL, main,& xy);
SDL_Flip(main);
}
else
{
xy.x=350;
xy.y=200;
SDL_BlitSurface( font_1 , NULL, main,& xy);
SDL_Flip(main);
}
if((thing.event.motion.x>350&&thing.event .motion .x280))
{
xy.x=350;
xy.y=280;
SDL_BlitSurface( font_22 , NULL, main,& xy);
SDL_Flip(main);
}
else
{
xy.x=350;
xy.y=280;
SDL_BlitSurface( font_2 , NULL, main,& xy);
SDL_Flip(main);
}
}
if(i==400)
{
xy.x=150;
xy.y=250;
SDL_BlitSurface(bird,&data.bird_1,main,&xy);
SDL_Flip(main);
}
if(i==800)
{
xy.x=150;
xy.y=250;
SDL_BlitSurface(bird,&data.bird_2,main,&xy);
i=0;
SDL_Flip(main);
}
}
return 0;
}
};
Pri pri;
int game_judge()
{int i=0;
if(y>370||y<-10)
{
if(pri.over()==11)return12;
}
for(i=0;i {
if(posi[i][0]50)
{
if(yposi[i][1]+570)
{if(pri.over()==11)return12;}
}
}
return0;
}
int game_loop()
{ y=150,i=0;
int ii=0,iii=0;
SDL_Surface *font;
pri.bg();
chars[50];
Uint32 start = 0;
sprintf(s," FPS:%d\t\t\t\t\t\t\t\tScore:%d",1000/(SDL_GetTicks()-start),score);
intq=0;
while(SDL_PollEvent(& thing.event ), 1)
{
start = SDL_GetTicks();
i++;
Sleep(1);
SDL_Flip(pri.main);
y+=4;
if(y>430)y=100;
if(thing.event.button.state==SDL_PRESSED)y-=20;
if( thing.keystates[ SDLK_SPACE] )y-=20;
if( thing.keystates[ SDLK_ESCAPE] )exit(0);
if( thing.event.type == SDL_QUIT )// 点击了SDL关闭按钮
{
exit(0);
}
if(game_judge()==12)return0;
pri.bir(y);
//显示 每秒循环的次数
ii++;
if(ii>20)
{
sprintf(s," FPS:%d\t\t\t\t\t\t\t\tScore:%d",1000/(SDL_GetTicks()-start)+rand()%5,score);
ii=0;
}
font=TTF_RenderText_Solid( pri.font, s, textColor_2 );
SDL_BlitSurface(font , NULL,pri. main, NULL);
SDL_Flip(pri.main);
SDL_FreeSurface(font);
posi[0][0]-=2;
posi[1][0]-=2;
posi[2][0]-=2;
if(posi[0][0]<=(-110))
{posi[0][0]=posi[2][0]+300;posi[0][1]=-(rand()%180)-220;}
if(posi[1][0]<=(-110))
{posi[1][0]=posi[0][0]+300;posi[1][1]=-(rand()%180)-220;}
if(posi[2][0]<=(-110))
{posi[2][0]=posi[1][0]+300;posi[2][1]=-(rand()%180)-220;}
iii++;
if(iii>50)
for(iii=0;iii<3;iii++)
{
if(posi[iii][0]<50);
score++;
iii=0;
break;
}
}
return 0;
}
int main(int argc, char
argv[])
{
while(1)
{
pri.init();//初始化输出设备
pri.welcome();
game_loop();
}
return0;
}

编译没有报错,连接显示MSUCRTD.lib(crtexe.obj):error LNK2001:unresolved external symbol_main
Debug:fatal error LNK1120:14 unresolved externals.

14个错误都是这种样式:
error LNK2001:unresolved external symbol _TTF_Init
工程是win32 application
设置里面连接都改成了/subsystem:windows
C/C++的预处理器也改成了windows,预编译头文件全部选择不使用预补偿页眉
常规里面选择了使用MFC作为共享的DLL
以上都是我百度的方法,全部试过
也没有用。所以只好来麻烦各位大神了

3个回答

[Project] --> [Settings] --> 选择"Link"属性页

在Category中选择Output
再在Entry-point symbol中填入_main

zero2901
zero2901 连接了sdl.lib,sdl_ttf.lib,sdl_image.lib,函数调试没有错误了,可是一点运行就闪一下,就退了。加了system(“pause”)也没用,是什么情况
接近 5 年之前 回复
zero2901
zero2901 显示多了两个错误。
接近 5 年之前 回复

你用到了sdl相关类库,但你只包含了h文件,而没有link相关的lib库进工程,所有有很多ttl相关函数找不到实现

zero2901
zero2901 我用的就是1.2.14,还是闪退啊
接近 5 年之前 回复
oyljerry
oyljerry 回复zero2901: 官网看看要么有说明应该vc6对应哪个版本
接近 5 年之前 回复
zero2901
zero2901 我是VC6。我发现我用的SDL_1.2.15好像不兼容。可是换成1.2.14也是闪退。真的搞不清为什么
接近 5 年之前 回复
zero2901
zero2901 vc6应该用什么版本的lib啊?
接近 5 年之前 回复
oyljerry
oyljerry 回复zero2901: 程序出现异常了,可能你调用方式有问题,或者你的lib库是否跟你VS一个版本
接近 5 年之前 回复
zero2901
zero2901 连接了sdl.lib,sdl_ttf.lib,sdl_image.lib,函数调试没有错误了,可是一点运行就闪一下,就退了。加了system(“pause”)也没用,是什么情况
接近 5 年之前 回复
zero2901
zero2901 嗯,我试试
接近 5 年之前 回复
oyljerry
oyljerry 回复zero2901: 你需要下载的TTF相关的,需要带有lib库的包
接近 5 年之前 回复
zero2901
zero2901 那怎么办呢?
接近 5 年之前 回复

TTF_Init 没有找到实现的代码,解决的方式:
1)提供代码
2)增加对应的 LIB

zero2901
zero2901 单步调试到0040379 call _initterm(0040312a)的时候,程序闪一下就不见了。我是VC6。我之前SDL_1.2.15应该不兼容。可是换成1.2.14也是闪退。真的搞不清为什么
接近 5 年之前 回复
91program
91program 回复zero2901: 2你的代码,第一行有没有被执行呢?单步调试一下看看是哪行代码引起的闪退吧。
接近 5 年之前 回复
91program
91program 回复zero2901: 可能是这些库的问题吧
接近 5 年之前 回复
zero2901
zero2901 连接了sdl.lib,sdl_ttf.lib,sdl_image.lib,函数调试没有错误了,可是一点运行就闪一下,就退了。加了system(“pause”)也没用,是什么情况
接近 5 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问