📄 gamemain.cpp
字号:
x1=1;
BitBlt(memDC,Map_x,Map_y,(Map[Scene].Width+1)*32 ,(Map[Scene].Height+1)*32,TmpSceneDC,0,0,SRCCOPY);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1,y1,SRCAND);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1+Bmp_Width*3,y1,SRCPAINT);
// itoa(Role_X,xsp1,10);
// itoa(Role_Y+1,xsp2,10);
// strcat(xsp1,"|");
// strcat(xsp1,xsp2);
// TextOut(memDC,100,1, xsp1 ,strlen(xsp1));
Draw();
Delay(80);
CheckEvent(Role_Y+1,Role_X);
///////////////////////////
switch (Role_Status)
{
case Role_RIGHT:
if ((Role_X+2> Map[Scene].Width) || (!CanMove(Role_Y+1,Role_X+1)))
{
return;}
break;
case Role_LEFT:
if ((Role_X<=0) || (!CanMove(Role_Y+1,Role_X-1)))
{
return;}
break;
case Role_UP:
if ((Role_Y+1<=0) || (!CanMove(Role_Y,Role_X)))
{
return;}
break;
case Role_DOWN:
if ((Role_Y+3> Map[Scene].Height)||(!CanMove(Role_Y+2,Role_X)))
{
return;}
}
}
void DrawInMove(void)
{
int x;
int y;
int x1;
int y1;
x=4*Bmp_Width;
y=3*Bmp_Width;
x1=1;
y1=Role_Status*Bmp_Height+1;
ClearScr();
BitBlt(memDC,Map_x,Map_y,(Map[Scene].Width+1)*32 ,(Map[Scene].Height+1)*32,TmpSceneDC,0,0,SRCCOPY);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1,y1,SRCAND);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1+Bmp_Width*3,y1,SRCPAINT);
Draw();
}
//按下键后松开
void PressKey(DWORD Key,int x)
{
if( x==0 )
while( !GetAsyncKeyState(Key) )
{CheckSysMsg();}
while( GetAsyncKeyState(Key) )
{CheckSysMsg();}
}
void Delay(long time)
{
static long old_clock, new_clock; //延时变量
new_clock=old_clock=GetTickCount();
while( new_clock < old_clock + time )
{
new_clock=GetTickCount();
CheckSysMsg();
}
}
void ClearScr(void)
{
rect.left =0;
rect.top =0;
rect.right =325;
rect.bottom = 320;
FillRect(memDC, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));
}
void Draw(void)
{
BitBlt(memDC,0,236,320,42,msgboxDC,1,1,SRCAND);
BitBlt(memDC,0,236,320,42,msgboxDC,1,43,SRCPAINT);
TextOut(memDC,1,1, Map[Scene].name ,strlen(Map[Scene].name));
BitBlt(windowDC,0,0,325,320,memDC,0,0,SRCCOPY);
}
void PrintText(char * chr,int x,int y)
{
int word_x=0;
char tmp[40];
for (word_x=0;word_x<=strlen(chr);word_x=word_x+2)
{
memset(tmp, 0, 40);
memcpy(tmp, chr, word_x);
TextOut(memDC,x,y,tmp,strlen(tmp));
BitBlt(windowDC,0,0,width,height,memDC,0,0,SRCCOPY);
Delay(80);
}
}
void GameTitle(void)
{
char *Game_Title1=" 2037年,日本军国主义复辟。";
char *Game_Title2=" 你Leo,是一个有责任心的中国人,";
char *Game_Title3=" 只身前往日本,去为和平而战。";
char *Game_Title4=" 为了方便你完成任务,";
char *Game_Title5=" 我们派出了人工智能Airy帮助你。";
char *Game_Title6=" 你会成功吗?为了和平奋斗吧!";
char *Game_Title7=" 按空格键继续....";
PrintText(Game_Title1,1,20);
PrintText(Game_Title2,1,45);
PrintText(Game_Title3,1,70);
PrintText(Game_Title4,1,95);
PrintText(Game_Title5,1,120);
PrintText(Game_Title6,1,145);
Delay(400);
PrintText(Game_Title7,1,190);
PressKey(VK_SPACE,0);
}
bool InitMap(void)
{
char *Name[]={"maps\\map1.map","maps\\map2.map","maps\\map3.map","maps\\map4.map",
"maps\\map5.map","maps\\map6.map","maps\\map7.map","maps\\map8.map"};
char *NpcName[]={"NPCs\\npc1.npc","NPCs\\npc2.npc","NPCs\\npc3.npc","NPCs\\npc4.npc",
"NPCs\\npc5.npc","NPCs\\npc6.npc","NPCs\\npc7.npc","NPCs\\npc8.npc"};
FILE *fp;
FILE *fp1;
Delay(200);
for( int i=0; i<MAX_MAPS; i++)
{
fp=fopen(Name[i],"r");
fp1=fopen(NpcName[i],"r");
if( fp==NULL ) return false;
fscanf(fp,"%s",&Map[i].name);
fscanf(fp,"%d",&Map[i].NpcNo);
fscanf(fp,"%d",&Map[i].Width);
fscanf(fp,"%d",&Map[i].Height);
Map[i].Data =new int*[Map[ i ].Height];
NPC[i].NPCs =new NPCs_struct[Map[i].NpcNo];
for (int q=0;q<Map[i].NpcNo;q++)
{
fscanf(fp1,"%d",&NPC[i].NPCs[q].name);
fscanf(fp1,"%d",&NPC[i].NPCs[q].seeable);
fscanf(fp1,"%d",&NPC[i].NPCs[q].NPC_Status);
fscanf(fp1,"%d",&NPC[i].NPCs[q].Pos_y);
fscanf(fp1,"%d",&NPC[i].NPCs[q].Pos_x);
}
fclose(fp1);
for (int j=0;j<Map[i].Height;j++)
{
Map[i].Data[j]=new int [Map[i].Width];
for (int k=0;k<Map[i].Width;k++)
{
fscanf(fp,"%d",&Map[i].Data[j][k] );
}
}
fclose(fp);
}
return true;
}
void DrawTmpMap(int Old_Scene)
{
int i;
int j;
int i1;
int j1;
int a=0;
i=Map[Old_Scene].Height;
j=Map[Old_Scene].Width;
i1=Map[Scene].Height;
j1=Map[Scene].Width;
rect.left =0;
rect.top =0;
rect.right =j*32;
rect.bottom = i*32;
FillRect(TmpMapDC, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));//清空老地图
for (int k=0;k<i1;k++)
{
for (int l=0;l<j1;l++)
{
BitBlt(TmpMapDC,l*32,k*32,32,32,MapDC,0,Map[Scene].Data[k][l]*32,SRCCOPY);//画新地图
}
}
DrawTmpScene(Old_Scene);
}
int GetObj(int Obj_y,int Obj_x)
{
for (int i=0;i<Map[Scene].NpcNo;i++)
{
int TmpNPC_x=NPC[Scene].NPCs[i].Pos_x;
int TmpNPC_y=NPC[Scene].NPCs[i].Pos_y+1;
int cansee=NPC[Scene].NPCs[i].seeable;
if (cansee==1 && TmpNPC_x==Obj_x && TmpNPC_y==Obj_y)
{
switch (NPC[Scene].NPCs[i].name){
case 1:
return Boy1;
break;
case 2:
return Boy2;
break;
case 3:
return Girl1;
break;
case 4:
return Girl2;
break;
}
}
}
return Map[Scene].Data[Obj_y][Obj_x];
}
void MoveNPC(int NPC_Num,int NPC_Dt)
{
/////////////////////////////////////
int x;
int y;
int x1;
int y1;
int temp;
//NPC_Dt是人物的方向(不是主角)
switch (NPC_Dt)
{
case Role_RIGHT:
temp=-1;
break;
case Role_LEFT:
temp=1;
break;
case Role_UP:
temp=1;
break;
case Role_DOWN:
temp=-1;
break;
}
NPC[Scene].NPCs[NPC_Num].seeable=0;
DrawTmpScene(Scene);
x=(NPC[Scene].NPCs[NPC_Num].Pos_x)*32;
y=(NPC[Scene].NPCs[NPC_Num].Pos_y)*32;
x1=1;
y1=NPC_Dt*Bmp_Height+1;
int tmp_name=NPC[Scene].NPCs[NPC_Num].name;
//画人物
if ((NPC_Dt==Role_RIGHT) ||( NPC_Dt==Role_LEFT) ) {x=x-temp*Bmp_Width/4;}
else {y=y-temp*Bmp_Width/4;}
DrawTmpScene(Scene);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1,y1,SRCAND);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1+Bmp_Width*3,y1,SRCPAINT);
DrawInCheckEvent();
Delay(80);
x1=x1+Bmp_Width;
if ((NPC_Dt==Role_RIGHT) ||( NPC_Dt==Role_LEFT) ) {x=x-temp*Bmp_Width/4;}
else {y=y-temp*Bmp_Width/4;}
DrawTmpScene(Scene);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1,y1,SRCAND);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1+Bmp_Width*3,y1,SRCPAINT);
DrawInCheckEvent();
Delay(80);
x1=x1+Bmp_Width;
if ((NPC_Dt==Role_RIGHT) ||( NPC_Dt==Role_LEFT) ) {x=x-temp*Bmp_Width/4;}
else {y=y-temp*Bmp_Width/4;}
DrawTmpScene(Scene);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1,y1,SRCAND);
BitBlt(TmpSceneDC,x,y,Bmp_Width,Bmp_Height,NameToDC(tmp_name),x1+Bmp_Width*3,y1,SRCPAINT);
DrawInCheckEvent();
Delay(80);
if ((NPC_Dt==Role_RIGHT) ||( NPC_Dt==Role_LEFT) ) {NPC[Scene].NPCs[NPC_Num].Pos_x=NPC[Scene].NPCs[NPC_Num].Pos_x-temp;}
else {NPC[Scene].NPCs[NPC_Num].Pos_y=NPC[Scene].NPCs[NPC_Num].Pos_y-temp;}
NPC[Scene].NPCs[NPC_Num].NPC_Status=NPC_Dt;
NPC[Scene].NPCs[NPC_Num].seeable=1;
DrawTmpScene(Scene);
DrawInCheckEvent();
Delay(80);
/////////////////////////////////////
}
void TalkText(int face,char * chr,char * Obj_Name)
{
int x;
int y;
int x1;
int y1;
x=4*Bmp_Width;
y=3*Bmp_Width;
x1=Role_Act*Bmp_Width+1;
y1=Role_Status*Bmp_Height+1;
ClearScr();
BitBlt(memDC,Map_x,Map_y,(Map[Scene].Width+1)*32 ,(Map[Scene].Height+1)*32,TmpSceneDC,0,0,SRCCOPY);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1,y1,SRCAND);
BitBlt(memDC,x,y,Bmp_Width,Bmp_Height,MainRoleDC,x1+Bmp_Width*3,y1,SRCPAINT);
BitBlt(memDC,0,236,320,42,msgboxDC,1,1,SRCAND);
BitBlt(memDC,0,236,320,42,msgboxDC,1,43,SRCPAINT);
TextOut(memDC,1,1, Obj_Name,strlen(Obj_Name));
BitBlt(memDC,20,241,32,32,FaceDC,0,face*32,SRCAND);
TextOut(memDC,55,248,chr,strlen(chr));
BitBlt(windowDC,0,0,width,height,memDC,0,0,SRCCOPY);
PressKey(VK_SPACE,0);
DrawInTalkText();
}
void CheckThings(void)
{
while(GetAsyncKeyState(VK_SPACE) )
{CheckSysMsg();}
switch(hStory)
{
case 0:
if ((Scene==2)&&(ObjTmp_x==7)&& (ObjTmp_y==3)){
TalkText(Boy2Face,"请问你是谁呀?","东史郎");
TalkText(YouFace,"你好,我是Leo,你的新邻居","Leo");
TalkText(Boy2Face,"啊,欢迎.可听你说话 >>","东史郎");
TalkText(Boy2Face,"怎么,有点奇怪啦…","东史郎");
TalkText(YouFace,"哦,我是从中国来的, >>","Leo");
TalkText(YouFace,"放假了,过来...玩... >>","Leo");
TalkText(YouFace,"请多多关照^_^","Leo");
TalkText(Boy2Face,"太好了,这几天我好寂寞 >>","东史郎");
TalkText(Boy2Face,"可以找你玩吗?","东史郎");
TalkText(YouFace,"好呀!那我先走了","Leo");
TalkText(Boy2Face,"再见!","东史郎");
visit_1=true;
return;
}
if ((Scene==3)&&(ObjTmp_x==2)&& (ObjTmp_y==4)){
TalkText(Boy4Face,"小家伙,你是谁啊?","东条纯四");
TalkText(YouFace,"你好,我是Leo,你的新邻居","Leo");
TalkText(Boy4Face,"你准备好了吗?","东条纯四");
TalkText(YouFace,"准备好什么?","Leo");
TalkText(Boy4Face,"争霸世界啊,你怎么 >>","东条纯四");
TalkText(Boy4Face,"不知道!","东条纯四");
TalkText(YouFace,"我不是你们一伙的!","Leo");
TalkText(Boy4Face,"那你来我这送死啊,滚!","东条纯四");
TalkText(WizaFace,"对付他你要小心点 >>","Airy");
TalkText(WizaFace,"他是 东条英机 的曾孙","Airy");
TalkText(YouFace,"怪不得那么丑!","Leo");
TalkText(WizaFace,"离开这儿吧,似乎这里 >>","Airy");
TalkText(WizaFace,"不安全.","Airy");
visit_2=true;
return;
}
break;
////////////////////////////////
case 1:
if ((Scene==0)&&(ObjTmp_x==5)&& (ObjTmp_y==3)){
TalkText(YouFace,"东史郎,你来啦!","Leo");
TalkText(Boy2Face,"恩……","东史郎");
TalkText(YouFace,"怎么了,东史郎?你 >>","Leo");
TalkText(YouFace,"看起来很伤心啊.","Leo");
TalkText(Boy2Face,"我可能过几天就要走了...","东史郎");
TalkText(YouFace,"走? 怎么了?","Leo");
TalkText(Boy2Face,"他们想打仗,我不得不 >>","东史郎");
TalkText(Boy2Face,"去参军...","东史郎");
TalkText(YouFace,"去“争霸世界”?","Leo");
TalkText(Boy2Face,"说去送死还差不多 >>","东史郎");
TalkText(Boy2Face,"我们本来就是不正确的...","东史郎");
TalkText(YouFace,"他们真可恶!","Leo");
TalkText(Boy2Face,"是啊…对了!你真的是…","东史郎");
TalkText(YouFace,"是什么?","Leo");
TalkText(Boy2Face,"你真的是过来玩的吗?","东史郎");
TalkText(Boy2Face,"现在来这儿玩好像有点…","东史郎");
TalkText(YouFace,"好吧,其实我是来阻止战争的.","Leo");
TalkText(YouFace,"只是还没什么方向…","Leo");
TalkText(Boy2Face,"真的吗?太好了 >>","东史郎");
TalkText(Boy2Face,"你可以问问佐藤洋一 >>","东史郎");
TalkText(Boy2Face,"他一定知道怎么办!","东史郎");
TalkText(YouFace,"可是他家好像没人…","Leo");
TalkText(Boy2Face,"他一定是躲起来了 >>","东史郎");
TalkText(Boy2Face,"他胆子有点小,不过 >>","东史郎");
TalkText(Boy2Face,"我听说他爱古籍","东史郎");
TalkText(YouFace,"古籍?那我拿几本古籍 >>","Leo");
TalkText(YouFace,"去找他试试.","Leo");
TalkText(Boy2Face,"祝你好运,我们的命运 >>","东史郎");
TalkText(Boy2Face,"都等着你改写呢!","东史郎");
Map[Scene].Data[5][9]=wiz;
Map[Scene].Data[3][9]=wiz;
visit_3=true;
DrawTmpMap(0);
return;
}
if ((Scene==0)&&(ObjTmp_x==9)&& (ObjTmp_y==5) && (visit_3==true) ){
Get_Sunzi=true;
TalkText(WizaFace,"哇!你得到了 孙子兵法 啦!","Airy");
return;
}
if ((Scene==0)&&(ObjTmp_x==9)&& (ObjTmp_y==3) && (visit_3==true) ){
Get_Sanshi=true;
TalkText(WizaFace,"哇!你得到了 三十六计 啦!","Airy");
return;
}
break;
////////////////////////////////
case 2:
if ((Scene==4)&&(ObjTmp_x==2)&& (ObjTmp_y==4)&&(!visit_zuo)){
TalkText(YouFace,"佐藤爷爷好!","Leo");
TalkText(Boy1Face,"你好,哇,你有孙子兵法 >>","佐藤洋一");
TalkText(Boy1Face,"借我看看好吗?","佐藤洋一");
TalkText(YouFace,"当然啦!","Leo");
TalkText(Boy1Face,"太好了.","佐藤洋一");
TalkText(YouFace,"爷爷,我有个问题想问","Leo");
TalkText(Boy1Face,"那就快问,快问…","佐藤洋一");
TalkText(YouFace,"怎样才可以阻止政府…","Leo");
TalkText(Boy1Face,"阻止政府出兵?","佐藤洋一");
TalkText(YouFace,"对啊!爷爷快告诉我!","Leo");
TalkText(Boy1Face,"这……我不能说","佐藤洋一");
TalkText(YouFace,"爷爷怎么了,难道您认为 >>","Leo");
TalkText(YouFace,"他们是对的?!","Leo");
TalkText(Boy1Face,"当然不对…可是 我是 >>","佐藤洋一");
TalkText(Boy1Face,"日本人,我不能背叛祖国!","佐藤洋一");
TalkText(YouFace,"你认为背叛那些BT的懦夫 >>","Leo");
TalkText(YouFace,"就是背叛祖国吗? 他们 >>","Leo");
TalkText(YouFace,"只是一团团狗屎!","Leo");
TalkText(Boy1Face,"我不能背叛祖国!","佐藤洋一");
TalkText(WizaFace,"有麻烦了……","Airy");
TalkText(YouFace,"怎么办吗!","Leo");
TalkText(WizaFace,"我查查 三十六计…","Airy");
TalkText(WizaFace,"看!上面有条“上屋抽梯”","Airy");
TalkText(YouFace,"太好了!我把他的梯子抽掉试试.","Leo");
enter_10=true;
return;
}
if ((Scene==4)&&(Role_X==6)&& (Role_Y==1)&&(!visit_zuo)&&(enter_10)){
TalkText(YouFace,"老鬼子,我把你的梯子抽掉!","Leo");
Map[Scene].Data[2][6]=WallD;
visit_zuo=true;
DrawTmpMap(4);
Draw();
Role_Status=Role_UP;
Map_y-=32;
Role_Y=2;
DrawInCheckEvent();
return;
}
if ((Scene==4)&&(Role_X==6)&& (Role_Y==2)&&(!visit_zuo)&&(enter_10)){
TalkText(YouFace,"老鬼子,我把你的梯子抽掉!","Leo");
Map[Scene].Data[2][6]=WallD;
visit_zuo=true;
DrawTmpMap(4);
Draw();
DrawInCheckEvent();
return;
}
if ((Scene==4)&&(ObjTmp_x==2)&& (ObjTmp_y==4)&&(visit_zuo)){
TalkText(YouFace,"对不起,爷爷,我把梯子抽了","Leo");
TalkText(YouFace,"你走不了啦……","Leo");
TalkText(Boy1Face,"看来你是铁心了.好吧…","佐藤洋一");
TalkText(Boy1Face,"这场战争的根源 >>","佐藤洋一");
TalkText(Boy1Face,"在靖国神社,我家有通向 >>","佐藤洋一");
TalkText(Boy1Face,"那里的通道.","佐藤洋一");
TalkText(Boy1Face,"你首先得进入靖国神社 >>","佐藤洋一");
TalkText(Boy1Face,"我也只能告诉你这些.","佐藤洋一");
TalkText(Boy1Face,"和平是每个人都向往的","佐藤洋一");
TalkText(Boy1Face,"祝你成功.","佐藤洋一");
TalkText(YouFace,"谢谢爷爷!","Leo");
hStory=3;
return;
}
break;
////////////////////////
case 3:
if ((Scene==5)&&(ObjTmp_x==6)&& (ObjTmp_y==4)){
TalkText(Girl2Face,"你怎么敢闯入军机处?","小百合");
TalkText(YouFace,"为了和平,希望你理解.","Leo");
TalkText(Girl2Face,"你的事我已经知道了","小百合");
TalkText(Girl2Face,"我相信每个人都理解你!","小百合");
TalkText(Girl2Face,"先祝你顺利,不过我建议 >>","小百合");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -