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
谢谢~
这个东东真好用呀~!一下子就替换出来了!~
恩~另外祝你一路顺风~