1、统计一系列字符串中的元音和辅音个数 C语言自己能编 用汇编语言怎么编
; 本程序通过编译,运行正确
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -------------------------------------
Vowel db 'aeiou'
Prompt_Str db 'Please input a string or phrase: $'
Vowel_Prom db 13,10,13,10,'Vowels: $'
Conso_Prom db 13,10,'consomants: $'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
Input_Str: Output Prompt_Str ;提示输入字符串
lea dx,Buffer ;字符串缓冲区地址
mov ah,0ah
int 21h
lea si,Buffer[1] ;实际输入的字符数地址
cld
lodsb
test al,0ffh
jz Input_Str ;若直接回车,没有输入任何字符,则请重新输入
mov cl,al
xor ch,ch
xor bx,bx ;计数器清零,bh=元音字母计数器,bl=辅音字母计数器
Vowel_conso:lodsb
or al,20h ;转换成小写
cmp al,'a'
jb Next_One ;小于'a',不是字母,不计数
cmp al,'z'
ja Next_One ;大于'z',不是字母,不计数
push cx
lea di,Vowel ;元音字符串地址
mov cx,5 ;元音字母个数
repnz scasb ;扫描当前字母是否是元音字母
jcxz $+6
inc bh ;元音字母计数
jmp short $+4
inc bl ;辅音字母计数
pop cx
Next_One: loop Vowel_conso
Output Vowel_Prom ;提示显示元音字母个数
mov al,bh
xor ah,ah
call Dec_ASCII ;显示元音字母个数
Output Conso_Prom ;提示显示辅音字母个数
mov al,bl
xor ah,ah
call Dec_ASCII ;显示辅音字母个数
mov ah,7 ;不带回显的键盘输入,即等待按键(暂停),结束程序
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Buffer db 255,0 ;字符串缓冲区
Code ENDS
END Start ;编译到此结束
2、( ) 1. A. jeep ( ) 2. A. bye &...
1. C2. B3. A 4. A5. C
3、陈沐版三国群英传2评价
我玩了体验级和困难级 。陈沐的群2感觉还行,比较有挑战性,我总结的有一下几点特色
1.分难度级别。
2.名将初始配有专属武器道具。
3.猛将确实比较猛,特别是吕布,剁人像剁菜。(原版没这么明显)
4.军师技修改过了,体力增加和恢复没原版强,士兵增强攻击和防御比原版明显
5。兵种相克程度修改,小兵打你可能掉10滴血以上,原版最多我见过就6滴
6.武器马匹调整,武器种类减少,马匹差距增加
7.搜索减弱,搜到武将很少,兵符没搜到过,
8。忠诚很重要,70以下很容易叛变,而招将又很难,一般新招来的将要养好久
9.疲劳很关键,容易疲劳,疲劳过头很难恢复,还不停降士气
10.不让退兵,进入战场后,主动点全军撤退降忠诚一半,只能让他没血了撤退。最好别打没把握的战。不成功,便成仁!
11.看不见敌城武将数和军师(感觉像瞎子摸黑)
12。体验版体力技力下限1/3,抓残兵败将也不容易!
13.电脑自动后选,难度加大不少,电脑出将攻城一队将数增多
14.关卡可自治,容纳武将数提升为10
15。大地图修改增加日本邢马台城
16.战斗中武将不满20滴血电脑自动做决定,或全军突击或放武将技或撤退
17.电脑气满就放技。所以手一定要快 !
18.电脑招降貌似不看忠诚度,你招降电脑要求却很高,不少名将忠诚抓住一次反而加2,只能用占卜。(貌似还能让他呆城里自动下降,还没搞清规律)
暂时先这么,欢迎楼主补充一起交流!
又上网查了一下陈沐版修改了很多,主要目的是更合理,更公平。修改如下
1.68版最新升级补丁修改内容:
(1)修正电脑使用偷袭敌军,我方前列且使用某些阵形,我方主将不出击电脑就打不到我方主将BUG
(2)修正炼兵对其他兵种BUG,即电脑炼兵对我方飞刀马上全军突击,我方炼兵不作为电脑非远程兵种全军突击的条件。
(3)用鼠标选中有关士气或疲劳度的宝物,显示使用前后士气或疲劳度的变化情况,使用后显示士气升为xxx,疲劳度变为多少xxx。
(4)刘备骑的卢、孙权骑快航具有金蝉脱壳功能
(5)电脑使用诈败,电脑武将一开始就后退,我方全军突击。
规定我方必须全军突击的原因是如果电脑后退我方是远程兵种,那么我方士兵站住不动一箭一箭射电脑,反倒对电脑不利。
(6)忠诚度在5以下战后必降。
(7)加入武将特性,最主要的有左慈恢复技力,于吉、华佗恢复体力,三国三大军师混乱敌军,贾诩郭嘉庞统陆逊曹操强化士兵,吕布单挑时强化武将(配方天才有效)阵地战对方武将技伤害武将减少1/4(配李广弓有效),赵云(配青杠才有效)对方士兵对武将伤害力减2(伤害至少为1),张飞单挑马超双方体力大增,关羽单挑颜良、文丑强化武将(配赤兔有效),貂蝉对方武将士兵攻防减少,张飞、关羽与刘备或刘备军交战有很大的机率投降。
(8)加入宝物特性,其中两本医书恢复体力,太平要术、盾甲天书恢复技力。
(9)加入军师特性,三大军师鼓舞士气20点+降敌士气20点,左慈恢复技力,于吉、华佗恢复体力。
说明:(1)~(3)特性(单挑特性除外)在我方军师技无效时特性无效,恢复体、技力速度极慢,但如果同时使用保留气力则恢复速度大大增高,如果特性为恢复体力,则使用恢复技力军师技效果为轮流恢复体、技力,反之亦然。
(10)加入君主特性,司马炎、张角如果是君主体力技力大增。
(11)难以上难度我方可以全军撤退,但撤退(自主决策撤退除外)后士兵体技力忠诚减少,困难和体验难度退兵选项改为灰色,难以上隐藏交战时电脑军师。
(12)两个武将105以上武将交战如果双方实力相当,有一定机率进入单挑状态。单挑时双方军师技、武将技及除单挑特性外其他所有特性无效。
限制单挑双方不能使用武将技,原因为三:
a.武将技杀将厉害的武将大赚便宜;
b.伏兵系列会倒致单挑变味;
c.我方与电脑交战总是使用杀将最厉害的武将技,倒致单挑几乎是我方获胜。
(13)难以上难度,我方武将体力低于20时,可能会自行做出一些决定,如全军撤退、全军突击等。
这一项修改与战争实际情况相符,当我方武将生命受到威胁时当然会自己做出一些决定。
(14)调整虎咆等武将技威力为与原版相同
(15)修正全城出动途中招降退出游戏BUG
(16)体验难度增加隐藏电脑武将数功能。
(17)加快电脑战斗中的决策速度,如非远程兵种对远程兵种马上全军突击,集气满马上使用武将技等等。
(18)修正减缓集气与保留气力、恢复体技力的冲突,并取消减缓集气与保留气力的化解关系。
(19)除简单难度及兵种克对方兵种较多的情况外,其他所有难度修改士兵对武将的伤害力,其中武力大于等于149,则无论兵种是否对方相克,士兵对武将的每次攻击体力仅减1,大于等于139每次攻击最多减2,大于等于129,每次攻击最多减3,大于等于119与原版相同,大于等于109在原版基础上再减1,大于等于99在原版基础上再减2,大于等于89在原版基础上再减3,大于等于79在原版基础上再减4,小于79在原版基础上再减5。
说明:
a.在这种设置下,宝物和武将的武力都得到充分体现,同时如果玩家能够根据临界值调整宝物,那么武将能力会得到一定程度提升。
b.经实战检验,武力149的武将可以在不使用任何武将技的基础上打败一个武力100加200个士兵的武将,而武力139的武将虽然威力弱一些,但也可以只使用两次落日弓(要等对方武将出击才使用)就打败一个武力100加140个士兵的武将,而小于79的武将会被士兵三两下砍死。
c.这种修改也与战争的真实情况相符,加上宝物武力还小于79的烂武将或文官,当然经不起对方士兵的攻击,而武艺最高强的武将当然可以视士兵为无物。
d.使用BT剧本+低效宝物武力最高139,使用BT剧本+高效宝物武力最高149的武将。使用低效宝物+其他剧本武力最高119,使用高效宝物+其他剧本武力最高129。如果你想玩得爽可以使用BT剧本+高效宝物,如果想提高难度可以使用低效宝物+其他剧本。
(20)战后步兵数和骑兵数不超过战前步兵数和骑兵数。
(21)无论胜负,战后武将体技力不超过战前体技力。
(22)全军突击改为前军中军向武将出击,后军向士兵出击。
(23)我方低等级武将可以自动升级,其中简单难度升得快些,其他难度升得慢些!
(24)修正军师技成功时体力、技力+1的BUG。
(25)修正1.01补丁搜索BUG。
(26)可以调整游戏速度及窗口模式运行,其中如果要窗口模式运行需要先设置显示器显示模式为800*600、16位。
使用方法是将cmsg2.exe解压到1.68版游戏目录下,然后用cmsg2.exe启动游戏。
注意:本补丁只能配合陈沐1.68版使用,配合1.6版或其他任何版本的群英II都有跳出游戏现象。
1.68版修改内容:
1.如果忠诚度低于75,则在战场上电脑及我方都会有一定机率投降对方,对方忠诚度越低则投降机率越大,
当然,投降机率还和贞操度有关,你不用指望关羽这样的武将会在战场上投降我方。
另外,还保留了原版的一个设置,就是一方忠诚度太高时,则另一方在战场上不会投降。
这一点,我原本以为没有道理,然而沉思后以为非常有道理,奥汀大概是不希望一支部队连战连胜后, 敌将还在战场上轻易投降,这样会极大降低可玩性。
2.取消玩家战败百分之百投降电脑,改为忠诚度越高投降电脑机率越低,但即使是100忠诚度也有可能投降电脑。
说明:玩家战败百分之百投降电脑是对玩家的不公平,电脑对玩家高忠诚度的武将只能选择释放是对电脑的不公平。
在大多数玩家都不喜欢电脑斩首的情况下,个人认为这种处理方式是最合理的。
3.打完仗后,在大多数情况下,武将的体力、技力值不超过原体力、技力值。
说明:原版战后可能出现体力、技力比原来还高,个人认为非常不合理,打仗是一种消耗,
哪有越打体技力越多的道理。
4.升级所需经验值增加,如经验值2000原本等级为6,现在等级为4。另外,打仗获得的经验值减少。
5.电脑使用诈败功能改为恢复体力中,我方诈败功能不变。
说明:这项修改很无奈,诈败对于电脑无任何作用,然而取消诈败又非常可惜,毕竟许多玩家喜欢诈败
采取这种修改方式,我想对电脑也公平一些。
6.军师技成功率调整为80%,三国中即使是最高级的军师也有失误的时候,偶然性也应该成为战争的一部分。
7.1.6版虽然修正了减缓集气的BUG,但当一方使用保留气力时,另一方减缓集气必定无效,感觉不太合理。
特改为:当出现这种情况时,使用保留气力的军师智力必须比对方高才有效!
其他化解关系全部与原版相同。
8.电脑士气最低值定为50
说明:这也是一项无奈的修改,电脑不会使用提高士气的消耗品,也不会将士气低的士兵转换到士气高的武将
将电脑士气最低值定为50,对电脑应该公平些。
9.取消劝降、后选出阵,增加占卦、激励军师技,激励功能是我方主将忠诚度上升10,
占卦可能出现的后果有四种情况:
(1)敌将体力技力增加100%
(2)我方主将体力技力增加100%
(3)我方主将忠诚降为0
(4)敌将忠诚降为0
在我方几乎必败的情况下,说不定占卦可扭转战局,当然也可能败得更惨.
10.太公阵军师技附带增强攻击功能。十面埋伏=原十面埋伏+包围敌军+降敌士气高。其它全部军师技保留。
11.规范提示信息,如阵法书明确指出疲劳度+50,十面埋伏提示信息为敌方中我方埋伏。
12.将宝物系统分为高效能宝物系统和低效能宝物系统供玩家选择。低效能宝物系统与1.6版宝物系统功能相同。
而高效能宝物系统武器书籍消耗品的作用都大一些,但经检验会使难度大大降低。
注意:由于低效宝物和高效宝物相互冲突,所以只有在删除所有存档后才允许更换宝物系统。
13.修正所有错误的君主旗帜如吕布等,新君主用五角星代替
14.新增邪马台城池及土越族首新黄龙罗。
(1)邪马台女王参照日本游戏,能力定为武38,智92,我实在想不通为什么奥汀将倭将武力定得这么高,呵呵!空手道哪是中国武术的对手!
(2)东吴的发展离不开土越族,让土越族也在游戏中表现一下吧!
(3)按部分朋友的要求修改了部分君主。
(4)在虚拟剧本及BT剧本中,邪马台领地分别划归张角或司马炎所有,三国之魏国强盛时,邪马台女王曾向魏王进贡,
所以虚拟剧本及BT剧本将邪马台领地划归张角或司马炎所有,不算太过份吧!
15.自定义君主及武将初步定武力智力总和最大值改为180。
16.有四种基本难度:
易:忠诚下降较快,电脑主将经验值小于等于20000时,电脑100%不后选,大于20000时,电脑100%后选。
中:忠诚下降适中,电脑100%后选,隐藏电脑军师技、野战部队军师和目的地。
难:在中的基础上,隐藏电脑城池兵数、城池军师(注意不隐藏我方,这是不同于1.6版的地方)
取消全军撤退,第二次退兵全军被俘,离间计功效降低。
困难:在难的基础上,取消退兵,离间计功效进一步降低,武将忠诚下降较慢。
说明:取消全军撤退和退兵非常合理,原因是两军相遇哪有一方随便就可以退出战场的道理。
如果是网络对打,则这一点更应取消,否则甲攻乙薄弱处,乙退兵,然后反攻甲薄弱处,甲退兵……
如此循环,简直是乱套了!
17.除以下四种基本难度外,还增加一项体验功能。
原版城防值除了在恢复方面有一点小小的作用外,基本上成为摆设,如果能够在交战时,
将武将体力、技力最低值设置为城防值/5000*100%(本版游戏城防最大值为3000),
则城防的功能大大提高,也符合三国战争易守难攻的特点。
在体验版功能中,提供了将电脑武将体力、技力最低值为最大值50%的这一功能,
虽然目前暂时无法将这一功能与城防建立联系(将来如果能够实现与城防建立联系,当然不会只针对电脑),
但玩家可以从中可以体验设置体力、技力最低值对战争影响。
当然如果玩家不愿体验,不玩体验功能就是了!
18.取消我方军师和电脑军师智力相等或比电脑军师智力高20以上军师技才有效,因为对我方不公平。
19.取消隐藏电脑城池武将数,因为电脑根据我方武将数决定进攻策略,这一点对我方不公平。
相反,隐藏兵数城池军师对双方都是非常公平的,因为电脑不根据我方兵数和军师决定进攻策略。
20.一些朋友提出的武力或智力90以上应该能带两种兵,由于这一项修改起来挺麻烦,所以这一版本就暂不提供了。
21.本版游戏存在一个小小BUG,就是军师技成功时,经常会出现体技力最大值加1的情况,由于对游戏完全没有影响,请大家不要介意!
22.本版游戏PAK文件不能和任何的其他版本EXE文件配合使用,包括陈沐早期版本。
并非本人故意设置故障,而是有些修改,PAK文件和EXE文件修改必须密切配合才能进行
如有不便,请多多原谅!
1.6版修改内容:
1.增加自定义君主功能,并可定义一名属下武将。自定义君主和自定义属下武力、技力合计最大值为140,分为男文、男武、女文、女武四类。其中文官武力最大70,智力最大95,武将武力最大95,智力最大70。文官只能选文官类武将技,武将只能选武官类武将技。每员武将可以定义8种武将技和8种军师技,其中智力94以上全部军师技有效,武力或智力94以上全部武将技有效。武力和智力越低有效军师技和武将技就越少。
注意:如果不希望自定义君主登录,只需将将君主姓名文本框设置为空或所有剧本登录城池设置为无,如果希望自定义君主登录而属下武将不登录,可以将属下武将姓名文本框设置为空。
2.忠诚75以上绝不投降
3.修正部分军师技(如增减集气等)无效BUG(如下图:我方武力智力都不如对方,但集气速度比对方快,原来是我方用了减缓集气。注意一方使用保留气力,则另一方减缓集气无效)
4.修改劝降成功机率,忠诚75以上肯定失败,75以下成功率约30%
5.十面埋伏改为包围敌军+降敌士气高组合技
6.电脑100%后选
7.增大战败往已方势力逃跑概率。
8.隐藏电脑野战部队目的的。
9.城防最大改为3000。
10.启动游戏后有四种难度可选择:适中较难\困难艰难.
适中选项,没有加强难度的选项,战败武将忠诚度下降适中,电脑不斩首我方武将。其余难度选项,战败武将忠诚度下降极慢,部分武将甚至不降反升。
较难选项,隐藏电脑军师技,诈败军师技只有我方军师智力比对方高才有效,我方战败100%投降电脑。
困难选项,在较难选项的基础上取消退兵、全军撤退,隐藏城池兵数、城池军师。
艰难选项,在困难选项的基础上,隐藏城池武将数,我方军师和电脑军师智力相等或比电脑军师智力高20以上军师技才有效(离间计初除外),我方不能斩首电脑武将。
11.总剧本数设置为7个,新增BT剧本背景如下:
265年,司马炎登基。曹操、刘备眼见自己辛辛苦苦打下的天下让位于人,分别在陈留和新野起兵,马超、姜维在西凉等地起兵响应。
1.4X版修改内容:(最新版已经取消或被新功能代替的不再说明)
1. 新增君主、武将、宝物,武将可使用双武器。
2. 取消电脑斩首。
3. 调整部分军师、武将技。
4. 部分武将有专属宝物,部分武将使用某些武将技功效加强。
5. 在野武将搜索难度加大,战败投降几率降低。
6. 取消兵符搜索。
7. 调整父子关系,调整部分武将能力。
8. 调整兵种相克。
9. 城池最少人数10,最多15,关卡10。
10.调整电脑武将出征数
11.削弱增(恢)体(技)功效。
12.取消战后庆祝,兵贵神速,没理由打败一只小部队就庆祝一个月。
13.提高藤甲兵和黄巾兵能力,现在藤甲兵只被黄巾、蛮、武克,而黄巾兵可以克藤、枪、武,其他不变。削弱远程兵种威力。
14.提供四种难度选择。
15.使用阵法书增加疲劳度。
16.城池人口数最大值增加。
17.新增黄巾风云虚拟剧本。
18.修改电脑全军突击条件,只有我方没有兵或我方为远程兵种时,电脑才全军突击。
19.削弱宝物功效。
20.孙尚香、貂蝉、关凤不需通关也可登录。
1.0版修改内容:(最新版已经取消或被新功能代替的不再说明)
1. 修改头像为三国志X.
2. 修正赤壁之战张鲁BUG,张鲁不再是在野君主。
3. 新增部分君主。
电脑不再是那么容易被欺负的了,增加了可玩性。不错!
注意作战策略,攻击电脑薄弱环节,我玩体验级别吕布已经14个将了,没杀一人,不过太变态1滴血又变好多,无奈,放弃了还是玩困难级别的了。
4、protobuf 怎么在iOS中实用
一、Protobuf的使用
首先来简单介绍一下Protobuf的使用,这里以windows下java开发为例,几个步骤:编写*.proto ->使用google提供的protoc.exe生成*.java->项目中导入protobuf的.jar包进行开发即可。先看这里的*.proto文件:
[plain] view plain copy
package com;
message CMsg
{
required string msghead = 1;
required string msgbody = 2;
}
message CMsgHead
{
required int32 msglen = 1;
required int32 msgtype = 2;
required int32 msgseq = 3;
required int32 termversion = 4;
required int32 msgres = 5;
required string termid = 6;
}
message CMsgReg
{
optional int32 area = 1;
optional int32 region = 2;
optional int32 shop = 3;
optional int32 ret = 4;
optional string termid = 5;
}
使用protoc.exe生成java文件,命令如下:
将生成的Msg.java及protobuf-java-2.3.0.jar导入项目中进行开发,这里写一个服务器端ProtobufServer及客户端ProtobufClient
[java] view plain copy
package com;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.Msg.CMsg;
import com.Msg.CMsgHead;
import com.Msg.CMsgReg;
public class ProtoServer implements Runnable {
@Override
public void run() {
try {
System.out.println("beign:");
ServerSocket serverSocket = new ServerSocket(12345);
while (true) {
System.out.println("等待接收用户连接:");
// 接受客户端请求
Socket client = serverSocket.accept();
DataOutputStream dataOutputStream;
DataInputStream dataInputStream;
try {
InputStream inputstream = client.getInputStream();
dataOutputStream = new DataOutputStream(
client.getOutputStream());
byte len[] = new byte[1024];
int count = inputstream.read(len);
byte[] temp = new byte[count];
for (int i = 0; i < count; i++) {
temp[i] = len[i];
}
CMsg msg = CMsg.parseFrom(temp);
CMsgHead head = CMsgHead.parseFrom(msg.getMsghead()
.getBytes());
System.out.println("==len===" + head.getMsglen());
System.out.println("==res===" + head.getMsgres());
System.out.println("==seq===" + head.getMsgseq());
System.out.println("==type===" + head.getMsgtype());
System.out.println("==Termid===" + head.getTermid());
System.out.println("==Termversion==="
+ head.getTermversion());
CMsgReg body = CMsgReg.parseFrom(msg.getMsgbody()
.getBytes());
System.out.println("==area==" + body.getArea());
System.out.println("==Region==" + body.getRegion());
System.out.println("==shop==" + body.getShop());
sendProtoBufBack(dataOutputStream);
inputstream.close();
} catch (Exception ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
} finally {
client.close();
System.out.println("close");
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
private byte[] getProtoBufBack() {
// head
CMsgHead head = CMsgHead.newBuilder().setMsglen(10).setMsgtype(21)
.setMsgseq(32).setTermversion(43).setMsgres(54)
.setTermid("Server:head").build();
// body
CMsgReg body = CMsgReg.newBuilder().setArea(11).setRegion(22)
.setShop(33).setRet(44).setTermid("Server:body").build();
// Msg
CMsg msg = CMsg.newBuilder()
.setMsghead(head.toByteString().toStringUtf8())
.setMsgbody(body.toByteString().toStringUtf8()).build();
return msg.toByteArray();
}
private void sendProtoBufBack(DataOutputStream dataOutputStream) {
byte[] backBytes = getProtoBufBack();
// Integer len2 = backBytes.length;
// byte[] cmdHead2 = BytesUtil.IntToBytes4(len2);
try {
// dataOutputStream.write(cmdHead2, 0, cmdHead2.length);
dataOutputStream.write(backBytes, 0, backBytes.length);
dataOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Thread desktopServerThread = new Thread(new ProtoServer());
desktopServerThread.start();
}
}
[java] view plain copy
package com;
import java.io.InputStream;
import java.net.Socket;
import com.Msg.CMsg;
import com.Msg.CMsgHead;
import com.Msg.CMsgReg;
public class ProtoClient {
public static void main(String[] args) {
ProtoClient pc=new ProtoClient();
System.out.println("beign:");
pc.runget();
}
public void runget() {
Socket socket = null;
try {
//socket = new Socket("localhost", 12345);
socket = new Socket("192.168.85.152", 12345);
// head
CMsgHead head = CMsgHead.newBuilder().setMsglen(5).setMsgtype(1)
.setMsgseq(3).setTermversion(41).setMsgres(5)
.setTermid("Client:head").build();
// body
CMsgReg body = CMsgReg.newBuilder().setArea(11).setRegion(22)
.setShop(33).setRet(44).setTermid("Clent:body").build();
// Msg
CMsg msg = CMsg.newBuilder()
.setMsghead(head.toByteString().toStringUtf8())
.setMsgbody(body.toByteString().toStringUtf8()).build();
// 向服务器发送信息
System.out.println("sendMsg...");
msg.writeTo(socket.getOutputStream());
// 接受服务器的信息
InputStream input = socket.getInputStream();
System.out.println("recvMsg:");
byte[] by = recvMsg(input);
printMsg(CMsg.parseFrom(by));
input.close();
socket.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void printMsg(CMsg g) {
try {
CMsgHead h = CMsgHead.parseFrom(g.getMsghead().getBytes());
StringBuffer sb = new StringBuffer();
if (h.hasMsglen())
sb.append("==msglen===" + h.getMsglen() + "\n");
if (h.hasMsgres())
sb.append("==msgres===" + h.getMsgres() + "\n");
if (h.hasMsgseq())
sb.append("==msgseq===" + h.getMsgseq() + "\n");
if (h.hasMsgtype())
sb.append("==msgtype===" + h.getMsgtype() + "\n");
if (h.hasTermid())
sb.append("==termid===" + h.getTermid() + "\n");
if (h.hasTermversion())
sb.append("==termversion===" + h.getTermversion() + "\n");
CMsgReg bo = CMsgReg.parseFrom(g.getMsgbody().getBytes());
if (bo.hasArea())
sb.append("==area==" + bo.getArea() + "\n");
if (bo.hasRegion())
sb.append("==region==" + bo.getRegion() + "\n");
if (bo.hasShop())
sb.append("==shop==" + bo.getShop() + "\n");
if (bo.hasRet())
sb.append("==ret==" + bo.getRet() + "\n");
if (bo.hasTermid())
sb.append("==termid==" + bo.getTermid() + "\n");
System.out.println(sb.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] recvMsg(InputStream inpustream) {
byte[] temp = null;
try {
byte len[] = new byte[1024];
int count = inpustream.read(len);
temp = new byte[count];
for (int i = 0; i < count; i++) {
temp[i] = len[i];
}
return temp;
} catch (Exception e) {
System.out.println(e.toString());
return temp;
}
}
}
5、我下的三国群英传2陈沐1.68版玩不了??帮帮忙啊!!!
朋友,问题应该出在你自己的电脑上,可能是以下几个方面的问题:
1、你存放游戏的路径中存在不合法的字符。比如e:\cmsg2..\等,只要将其移出该目录即可。
2、你存放游戏的目录位于NTFS格式的分区中,并且该分区或目录被设置了只有某些用户才能读取数据。只要以有管理员权限的帐户登陆系统,并对该目录/分区进行权限设置,赋予你平时使用的帐户完全访问该分区/目录的权限即可。
祝你玩得愉快!!!
6、找一个配置低的网络游戏
你要是现在就想玩的话,如果喜欢3D刷怪类型的可以玩热血江湖跟武林外传,都不是很大,画面也不错。还有2.5D的神鬼传奇跟天龙八部,要是喜欢玩回合制的可以玩玩梦想世界。问道跟大话西游外传这几个,要是玩休闲游戏的话,跑跑卡丁车、街头篮球都不错,不过完美时空过几天有个Q版回合制网游梦幻诛仙,画面,游戏内容都很好,而且游戏占用空间很小,还有飞行系统,你可以去看一下 ,都是免费的啊
7、完成句子,使改写后的句子完整,注意每空只填一个单词。 1. He can speak English. He can speak French
1. also 2. learn about 3. price of 4. a thirteen-year-old 5. all right
8、如何使用SENDMSG通过套接字送2进程之间文件描述符
socketpair:
功能:创建一个全双工的流管道
原型
int socketpair(int domain, int type, int protocol, int sv[2]);
参数
domain: 协议家族
type: 套接字类型
protocol: 协议类型
sv: 返回套接字对
返回值:成功返回0;失败返回-1
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
sendfd.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
void send_fd(int sock_fd, int send_fd)
{
int ret;
struct msghdr msg;
struct cmsghdr *p_cmsg;
struct iovec vec;
char cmsgbuf[CMSG_SPACE(sizeof(send_fd))];
int *p_fds;
char sendchar = 0;
msg.msg_control = cmsgbuf;
msg.msg_controllen = sizeof(cmsgbuf);
p_cmsg = CMSG_FIRSTHDR(&msg);
p_cmsg->cmsg_level = SOL_SOCKET;
p_cmsg->cmsg_type = SCM_RIGHTS;
p_cmsg->cmsg_len = CMSG_LEN(sizeof(send_fd));
p_fds = (int*)CMSG_DATA(p_cmsg);
*p_fds = send_fd;
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = &vec;
msg.msg_iovlen = 1;
msg.msg_flags = 0;
vec.iov_base = &sendchar;
vec.iov_len = sizeof(sendchar);
ret = sendmsg(sock_fd, &msg, 0);
if (ret != 1)
ERR_EXIT("sendmsg");
}
int recv_fd(const int sock_fd)
{
int ret;
struct msghdr msg;
char recvchar;
struct iovec vec;
int recv_fd;
char cmsgbuf[CMSG_SPACE(sizeof(recv_fd))];
struct cmsghdr *p_cmsg;
int *p_fd;
vec.iov_base = &recvchar;
vec.iov_len = sizeof(recvchar);
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_iov = &vec;
msg.msg_iovlen = 1;
msg.msg_control = cmsgbuf;
msg.msg_controllen = sizeof(cmsgbuf);
msg.msg_flags = 0;
p_fd = (int*)CMSG_DATA(CMSG_FIRSTHDR(&msg));
*p_fd = -1;
ret = recvmsg(sock_fd, &msg, 0);
if (ret != 1)
ERR_EXIT("recvmsg");
p_cmsg = CMSG_FIRSTHDR(&msg);
if (p_cmsg == NULL)
ERR_EXIT("no passed fd");
p_fd = (int*)CMSG_DATA(p_cmsg);
recv_fd = *p_fd;
if (recv_fd == -1)
ERR_EXIT("no passed fd");
return recv_fd;
}
int main(void)
{
int sockfds[2];
if (socketpair(PF_UNIX, SOCK_STREAM, 0, sockfds) < 0)
ERR_EXIT("socketpair");
pid_t pid;
pid = fork();
if (pid == -1)
ERR_EXIT("fork");
if (pid > 0)
{
close(sockfds[1]);
int fd = recv_fd(sockfds[0]);
char buf[1024] = {0};
read(fd, buf, sizeof(buf));
printf("buf=%s\n", buf);
}
else if (pid == 0)
{
close(sockfds[0]);
int fd;
fd = open("test.txt", O_RDONLY);
if (fd == -1);
send_fd(sockfds[1], fd);
}
return 0;
}
socketpair.c
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
int main(void)
{
int sockfds[2];
if (socketpair(PF_UNIX, SOCK_STREAM, 0, sockfds) < 0)
ERR_EXIT("socketpair");
pid_t pid;
pid = fork();
if (pid == -1)
ERR_EXIT("fork");
if (pid > 0)
{
int val = 0;
close(sockfds[1]);
while (1)
{
++val;
printf("sending data: %d\n", val);
write(sockfds[0], &val, sizeof(val));
read(sockfds[0], &val, sizeof(val));
printf("data received: %d\n", val);
sleep(1);
}
}
else if (pid == 0)
{
int val;
close(sockfds[0]);
while (1)
{
read(sockfds[1], &val, sizeof(val));
++val;
write(sockfds[1], &val, sizeof(val));
}
}
return 0;
}
makefile:
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g
BIN=socketpair send_fd
all:$(BIN)
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f *.o $(BIN)
9、三国群英传2有几个版本,各版本区别是什么?
一共有4个版本:0.507SP3、0.507SP1、0.507SP2、0.507 PRO版。
区别在于对游戏内容进行了调整修正。
春天三国0.507 SP1版更新
修正三国归晋不通关玩出错的BUG。
提高物品掉落。
提升进化成功几率。
放宽技能学习书条件;加强技能学习书附带技能。
提升防修改上限。
调整虚拟容易难度,被俘后投降+释放。
春天三国0.507 SP2版更新 (关键点:高掉宝率、高进化率)
修正几个小设定失误,平衡游戏设定。
大幅度提高物品掉落率,强化属性类物品,普通武将也可掉出。
大幅度提升进化成功几率。
重新调整难度设定,主要更改级别设定;容易难度,级别上限为250级; 中等难度200级;困难难度150级;挑战者100级。 对玩家穿城进行一定的限制!
调整防修改上限,方便玩家武将培养。
开心果,一次可洗掉2次战败数。
提升神仙的属性!
春天三国0.507 SP3版更新 (关键点:高掉宝率、高进化率)
修正几个小设定失误,平衡游戏设定。
取消锁键盘功能
恢复窗口功能
降低升级速度
技力的增长仅与智力挂钩
主要目的是去除限制,方便吧友截图等。
支持SP2版存档。
春天三国0.507PRO版更新 (关键点:重生功能、自定义武将头像功能)
调整各个难度设定,平衡游戏数据,大体如下:
等级上限:随难度不同而不同
防修改体力/技力上限:随难度不同而不同
武力上限:随难度不同而不同
神仙和部分武将数据
加入重生功能;加入销魂蚀骨物品体验功能。
取消玩家搜索物品功能,但可以搜索武将。电脑可正常搜索所有物品。
加入自定义武将自定义头像功能。
取消锁键盘功能,恢复窗口功能,方便吧友截图等
降低升级速度,技力的增长仅与智力挂钩
合理调整掉宝几率,不至于遍地掉东西。 合理调整物品进化几率,级别越高,进化几率有所降低,但幅度不明显。
调整电脑使用物品的几率;调整高级物品出现几率(即不被电脑库存)。
修正几个小BUG。
不支持以前所有版本存档;完美支持XP系统,对VISTA/win7系统支持有限。