📄 textout.cpp
字号:
sprintf(Temp,"%s:%10d",Stat[0],Hero.Level); //等级
PrintText(lpDDSPrimary, x+122, y+32, Temp );
PrintText(lpDDSPrimary, x+120, y+30, Temp, RGB(255,255,255));
sprintf(Temp,"%s:%10d/100",Stat[1],Hero.Exp); //经验
PrintText(lpDDSPrimary, x+122, y+52, Temp );
PrintText(lpDDSPrimary, x+120, y+50, Temp, RGB(255,255,255));
sprintf(Temp,"%s:%10d/%d",Stat[2],Hero.Lift,Hero.MaxLift); //生命
PrintText(lpDDSPrimary, x+122, y+72, Temp);
PrintText(lpDDSPrimary, x+120, y+70, Temp,RGB(255,255,255));
sprintf(Temp,"%s:%10d",Stat[3],Hero.Attack);//攻击
PrintText(lpDDSPrimary, x+122, y+92, Temp);
PrintText(lpDDSPrimary, x+120, y+90, Temp,RGB(255,255,255));
sprintf(Temp,"%s:%10d",Stat[4],Hero.Defend);//防御
PrintText(lpDDSPrimary, x+122, y+112, Temp);
PrintText(lpDDSPrimary, x+120, y+110, Temp,RGB(255,255,255));
sprintf(Temp,"%s:%10d",Stat[5],Hero.Speed);//速度
PrintText(lpDDSPrimary, x+122, y+132, Temp);
PrintText(lpDDSPrimary, x+120, y+130, Temp,RGB(255,255,255));
sprintf(Temp,"%s:%10d",Stat[6],Hero.Money);//金钱
PrintText(lpDDSPrimary, x+122, y+152, Temp);
PrintText(lpDDSPrimary, x+120, y+150, Temp,RGB(255,255,0));
ret=1;
}
}
else if( GetAsyncKeyState('A') ) //丢弃
{
PressKey('A',1);
Hero.Goods[n]=' ';
ShowGoods(n);
}
else if( GetAsyncKeyState(VK_ESCAPE) ) //退出
{
PressKey(VK_ESCAPE,1);
return ret;
}
}
}
//**************************
//显示关于游戏
void ShowAbout()
{
char *Temp0="圣剑英雄传--英雄救美(测试版)";
char *Temp=" 这是我们的第一个RPG 游戏,本来只是想练一练手而已,不过做到一半时才发现自己错了:既然做了就应该把它做好! 现今,国内游戏界还普遍存在着急功近利、粗制滥造的现象,希望制作者们用实际行动来改变它吧!我们的宗旨是“不求极品,但求精品!”";
char *Temp2="成都金点工作组 E-mail: wj77@163.net 网站 http://goldpoint.126.com";
int x=120, y=90;
rect=GetRect(0,0,420,320);
Blt(lpDDSPrimary, x-10,y-10, lpDDSStateBar, rect, TRUE);
PrintText(lpDDSPrimary, x+62, y+22, Temp0, RGB(0,0,0), TRANSPARENT, 0, 36 );
PrintText(lpDDSPrimary, x+60, y+20, Temp0, RGB(255,255,255), TRANSPARENT, 0, 36);
PrintText(lpDDSPrimary, x+22, y+62, Temp, RGB(0,0,0), TRANSPARENT, 0, 36 );
PrintText(lpDDSPrimary, x+20, y+60, Temp, RGB(255,255,255), TRANSPARENT, 0, 36);
PrintText(lpDDSPrimary, x+22, y+242, Temp2, RGB(0,0,0), TRANSPARENT, 0, 36 );
PrintText(lpDDSPrimary, x+20, y+240, Temp2, RGB(255,255,255), TRANSPARENT, 0, 36);
PressKey(VK_RETURN, 1);
PressKey(VK_RETURN);
//读文件
char *GoldPoint;
int handle, nbytes;
int X=120,Y=90;
handle=_open("text\\gp.txt",_O_RDONLY);
nbytes=_filelength(handle);
GoldPoint=(char *)malloc(nbytes);
_read(handle, GoldPoint, nbytes);
_close(handle);
rect=GetRect(0,0,ScreenX,ScreenY);
Blt(lpDDSBack, 0,0, lpDDSPrimary, rect, FALSE);
while(1)
{
rect=GetRect(0,0,420,320);
Blt(lpDDSBackGround, x-10,y-10, lpDDSStateBar, rect, TRUE);
PrintText(lpDDSBackGround, X+20, Y, GoldPoint, RGB(255,255,255), TRANSPARENT, 0, 36);
rect=GetRect(0,0,420,320);
Blt(lpDDSBack, x-10,y-10, lpDDSStateBar, rect, TRUE);
rect=GetRect(X+20, y+20, X+380, y+280);
Blt(lpDDSBack, X+20,y+20, lpDDSBackGround, rect, FALSE);
Flip();
Delay(50);
if( Y>=90-1400 )
Y--;
if( GetAsyncKeyState(VK_RETURN) ) //退出
break;
}
free(GoldPoint);
PressKey(VK_ESCAPE,1);
PressKey(VK_RETURN,1);
}
//***********************
//按键
void OnKeyDown()
{
PressKey(VK_CONTROL, 1);
PressKey(VK_RETURN, 1);
int Next[4]={Map[Scene].Width, -1, 1, -Map[Scene].Width};
//寻找物品
int ThisGood=Map[ Scene ].Data[ (SY+(Hero.y-DY-16)/32)*Map[Scene].Width + (SX+(Hero.x-DX+16)/32) + Next[Hero.Way] ];
if( ThisGood >= TREASURE )
{
rect=GetRect(0,0,640,96);
Blt(lpDDSPrimary, 0,384, lpDDSDialog, rect, TRUE);
char temp[200]="";
if( ThisGood==TREASURE ) //钱
{
int ThisMoney=random(100);
sprintf(temp,"打开宝箱后,发现有(%d)金币,哈哈……我赚翻了#_$ ", ThisMoney);
Hero.Money+=ThisMoney;
}
else //宝物
{
sprintf(temp,"打开宝箱后,发现有一个(%s),呵呵……赚了^_& ",Goods[ThisGood-TREASURE].Name);
for(int i=0; i<16; i++)
{
if( Hero.Goods[i]==' ' )
{
Hero.Goods[i]=ThisGood-TREASURE+'0';
break;
}
}
}
PrintText(lpDDSPrimary,100,400,temp,RGB(255,255,255));
Map[ Scene ].Data[ (SY+(Hero.y-DY-16)/32)*Map[Scene].Width + (SX+(Hero.x-DX+16)/32) + Next[Hero.Way] ]=BLAK+302;
while(1){
if( GetAsyncKeyState(VK_CONTROL) || GetAsyncKeyState(VK_RETURN) ) break; }
PressKey(VK_CONTROL,1); PressKey(VK_RETURN,1);
}
//和NPC对话
int ZB[4][2]={0,32, -32,0, 32,0, 0,-32};
int WAY[4]={2,3,1,0};
for(int i=0; i<Map[Scene].Npc_Nums; i++)
{
if( Map[ Scene ].NPC[i].Show == 1 && \
abs(Hero.x+SX*32-DX+ZB[Hero.Way][0] - Map[ Scene ].NPC[i].x)<=16 &&\
abs(Hero.y+SY*32-DY+ZB[Hero.Way][1] - Map[Scene].NPC[i].y)<=16 )
{
Map[Scene].NPC[i].Way=WAY[Hero.Way]; //NPC转方向
//===========================================
//****************特殊NPC处理****************
//兵器店和药店老板
if( Map[Scene].NPC[i].ID == 59999 || Map[Scene].NPC[i].ID == 69999 )
{
ShowDialog(i, Map[Scene].NPC[i].ID, 0);
ShowDialog(i, Map[Scene].NPC[i].ID, 1);
int Suilt=SaleDialog(Map[Scene].NPC[i]); //买东西
if( Suilt==0 ) //没买
ShowDialog(i, Map[Scene].NPC[i].ID, 2);
else if( Suilt==1 ) //买了
ShowDialog(i, Map[Scene].NPC[i].ID, 3);
return;
}
//收荒匠
if( Map[Scene].NPC[i].ID == 79999 )
{
ShowDialog(i, Map[Scene].NPC[i].ID, 0);
ShowDialog(i, Map[Scene].NPC[i].ID, 1);
int Suilt=SaleDialog(Hero, SALE); //卖东西
if( Suilt==0 ) //没买
ShowDialog(i, Map[Scene].NPC[i].ID, 2);
else if( Suilt==1 ) //买了
ShowDialog(i, Map[Scene].NPC[i].ID, 3);
return;
}
//酒店中的强盗
if( Map[Scene].NPC[i].ID == 70004 || Map[Scene].NPC[i].ID == 70005 )
{
ShowDialog(2, 70003, 0); //柔儿
ShowDialog(3, 70004, 0); //刀疤
ShowDialog(4, 70005, 0); //秃鹰
int Suilt=Fight(Map[Scene].NPC[4], 3, 100);
if( Suilt == 0 )//战胜秃鹰
{
ShowDialog( 3, 70004, 1);
int Suilt2=Fight(Map[Scene].NPC[3], 3, 100);
if( Suilt2 == 0 )//战胜刀疤
{
Map[Scene].NPC[3].Show=0;
Map[Scene].NPC[4].Show=0;
Map[Scene].NPC[2].Speed=4;
MainMove();
Flip();
ShowDialog(2, 70003, 1);
Map[Scene].NPC[2].TalkNum=2;
Flag_OutCity=1; //可以出城了
return;
}
else if( Suilt2 == 2 ) //败给刀疤
{
GameTitle();
return;
}
}
else if( Suilt == 2 ) //拜给秃鹰
{
GameTitle();
return;
}
}
//===========================================
//和普通NPC对话
ShowDialog(i, Map[Scene].NPC[i].ID, Map[Scene].NPC[i].TalkNum);
}
}
}
//**************************************
//对话函数
//**************************************
//读取对话数据
void LoadTalkText()
{
int fh;
int nbytes;
fh = _open( "text\\talk.txt", _O_RDONLY );
nbytes=_filelength(fh);
Talk=(char *)malloc(nbytes);
_read( fh, Talk, nbytes );
_close(fh);
}
//找寻数据位置
char *GetTalk(int ID,int Talk_Num)
{
char Chars[1024]="",buffer[20];
char IDS[10]="[";
char *RetChars;
int i=0,n=0,Long=strlen(Talk);
memset(IDS,0,10);
IDS[0]='[';
strcat(IDS,_itoa(ID,buffer,10));
IDS[6]=']';
RetChars=(char *)malloc(1024);
while( n < Long )
{
if( Talk[n] == ' ' || Talk[n] == '\n' || Talk[n] == ';' )
{
if( strcmp(IDS, Chars)==0 ) //找到数据
{
for( int Line=0; Line<=Talk_Num; Line++)
while(1) { n++; if( Talk[n]=='\n' ) { n++; break;} } //提行
ReadLine(Talk, n, RetChars,0);
return RetChars;
}
n++;
i=0;
memset(Chars,0,1024);
}
else
{
Chars[i]=Talk[n];
i++;
n++;
}
if( GetAsyncKeyState(VK_LBUTTON) ) break;
}
return "…… ……";
}
//****************
char *ReadWord(char *Temp, int &n1)
{
char *Txt;
int i=0;
n1++;
Txt=(char *)malloc(1024);
memset(Txt,0,1024);
while(1)
{
if( Temp[n1]=='{' || Temp[n1]=='}' || Temp[n1]=='@' )
{
return Txt;
}
else
{
Txt[i]=Temp[n1];
i++;
n1++;
}
}
return "error";
}
//***************************
//对话
void ShowDialog(int Npc_Num, int ID, int Talk_Num)
{
char *Text,*TempChar;
char Show[1024]="";
int n=0;
Text=(char *)malloc(1024);
Text=GetTalk(ID, Talk_Num);
TempChar=(char *)malloc(1024);
while(1)
{
switch( Text[n] )
{
case '{':
MainMove();
Flip();
rect=GetRect(0,0,640,96);
Blt(lpDDSPrimary, 0,384, lpDDSDialog, rect, TRUE);
rect=GetRect(0,0,32,32);
Blt(lpDDSPrimary, 30,404,Map[Scene].NPC[Npc_Num].Surface, rect, TRUE);
PrintText(lpDDSPrimary,18,450, Map[Scene].NPC[Npc_Num].Name,RGB(255,255,0));
TempChar=ReadWord(Text,n);
PrintText(lpDDSPrimary,123,403, TempChar );
PrintText(lpDDSPrimary,120,400, TempChar ,RGB(255,255,255));
while(1){
if( GetAsyncKeyState(VK_CONTROL) || GetAsyncKeyState(VK_RETURN) ) break; }
PressKey(VK_CONTROL,1); PressKey(VK_RETURN,1);
break;
case '}':
MainMove();
Flip();
rect=GetRect(0,0,640,96);
Blt(lpDDSPrimary, 0,384, lpDDSDialog, rect, TRUE);
rect=GetRect(0,0,32,48);
Blt(lpDDSPrimary, 30,396,lpDDSSpirit, rect, TRUE);
PrintText(lpDDSPrimary,18,450, Hero.Name,RGB(255,255,0));
TempChar=ReadWord(Text,n);
PrintText(lpDDSPrimary,123,403, TempChar );
PrintText(lpDDSPrimary,120,400, TempChar, RGB(255,255,255) );
while(1){
if( GetAsyncKeyState(VK_CONTROL) || GetAsyncKeyState(VK_RETURN) ) break; }
PressKey(VK_CONTROL,1); PressKey(VK_RETURN,1);
break;
case ';':
return;
default:
return;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -