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

📄 textout.cpp

📁 RPG单机游戏圣剑英雄传的源代码(声音、图片、剧情等)希望给对于想制作游戏的人有一定帮助。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				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 + -