首页
社区
课程
招聘
[原创]盗梦空间-C语言版过节娱乐一下
发表于: 2010-9-24 17:54 2759

[原创]盗梦空间-C语言版过节娱乐一下

2010-9-24 17:54
2759
中秋佳节看完了盗梦空间,还不错啊,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;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 95
活跃值: (419)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
2
膜拜下,看看
2010-9-24 18:22
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
3
neineit很有兴致哦,还没看过这个电影。。。
2010-9-24 19:00
0
雪    币: 397
活跃值: (372)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
4
推荐看一下啊呵呵。下载回来或去电影院都可以。我可不是影托哦。
2010-9-24 19:25
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
5
看了电影,非常不错..楼主代码看不懂
2010-9-24 20:08
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
6
程序应该不难,只是还没看过这部电影,到时再回头看看这段代码吧,不过很有创意将程序融入到生活中了~~~
2010-9-24 20:30
0
雪    币: 391
活跃值: (135)
能力值: ( LV2,RANK:140 )
在线值:
发帖
回帖
粉丝
7
neinei
2010-9-24 20:35
0
雪    币: 249
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我也中秋节跑去看了  
的确有深度
2010-9-24 21:22
0
雪    币: 46
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
这个有点意思啊!
2010-9-25 01:12
0
雪    币: 780
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
欢迎楼主加入<盗梦空间>游戏开发小组
2010-9-25 08:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
还真是看不太明白,也许这就是创意
2010-9-30 11:16
0
游客
登录 | 注册 方可回帖
返回
//