中秋佳节看完了盗梦空间,还不错啊,N多人说这个编剧像是程序员出身,我也觉得像
。马上动手写了一个情景过程。不能完全模拟电影过程,只当娱乐了。
原则1 : 同电影一样一共设计3层梦境,如果能不存在意外,则植入想法成功.任务完成.
原则2 : 濒死状态的家伙会进入迷失域,能不能回来,完全不可知.
原则3 : cobb 梦境中的潜意识会出来捣乱.
原则4 : 如果运行到了迷失域,则简化处理为,有可能会被时空穿越回到第3层梦境,重新继续
...
我这个写的比较粗燥,细节方面大家感兴趣的可自己修改...
//场景
char *background[7] =
{
"------[大雨中的街道,杀手起伏...]------",
"------[豪华的宾馆中,暗藏杀机...]------",
"------[广袤无垠的雪地,远处的堡垒,艰难的任务...]------",
"------[远处的深渊,咆哮的黑海,孤岛中藏的的是什么人...]------",
"------[只有梦境中才会遇到过场景,高楼矮房,荒芜繁华,究竟是什么人藏在哪里...]------",
"------[阴森的古堡里,穿着铠甲拿着长矛大斧的卫士,任务开始吧...]------",
"------[大漠荒野,没半点生机,背后是...]------"
};
// 是否选中过场景
bool b_background[7] = {0,0,0,0,0,0,0};
bool b_remain[7] = {0,0,0,0,0,0,0};
bool b_task = 1;
bool b_finish = 0;
bool b_regress = 0;
char *lost_domain[4] =
{
"------[澎湃的海面,漂泊了数日,仅剩下一点生机,cobb说服他们,双双自杀,从迷失域返回]------",
"------[澎湃的海面,漂泊了数日,仅剩下一点生机,cobb不能说服自己也无法分别出那一个是真是的世界,永远的停留在了这里...]------",
"------[似曾相识的阴森恐怖,在这里已经多过了多日,cobb说服他们,双双自杀,从迷失域返回]------",
"------[似曾相识的阴森恐怖,在这里已经多过了多日,cobb不能说服自己也无法分别出那一个是真是的世界,永远的停留在了这里...]------"
};
// 过场字幕
void prelude(char *msg)
{
printf("%s\n",msg);
int n = 4;
while(n)
{
printf(".");
Sleep(800);
n--;
}
printf("\n");
}
// 计算是否还存活
bool is_die(int life[])
{
// 计算是都已挂掉
BOOL b_foud = 0;
for (int i = 0 ; i < 7;i++)
{
if (life[i])
{
b_foud = 1;
break;
}
}
if (0 == b_foud)
{
prelude("很遗憾,盗梦任务结束,大家都挂掉了");
return true;
}
else
{
return false;
}
}
bool my_inception(char *pe1,char *pe2,char *pe3,char *pe4,char *pe5,char *pe6,char *pe7,int n/*层数*/,bool lose/*是否进入迷失域*/)
{
//名字列表
char *pe_list[7] = {pe1,pe2,pe3,pe4,pe5,pe6,pe7};
//生命值
int pe_life_value[7] = {100,100,100,100,100,100,100};
//本层是否死掉或进入迷失域,初始都是活着的
int b_life_pe[7] = {1,1,1,1,1,1,1};
int s ,i;
BOOL b_foud = 0;
srand(time(0));
//结束
if(b_finish)
{
return false;
}
//回归
if (b_regress)
{
for(i = 0 ; i < 7 ;i++)
{
if (b_remain[i])
{
prelude("音乐+炸药准备");
printf("%s唤醒了本层的盗梦者们\n",pe_list[i]);
Sleep(1000);
}
}
prelude("任务成功,cobb终于可以回到美国见到他的孩子们了...");
b_finish = 1;
return false;
}
// 穿越时空的情况
if (lose)
{
prelude("------[穿越时空进入迷失域...]------");
s = rand();
s = s%4;
prelude(lost_domain[s]);
if(0 == s%2)
{
prelude("穿越成功回到第3层");
return my_inception(pe1,pe2,pe3,pe4,pe5,pe6,pe7,3,0);
}
else
{
// 任务失败,永远的留在了迷失域
b_task = 0;
while (true)
{
prelude("呼...泣...");
}
}
}
else
{
printf("进入%d层梦境\n",n);
prelude("");
//进入本层梦境
for(i = 0 ; i<7;i++)
{
if (!b_remain[i])
{
printf("%s进入第%d层梦境...\n",pe_list[i],n);
Sleep(800);
}
}
prelude("进入造梦师构建的场景");
b_foud = 0;
for( i = 0 ; i < 7;i++)
{
if (!b_background[i])
{
b_foud =1;
break;
}
}
if (b_foud)
{
do
{
s = rand();
s = s % 7;
} while (b_background[s]);
b_background[s] = 1;
prelude(background[s]);
}
else
{
prelude("无限的宇宙,无限的劲头...");
}
prelude("盗梦者遭遇防御者攻击xx00!@#^^&&*");
//防盗梦防御者攻击能力设定,同时对盗梦者进行攻击
for( i = 0 ; i < 7 ;i++)
{
s = rand();
s = s % 150;
pe_life_value[i] = pe_life_value[i] - s;
}
//看是否还都活着
if(is_die(b_life_pe))
{
// 任务失败,永远的留在了梦境中
b_task = 0;
while (true)
{
prelude("都挂掉了,任务失败,永远的留在了梦境中...");
}
}
// 看本层是否有死掉在梦里的
for(i = 0 ; i < 7 ;i++)
{
prelude("检查人员伤亡情况");
if (pe_life_value[i] <= 0)
{
printf("%s在%d层梦中死掉了!!!\n",pe_list[i],n);
b_life_pe[i] = 0;
b_foud++;
if (i == 6)
{
printf("很遗憾,任务结束\n");
// 任务失败,永远的留在了迷失域
b_task = 0;
while (true)
{
prelude("呼...泣...");
}
}
}
else if (pe_life_value[i] >0 && pe_life_value[i] < 10)
{
printf("%s不幸在%d层时,进入了迷失域\n",pe_list[i],n);
b_life_pe[i] = 0;
b_foud++;
if(i == 6 && pe_life_value[i] > 0)
{
prelude("没办法了,只能通过时空穿越的办法了,杀死迷失域的Fischer");
return my_inception(pe1,pe2,pe3,pe4,pe5,pe6,pe7,0,1);
}
}
else
{
printf("%s还活着,生命力[%d]\n",pe_list[i],pe_life_value[i]);
}
}
if (b_foud < 4)
{
prelude("还好伤亡不是太大,任务继续...");
}
else
{
prelude("人员伤亡较大,但任务还要继续...");
}
// cobb 内心潜意识进行攻击盗梦者
// 偶数进行攻击
s = rand();
if(0 == s%2)
{
prelude("倒霉啊,cobb 潜意识里面的东西在作怪,cobb的老婆Mal 出现了,他拿出了枪,对准了...");
s = rand();
s = s % 150;
// 随机的盗梦者
int s_p ;
s_p = rand();
s_p = s_p % 7;
if (!b_life_pe[s_p])
{
printf("%s 已经挂了,cobb 的老婆Mal竟然鞭尸啊,太恶毒了\n",pe_list[s_p]);
}
else
{
pe_life_value[i] = pe_life_value[i] - s;
printf("Mal 攻击了%s,他受伤不清啊\n",pe_list[s_p]);
if (pe_life_value[i] >0 && pe_life_value[i] < 10)
{
printf("很遗憾%s进入了迷失域",pe_list[s_p]);
}
else if (pe_life_value[i] <0)
{
printf("game over! %s挂了",pe_list[s_p]);
}
else
{
printf("好样的,%s挺住了...\n",pe_list[s_p]);
}
}
}
//看是否还都活着
if(is_die(b_life_pe))
{
// 任务失败,永远的留在了梦境中
b_task = 0;
while (true)
{
prelude("都挂掉了,任务失败,永远的留在了梦境中...");
}
return false;
}
prelude("cobb 加油,任务继续...");
// 植入想法
if (n == 3)
{
prelude("植入想法");
prelude("小Fischer看到了濒死的老父亲,明白了父亲的良苦用心,知道了该如何做了...");
//其他人准备一层一层唤醒
b_task = 1;
//回归
b_regress = 1;
my_inception(pe1,pe2,pe3,pe4,pe5,pe6,pe7,n-1,0);
return FALSE;
}
prelude("需要留下唤醒本层梦境的人,谁愿意留下?");
//留下唤醒本层梦境的人
b_foud = 0;
while(!b_foud)
{
s = rand();
s = s % 7;
if (b_life_pe[s] && 0 != stricmp("Robert Fischer(目标,老Fischer继承人)",pe_list[s]))
{
printf("太棒了,%s愿意留下来\n",pe_list[s]);
b_foud = 1;
break;
}
}
printf("%d层留下唤醒梦境的人是%s\n",n,pe_list[s]);
b_remain[s] = 1;
my_inception(pe1,pe2,pe3,pe4,pe5,pe6,pe7,n+1,0);
}
return FALSE;
}
//------------------------------------- 运行吧 -----------------------------------------
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
prelude("--->>欢迎来盗梦空间<C语言版>,任务开始了...");
my_inception(
"cobb (盗梦人)" /*盗梦人*/,
"Ariadne (造梦师)" /*筑梦师*/,
"Arthur (前哨者)" /*前哨者*/,
"Yusuf (药剂师)" /*药剂师*/,
"Eames (伪造者)" /*伪造者*/,
"Saito (游客,大财团)" /*游客*/,
"Robert Fischer(目标,老Fischer继承人)" /*目标*/,
1,
0);
}
return nRetCode;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!