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系統支持有限。