铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 7386|回复: 16

[其他] 复刻版内置输入法

[复制链接]
发表于 2009-10-23 01:47 | 显示全部楼层 |阅读模式
本帖最后由 jy02785317 于 2010-8-18 11:20 编辑

12.4更新加入lua版,见http://www.txdx.net/thread-435824-1-1.html
其实复刻版原本调用输入框的办法比较简便些
我加的代码反而比较繁琐,也不方便玩家输入
不过,就当是复古吧,更像原始的金群
测试是在苍龙逐日wely复刻版里做的,基本没什么大的问题
先贴代码,明天上效果图,太晚了,懒得截图什么的




  1.   f:textfile;
  2.   py:widestring;//输入的拼音
  3.   npy:char;
  4.   j:integer;
  5.   ye:integer;//记录选字处于哪一页
  6.   pyw:array[0..8000] of pyword;//保存汉字-拼音列表
  7.   pp:array[0..100] of widestring;//与输入拼音匹配的汉字
  8.   houxuan:array[0..9] of widestring; //选字状态下,候选字符
  9.   state:integer;//输入状态,0处于汉字,1处于拼音输入;2处于选字
  10.   //--------
  11. begin
  12.   LoadR(0);
  13.   //显示输入姓名的对话框
  14.   //form1.ShowModal;
  15.   //str := form1.edit1.text;
  16.   //str := '请输入拼音后按空格键选字';
  17.   //name := InputBox('Enter name', str, '我是主角');
  18.   //str1 := unicodetobig5(@name[1]);
  19.   //-------------------------------------
  20.   AssignFile(f,'biao21');
  21.   Reset(f);
  22.   for i:=0 to 8000 do
  23.   begin
  24.   readln(f,pyw[i].hanzi);
  25.   readln(f,pyw[i].pinyin);
  26.   end;
  27.   state:=0;
  28.   Redraw;
  29.   //str := '请输入拼音后按空格键选字';
  30.   //drawshadowtext(@str[1], 32,  320, colcolor($66), colcolor($63));
  31.   //str := '姓名输入完毕后按回车开始游戏';
  32.   //drawshadowtext(@str[1], 32,  340, colcolor($66), colcolor($63));
  33.   //sdl_updaterect(screen, 0, 0, screen.w, screen.h);
  34.   SDL_EnableKeyRepeat(0, 10);
  35.   while (SDL_WaitEvent(@event) >= 0) do
  36.   begin
  37.     case event.type_ of
  38.       //关闭窗口事件
  39.       SDL_QUITEV:
  40.         if messagedlg('Are you sure to quit?', mtConfirmation, [mbOk, mbCancel], 0) = idOK then Quit;
  41.       //键盘事件
  42.       SDL_KEYUP:
  43.         begin
  44.         //输入a-z
  45.           if ((event.key.keysym.sym >96) and (event.key.keysym.sym <123) and (state<>2)) then
  46.           begin
  47.             if state=0 then
  48.               begin
  49.               py:='';
  50.               state:=1;
  51.               end;
  52.             npy:=chr(event.key.keysym.sym);
  53.             py:=py+npy;
  54.           end;
  55.           //输入BACKSPACE,删除
  56.           if ((event.key.keysym.sym=8)  and (state<>2)) then
  57.           begin
  58.             if state=0 then
  59.               begin
  60.                 delete(name,length(name),1);
  61.               end else
  62.               begin
  63.                 delete(py,length(py),1);
  64.                 if length(py)=0 then state:=0;
  65.               end;
  66.           end;
  67.           //输入空格,进入选字
  68.           if ((event.key.keysym.sym =sdlk_space)  and (state=1)) then
  69.           begin
  70.             j:=0;
  71.             for i:=0 to 8000 do
  72.               begin
  73.               if  widesametext(py,pyw[i].pinyin) then
  74.                 begin
  75.               pp[j]:=pyw[i].hanzi;
  76.               j:=j+1;
  77.                 end;
  78.               end;
  79.             for i:=0 to 9 do
  80.               begin
  81.                 if(pp[i]<>'')
  82.                 then houxuan[i]:=pp[i];
  83.               end;
  84.             ye:=0;
  85.             state:=2;
  86.           end;
  87.           //输入-=,选字翻页
  88.           if ((event.key.keysym.sym =SDLK_MINUS) or (event.key.keysym.sym =sdlk_equals) and (state=2)) then
  89.           begin
  90.             if(event.key.keysym.sym =SDLK_MINUS) and (ye>0) then ye:=ye-1;
  91.             if(pp[9*(ye+1)]<>'') and (event.key.keysym.sym =sdlk_equals) then ye:=ye+1;
  92.             for i:=0 to 9 do
  93.               begin
  94.                 if(pp[i]<>'')
  95.                 then houxuan[i]:=pp[i+9*ye];
  96.               end;
  97.           end;
  98.           //输入1-9,选字
  99.           if ((event.key.keysym.sym >48) and (event.key.keysym.sym <58) and (state=2)) then
  100.           begin
  101.             name:=name+houxuan[event.key.keysym.sym-49];
  102.             FillChar(py,SizeOf(py),0);
  103.             FillChar(pp,SizeOf(pp),0);
  104.             FillChar(houxuan,SizeOf(houxuan),0);
  105.             state:=0;
  106.           end;
  107.           //输入回车,结束输入法
  108.           if ((event.key.keysym.sym =sdlk_return) and (state=0)) then
  109.           begin
  110.             break;
  111.           end;
  112.         end;
  113.       end;
  114.       Redraw;
  115.       str := '请输入拼音后按空格键选字';
  116.       drawshadowtext(@str[1], 32,  320, colcolor($66), colcolor($63));
  117.       str := '姓名输入完毕后按回车开始游戏';
  118.       drawshadowtext(@str[1], 32,  340, colcolor($66), colcolor($63));
  119.       drawshadowtext(@name[1],32,360,colcolor($66), colcolor($63));
  120.       drawengshadowtext(@py[1], 42,  380, colcolor($66), colcolor($63));
  121.       for i:=0 to 8 do
  122.         begin
  123.           if(houxuan[i]<>'') then
  124.             begin
  125.               str:=inttostr(i+1);
  126.               drawshadowtext(@str[1], 32+48*i,  400, colcolor($66), colcolor($63));
  127.               drawshadowtext(@houxuan[i][1], 46+48*i,  400, colcolor($66), colcolor($63));
  128.             end;
  129.         end;
  130.       if (houxuan[0]='') and (state=2) then
  131.         begin
  132.           str:='查无此字,按任意数字键离开';
  133.           drawshadowtext(@str[1], 32,  400, colcolor($66), colcolor($63));
  134.         end;
  135.       str:=inttostr(state);
  136.       drawshadowtext(@str[1], 42,  300, colcolor($66), colcolor($63));     
  137.       //drawshadowtext(@pyw[1].pinyin[1], 82,  300, colcolor($66), colcolor($63));
  138.       sdl_updaterect(screen, 0, 0, screen.w, screen.h);
  139.     end;
  140.   //-------------------------------------
复制代码
[发帖际遇]: jy02785317游览桃花岛,没想到遇上东邪西毒北丐三人开摇滚音乐会,被玉笛鉄筝啸声三种内功波及,吐血5000ml,花了银两20两才治好。


,

[ 本帖最后由 黄顺坤 于 2009-12-5 22:38 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-23 07:32 | 显示全部楼层
恩,不错啊
把表21发上来吧
事实上我更加期待lua,要不LZ写一个lua版本的出来?
[发帖际遇]: 黄顺坤躲在无量山洞的玉像后面,待段誉磕完一千个头后说了句“免礼”,被段誉发现,立刻赔礼道歉一番花掉银两25。


[ 本帖最后由 黄顺坤 于 2009-10-23 07:34 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-23 08:08 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
头像被屏蔽
发表于 2009-10-23 08:14 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-23 10:25 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-10-23 12:40 | 显示全部楼层

回复 五当家 的帖子

确实,里面没考虑注音
不过,如果再建一个表
里面是汉字和注音的对照
代码略微修改一下还是可行的
只是按键a-z如何和相应的注音符号对照起来,我就不懂了
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-23 14:33 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-10-24 00:33 | 显示全部楼层
楼主强人~~论坛又多了一个高手~~

不过我建议是把输入法的字表改成繁体的,或者繁体优先的,毕竟游戏里用繁体字~~

[发帖际遇]: winson7891跑江湖卖艺,施展特技“胡说八道”,结果卖出无名草药若干,得款银两17。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-12-2 22:16 | 显示全部楼层
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-12-2 22:35 | 显示全部楼层
原帖由 winson7891 于 2009-10-24 00:33 发表
楼主强人~~论坛又多了一个高手~~

不过我建议是把输入法的字表改成繁体的,或者繁体优先的,毕竟游戏里用繁体字~~

[发帖际遇]: winson7891跑江湖卖艺,施展特技“胡说八道”,结果卖出无名草药若干,得款银两17。 ...

这个是gbk字符集
应该是繁体简体都有
怎么让繁体优先,我没想到解决办法(不知道怎么从编码来区分繁体简体)

考虑把简体转成繁体,然后删去相同字符,不知道行不行

或者考虑做个繁简对照表......
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2009-12-3 06:56 | 显示全部楼层
原帖由 jy02785317 于 2009-12-2 22:35 发表

这个是gbk字符集
应该是繁体简体都有
怎么让繁体优先,我没想到解决办法(不知道怎么从编码来区分繁体简体)

考虑把简体转成繁体,然后删去相同字符,不知道行不行

或者考虑做个繁简对照表......


我想直接使用游戏中原来的字库比较合适吧~

游戏用big5字库,你用一个gbk的,倒头来到游戏中还是会出现问号,既然简体字会变成问号,那干脆不要算了

繁体优先那个我也不是很清楚怎么运作的,只是有些输入法可以做到~~当时我回复你的时候也没想太清楚

PS:你怎么现在才回复

[发帖际遇]: winson7891帮张无忌翻译小昭写的情书,得到辛苦费银两18。
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2009-12-3 08:03 | 显示全部楼层

回复 十一当家 的帖子

选择gbk而没用big5不能怪我啊
我当时是先生成一个包含所有汉字的文本
然后再获取每个汉字的拼音
搜索出来编码资料比较齐全的就gbk了

而gbk似乎是编码上是无法区分繁简体的

现在想来比较实际的解决办法就是找个好点的简繁对照表

-----------------------------------
过些天重新改写下代码

准备对简体繁体做下处理,另外加上词频

[ 本帖最后由 jy02785317 于 2009-12-3 08:15 编辑 ]
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-11 21:46 | 显示全部楼层
黄哥有前途哦,突然发现咱美工就是没前途,体力活还不吃香,还不去程序的好
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-9 13:10 | 显示全部楼层
lz挺厉害的,长见识了  擦。牛人
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-12 14:20 | 显示全部楼层
可以直接调用系统输入法的何必自己建表
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
发表于 2012-1-12 18:20 | 显示全部楼层
KG 发表于 2012-1-12 14:20
可以直接调用系统输入法的何必自己建表

可能是为了移植?或者是因为别的原因巨巨吧亲?
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2012-1-12 22:04 | 显示全部楼层
本帖最后由 jy02785317 于 2012-5-3 10:39 编辑

不知道网游的输入框直接调用系统输入法是怎么做的,我觉得那个比较好

passcal版调用系统输入框,我始终觉得很不协调。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-7 11:43

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表