yunings 发表于 2006-3-20 13:34:06

唔,支持,不做成exe文件不好运行的说,辛苦了。

荔枝 发表于 2006-3-21 09:43:20

bs下上边不劳而获的人,顺便也bs下自己

upasia 发表于 2006-3-21 16:49:51

BS也没有办法!我也想劳动,可惜总是没有时间!而且也没有耐力!

fallening 发表于 2006-3-22 11:02:19

源代码如下:


#include <iostream>
#include <string>
#include <fstream>

using namespace std;

//全局变量,放置输出的Erm
string Export;
//放置要翻译的事件的数量
const int NUMBER = 1000;
//存放事件描述的字符个数
const int BUFFERSIZE = 10000;

////////////////////////////////////////////////////////////////////////////////
//作用:将坐标(x,y,level)处的事件Discription转换到erm
//输入:事件的坐标(x,y,level)
//      事件的描述 buffer
//输出:
//附注: 发现第三个输入变量为string类型时候,直接在空格处分割字符串,调试未果
//       改用*char类型替换(不解)
////////////////////////////////////////////////////////////////////////////////
string to_erm( const string X, const string Y, const string Level, const char *Buffer )
{
string Out;
//事件注释
Out = "\n//在(" + X + ", " + Y + ", " + Level +" )处的事件" + "\n";
//事件的位置erm
Out += "!?LE" + X + "/" + Y + "/" + Level + ";\n" ;
//事件的描述erm
Out += "!!VRz10:S^\n";
Out += Buffer;
Out += "\n^;\n";
Out += "!!IF:D5/10;\n";
Out += "!!IF:E1/5;\n";

return Out;      
}

////////////////////////////////////////////////////////////////////////////////
//作用: 清空输入缓冲区,很重要,调试了半天
////////////////////////////////////////////////////////////////////////////////
void clear_cache()
{
                  
                  while ( cin.get() != '\n' )
                  {}
}

////////////////////////////////////////////////////////////////////////////////
//作用:将转换好的erm储存成文件
//输入:全局变量Export
//输出:在当前目录下生成一个文本文件
////////////////////////////////////////////////////////////////////////////////
void to_file()
{
   string FileName;
   cout << endl << "请输入要输出的文件名称:" << endl;
   cin >> FileName;
   
   if ( !cin.good())
   {
    cout << "错误的文件名称,请重新输入--" << endl;
    to_file();   
   }
   
   if ( cin.good () )
   {
   ofstream outfile ( FileName.c_str() );
   outfile << Export;
   
   cout << "接受输入的文件名----" << endl;

   cout << "输出文件完成:)" << endl << endl;
   }
}



int main()
{
Export = "\nZVSE\n\n";
//坐标(x,y,level),描述
string x,y,level,discription;

for ( int i = 0; i < NUMBER; ++i )
   {
         cout << "程序说明:" << endl;
         cout << "依照提示输入,注意事件的描述,如果用粘贴的话,确保粘贴的内容里边"
                << endl;
         cout << "不包含多个回车----"
                << endl;
         cout << "按回车键开始:)" << endl;
         
         clear_cache();
         
         //基本输入部分
         cout << endl << "请输入事件的x坐标( 0 - 143 ):" <<endl;
         cin >> x;
         
         clear_cache();
         
         cout << endl << "请输入事件的y坐标( 0 - 143 ):" << endl;
         cin >> y;
         
         clear_cache();
         
         cout << endl << "事件发生在地上/地下?(0/1)" << endl;
         cin >> level;
         
         clear_cache();
         
         cout << endl << "请输入事件的描述" << endl;
         char buffer[ BUFFERSIZE ];
         cin.get( buffer, BUFFERSIZE, '\n' );

          Export += to_erm( x, y, level, buffer );
         //询问是否处理下一个事件
         cout << endl << "该事件处理完毕\n" << endl;
         cout << "继续处理下一个事件?(y/n)" << endl;
         
         clear_cache();
         
         //再清空一次,不放心:)
         cin.clear();

         char c;
         cin.get( c );
         if ( ( 'n' == c ) || ( 'N' == c ))
         {
             break;
         }
         
         system ( "cls" );
          //用linux的兄弟,把这句改成
         //system ( "clear" );
   }

//输出到文件
to_file();

system( "pause" );

return 0;   
}





不好意思,断网了几天

修改了几个bug
生成了exe文件了,但是忽然发现传不了大的附件,打包之后是103k,论坛这么提示:

上传新附件 (小于 102.4 kb , 可用扩展名: chm, pdf, zip, rar, tar, gz, bzip2, gif, jpg, jpeg, png)

我晕倒,那位帮忙留下email,我传过去帮忙贴下
谢谢

云斯 发表于 2006-3-22 13:24:50

偶等着你的新版小程序,哈~

辛苦了!

风子 发表于 2006-3-22 14:35:20

不懂,期待更多的佳作。

完全精神支持!

fallening 发表于 2006-3-22 17:28:07

刚刚调试好了
帮忙看看有什么需要改进的?


#include <iostream>
#include <string>
#include <fstream>
#include <strstream>

using namespace std;

const char mynull = '\0';
//全局变量,放置输出的Erm
string Export;
//放置要翻译的事件的数量
const int NUMBER = 1000;
//存放事件描述的字符个数
const int BUFFERSIZE = 2550;
//地图坐标最大值
const int MAXSIZE = 143;
//地图坐标最小值
const int MINSIZE = 0;
//每行最大字符数
const int MAXLINECHAR = 30;
//最大剧情字符数
const int MAXCHAR = 240;

//------------------------------------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
//作用: 清空输入缓冲区
////////////////////////////////////////////////////////////////////////////////
void clear_cache()
{                  
                  while ( cin.get() != '\n' )
                  {}
}

////////////////////////////////////////////////////////////////////////////////
//作用:询问是否继续下一次转换
//输入:n/N --返回false
//   其他 --返回true
////////////////////////////////////////////////////////////////////////////////
bool will_continue()
{
         //询问是否处理下一个事件
         cout << endl
                << "该事件处理完毕\n"
                << endl;
         cout << "继续处理下一个事件?(y/n)"
                << endl;
         
         char c;
         cin.get( c );
         system( "cls" );
         if ( ( 'n' == c ) || ( 'N' == c ))
         {
             return false;
         }
         
         return true;
         
         clear_cache();
         
}

////////////////////////////////////////////////////////////////////////////////
//作用:将转换好的erm储存成文件
//输入:全局变量Export
//输出:在当前目录下生成一个文本文件
////////////////////////////////////////////////////////////////////////////////
void to_file()
{
   string FileName;
   cout << endl
      << "请输入要输出的文件名称:"
      << endl;
   cin >> FileName;
   
   if ( !cin.good())
   {
    cerr << "错误的文件名称,请重新输入--"
         << endl;
    to_file();   
   }
   
   if ( cin.good () )
   {
   ofstream outfile ( FileName.c_str() );
   outfile << Export;
   
   cout << "接受输入的文件名----" << endl;

   cout << "输出文件完成:)" << endl << endl;
   }
}

////////////////////////////////////////////////////////////////////////////////
//作用:转换一个int类型数据到string
//输入:int
//输出:string
//附注:似乎记得一个转换的函数来着,但是想不起来了,也查不到
//      将就着自己写了一个
//      用Wall选项编译的时候有警告去不掉~——~
////////////////////////////////////////////////////////////////////////////////
string int2string(unsigned int aInteger)
{
        ostrstream ostr;
        int anInt;
        anInt = static_cast<int>(aInteger);
        ostr << anInt << ends;
        return ostr.str();
}

////////////////////////////////////////////////////////////////////////////////
//作用:程序开始的说明部分
////////////////////////////////////////////////////////////////////////////////
void introduce()
{
Export = "\nZVSE\n\n";

cout << "程序说明:" << endl;
cout << "依照提示输入就ok了,注意事件的描述如果用粘贴的话,确保粘贴的内容里边"
   << endl;
cout << "不包含多个回车----"
   << endl;
cout << "右键电击标题栏 Edit -> Paste"
   << endl;
cout << "按回车键开始:)";
         
clear_cache();   
}
//******************************************************************************
////////////////////////////////////////////////////////////////////////////////
//核心类定义
////////////////////////////////////////////////////////////////////////////////
class ToErm
      {
         public:
                  ToErm()
                  {
                         x = 0;
                         y = 0;
                         level = 0;
                         discription = "\nDefault.\n";                        
                  }
                  
                  //输入x坐标
                  void set_x( )
                  {
                     cout << endl << "请输入x坐标:" << MINSIZE << "--" << MAXSIZE
                            << endl;
                     cin >> x;
                     
                     clear_cache();
                     
                     if ( ( !cin.good() )||( x > MAXSIZE) || ( x < MINSIZE ) )
                     {
                            system( "cls" );
                            cerr << endl
                                 << "输入错误,请重新输入x坐标:"
                                 << endl;
                            this -> set_x();
                     }
                  }
                  
                  void set_x( const int X )
                  {
                     x = X;
                  }
                  
                  //输入y坐标
                  void set_y()
                  {
                     cout << endl << "请输入y坐标:" << MINSIZE << "--" << MAXSIZE
                            << endl;
                     cin >> y;
                     
                     clear_cache();
                                             
                     if ( ( !cin.good() ) || ( y > MAXSIZE) || ( y < MINSIZE ) )
                     {
                            system( "cls" );
                            cerr << endl
                                 << "输入错误,请重新输入y坐标:"
                                 << endl;
                            this -> set_y();
                     }
                                          
                  }
                  
                  void set_y( const int Y )
                  {
                     y = Y;
                  }
                  
                  //输入level坐标
                  void set_level( )
                  {
                     cout << endl << "请输入level坐标:0/1"
                            << endl;
                     cin >> level;
                     
                     clear_cache();
                     
                     if ( ( !cin.good() ) || ( level > 1) || ( level < 0 ) )
                     {
                            system( "cls" );
                            cerr << endl
                                 << "输入错误,请重新输入level坐标:"
                                 << endl;
                           
                            this -> set_level();
                     }
                  }
                  
                  void set_level( const int LEVEL )
                  {
                     level = LEVEL;
                  }
                  
                  //输入剧情描述
                  void set_discription( )
                     {
                        cout << endl
                           << "请输入剧情描述:"<< endl
                           << "可以右键点击标题栏(编辑--粘贴)"<< endl
                           << "但是注意其中不要有多个回车--------很重要,目前我解决不了,不好意思"
                           << endl;
                        
                        char buffer[ BUFFERSIZE ];
                        for ( int i = 0; i < BUFFERSIZE; ++i )
                        {
                        buffer[ i ] = mynull;
                        }
                        
                        cin.get( buffer, BUFFERSIZE, '\n' );
                     
                        discription = buffer;
                        
                        clear_cache();
                        
                        if ( discription.size() > MAXCHAR )
                        {
                           cerr << endl
                                  << "不要多于最大的字符数 "
                                  << MAXCHAR
                                  << endl
                                  << "请分割一下,重新输入:)"
                                  << endl;
                           int Size = strlen( buffer );
                           //汗~~~~
                           //好容易把它搞定
                           for ( int i = 0; i < Size; ++i )
                           {
                                 buffer[ i ] = mynull;
                           }
                           system( "pause" );
                           system( "cls" );
                           
                           this -> set_discription();
                        }
                        
                     }
                     
                  void set_discription( const string Discription )
                  {
                     discription = Discription;
                  }
                                       
                  //设置剧情描述:每行不超过多少字符
                  void modify_discription_line()
                  {
                     const char *tmp = discription.c_str();
                     char tmp1[ BUFFERSIZE ];
                     int size = strlen( tmp );
                     int j = 0;
                     for ( int i = 0; i < size; ++i )
                           {
                              
                                 if ( 0 == ( i % MAXLINECHAR ) )
                                 {
                                    tmp1[ i + j ] = '\n';
                                    ++j;
                                 }
                                 if ( mynull != tmp[ i ])
                                 {
                                 tmp1[ i + j ] = tmp[ i ];
                                 }
                           }
                     discription = tmp1;
                     discription += "\n";
                  }
               
                  void const set_export()
                  {
                                                
                        string Out;
                        //事件注释
                        Out = "\n//在(" + int2string( x ) + ", " + int2string( y )
                              + ", " +int2string( level ) +" )处的事件" + "\n";
                        //事件的位置erm
                        Out += "!?LE" + int2string( x ) + "/" + int2string( y ) + "/"
                               + int2string( level ) + ";\n" ;
                        //事件的描述erm
                        Out += "!!VRz10:S^\n";
                        Out += discription;
                        Out += "\n^;\n";
                        Out += "!!IF:D5/10;\n";
                        Out += "!!IF:E1/5;\n\n\n";

                        Export += Out;
                  }
                  
         private:
                   int x;//x坐标
                   int y;//y坐标
                   int level;//level坐标
                   string discription;//描述
      
      };
//******************************************************************************      
//******************************************************************************
int main()
{
//开场白
introduce();

ToErm * myerm = new ToErm;

for ( int i = 0; i < NUMBER; ++i )
{
    //分别是x,y,level和事件的输入
    myerm -> set_x();
    myerm -> set_y();
    myerm -> set_level();
    myerm -> set_discription();
   
    //设置30字符换行
    myerm -> modify_discription_line();
    //输出到暂时存储变量中
    myerm -> set_export();
    //是否继续下一次转换
    if ( !will_continue() )
    {
         break;
    }
   
}

delete myerm;

//发送到文件
to_file();

system( "pause" );
return 0;   
}






云斯先帮忙看看
我发到你的信箱了
原先的缓冲区太小了,很容易溢出,重新定义到2550

[ 本帖最后由 fallening 于 2006-3-22 18:00 编辑 ]

woodmelon 发表于 2006-3-22 17:32:28

又有新的了...明天回公司运行看看...
我现在在学MFC...
对基本的C++程序也是一知半解,哈哈...

fallening 发表于 2006-3-22 17:39:48

那你帮忙做一个带gui的吧,我在用纯c++做

但是编译老是通不过

yunings 发表于 2006-3-22 18:18:43

邮件收到了,测试了一下,感觉还不错,不过每行设定的是15个字符,太少了,显示的时候统统集中到了对话框中部,不太美观,能否把这个改进一下?

另外,可以联系一下lysfox,他可以尝试把程序做成可视化界面的。原贴在下面:

http://h3wog.com/redirect.php?tid=1200&goto=lastpost#lastpost

他已经行动了,不过你们的拍子不一致,赶紧联系一下吧。

fallening 发表于 2006-7-5 21:17:20

汗,这个帖子云斯要修改下哦

sd3924006 发表于 2006-7-5 22:00:52

请问下??
我是玩中文的地图,但存在乱码,通过LZ所说的剧情替换,能达到消除乱码的目的吗??

云斯 发表于 2006-7-5 23:22:16

原帖由 fallening 于 2006-7-5 21:17 发表
汗,这个帖子云斯要修改下哦
嗯,需要与时俱进了,你们的处理程序都出来了,本来应该你们来写一个如何使用的教程的,你写一个使用你的程序处理地图的图文教程吧,我给你授精:-_*:

原帖由 sd3924006 于 2006-7-5 22:00 发表
请问下??
我是玩中文的地图,但存在乱码,通过LZ所说的剧情替换,能达到消除乱码的目的吗??
如果你使用中文的H3升级到wog,这样处理只能保证剧情都能正常显示,其他的乱码(如城镇名字、英雄名字、技能描述等)无法消除。如果你下载的是本站置顶的wog,通过这样剧情处理,可以实现剧情正常显示

汗,说了一大堆,能看懂吧?

另外,现在处理中文剧情已经不用这么麻烦了,楼上的fallening同学和lysfox同学已经给大家用不同程序语言编写了剧情处理程序,到下面两个链接看看如何使用程序吧:
http://h3wog.com/viewthread.php?tid=1200&extra=page%3D1
http://h3wog.com/viewthread.php?tid=1222&extra=page%3D1

[ 本帖最后由 云斯 于 2006-7-5 23:54 编辑 ]

sd3924006 发表于 2006-7-6 14:16:29

另外,现在处理中文剧情已经不用这么麻烦了,楼上的fallening同学和lysfox同学已经给大家用不同程序语言编写了剧情处理程序,到下面两个链接看看如何使用程序吧:
http://h3wog.com/viewthread.php?tid=1200&extra=page%3D1
http://h3wog.com/viewthread.php?tid=1222&extra=page%3D1

[ 本帖最后由 云斯 于 2006-7-5 23:54 编辑 ]
--------------------------------------------------------------------------------------------------------------------------
HOHO~偶不是学计算机的,看不懂呀!

另外,我按你的方法已经会做了,只是替换工作量太大,做了一晚才替换了一副地图。
至于其他的乱码(如城镇名字、英雄名字、技能描述等)无法消除,哎,没办法,只有把
城市,英雄和场景介绍等改为E文了。

sd3924006 发表于 2006-7-6 19:52:12

再问一下,
城镇事件用!?TM时间触发器运行
地图事件可以用!?LE句法来实现
野兵怪物对白可以用!?OB句法来实现

那么,先知小屋,路牌和任务守卫的对白得用什么句法呢??
一个个试好麻烦的!

zjcadd 发表于 2006-7-6 21:05:58

呵呵
第二副图就暴露了yunings的姓名

fallening 发表于 2006-7-6 21:22:42

原帖由 sd3924006 于 2006-7-6 19:52 发表
再问一下,
城镇事件用!?TM时间触发器运行
地图事件可以用!?LE句法来实现
野兵怪物对白可以用!?OB句法来实现

那么,先知小屋,路牌和任务守卫的对白得用什么句法呢??
一个个试好麻烦的!
尝试下我的那个event2erm
很简单,都有自动生成~~~~

sd3924006 发表于 2006-7-6 21:55:41

那么event2erm
在哪有下呢??我去本站找了找,好象没得呀

fallening 发表于 2006-7-7 09:25:15

http://h3wog.com/viewthread.php?tid=1222&extra=page%3D1
本来应该写个教程的
实在没有时间
今晚要去北京,开会半个月
然后办护照签证
不好意思

sd3924006 发表于 2006-7-7 11:15:46

谢谢~
这个东东真好用呀~!一下子就替换出来了!~

恩~另外祝你一路顺风~
页: 1 2 [3] 4
查看完整版本: WoG中文化处理地图的步骤(内容已更新)

捐赠