日期:2014-05-20  浏览次数:20746 次

java单机rpg游戏人物对白怎么保存的
如果是网游。都是通过协议请求服务器的,但是如果在单机,那些对话内容是怎么保存和管理的呢。比如一个任务一个任务的往下走,这些都是怎么设计的呢。求思路 。谢谢大牛们....

------解决方案--------------------
网游大部分只要是不会变化的对白也是放在客户端上的。。。。

简单说
任务是通过变量的形式设计的

你完全可以把对话内容写在java代码中(不过写在代码中不便于修改,修改一次就要生成一个新的jar包,很麻烦,所以才放在某配置文件中)
然后通过某一个变量来表示当前正在执行的任务,当任务完成时,变量加1,执行下一个任务。。。
------解决方案--------------------
对话内容保存在message()方法中,玩家根据索引可以随时撮需要的对话内容。当前对话内容的序号由sn记录。
Java code

        int sn;    /*对话的序号*/
    public void message(int ii)
    {
        i=0;
        dlgM=null;
        dlgMenu=null;
        isTalking=true;
        curNPC=ii-2;
        switch(ii)
        {
            case 2:
            dlgM=new String[7];
            dlgM[0]="尹风:如今奸臣当道,国家有难,匹夫有责.郭大侠苦守襄阳,为夫决意前往助守襄阳";
            dlgM[1]="晶晶:官人做得对。";
            dlgM[2]="尹风:此去不知何时才能回,娘子要保重身体.";
            dlgM[3]="晶晶:官人一路上要多加小心";
            dlgM[4]="尹风:夫君记住了";
            dlgM[5]="晶晶:......(呜咽)";
            dlgM[6]="晶晶:大事为重,不用挂念我.";
            break;
            case 3:
            dlgM=new String[1];
            dlgM[0]="前方是土匪出没,危害乡民,请不要轻易前往";
            break;
            case 4:
            dlgM=new String[3];
            dlgM[0]="黄药师:你从很远的地方来的,是为了找郭靖吧!";
            dlgM[1]="尹风:是,求仙人指点。";
            dlgM[2]="黄药师:好,随我来";
            break;        
            case 5://
            dlgM=new String[9];
            dlgM[0]="尹风:郭大侠,不才愿助您驻守襄阳!";            
            dlgM[1]="郭靖:现在有一件很重要的事需要你的帮忙。";
            dlgM[2]="尹风:大侠请说!";
            dlgM[3]="郭靖:马上就到冬季,将士们需要100件去寒之物。";
            dlgM[4]="尹风:这个好办,我来的路上经过一个荒岛,上面野兽众多,找点皮毛还不容易。";
            dlgM[5]="郭靖:这样便好,那就托付与你了,这些银两你带上。";
            dlgM[6]="获得银两10000";
            dlgM[7]="郭靖:早去早回。";
            dlgM[8]="郭靖:太好了,有了这些虎皮,整个冬天都不怕了,过了这个冬天就是复我河山之时!";
            break;
            case 6:
            dlgM=new String[1];
            dlgMenu=new String[2];
            dlgM[0]="你希望参加这个勇士的竞技吗?需要收取350两费用,竞技必须是杀死所有野兽才会停止.";
            dlgMenu[0]="参加";
            dlgMenu[1]="离开";
            break;                
            case 7://洪七公
            dlgM=new String[3];
            dlgM[0]="最近老觉得身体不好,本想自己去收集些药引,可是力不从心了,希望你可以帮助我,我将会给你一些报酬";
            dlgM[1]="重新分配技能点需要10000两,交纳费用后你可以将技能点重新分配";
            dlgM[2]="在荒岛收集10粒九花玉露丸,5棵通天草,在大智岛收集10棵千年人参,在蓬莱收集5个灵芝";
            dlgMenu=new String[3];
            dlgMenu[0]="分配技能";
            dlgMenu[1]="接受任务";
            dlgMenu[2]="离开这里";            
            break;
            case 8://船工
            dlgM=new String[1];
            dlgMenu=new String[2];
            dlgMenu[0]="购买";
            dlgMenu[1]="离开";
            dlgM[0]="在这里你找不到比我这更好的船了!船只价格是600两,你赶紧买吧!";
            break;
        }
        if(!dlg[ii-2])
        sn=0;
        else
        if(ii<5)
        sn=dlgM.length-1;
        else
        if(ii==5)
        {
            if(tn[4]==20)
            sn=7;
            else
            sn=6;
        }
        else
        sn=0;
        createDialogImage(dlgM[sn]);
        repaint();
    }