QQ四国军旗保存文件研究

合集下载

QQ四国军棋兵法三十六计之一

QQ四国军棋兵法三十六计之一

第九计:隔岸观火
书曰:阳乖序乱,阴以待逆。暴戾恣睢,其势自毙。顺以动豫,豫顺以动。
意为:敌方内部矛盾激化,我方静待其恶化。敌方反目为仇,必自取灭亡。我采取顺应的态度,坐收渔翁之利。
实用1
有时一敌骂另一敌不助其,干脆猛攻骂者,以战绩来激怒矛盾,观其“反目”。多次见被骂者强退,也竟有骂者傻乎乎地自已强退。
实用3
友军正在试攻敌旗,我就深入敌内部吃小棋。
实用4
见友军司令硬杀敌阵,必遭炸时,干脆自己司令也上去,而敌只能炸一个。
第六计:声东击西
书曰:敌志乱萃,不虞,坤下兑上之象,利其不自主而取之。
意为:敌指挥不当,如无头之蝇乱揞.撞乱碰,意科不到所发生的事情,这是《易经》萃卦中所说的那种混乱溃败的象征。因此要利用敌失控的时机将其消灭。
实用2
敌方追击我友军一部,友军疲于奔命,我则攻敌后方。
实用3
敌方军长把守军旗,我无法突入,故意调一小股让敌军长外出吃,于是我迅速出一兵把敌军长“回家”的后路拦断,让友军进攻。
实用4
敌长驱直入吃我友军一子,我一子挡出,断敌后援,以利于友军全歼敌长驱直入之部。
第三计:借刀杀人
第五计:趁火打动
书曰:敌之害大,就势取利,刚决柔也。
意为:敌方遇到困难、危机,就乘机出击取得胜利。这就是强者趁势取胜的策略。
实用1
友军正在杀敌,趁机也去捞上一把。
实用2
北方人发明的“快速战”正是因为其“快”,因而守方一时方寸很乱,而攻方的友军也在边上趁势助攻,守方顾此失彼。
书曰:敌已明,友未定,引友杀敌,不自出力,以《损》推演。
意为:敌我悬殊,这很明白。而友军态度未明了,要引友军与敌作战,利于保存自已力量。运用《损》卦中关于“损下益上”的逻辑推理剧,要演得巧妙。

四国军棋如来神掌秘籍

四国军棋如来神掌秘籍
&p6g:O-v&|-o
弹子兵法】
【招式篇】
杀大舍令
杀大舍令,是指进攻方用令子吃掉敌人大棋后,令子被炸,此时,进攻方获 得的先行机会,随即对敌人进行致命打击的方法。杀大和舍令都是手段,抓住令 子被炸后的后续行棋机会,谋取利益是目的。敌方被杀的大棋,一般应为敌方令 子或次令子。杀大前一般需要做好充分的进攻准备,前仆后继,直至达到目的。 该招式主要包括撞吃和炸兑手筋。
图 3-8 副线令子回救不及
1.6 打兑
令子装小后,被 A 敌令子追赶,我方令子看准时机,杀入 B 敌阵中,吃掉 B 敌方暗大,另一敌令子接着打兑,从而赚取优势。该方法需要注意行棋次序,
编辑:sky 四国军棋论坛 网站: 第 8 页 共 13 页
致力于四国军棋|布局|技巧|复盘|理论等方面的研究
(3)追逼镀金
主动去追逼敌方子粒,从而使敌人产生错误推断的方法。比如排长或工兵追 逼明令子。又如敌无令子而我方有暗令子时,用中等子力装 40 追逼敌方明显的 大棋。敌人为避免被连排追赶,有时会用 37 等子粒撞吃,以确认身份,一旦撞 死一次,该棋的仿真程度就变高,常能很好的掩饰其真实身份,从而获得较大利 益。工兵装令子追逼敌方次令子,在适当时候挂角,常可出奇制胜。工兵装中大 追逼敌方小棋,是残局阶段的好方法。而用炸弹追逼敌方中大,特别是我方炸弹
(2)撞死镀金
故意撞死也是一种重要的镀金方式,它以子粒的牺牲为代价,实施苦肉计, 使敌人产生错误推断,效果较佳。比如,我方底角为 37,敌伪兵挂角,我方飞 兵撞死。敌方常会推断我方底角为地雷,于是底角 37 被镀金为地雷。又如,我 方伪令子面对敌方伪炸的追赶,用工兵或排长去主动撞死,让敌人更加确信我方 为令子。
一.先后手转化:

游戏“四国军棋”规则说明

游戏“四国军棋”规则说明

游戏规则说明 >> 游戏“四国军棋”规则说明 (来者网络:由zlingh提取整理)【游戏界面】一.游戏介绍军棋是我国深受欢迎的棋类游戏之一。

QQ军棋游戏可以支持两国对拼也可支持四国大战。

当四人游戏时,四人在棋盘上分占四角,分为两方,相对的两家联盟与另外两家对抗,互相配合战斗;两人游戏时,则分占棋盘的上下两角,相互作战。

二.游戏说明棋盘:行走路线包括公路线和铁路线,显示较细的是公路线,任何棋子在公路线上只能走一步,显示为粗黑的为铁路线,铁路上没有障碍时,工兵可在铁路线上任意行走,其它棋子在铁路线上只能直走或经过弧形线,不能转直角弯;棋子落点包括结点、行营、两个司令部,行营是个安全岛,进入以后,敌方棋子不能吃行营中的棋子,军棋必须放在司令部中,进入任何司令部的棋子不能再移动。

棋子布局的限制:炸弹不能放在第一行,地雷只能放在最后两行,军棋只能放在司令部。

吃子规则:地雷小于工兵,大于所有其他棋子;司令 > 军长 > 师长 > 旅长 > 团长 > 营长 > 连长 > 排长 > 工兵;炸弹与任何棋子相遇时,双方都消失。

胜负判决:最后的幸存的一方为胜家,军棋被扛、无棋可走、超时5次都会被判负;有人逃跑时计分方法:有人逃跑时,本局必须结束,两人对战时,若对方逃跑,则我方算胜;在四人对战时,若对方有一人已经输掉,而另一人逃跑,则判我方胜;若敌人双方都没有输掉,此时敌方有一人逃跑,双方不计分。

同时为了防止作弊,分数的计算还与游戏步数有关,关于游戏步数说明如下:1 . 20 步之内不允许投降2 . 2 人对战时, 30 步之内结束游戏的胜者不得分, 4 人对战时, 40 步之内胜者不得分3 . 军棋房间中,如果您的分数高于 50 分,而您的对手中有人分数低于 50 分,不增加积分4 . 一局游戏中连续 70 步没有吃子则自动算和棋计分方法:四国大战:赢方得 2 分,输方得 -2 分。

四国军棋

四国军棋

1.【布局是关键,判断是灵魂,节奏是法宝,棋品是至顶!】2.【限于篇幅,下面就布局谈谈个人的一孔之见,不正确之处还希望楼主见谅。

】四国军旗的布局就相当于高手过招的时候使用的武功招式,高手过招往往是无招胜有招,四国军旗的布局也一样,棋无常局,局无定势。

无论怎样布局始终都不会完美,有残缺,因为再布局,也不可能把军旗放在无法攻破的安全之地。

下棋最重要的是你怎么走,就是怎样出招,布局并不能决定一盘棋局的胜负。

即使把司令放在大本营里,在棋子上看起来是吃了亏,但是并不一定代表输。

但是本章我们要讨论的还是布局,不论怎么样出招,招式都是固定的,以此类推,自己的布局以及对手的布局,它始终都逃不过那32个棋子。

'根据有心人的统计,把军旗放在左边大本营的比率高与放在右边大本营的比率。

不过我觉得这只是习惯问题。

当下到一定程度的时候,布局不是随心而布,而是根据下棋的顺序来布局。

以qq游戏里的四国军旗来做比方:qq里的四国军旗走棋顺序是右先手,然后逆时针,依次为右、上、左、下。

也就是说,坐在右边的人先走棋,他是主动的人,而他又有资格来选择是先进攻自己的上家还是下家的人。

(我一般鼓励做左右,这个是先手位置)。

而坐在上位置的人,他是第二个走棋的人,在第一家未动的情况下,他也有资格来选择先出手的位置,但是,一般第一步棋第一家没进攻也会防守,所以进攻上家并不会有太大便宜,进攻下家的选择比上家明智。

坐在左位置的人,是第三个走棋的人,相对于前两家而言,他没有多少先机,但是我认为这个位置是我比较喜欢的位置,而且这个位置相当灵活,这个位置可以看到对家第一步棋的意图,来决定自己是进攻还是防守,进攻是哪个方向,等等。

坐下的这一家,是最后一个走棋的人,相对来说是处于防守位置的,有点被动。

但是不论怎么样说,把军旗放在自己子力进攻的那一线,很显然,这个做法不算是很明智的,因为子越多,对家的子离你的军旗越远,自然也最安全咯。

但是,棋线那边的子力却不可能太弱,不应该到别人一个师长就可以一路吃下来的情况。

qq四国军棋大战战术技巧

qq四国军棋大战战术技巧

qq四国军棋大战战术技巧qq四国军旗游戏界面四国军棋早期的军棋只是两人对弈,又称陆战棋,有翻棋、暗棋、和暗摆明下三种玩法,深受青少年的喜爱。

下面店铺给你介绍qq四国军棋大战战术技巧,欢迎阅读。

qq四国军棋大战:控制局面战术技巧四国除了讲究合作双方互相配合默契以外,还要讲究控制局面。

开局时每人都是25个子,谁也不占优势。

但控制了局面就有利于己方的进攻和防守,让对方不知不觉的跟着你的步伐来走,为了换取局势应该懂得舍弃。

该兑子的时候,就应该兑子(经常看到的情况是,对家的40没了,你迟迟不肯和敌40兑掉(嘻嘻,老动坏念头,想炸别人的40),结果你对家行子畏手畏脚的,渐渐丧失局势的控制权,非常被动),用37或36装炸弹比较合适,可以骗小子,对方的大子是不敢吃你的(当然这要靠你骗术的功力了)。

得手后就藏起来装更大的子。

小子可用来延误别人进攻的节奏和骗骗gb,呵呵,排连级的子装地雷是不错的选择。

”看”棋很重要,学会从棋局的形势变化上判断对方的子力分布,分析出突破敌方防线的攻击点, gb什么时候都应该保持一两个在线,特别是对方军旗露出破绽时。

受到对方两家猛烈攻击时,立刻紧缩子力,就算对方是大子,切勿主动炸它,让他主动碰你好了,除非他是40,否则他无法判断是兑子还是被炸掉,只要你可能有炸弹,对方必然投鼠忌器,嘻嘻,又可以骗出一线生机了。

qq四国军棋大战:排兵布阵战术技巧排兵布阵是兵家取胜的重用环节,无论阵法如何,除非你和对家配合默契,彼此阵法是互补的,否则必须保证子力的均匀分布,别一下给别人吃光你一边的子,况且每盘的局势变幻莫测,将患无兵,随时应该准备一支杀出重围的奇兵,给对方出其不意的致命一击,尤其在对方有意封住你一边的子力的情况下,你仍有子可用。

对于防守兼备的棋手(通常布子均匀的棋手都属于此类),布雷的方式非常重要,我不建议在底二线上布太多的雷,布一个雷或根本不布,主要是考虑到中残局时,底线上应该保证运子流畅,太多的雷反而变成负担,军旗左右不必布太多的大子,一个足矣,其它用小子充数,乖乖的守株待兔,坚决雷打不动,敌gb刺探身亡后,立马弹射而出,嘻嘻,是装”大佬”的时候了。

qq四国军棋布阵方法

qq四国军棋布阵方法

qq四国军棋布阵方法QQ四国军棋是人们喜爱的游戏,那么QQ四国军棋如何布阵?下面是有qq四国军棋布阵方法,欢迎参阅。

qq四国军棋特殊位置的布阵:司令,尽量放于干线上,可及时出击。

有人喜欢司令放在底线,往往在关键时候来不及出击,造成严重损失。

隐藏司令,用大子冒充,只有在对方的司令都掉的时候才会起到很好的效果,否则往往会成为对方司令的美餐。

军长,同样也尽量在线上,司令掉了,他就是头子,也就相当司令。

当然守旗也是不错的选择。

炸弹,主干线最少一枚,如果主干线上无司令,建议都放于主干线一侧,这可以有效的对抗闪电战。

工兵,一线上应该有一枚,其它应该在比较安全的地方,但应该有一放在能够及时出现在安全地方的位置,比如上腹处,或可以及时进入上营。

防线,是布阵的最重要的内容之一,不得不说。

关于这一问题,很多人都讨论过,我想谈一下自己的看法。

三角雷,很多人对它评价很高,就我看来,它是一种非常脆弱的守棋。

表面看,只有工兵能够挖动,但是工兵一家有三枚,而且是自由度最大的子,显然,只要有一个工兵就成为它最致命的威胁,如今工兵重要性已经人尽皆知,是重点保护对象,希望工兵被杀尽几乎是个幻想。

针对它的方法很多,比如双飞,一飞一下,兵掏底(死角),炸底死角再掏,等等;一旦被抢底营,基本就离死不远了。

要防兵至少要两个活子,加底营,要三个子,这对于最后惜子如金的残局是致命的;而且底角放什么子也是很尴尬的,大了,不敢随便出击,小要被杀,杀后就很空虚,在旗上的雷没挖的时候,底营是不宜进炸的。

其实摆三角雷也并非全无好处,可以防止莽撞的对手,平时注意杀兵,对家保持对主控线的控制,肋部经常保持有子,还有比较可耻却十分有效的手段----就是飞掉对方的工兵,尤其当劣势时,这样三角雷还是很坚固的。

其实,就我看来,所有旗上摆雷的守阵,都是非常脆弱的,这是因为,由于雷的阻隔,雷后的子难以起到防守作用,当主干线空时,真正能够起防守作用的只有三子----底营、底角、死角(底),显然非常弱,而死角摆什么子也很尴尬,大了,前线就弱,小了容易被人挖死。

QQ四国军旗刷分外挂开发

QQ四国军旗刷分外挂开发

QQ四国军旗刷分外挂开发 作为⼀名四国军旗的爱好者,军旗也陪伴我⼀起度过了许多时间,让我不⾄过于⽆聊、郁闷。

也因此对她产⽣了不⼀般的感情。

于是乎有了下⾯的进⼀步接触过程(研究写刷分软件)。

效果图:⼀、数据准备QQ四国军旗刷分外挂数据准备——BlackSnake 2011.06.191. 游戏版本号:(进⼊游戏时的窗⼝标题)QQ游戏-四国军旗⾓⾊版 2.1 Beta06 Build0202. QQ号地址:(⽤CE内存查看器获得)004C7BE0 或004945203. 座位号内存地址:(⽤CE内存查看器获得)004C7BEC 或00C54579 (下(蓝)、左(绿)、上(紫)、右(黄)分别对应0、1、2、3)4. 从棋盘布局⽂件分析得各⼦的代码(16进制):(⽤⼆进制编辑⼯具UltraEdit)军旗: 02 地雷: 03 炸弹: 04 司令: 05 军长: 06 师长: 07 旅长: 08 团长: 09营长: 0A 连长:0B 排长:0C ⼯兵:0D 军营: 005. 分析得到棋盘是17*17的数组(⾏列最⼩最⼤值及每格棋⼦的间距)(借助SPY++⼯具)xMin:200, xMax: 840, xsep:40ymin:70 , yMax: 710 ,ystep:406. 各按钮位置:(借助SPY++⼯具)开局:xPos:863,yPos:607; Lparam:x025F035F投降:XPos:856,yPos:659; LParam:x029303587. 重复下棋的位置测定:(初测每格差 40 相素)棋⼦第⼀格的位置: xPos:428,yPos:498; 左上营:xPos:470,yPos:539;第⼀格的上⼀格:xPos:431,yPos:462 上格的左边格:xPos:391,yPos:459;第⼆格:xPos:436,yPos:502第三格:xPos:434,yPos:540第四格:xPos:432,yPos:5818. 下棋的步数地址(⽤来控制30步以上即可投降):(⽤CE内存查看器获得)$004C7C309. 计时器地址(可以确定轮到谁下棋):(⽤CE内存查看器获得)$00494D4010. 投降时产⽣的窗⼝(是⼀级窗⼝),其中的投降待确认提⽰⽂本:您确定要投降吗?11. 投降后产⽣的窗⼝(是游戏窗⼝的⼦窗⼝),投降后提⽰⽂本:投降,全军覆没⼆、原代码(因为以前写过⽼版本的,所以就先套下来了,试了下能⽤,就先贴上来)——望路过的⼤哥多指点⼀⼆//⼯程⽂件1program pMain;23uses4 Forms,5 uMain in'uMain.pas'{frmMain},6 uCustomProc in'uCustomProc.pas',7 uHelp in'uHelp.pas'{frmHelp},8 uRegister in'uRegister.pas'{frmRegister};910{$R *.res}1112begin13 Application.Initialize;14 fInst := ExistsInst;15 Application.Title := 'QQ四国军旗刷分器';16 Application.CreateForm(TfrmMain, frmMain);17 Application.Run;18end.//主单元⽂件unit uMain;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, Registry;typeTfrmMain = class(TForm)Label1: TLabel;edtDir: TEdit;btnAutoPlay: TButton;cbbWinner: TComboBox;cbAutoContinuous: TCheckBox;cbHide: TCheckBox;pnlTitle: TPanel;cbSmart: TCheckBox;odSetDir: TOpenDialog;sbSetDir: TSpeedButton;Bevel1: TBevel;Bevel2: TBevel;Bevel3: TBevel;rgModel: TRadioGroup;Label2: TLabel;cbbLoser: TComboBox;btnExit: TButton;cbAddSpeed: TCheckBox;bbtnHelp: TBitBtn;bbtnRegister: TBitBtn;procedure bbtnHelpClick(Sender: TObject);procedure bbtnRegisterClick(Sender: TObject);procedure FormDestroy(Sender: TObject);procedure FormCreate(Sender: TObject);procedure btnAutoPlayClick(Sender: TObject);procedure btnExitClick(Sender: TObject);procedure cbAddSpeedClick(Sender: TObject);procedure cbAutoContinuousClick(Sender: TObject);procedure cbbLoserDropDown(Sender: TObject);procedure cbbLoserKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure cbbLoserKeyPress(Sender: TObject; var Key: Char);procedure cbbWinnerDropDown(Sender: TObject);procedure cbbWinnerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure cbbWinnerKeyPress(Sender: TObject; var Key: Char);procedure cbHideClick(Sender: TObject);procedure cbSmartClick(Sender: TObject);procedure rgModelClick(Sender: TObject);procedure sbSetDirClick(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varfrmMain: TfrmMain;hThread1, hThread2: THandle;bVerfyed : Boolean;WinnerQQ, LoserQQ: Int64;implementation{$R *.dfm}uses uCustomProc, uHelp, uRegister;{线程⼊⼝函数}function MyThreadFun(p: Pointer): DWORD; stdcall;begincTimes1 := 0; //控制两组下棋速度的同步cTimes2 := 0;if Integer(p) = 1thenbeginwhile True dobeginInc(cTimes1);AutoPlay(1);if ChessFlag = False then Break;if Length(hChess) = 4thenbeginif cTimes1 - cTimes2 >= 2thenSleep(1000);end;end;end elseif Integer(p) = 2thenbeginwhile True dobeginInc(cTimes1);SmartPlay(hChess[0],hChess[1],0);if ChessFlag = False then Break; //控制是否连续刷分if Length(hChess) = 4thenbeginif cTimes1 - cTimes2 >= 2thenSleep(1000);end;end;end elseif Integer(p) = 11thenbeginwhile True dobeginInc(cTimes2);AutoPlay(2);if ChessFlag = False then Break; //控制是否连续刷分if Length(hChess) = 4thenbeginif cTimes2 - cTimes1 >= 2thenSleep(1000);end;end;end elseif Integer(p) = 22thenbeginwhile True dobeginInc(cTimes2);SmartPlay(hChess[2],hChess[3],1);if ChessFlag = False then Break;if Length(hChess) = 4thenbeginif cTimes2 - cTimes1 >= 2thenSleep(1000);end;end;end;//恢复设置frmmain.btnAutoPlay.Enabled := True;frmMain.cbbWinner.Enabled := True;frmMain.cbbWinner.Text := '';frmMain.cbSmart.Enabled := True;frmMain.rgModel.Enabled := True;if frmMain.rgModel.ItemIndex = 1then frmMain.cbbLoser.Enabled := True;Result := 0;if (Integer(p) <= 2 ) then CloseHandle(hThread1);if (Integer(p) >= 11) then CloseHandle(hThread2);end;procedure TfrmMain.bbtnHelpClick(Sender: TObject);beginwith TfrmHelp.Create(nil) dotryShowModal;finallyfree;end;end;procedure TfrmMain.bbtnRegisterClick(Sender: TObject);with TfrmRegister.Create(nil) dotrybVerfyed := (ShowModal = 1);if bVerfyed thenbeginsbRegister.Panels[0].Text := '已注册,可使⽤全部功能';cbSmart.Enabled := True;cbAddSpeed.Enabled := True;cbAutoContinuous.Enabled := True;cbHide.Enabled := True;bbtnRegister.Enabled := False;end;finallyfree;end;end;procedure TfrmMain.FormDestroy(Sender: TObject);beginCloseHandle(hThread1);CloseHandle(hThread2);end;procedure TfrmMain.FormCreate(Sender: TObject);varreg: TRegistry;sUser, sPsw : string;beginbVerfyed := False;reg := TRegistry.Create;tryreg.RootKey := HKEY_CURRENT_USER;reg.OpenKey('\Software\ShiGuoSF',True);sUser := reg.ReadString('user');sPsw := reg.ReadString('password');finallyreg.CloseKey;reg.Free;end;if (Length(Trim(sUser)) <> 8) or (Length(Trim(sPsw)) <> 16) then bVerfyed := Falseelse if Encrypt(sUser) = Trim(sPsw) then bVerfyed := True;//设置状态栏if not bVerfyed thenbeginsbRegister.Panels[0].Text := '未注册,功能受限...';cbSmart.Enabled := False;cbAddSpeed.Enabled := False;cbAutoContinuous.Enabled := False;cbHide.Enabled := False;end elsebeginsbRegister.Panels[0].Text := '已注册,可使⽤全部功能';cbSmart.Enabled := True;cbAddSpeed.Enabled := True;cbAutoContinuous.Enabled := True;cbHide.Enabled := True;bbtnRegister.Enabled := False;end;sbRegister.Panels[1].Text := ' 作者:BlackSnake';SendMessage(Handle, MB_TOPMOST, 0, 0);cbbWinner.Style := csDropDown;edtDir.Enabled := False;sbSetDir.Enabled := False;cbbLoser.Enabled := False;fSpeed := False;//初始化是否存在已运⾏实例if fInst then GetHwnd(Handle);end;procedure TfrmMain.btnAutoPlayClick(Sender: TObject);varID: DWORD;beginif rgModel.ItemIndex = 0thenbeginif cbbWinner.Text = ''thenbeginShowMessage('请选择要赢分的QQ号后再继续!');Exit;end;end elseif (cbbWinner.Text = '') or (cbbLoser.Text = '') thenbeginShowMessage('请设置好输赢分的QQ号后再继续!');Exit;end;WinnerQQ := StrToInt64(cbbWinner.Text);cbbWinner.Enabled := False;//键状态设置if rgModel.ItemIndex = 1thenbeginLoserQQ := StrtoInt64(cbbLoser.Text);cbbLoser.Enabled := False;end;rgModel.Enabled := false;cbSmart.Enabled := False;btnAutoPlay.Enabled := False;fPause := false;if cbAutoContinuous.Checked then Chessflag := True else ChessFlag := False;//确定每个游戏窗⼝句柄EnsureHwnd(WinnerQQ, LoserQQ);//单组两⼈游戏if rgModel.ItemIndex = 0thenbeginif not cbSmart.Checked then hThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(1), 0, ID) else hThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(2), 0, ID);end elsebeginif not cbSmart.Checked thenbeginhThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(1), 0, ID);Sleep(1500);hThread2 := CreateThread(nil, 0, @MyThreadFun, Ptr(11), 0, ID);end elsebeginhThread1 := CreateThread(nil, 0, @MyThreadFun, Ptr(2), 0, ID);Sleep(1500);hThread2 := CreateThread(nil, 0, @MyThreadFun, Ptr(22), 0, ID);end;end;procedure TfrmMain.btnExitClick(Sender: TObject);beginClose;end;procedure TfrmMain.cbAddSpeedClick(Sender: TObject);beginfSpeed := cbAddSpeed.Checked;end;{测试按钮2}procedure TfrmMain.cbAutoContinuousClick(Sender: TObject);beginChessFlag := cbAutoContinuous.Checked;end;procedure TfrmMain.cbbLoserDropDown(Sender: TObject);varid, i : Byte;dwQQNum: Cardinal;beginif cbbWinner.Text = ''thenbeginShowMessage('请先设置赢分的QQ号!');Exit;end;if rgModel.ItemIndex = 0then id := 2else id := 4;//初始化玩家cbbLoser.Items.Clear;for i := 0to id-1dobeginGetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));cbbLoser.Items.Add(IntToStr(dwQQNum));end;end;procedure TfrmMain.cbbLoserKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif Key = $2E then Key := 0;end;procedure TfrmMain.cbbLoserKeyPress(Sender: TObject; var Key: Char);beginKey := #0;end;procedure TfrmMain.cbbWinnerDropDown(Sender: TObject);vari, id : Byte;dwQQNum: Cardinal;beginif rgModel.ItemIndex = 0then id := 2else id := 4;Prepare(handle, id);if rgModel.ItemIndex = 0thenbegin//如果有⼀⽅为空,则提⽰双⽅均须进⼊游戏if (hChess[0] = 0) or (hChess[1] = 0) thenbeginMessageBox(0, '双⽅均须进⼊游戏后再开始!', '提⽰', MB_OK);Exit;end;end elsebegin//如果有⼀⽅为空,则提⽰双⽅均须进⼊游戏if (hChess[0] = 0) or (hChess[1] = 0) or (hChess[2] = 0) or (hChess[3] = 0) then beginMessageBox(0, '两组双⽅均须进⼊游戏后再开始!', '提⽰', MB_OK);Exit;end;end;//初始化玩家cbbWinner.Items.Clear;for i := 0to id-1dobeginGetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));cbbWinner.Items.Add(IntToStr(dwQQNum));end;end;procedure TfrmMain.cbbWinnerKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);beginif Key = $2E then Key := 0;end;procedure TfrmMain.cbbWinnerKeyPress(Sender: TObject; var Key: Char); beginKey := #0;end;procedure TfrmMain.cbHideClick(Sender: TObject);vari, id : Byte;beginif rgModel.ItemIndex = 0then id := 2else id:= 4;if rgModel.ItemIndex = 0thenbegin//如果有⼀⽅为空,则提⽰双⽅均须进⼊游戏if (hChess[0] = 0) or (hChess[1] = 0) thenbeginMessageBox(0, '双⽅均须进⼊游戏后再开始!', '提⽰', MB_OK);Exit;end;end elsebegin//如果有⼀⽅为空,则提⽰双⽅均须进⼊游戏if (hChess[0] = 0) or (hChess[1] = 0) or (hChess[2] = 0) or (hChess[3] = 0) then beginMessageBox(0, '两组双⽅均须进⼊游戏后再开始!', '提⽰', MB_OK);Exit;end;end;if cbHide.Checked thenbeginfor i := 0to id-1doShowWindow(hChess[i], SW_HIDE);end;end elsebeginfor i := 0to id-1dobegin//SendMessage(hChess[i], WM_SYSCOMMAND, SC_RESTORE, 0);ShowWindow(hChess[i], SW_SHOW);end;end;end;procedure TfrmMain.cbSmartClick(Sender: TObject);beginedtDir.Enabled := cbSmart.Checked;sbSetDir.Enabled := cbSmart.Checked;end;procedure TfrmMain.rgModelClick(Sender: TObject);beginif not bVerfyed then rgModel.ItemIndex := 0;if rgModel.ItemIndex = 0then cbbLoser.Enabled := False else cbbLoser.Enabled := true; end;procedure TfrmMain.sbSetDirClick(Sender: TObject);beginif odSetDir.Execute thenbeginedtDir.Enabled := True;edtDir.Text := odSetDir.FileName;sFileName := odSetDir.FileName;// edtDir.Text := ExtractFilePath(odSetDir.FileName);edtDir.Enabled := False;end;end;end.//⾃定义过程⽂件12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 53 54 55 56 57 58 59 60 61 62 63 64unit uCustomProc;interfaceuses Windows, Messages, SysUtils;procedure GetHWND(thewnd: HWND);function ExistsInst: Boolean;procedure Prepare(thewnd: HWND; id: Byte);//初始化游戏窗⼝句柄procedure Start(h:HWND);procedure AutoClick(hGameWin: HWND; bFlag: Boolean); procedure AutoPlay(id: Byte);procedure PlayLastStep(h1,h2:HWND);67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164function GetNumber(hGameWin: HWND; const lpBase: Pointer; pBuf: PDWORD; bSize: Cardinal): Boolean; function GetSpecificWnd(theWnd: HWND; sTip: string): HWND;//function GetChildWnd(theWnd: HWND; sTip: string): HWND;procedure SmartPlay(h1,h2: HWND; id: Byte);//根据复盘数据智能化下棋procedure CustomPlay(h1,h2:HWND; id: Byte);procedure CustomClick(hGameWin: HWND; pt1,pt2: TPoint);procedure ReadChessFile(sFileName: string);function ConvertXY(hX, hY: Integer; t: Byte): TPoint;function ToXYPos(pt: TPoint): TPoint;procedure InputChess(h: HWND; parr: Pointer);//导⼊复盘数据procedure SetXY(x, y: PByte; t: Byte);//布局易位时修改坐标varhChess, hTmp: array of HWND; //两个⼈的游戏窗⼝句柄ChessFlag, fSpeed, fPause, fInst: Boolean;countOrders, fCount, Steps, fid, cTimes1, cTimes2, cHwnd:Integer;bufPos: array of array of Byte;bufChess1, bufChess2: array[1..30] of Byte;pt3,pt4:TPoint;sFileName: string;constBaseAddrQQ = Pointer($004C7BE0); //qq号地址BaseAddrTimer = Pointer($00494D40); //计时器地址BaseAddrSetNum = Pointer($004C7BEC);//座位号地址implementationfunction ExistsInst: Boolean;varh: HWND;beginResult := False;h := FindWindow('TfrmMain', 'QQ四国军旗刷分器');if h <> 0then Result := True;end;procedure GetHWND(thewnd: HWND);vari: Byte;h: HWND;buf: array[Byte] of Char;begini := 0;h := GetWindow(thewnd, GW_HWNDFIRST);while h <> 0dobeginGetWindowText(h, buf, Length(buf));if buf = '四国军棋⾓⾊版'thenbeginSetLength(hTmp, i + 1);hTmp[i] := h;Inc(i);end;h := GetWindow(h, GW_HWNDNEXT);end;cHwnd := i;end;procedure Prepare(thewnd: HWND; id: Byte);varfounded: Boolean;i, j, k, sum: Byte;h: HWND;buf: array[Byte] of Char;arrTmp: array of HWND;beginSetLength(hChess, id);//取得已开游戏句柄 hTmp[cHwnd]i := 0;h := GetWindow(thewnd, GW_HWNDFIRST);while h <> 0dobeginGetWindowText(h, buf, Length(buf));if buf = '四国军棋⾓⾊版'thenbeginSetLength(arrTmp, i + 1);arrTmp[i] := h;Inc(i);end;h := GetWindow(h, GW_HWNDNEXT);end;sum := i;if(cHwnd + id) <> sum thenbeginif not fInst thenbeginMessageBox(0, '请先运⾏游戏!', '出错提⽰', 0);Exit;end elsebeginMessageBox(0, '请先运⾏刷分器再运⾏游戏,并确保所开游戏客户端个数符合刷分要求!', '出错提⽰', 0); Exit;end;end;//找出新开的游戏窗⼝句柄k := 0;founded := false;if fInst = False thenbeginfor i := 0to id - 1do hChess[i] := arrTmp[i];end elsebeginfor i := 0to sum - 1dobeginfor j := 0to cHwnd - 1dobeginif arrTmp[i] = hTmp[j] thenbeginfounded := True;166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 end;if not founded thenbeginhChess[k] := arrTmp[i];Inc(k);founded := False;end;end;end;end;procedure EnsureHwnd(Winner, Loser : Int64);vari: integer;h: HWND;dwQQNum, dwTimer0,dwTimer1: Cardinal;beginif Length(hChess) = 4thenbegin//如果是4个窗⼝,将相同号码的两个放在hChess[1]\hChess[2]for i := 0to3dobeginGetNumber(hChess[i], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));if Winner = dwQQNum thenbeginh := hChess[0];hChess[0] := hChess[i];hChess[i] := h;end elseif Loser = dwQQNum thenbeginh := hChess[3];hChess[3] := hChess[i];hChess[i] := h;end;end;//确定两两组合Start(hChess[0]);Sleep(100);Start(hChess[1]);Sleep(300);GetNumber(hChess[0], BaseAddrTimer, @dwTimer0, SizeOf(dwTimer0));GetNumber(hChess[1], BaseAddrTimer, @dwTimer1, SizeOf(dwTimer1));//如果没计时器信息,说明hChess[0]和hChess[1]不是同桌,需交换相同QQ号的句柄 ; if(dwTimer0 = 0) and(dwTimer1 = 0) thenbeginh := hChess[1];hChess[1] := hChess[2];hChess[2] := h;end;end elseif Length(hChess)=2thenbeginGetNumber(hChess[1], BASEADDRQQ, @dwQQNum, SizeOf(dwQQNum));if Winner = dwQQNum thenbeginh := hChess[0];hChess[0] := hChess[1];hChess[1] := h;end;end elsebeginMessageBox(0, '打开游戏客户端数不符!', '出错提⽰', 0);Exit;end;end;procedure Start(h: HWND);begin//BringWindowToTop(h);EnableWindow(h, True);//摸拟⿏标点击开始SendMessage(h, WM_LBUTTONDOWN, 1, MakeLParam(863, 607));SendMessage(h, WM_LBUTTONUP, 0, MakeLParam(863, 607));end;procedure AutoClick(hGamewin: HWND; bFlag: Boolean);beginif bFlag thenbeginPostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 500));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 500));Sleep(100);PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 460));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 460));end elsebeginPostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 460));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 460));Sleep(100);PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(430, 500));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(430, 500));end;end;{*********************************************************** 功能:实现双⽅⾃动下棋**** 传⼊参数:赢分的玩家QQ号***************************************************************}procedure AutoPlay(id: Byte);vari: Byte;hGame: array[0..1] of HWND;dwTimer: Cardinal;begin//两组赋不同的句柄if id = 1thenbeginhGame[0] := hChess[0];hGame[1] := hChess[1];end elseif id = 2then265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 hGame[1] := hChess[3];end;//提⽰不保存时 xPos:= 547; yPos:= 457;PostMessage(hGame[0], WM_LBUTTONDOWN, 1, MakeLParam(540, 460)); PostMessage(hGame[0], WM_LBUTTONUP, 0, MakeLParam(540, 460));PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(540, 460)); PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(540, 460));Start(hGame[0]);Start(hGame[1]);Sleep(500);//如果不是hGame[0]先下,则跳过GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer = 0then ClickStep(hGame[1]);Sleep(500);//⾃动下棋i := 1;while i< 9dobeginAutoClick(hGame[0], True);while True dobeginSleep(200);dwTimer := 0;GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;AutoClick(hGame[1], True);while True dobeginSleep(200);dwTimer := 0;GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;AutoClick(hGame[0], False);while True dobeginSleep(200);dwTimer := 0;GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;AutoClick(hGame[1], False);while True dobeginSleep(200);dwTimer := 0;GetNumber(hGame[0], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;Inc(i);end;//最后⼀步PlayLastStep(hGame[0], hGame[1]);end;procedure PlayLastStep(h1,h2:HWND);var//i : Byte;dwTimer: Cardinal;h, hBtn: HWND;hGame: array[0..1] of HWND;beginhGame[0]:= h1;hGame[1]:= h2;//最后⼀步//i := 1; //hGame[0]赢分时Sleep(200);clickstep(hGame[0]);Sleep(500);dwTimer := 0;while True dobeginSleep(1000);GetNumber(hGame[1], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;//hGame[1]点击投降PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(856, 659)); PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(856, 659));Sleep(300);//投降确认h := GetspecificWnd(hGame[0], '要投降吗'); //⽂本提⽰的窗⼝句柄hBtn := FindWindowEx(h, 0, 'Button', nil); //右上⾓关闭按钮hBtn := FindWindowEx(h, hBtn, 'Button', nil); //确定按钮PostMessage(hBtn, BM_CLICK, 0, 0);Sleep(600);//全军覆没确认h := GetspecificWnd(hGame[0], '投降,全军覆没');if h = 0then h := GetspecificWnd(hGame[0], '投降,全军覆没');hBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮hBtn := FindWindowEx(h, hBtn, 'Button', nil);PostMessage(hBtn, BM_CLICK, 0, 0);Sleep(500);//提⽰不保存时 xPos:= 547; yPos:= 457;h := GetspecificWnd(hGame[0], '是否需要保存');if h <> 0thenbeginhBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮hBtn := FindWindowEx(h, hBtn, 'Button', nil);PostMessage(hBtn, BM_CLICK, 0, 0);end;h := GetspecificWnd(hGame[1], '是否需要保存');if h <> 0thenbeginhBtn := FindWindowEx(h, 0, 'Button', nil); //确定按钮hBtn := FindWindowEx(h, hBtn, 'Button', nil);364365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 Sleep(100);PostMessage(hGame[0], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));PostMessage(hGame[0], WM_LBUTTONUP, 0, MakeLParam(540, 460));Sleep(100);PostMessage(hGame[1], WM_LBUTTONDOWN, 1, MakeLParam(540, 460));PostMessage(hGame[1], WM_LBUTTONUP, 0, MakeLParam(540, 460));//Sleep(800);end;{据复盘数据下棋}procedure SmartPlay(h1,h2: HWND; id: Byte);vardwSitNum: Cardinal;hGame: array[0..1] of HWND;beginhGame[0] := h1;hGame[1] := h2;//分析复盘数据⽂件名如T-1-3,意思为第1位先下,第3位赢ReadChessFile(sFileName);//读⼊布局数据GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum, SizeOf(dwSitNum));//右,下,左,上的座位分别对应0,1,2,3if dwSitNum in[0, 3] thenbeginInputChess(hGame[0], @bufChess1);end else InputChess(hGame[0], @bufChess2);GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum, SizeOf(dwSitNum));//右,下,左,上的座位分别对应0,1,2,3if dwSitNum in[0, 3] thenbeginInputChess(hGame[1], @bufChess1);end else InputChess(hGame[1], @bufChess2);Sleep(100);//开始start(hGame[0]);Start(hGame[1]);Sleep(500);CustomPlay(hGame[0],hGame[1], id);end;procedure CustomPlay(h1,h2:HWND; id: Byte);vari, j : Integer;pt1, pt2: TPoint;dwTimer, dwSitNum1, dwSitNum2: Cardinal;hGame: array[0..1] of HWND;hTmp : HWND;PosXY : array of array of array of Byte;beginRandomize;hGame[0]:= h1;hGame[1]:= h2;//查座位⽅位//右,下,左,上的座位分别对应0,1,2,3GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum1, SizeOf(dwSitNum1)); GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum2, SizeOf(dwSitNum2)); //如果是hGame[1]先下,则交换两个句柄if dwSitNum1 in[1,2] thenbeginhTmp := hGame[0];hGame[0] := hGame[1];hGame[1] := hTmp;GetNumber(hGame[0], BaseAddrSetNum, @dwSitNum1, SizeOf(dwSitNum1)); GetNumber(hGame[1], BaseAddrSetNum, @dwSitNum2, SizeOf(dwSitNum2)); end;SetLength(PosXY, 2, countOrders, 6);for i := 0to countOrders - 1dobeginfor j := 0to5dobeginPosXY[0][i,j] := bufPos[i,j];PosXY[1][i,j] := bufPos[i,j];end;end;//确保是偶数步,便于最后的判断if Odd(countOrders) then Dec(countOrders);//如果加速,则定为30步if fSpeed then Steps := 30else Steps := countOrders;//布局易位时,需转换起⽌坐标if(dwSitNum1 in[1,3]) and(fid = 0) or(dwSitNum1 in[0,2]) and(fid = 1) thenbeginfor i := 0to Steps - 1dobeginSetXY(@PosXY[id][i,2], @PosXY[id][i,3], fid);SetXY(@PosXY[id][i,4], @PosXY[id][i,5], fid);end;end;//开始循环for i := 0to Steps - 1dobeginif Odd(i) then j := 1else j := 0;if bufPos[i,1]=$5F thenbegin//摸拟点起终两点if j = 0thenbeginpt1 := ConvertXY(PosXY[id][i,2], PosXY[id][i,3], dwSitNum1);pt2 := ConvertXY(PosXY[id][i,4], PosXY[id][i,5], dwSitNum1);end elsebeginpt1 := ConvertXY(PosXY[id][i,2], PosXY[id][i,3], dwSitNum2);pt2 := ConvertXY(PosXY[id][i,4], PosXY[id][i,5], dwSitNum2);end;//转为像素坐标pt1 := ToXYPos(pt1);pt2 := ToXYPos(pt2);Sleep(1000+Random(4000));CustomClick(hGame[j], pt1, pt2);463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 //点跳过Sleep(1000);clickstep(hGame[j]);end;//据计时器判断是否要继续的“死循环”while True dobeginSleep(100);dwTimer := 0;GetNumber(hGame[1-j], BaseAddrTimer, @dwTimer, SizeOf(dwTimer));if dwTimer > 0then Break;end;end;//最后⼀步PlayLastStep(h1,h2);end;procedure CustomClick(hGameWin: HWND; pt1,pt2: TPoint);beginPostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(pt1.X, pt1.Y));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(pt1.X, pt1.Y));PostMessage(hGameWin, WM_LBUTTONDOWN, 1, MakeLParam(pt2.X, pt2.Y));PostMessage(hGameWin, WM_LBUTTONUP, 1, MakeLParam(pt2.X, pt2.Y));end;{--------------读⽂件//根据复盘⽂件读⼊相关数据//⽂件前28H字节为⽂件头;接下来4个玩家信息(从开始下的⼀⽅始顺时针存储),每个58H //字节(前14H为⽤户名,接下来1E字节为布局)//再下来是执⾏指令,每10字节为⼀组(其中第3字节为起始⾏列,第4字节为⽬的⾏列——//以先保存的玩家⽅位开始计算,10H*10H数组)//棋盘布局⽂件数据 Char[30]//执⾏指令 5F 开始的10字节,控制(程序)指令F5开始在19Ch(412)字节后开始结//尾1Ch(28)字节是系统或保留的--------------------------}procedure ReadChessFile(sFileName: string);varf: file;buf1,buf2,buf3,buf4: array[1..30] of Byte;bufOrder: array of array of Byte;i, fsize: integer;begintryAssignFile(f, sFileName);Reset(f,1);fsize := FileSize(f);fsize := fsize - 412- 28;countOrders := fsize div10;if countOrders < 31thenbeginMessageBox(0, '步数⼩于指定步数,请重试!', '提⽰', Mb_Ok);Exit;end;//读棋盘布局Seek(f,40+20+88*0);BlockRead(f, buf1, 30);if buf1[1] <> 0thenbeginfid := 0; //0-2位对战左右位for i := 1to30do bufchess1[i] := buf1[i];//读对⽅布阵即左位Seek(f,40+20+88*2);BlockRead(f, buf3, 30);if buf3[1] <> 0thenbeginfor i := 1to30do bufchess2[i] := buf3[i];end elsebeginMessageBox(0, '复盘数据有误!', '提⽰', mb_ok);exit;end;end elsebeginSeek(f,40+20+88*1);BlockRead(f, buf2, 30);if buf2[1] <> 0thenbeginfid := 1; //1-3位对战上下位for i := 1to30do bufchess2[i] := buf2[i];//读对⽅布阵,即上位Seek(f,40+20+88*3);BlockRead(f, buf4, 30);if buf4[1] <> 0thenbeginfor i := 1to30do bufchess1[i] := buf4[i];end elsebeginMessageBox(0, '复盘数据有误!', '提⽰', mb_ok);exit;end;end;end;//读指令SetLength(bufOrder, countOrders, 10);Seek(f, 412);for i := 0to countOrders-1dobeginBlockRead(f, bufOrder[i, 0], 10);end;//从指令序数组中读出需要的,指令头,起始和⽬的⾏列SetLength(bufPos, countOrders, 6);for i := 0to countOrders-1dobeginbufPos[i, 0] := i + 1; //步数bufPos[i, 1] := bufOrder[i, 0]; //系统bufPos[i, 2] := bufOrder[i, 2]; //起始XbufPos[i, 3] := bufOrder[i, 3]; //起始ybufPos[i, 4] := bufOrder[i, 4]; //终点xbufPos[i, 5] := bufOrder[i, 5]; //终点yend;。

四国军棋之军棋教程大汇总编辑版

四国军棋之军棋教程大汇总编辑版

四国军棋之军棋教程一初步的试探之后,根据所获得的初步信息,开始发动进攻。

一般说来,(咳咳,对不起又来了,)一般说来,通过进攻打开局面是最常见的方法,而根据各类玩家的风格和实力,发动首攻的子力大小不尽相同。

让我们来详细地比较一下。

1.开局心理分析——初级玩家和中级玩家害怕开局就遭受较大损失,这是初级玩家的较为普遍的心理。

因此,他们派出的首攻子力一般都不超过团长(强攻型例外),一般你纵干线第三子进上营或者肋下子进上营,比较容易遭到这类进攻。

如果你是小子,被他吃了,后面的师长可以直接反咬,通常都有所斩获,如果你不理会,这样的对手通常也小富即安,退回去了。

中级玩家学会了用司令来干这件事情,因为认定你头排是小子,不敢直接就炸,而师长可能要反咬,派司令就赚大了!(赚大了以后就开分店,一家变两家,两家变四家……噢不不不,扯远了……)而如果你也不应对,那么他也会收队了,毕竟钱不是好赚的,万一司令被炸就亏本了。

而如果有一个子吃掉你第一排小子,不仅不走,还继续攻下来,那么如果对手不是想强攻,那么他一定派出了一个中级干部,师旅级,也不一定跟炸,只看准这边既然有炸弹相,想必无司令,就逞血气之勇,一路打下来了。

由此可见,谁说司令不能跟炸弹呢?这且不表,面对这样的进攻你拉开一子放个假炸弹出来是没用的,师长杀红眼,不认炸弹脸,开局的师长犹如洪水猛兽,抱着必死决心主动撞炸弹都是有的,如果你这边没有司令压阵,又觉得在对方师长吃了我几个小子之后与之同归于尽实在有点窝囊,那么你不妨借用开局一招,即撤空下营,而干线上的师长不动(作“司令”打算待敌来撞后进营避难状),或者这招的变招,就是上营出子断其后路。

师长没头没脑冲下来,看到一军岿然不动,先降温了三分,狂热症不治而愈,又看到张飞的马尾草阵在后面折腾,心想必然有计,于是畏缩不前。

断后要慎重,因为如果他是跟炸弹的师长那倒还好,说不定可以骗一个炸弹,但是不跟炸弹的师长号称“恐怖分子”,他自己就是人肉炸弹,看到后路被断,说不得,一口反咬再说,结果你又少了一个小子。

2019年qq军旗怎么看复盘_四国军棋怎么看复盘-优秀word范文 (2页)

2019年qq军旗怎么看复盘_四国军棋怎么看复盘-优秀word范文 (2页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==qq军旗怎么看复盘_四国军棋怎么看复盘看复盘,是涨棋的捷径。

那如何看复盘呢?下面小编给你介绍四国军棋看复盘的方法,欢迎阅读。

四国军棋看复盘的方法1.拿到一个复盘后,不要立即打开它。

先要弄清楚这个复盘是“四暗”对局还是“双明”对局。

一般来说,比赛对局都是“双明”对局。

2.打开复盘。

联众格式、中游格式复盘都有这样的功能“隐藏某方棋子”,即“关棋”功能,要利用这个功能。

如果是“四暗”对局,就随便选一家的棋,只开这家的棋看,关上其他三家的棋。

如果是“双明”对局,就随便选相对两家的棋,只开这两家的棋看,关上另外两家的棋。

3.现在,已经有几家的棋是关上的了。

注意,在复盘过程中,千万不要因为好奇,而去打开关棋的那家、看他的棋子。

当把这盘棋完全看懂的时候再开棋。

什么时候才算完全看懂呢?看下面的步骤。

4.现在就可以一步一步地看对局过程了,在看的过程中,注意四家的每一次走棋,并在头脑中想一下,棋手当时这么走的意图。

每发生一次子力碰撞的时候,在头脑中判断一下,是什么子碰什么子。

看到开棋这家走棋的时候,体会一下他的走棋意图,并想一下如果是自己走,会如何走。

有些子“同去”或“碰死”或“吃掉”,不太好判断是什么碰什么,这个时候可以结合棋子的原始位置、走棋路线、以及周围子的分布、场上的环境来分析。

也可能在当时分析不出来,那还可以结合后面的棋局发展来分析,比如对手没司令了,开棋这家的跟对手一个子“同去”,后来开棋这家的师长被对手“吃掉”了,那就可以判断出来,这家的碰炸弹了,判断出来对手这个炸弹后,还可以倒推前面对手的走法,根据这个已知的炸弹,倒推出前面自己没判断出来的跟这个炸弹有关的子。

从一个已知条件,一层一层推下去,会推出更多的已知条件。

5.很可能看一遍复盘后,还有很多地方判断、分析不出来,那就再看一遍,一遍一遍地看,直到看懂,在这个过程中,千万不要开棋,不然前功尽弃!!四国军棋看懂复盘的技巧6.什么时候才算看懂呢?实际上,“四暗”复盘一般很难完全看懂,“双明”复盘比较容易。

QQ四国军旗保存文件研究

QQ四国军旗保存文件研究

QQ四国军旗布局保存文件jql与j复盘文件gs研究一、相关值表颜色值表:棋子值表:二、布局文件说明:QQ四国军旗布局文件是保存军旗布局的文件,其后缀名为jql。

例:文件使用WinHex打开,查看内容如下:Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1500000000 51 51 47 61 6D 65 20 4A51 4C 20 46 69 6C 65 00 QQGame JQL File 00000010 57 04 00 00 09 0A 08 0D 07 05 00 04 00 0C 07 09 W00000020 00 0D 06 0B 00 0B 00 0A04 0D 08 03 0C 0B 0C 0300000030 02 03调入到游戏中布局显示如下图:具体内容说明:1.00~0F:文件标识,即ASCII表示的一句话——“QQGame JQL File”2.10~113:固定值:57 04 00 003.14~31:棋盘布局,一个6×5的矩阵,其值分别对应棋盘上每一个棋子:第一个值对应左上角第一个棋子,第二个值对应第一行第二列的棋子,依此类推。

(值与棋子对应关系见相关值表)三、复盘文件说明:QQ军旗复盘文件是保存军旗整个棋局的文件,其后缀名为jgs。

例:文件使用WinHex打开,查看内容如下:Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F00000000 51 51 47 61 6D 65 20 4A51 53 00 76 F0 2B 01 01 QQGame JQS v? 00000010 8C 01 96 01 01 00 01 00 00 04 01 0043 07 39 00 ?? C 9 00000020 00 00 00 00 00 00 00 00 C3 C0 BA C3 C3 F7 CC EC 美好明天00000030 00 00 00 00 00 00 00 00 00 00 00 00 09 0A 05 0D00000040 07 0B 00 09 00 04 0B 0C 00 0D 08 0B 00 07 00 0600000050 0A 03 0C 0D 04 03 02 03 0C 08 00 00 00 00 00 0000000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000070 00 00 00 00 58 17 28 00 01 00 00 00 00 00 00 00 X (00000080 B9 FD BD AD C1 FA 00 00 00 00 00 00 00 00 00 00 过江龙00000090 00 00 00 00 05 0D 06 0D 0B 0B 00 04 00 0B 07 09000000A0 00 0D 08 04 00 0A 00 0C 03 07 08 03 03 09 02 0A000000B0 0C 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00000000C0 00 00 00 00 00 00 00 00 00 00 00 00 79 1F 69 00 y i000000D0 02 00 00 00 00 00 00 00 BD AD BC C7 BA E8 00 00 江记鸿000000E0 00 00 00 00 00 00 00 00 00 00 00 00 0B 09 05 0D000000F0 07 0C 00 08 00 04 0C 0A00 0D 09 0B 00 07 00 0600000100 0B 03 0A 0D 04 03 02 03 0C 08 00 00 00 00 00 0000000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000120 00 00 00 00 3F 59 4C 00 03 00 00 00 00 00 00 00 ?YL00000130 CF E7 B7 E7 00 00 00 00 00 00 00 00 00 00 00 00 乡风00000140 00 00 00 00 09 0B 05 0D 07 0C 00 09 00 04 0A 0C00000150 00 0D 08 0B 00 07 00 06 0A 03 0B 0D 04 03 02 0300000160 0C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000190 00 00 00 00 00 00 00 00 00 00 00 00 F5 05 00 06 ?000001A0 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00000001B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000001C0 00 00 01 00 00 00 D5 E2 B2 BD C6 E5 CF C2 B5 C3 这步棋下得000001D0 BA DC BA C3 A3 A1 00 00 00 00 00 00 00 00 00 00 很好!000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000290 00 00 00 00 00 00 00 00 00 00调入到游戏中的初始布局显示如下图:具体内容说明:1)文件头(00~1F共32字节)1. 00 ~ 0A:文件标识,即ASCII表示的一句话——“QQGame JQS”2. 0B ~ 0E:作用未知3. 0F :标识己方位置00黄01蓝02绿03紫4. 10 ~ 18:作用未知5. 19 ~ 1A:短整型数(机器字节序)表整局棋棋步数与事件数(走棋部分的单位)的总和6. 1B ~ 1F:未知作用2)布局信息(020~17F共352字节)说明:本节主要携带了初始布局信息,本节被平分为4小块(每块占11×8字节)分别存储四位玩家的玩家姓名,布局图等信息。

qq游戏四国军棋怎么玩

qq游戏四国军棋怎么玩

qq游戏四国军棋怎么玩四国军棋四国军棋游戏是青少年常玩的一款游戏,而网上军棋更是成为男女老少都喜爱的在线游戏。

下面店铺给你介绍qq游戏四国军棋怎么玩,欢迎阅读。

qq游戏四国军棋玩法介绍四国军棋作为一种艺术化的游戏,凝练于现实生活中最激烈的冲突形式——战争,又超脱于现实生活,锤炼人的记忆、思维、判断和心理,升华人的品格。

四国军棋又有全明棋、双明棋和暗棋之分,而最为广大棋友喜爱的是四国暗棋,简称四暗.四国军棋四国军棋目前还处于起步阶段,一些规则还没有统一,相关术语也是五花八门。

由于没有正式的官方组织,目前的军棋规则大多由各游戏平台自行定义,相互之间差异性很大,从实战角度来看均有一些不合理之处,而军棋术语由于完全出于玩家自发的定义和使用,规范性就更差了。

在这方面,四国军棋讲武堂作为一个民间团体作了很多大量的规范化工作,针对当前的游戏规则提出了诸多不合理之处,并依据较为流行的术语分析总结归纳了大量军棋术语,为四国军棋的规范化作了很好的准备工作。

1,不能放一边倒的棋。

这样你对手很容易猜出来你的阵型,这样离死也不远了。

这里说一点,不在乎小子的人,下得一定不好。

有人说我也没亏什么,最后怎么输了呢?就是因为前期你的那些小子被人吃了,而人家剩下了,用他们给你坑了。

2,大子要放前面,如果这样进攻得力,可以迅速灭掉敌人。

看到很多排长们,都是军旗旁边放一大堆大子,通常我40到军旗旁边横吃,90%能吃动。

直接坑了。

最典型的坏处,比如你最后剩下一个39,最大了,但也没别的子了,你39只能在军旗旁边走,人家也没别的了,就一个32和一个34,你也赢不了,那你39和37不一样能守得住军旗吗?为什么39不放在前面杀敌呢?39怎么也抵得上38+37吧?何必用39和32+34和棋呢?qq游戏四国军棋走法:营-师-军-兵-旅排-()-炸-()-团师-炸-()-连-司兵-()-连-()-排旅-雷-连-团-兵雷-旗-雷-排-营qq游戏四国军棋走法讲解:以前排长阶段都是大子放后面,后来听人家说,不用的子就是死子。

QQ四国军棋怎样布阵

QQ四国军棋怎样布阵

QQ四国军棋怎样布阵四国军棋由四人游戏、一人裁判,相对面的两人联合与另外两人交战。

下面店铺给你介绍QQ四国军棋怎样布阵,欢迎阅读。

QQ四国军棋布阵方法这种布局基本是以4,6分主力,6分守护军旗,4分防卫侧翼,司令藏于军旗前,令人捉摸不透你的主力到底何处,右边都是前两排都是小子,让人误认为军旗在左边,左边一个师长配合炸弹,也不虚任何人来进攻。

这个布局是以防守为主的一个布局,左边全部小子,一个师长垫底炸弹进营稳守,让人不知不觉之间司令进入圈套,右边司令稳守军旗入口。

司令中路,可伪装为一颗小子偷袭敌方中路,中路一般为防守最为薄弱之处,对面看着你杀又不敢炸,只能无可奈何。

这种布局是绝对入侵布局,开局司令直接开始攻击,如果被炸,师长紧接而下,两个炸弹尾随,清空对面大子防御,直接将对面军旗挖出。

就算遇到的不是军旗正确位置,实力不会大损,而对面一般被你的进攻消耗大量实力。

这个布局也算是稳妥的布局,炸弹放在底层,有出其不意的功效,司令独守一方,节约大量棋子。

此布局后方防御比较薄弱,但是敌人进攻一般要付出很大的代价,利于和对方拼子,与高手对战的时候就用此阵型,稳妥防御,不论对方如何动,就是防御!QQ四国军棋布阵方法二司令布置在左侧第一防线,地雷布置在左下第一防线,师长、军长、炸弹护卫军旗三雷护卫军旗,司令在前,师长、军长紧跟其后司令在前,师长、军长成一条竖线,地雷分布在军旗旁边司令、军长、师长、旅长、炸弹、依次布置在军旗这一侧,构成强大的防线,地雷守护在军旗旁边同样是三雷护卫军旗,但地雷布置与前面三雷护旗稍有不同司令在中间,师长在两侧成为东西夹攻之势,军长护卫军旗本经验只供参考,在实际对战之中,还要灵活动用棋子方可大获全胜!。

qq四国军棋的攻守要领详解

qq四国军棋的攻守要领详解

qq四国军棋的攻守要领详解四国的魅力无穷,有很多人认为四国只有技巧,没有理论。

这个说法是错误的。

下面店铺给你介绍qq四国军棋的攻守要领,欢迎阅读。

qq四国军棋攻防的要领(一)四国的理论的确很难总结,我以为应该是有棋手的性格有很大关系。

这其中又分为两种:先发,后发。

首先我们研究一下先发制人的理论。

1.主动与被动--棋的移动效率直接影响进攻的成败。

棋的移动在进攻中必须做到:不轻易吃不当道的棋,你首先必须把公共地带控制,阻止被攻方的对家支援,有时为了控制对方的增援可以先要38进攻他,让他的大棋暴露用小的去当住他有时进攻的成败就在一步。

在这里我总结了一下:小棋封锁,炸弹在线,大棋进攻,一鼓攻下。

这里要强调的是:自己必须不走多于的棋,公共区域的控制和节奏。

2.节奏的掌握--我不赞成从40、39、38一气进攻。

这样的进攻即使成功也不一定取的全局的胜利,更何况胜利的机会是很小的。

在进攻中一定要让对方随着你的节奏走,必须让对方的力量因为防守变的分散。

这时可能有朋友说这不可能。

其实大家想想自己在下过的棋就可以发现,在自己的40和39吃到东西的时候会走的更加小心,是大多数人的习惯,那我们就可以利用对方的这个心理,先过他吃到点甜头,在迫使他的大棋逃避,这时候才是发出致命一击的时间。

在这里大家一定要注意攻击的顺序和变换。

没有不变的战术只有控制节奏才是进攻的生命。

3.判断地雷--在攻击中最后都要面对地雷。

(1)三星雷。

大家都知道对付他最好的办法是工兵双飞,可是在实际比赛中对方给你飞的机会是很小的,因此在攻击的时候工兵必须随时在战斗的位置上。

(2)愚形雷。

现在有很多人都喜欢要愚形雷,但是他有个致命的缺陷,就是当角上的那个雷被吃后对方也就没有了好的防守方法,因此我不太赞成愚形雷的使用,当然有可能是我还没有对这个布雷方法完全理解。

其他地雷的布法也有很多,大家可以在战争中理解。

4.变化--刚才我们讲过节奏,这里我们就研究一下节奏的变化问题。

QQ游戏四国军棋菜鸟进阶高手攻略

QQ游戏四国军棋菜鸟进阶高手攻略

QQ游戏四国军棋菜鸟进阶高手攻略推荐文章四国军棋布局技巧热度:四国军棋布局热度:领导干部口才特点技巧全攻略热度:dnf90次元行者刷图搬砖加点攻略热度:日本富士山的旅游攻略热度:四国军棋技巧中最重要的是四国军棋的布局,只要有超强的四国军棋布局就能战胜对手;下面是有四国军棋菜鸟进阶高手全攻略,欢迎参阅。

QQ游戏之四国军棋菜鸟进阶高手全攻略1、注册一个QQID,开始在新手区下,主要是熟悉军旗的基本规则和一些最最基本的下法,积累些经验,这个过程200盘就够了,不用太多2、在低分区混,不论多么艰难,都要靠自己实力,随机搭档杀到50分进高分区,如谁谁谁杀了一年半载都到不了50的话,我劝你还是放弃四国吧,他不适合你.3、到了50分后,普通人就会陷入一个怪圈,进个高分区就被人虐,回低分又能重回高分,当然你可以通过经验的积累慢慢靠自己在高分区赢棋,不过这个过程比较慢,速度点的话,直接进华山等四分区看一些比较成熟的棋手下棋,这个阶段主要锻炼的是判断,最好是看判断型的防守风格的棋手,判断是四国基础的基础,没有判断别的都不成立,当然找个不错的师傅指导你下棋也可以,个人选择了,反正我直到现在也就两个名誉师傅(达母和哈b),基本也没教我什么.4、过了判断这道槛,接下来就是学习四国的另几项基本功了,包括(基本的配合,基本的骗招,基本控盘,基本的残局,基本的下棋的心态)这个阶段可以看一些比较主流的四暗进攻走法的棋手,当然别光看不练,自己找成熟的棋手切磋也是很必要的5、能熟练能运用这些基本功,普通人需要至少3000盘的经验,能做到第四阶段的话你在QQ杀个38是没问题的,接下来就是军旗的计算,或者叫续算,别老想一步,试着多算几步,另一点就是军旗的创造力尝试打破常规走法,多出一点妙手,这点在四暗棋中尤为重要.能做好这两点,你在华山等四分区的胜率至少也在百分之60以上了,到了这个阶段基本上你的棋力可以和QQ的绝大部分偶像派抗衡了除了象血战幸福这样特别厉害的以外,大概加上前面的,要到这个程度至少也要10000盘的经验,也许有人会称你是高手,但其实只是个成熟的棋手罢了.6、QQ虽然是你的家,不过要想追求更高的境界走出去是相当必要的,目前来说,我只推荐唯一指定房间,联众南方电信11房间,不过基本是爆满的,只能花钱弄个会员了,靠着你在前五个阶段的根基,已经稳居联众二流棋手之列了,即使在军11因该也能保证至少40的胜率,这个其间就是不断和其他象你一样的成熟棋手甚至于一些真正的四暗高手切磋网战了,天赋高的话,2000盘以后,你在联众的四暗水平也能达到一流到二流之间的水平了,在军11涨分是不成问题的,不过和15,好烦,铁拳,幽明他们这样的真正一流四暗高手还是有差距的,可能在胜率上可以做到免强五五开,仔细。

四国军棋棋力如何保存复盘

四国军棋棋力如何保存复盘

四国军棋棋力如何保存复盘
四国军棋技巧中最重要的是四国军棋的布局,但是复盘也是基本的知识之一;下面是有四国军棋棋力如何保存复盘,欢迎参阅。

首先我们点击“QQ游戏”,登陆进入后,点击打开“四国军棋”
进入“四国军棋”的“棋力测评区”,选择位置坐下
等待系统自动分配玩家,点击右上角的“设置”
点击选择“自动保存复盘”,点击“修改”,选择保存的位置
这样我们完成游戏后,点击我们保存的复盘,就可以看到我们的每一步啦
国军棋开局走法
有经验的人对他们本人也是比较有信心的,能把握住整个局势的发展,就算开局的时候没了一个38,也无法对最终的结果起到了决定性的作用,恰恰会反过来,高手觉得如果真的能够通过一个38的损失换来对手的布阵情况,这是一笔很划算的买卖,对手都可能不晓得自己的司令吃了什么,心里就好像会有根刺,接下来的调子会小心翼翼。

2用其他的装成炸弹的利用价值会比真的炸弹要大,不过司令明了后的价值比没明的40要低很多。

司令的最好的表现,不是单单为了吃对手的子,不过军长有机会吃时例外,剩下的子完成可以调比司令小的子,为什么又一定要出去司令呢?由以上的种种原因看,对手的40怎么可能会那么轻易就愿意暴露身份。

3因而在棋局开始时师长开路还是比较好的。

然而,有经验的人用师长做开局不会跟不怎么会的人那样用,因为38是用来打开局面的,而不是吃越多的子越好。

对实际对弈时,在开局时想用38去得到多少好处是不实际的,大家一起玩探路的棋用的就算不同,但防守都做的差不了多少。

炸跟着师长的战术是很正常的。

QQ军棋——时间的较量

QQ军棋——时间的较量

QQ军棋——时间的较量
奥润芝
【期刊名称】《网友世界》
【年(卷),期】2005(000)019
【摘要】四国军棋是QQ中最具魅力的一款游戏,下棋时要不断地进行侦察判断,施放烟雾,设置圈套,是棋手之间一场斗智斗勇的心理战。

系统规定的三十秒思考的时间就是对棋手智慧和心理的一次考验,不过在不同的时间内行棋所会反馈不同的信息。

下面就作一分析,希望对大家有帮助。

【总页数】1页(P35)
【作者】奥润芝
【作者单位】黑龙江
【正文语种】中文
【中图分类】TP393.09
【相关文献】
1.我与QQ农场的较量 [J], 赵珺
2.QQ农场的好军师——作物成熟时间QQ农场计算器帮你算 [J],
3.配合从布阵开始——QQ军棋布阵小技巧 [J], 奥润芝
4.QQ军棋心理战——时间的较量 [J], 奥润芝
5.排兵布阵心中有数——QQ军棋技巧 [J], 瘦桔子
因版权原因,仅展示原文概要,查看原文内容请购买。

四国军棋暗战十年心得

四国军棋暗战十年心得

四国军棋暗战十年心得军棋,又名陆战军棋,相信大家一定玩过。

知道他的人也应该知道这和空战军棋、水战军棋是有关联的。

是一款制作精良、功能丰富的军棋游戏。

下面店铺给你分享四国军棋暗战十年心得。

一、四国军棋如何判断所谓的判断就是对敌人整体布局的判断,包括子力分布,地雷的分布,以及军旗所在的位置,这就是判断的最终目标。

但听起来这却是天方夜谈,对手各有25个子,全部看不见的,如何达到这所谓的最终目标呢?1. 做到对军棋的各种布局熟悉,找些适合自己风格的高手,多看他们下棋,多保存副盘,无聊的时候拿出来看看,时间长了,自然心中对军棋几大类型的布局都有所了解。

2. 要作出全局的判断,需要从点覆盖到面,就是说先从对手的前方一二排,自己能接触到的子开始作出判断,还要根据对手的走法和他所进的营,而判断他的整体布局。

究竟是进攻类型的(403938重点子力一面倒的),还是坚固稳妥类型的(40摆前,373839跟炸),还是防守类型的(大部分小子在前,重点子力在后面的)。

从而你心中要确立一个进攻的方向(我这里所指的进攻并不是胡乱狂攻,而是要透过阶段性的进攻作为判断对手子力分布的依据)。

我个人风格而言,是一个进攻类型的棋手,除了奔放的时候,很少用40去打对方,因为用40去吃到大棋,必定被炸,整盘也开始失去了控制的权,是处于下风的。

如果有时候40吃到3938等大子,而不会被炸,有时候还可以在对方家里横行,可以这样说,那是你运气好,所以你的冒险成功了,这盘可能你赢的机会大了,但对于一向稳定的高手来说,你很难有这样的机会。

对于我来说,我并不追求这样冒险成功一两盘的胜利,而喜欢是通过尝试和经验,逐步来蚕吃对方。

例如早盘,判断无过于最重要是对手炸弹的所在,而通过跟对手第一排的子力交锋,当你知道对手1排有可能是38的时候,那你要作出最大可能性的两个假设,炸弹有可能在上营,也有可能就跟在后面,要作出准确率高的判断,你需要依据,比如说他38牺牲后,第2排的子会不会袒露出来有机会给你你明显的小子去碰呢,又或者你有没有留意他38那边的上营是什么时候进的呢,如果是第一步进的,他可能害怕第一步会被白吃,而早早炸进营保护他,那么营里是炸的机会就稍微大点了,如果他第二步才进的,那么他后面跟炸的机会又会大点了,又或者他第一步在别处进的营或走的棋更为之重要。

QQ四国军棋

QQ四国军棋

道可道,非常道,名可名,非常名。

无数的最高境界就是以“无招胜有招”,军棋的最高境界是“不战而使退奇兵”,奈何难也!本棋谱专为四国军棋暗棋准备的,如有不妥之处,请谅解。

索命回魂术司-兵-营-旅-师团-()-连-()-连营-兵-()-旅-师连-()-兵-()-营排-雷-师-军-炸排-排-雷-旗-炸(1)“双喜临门”师-兵-连-排-师旅-()-连-()-炸炸-营-()-团-旅军-()-兵-()-连司-兵-营-雷-排团-排-雷-旗-雷此阵:两头皆师,后续不同,一跟炸旅,一跟旅炸;一做防守,一为猛攻。

三将亡而旗不亮,暗令可成拔旗之功。

入选阵库,为第一号。

(2)“午夜风铃”连-旅-司-兵-团师-()-炸-()-军团-排-()-连-兵排-()-营-()-营雷-雷-连-师-炸雷-旗-旅-排-兵此阵:一炸挂中,兼顾两路;一炸伏角,眈眈虎视。

后十子所布之防御,堪称包角雷中的精品。

入选阵库,为第二号。

(3)“飞花逐月”连-司-军-兵-师师-()-连-()-旅团-弹-()-弹-团营-()-排-()-营旅-兵-兵-排-雷雷-旗-雷-排-连此阵:出真令,护假令,借中军,有三令之相,真真假假,假假真真,杀敌于莫名。

双炸挂肋,临阵不慌。

兵贵速,更贵奇;出敌料,奏奇功。

入选阵库,为第三号。

(4)“飘香一剑”师-兵-连-旅-师团-()-连-()-炸团-营-()-炸-营司-()-兵-()-连军-兵-旅-雷-排排-排-雷-旗-雷此阵:右上之“旅、师、炸”,属铁三角防御。

双炸一侧,可防联手双令。

后路杀出,拚令下军,剑出飘香,可以一战。

入选阵库,为第四号。

(5)“于无声处”师-兵-军-排-营团-()-兵-()-旅师-弹-()-连-司弹-()-排-()-连营-雷-连-雷-团旅-旗-雷-排-兵此阵:后防布“窝心雷”,外加旗旁一旅,后路一团,全阵有五雷之巨。

大子俱前,或战或兑,使敌无力直夺旗旁,后路之忧解于无形,实乃“窝心雷”布局中的上品。

入选阵库,为第五号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

QQ四国军旗布局保存文件jql与j复盘文件gs研究一、相关值表颜色值表:棋子值表:二、布局文件说明:QQ四国军旗布局文件是保存军旗布局的文件,其后缀名为jql。

例:文件使用WinHex打开,查看内容如下:Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1500000000 51 51 47 61 6D 65 20 4A51 4C 20 46 69 6C 65 00 QQGame JQL File 00000010 57 04 00 00 09 0A 08 0D 07 05 00 04 00 0C 07 09 W00000020 00 0D 06 0B 00 0B 00 0A04 0D 08 03 0C 0B 0C 0300000030 02 03调入到游戏中布局显示如下图:具体内容说明:1.00~0F:文件标识,即ASCII表示的一句话——“QQGame JQL File”2.10~113:固定值:57 04 00 003.14~31:棋盘布局,一个6×5的矩阵,其值分别对应棋盘上每一个棋子:第一个值对应左上角第一个棋子,第二个值对应第一行第二列的棋子,依此类推。

(值与棋子对应关系见相关值表)三、复盘文件说明:QQ军旗复盘文件是保存军旗整个棋局的文件,其后缀名为jgs。

例:文件使用WinHex打开,查看内容如下:Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F00000000 51 51 47 61 6D 65 20 4A51 53 00 76 F0 2B 01 01 QQGame JQS v? 00000010 8C 01 96 01 01 00 01 00 00 04 01 0043 07 39 00 ?? C 9 00000020 00 00 00 00 00 00 00 00 C3 C0 BA C3 C3 F7 CC EC 美好明天00000030 00 00 00 00 00 00 00 00 00 00 00 00 09 0A 05 0D00000040 07 0B 00 09 00 04 0B 0C 00 0D 08 0B 00 07 00 0600000050 0A 03 0C 0D 04 03 02 03 0C 08 00 00 00 00 00 0000000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000070 00 00 00 00 58 17 28 00 01 00 00 00 00 00 00 00 X (00000080 B9 FD BD AD C1 FA 00 00 00 00 00 00 00 00 00 00 过江龙00000090 00 00 00 00 05 0D 06 0D 0B 0B 00 04 00 0B 07 09000000A0 00 0D 08 04 00 0A 00 0C 03 07 08 03 03 09 02 0A000000B0 0C 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00000000C0 00 00 00 00 00 00 00 00 00 00 00 00 79 1F 69 00 y i000000D0 02 00 00 00 00 00 00 00 BD AD BC C7 BA E8 00 00 江记鸿000000E0 00 00 00 00 00 00 00 00 00 00 00 00 0B 09 05 0D000000F0 07 0C 00 08 00 04 0C 0A00 0D 09 0B 00 07 00 0600000100 0B 03 0A 0D 04 03 02 03 0C 08 00 00 00 00 00 0000000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000120 00 00 00 00 3F 59 4C 00 03 00 00 00 00 00 00 00 ?YL00000130 CF E7 B7 E7 00 00 00 00 00 00 00 00 00 00 00 00 乡风00000140 00 00 00 00 09 0B 05 0D 07 0C 00 09 00 04 0A 0C00000150 00 0D 08 0B 00 07 00 06 0A 03 0B 0D 04 03 02 0300000160 0C 08 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000190 00 00 00 00 00 00 00 00 00 00 00 00 F5 05 00 06 ?000001A0 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00000001B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000001C0 00 00 01 00 00 00 D5 E2 B2 BD C6 E5 CF C2 B5 C3 这步棋下得000001D0 BA DC BA C3 A3 A1 00 00 00 00 00 00 00 00 00 00 很好!000001E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000001F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000220 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000230 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000250 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000270 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000000290 00 00 00 00 00 00 00 00 00 00调入到游戏中的初始布局显示如下图:具体内容说明:1)文件头(00~1F共32字节)1. 00 ~ 0A:文件标识,即ASCII表示的一句话——“QQGame JQS”2. 0B ~ 0E:作用未知3. 0F :标识己方位置00黄01蓝02绿03紫4. 10 ~ 18:作用未知5. 19 ~ 1A:短整型数(机器字节序)表整局棋棋步数与事件数(走棋部分的单位)的总和6. 1B ~ 1F:未知作用2)布局信息(020~17F共352字节)说明:本节主要携带了初始布局信息,本节被平分为4小块(每块占11×8字节)分别存储四位玩家的玩家姓名,布局图等信息。

每小块的结构一样,因此以下介绍第一小块(20 ~ 77)的作用。

1.20 ~ 2F:第一个字节(20)表玩家颜色00黄01蓝02绿03紫,之后填充7个02.28 ~ 3B:一个20字节以’\0’结尾的字符串表示玩家名字(注:游戏中玩家名字可多余19字节,但多余部分的玩家名字字符在保存时丢弃)3.3C ~ 59:一个30字节的数据块表示一个5×6的矩阵,存储了布局信息,其值分别对应棋盘上每一个棋子:第一个值对应左上角第一个棋子,第二个值对应第一行第二列的棋子,依此类推。

(值与棋子对应关系见相关值表)4.59 ~ 73:24字节填充05.74 ~ 77:最后4字节作用未知3)走棋信息(180~?,长度依据走棋步数而定)1.180 ~ 19B:填充28个02.19B ~ ?:从19B开始,每10个字节为一个单位代表一步棋信息或相关事件发生例:文件内容为:F5 05 00 06 FF 00 00 00 00 00具体解释为:弹出一个提示“游戏结束”的对话框棋步或事件信息解析说明:第一个字节用以区分信息类型5F表棋步信息,F5表事件信息。

棋步信息表示下一步走棋的具体形式,事件信息则会弹出相应的对话框。

I 棋步信息作用信息:⑴第二个字节:将此字节分为8位,从右往左数标记为0~7位,具体功能如下表:第7,6位值为0x01表有司令阵亡第4,3位对应值为颜色值表取反结果,即11黄10 紫01绿00蓝位置信息:QQ四国军棋将整个棋盘表示成一个17×17的矩阵,每一个棋盘位置用两个字节分别表示相关横纵坐标。

将棋盘旋转到上黄下绿左紫右蓝的形式,第一个坐标为纵坐标,从下往上为00,01,…,1F,10;第二个坐标为横坐标,从左往右为00,01,…,1F,10。

说明:整个棋盘有大量冗余的地方,如00 00位置不存在,由此可推知00 00 到05 05 矩阵,0B 00到10 05矩阵,00 0B 到05 10 矩阵和0B 0B到10 10矩阵都不存在,还有棋盘中间部分使用5×5的坐标来表示3×3的矩阵,显然有16个位置不存在,如0607,07 09等。

⑵第三、四字节:棋子移动初始位置⑶第五、六字节:棋子移动目的位置若有至少其中一方有司令阵亡,使用后四个字节:⑷第七、八字节:司令阵亡翻军棋棋位置2(值为00表不翻军棋)⑸第九、十字节:司令阵亡翻军棋棋位置1(值为00表不翻军棋)II 事件信息⑴第二个字节意义第三个字节表示超时玩家颜色(见颜色值表);第四个字节表已经超时次数;第五个字节表示下一个走棋玩家的颜色(见颜色值表);之后填充5个0⑶玩家战败(第二个字节为03时):第三个字节表示战败玩家颜色(见颜色值表);第四个字节表示战败方式01被夺旗02无子可走03超时5次04投降;第五个字节表示下一个走棋玩家的颜色(见颜色值表),特别地FF表示无下一个走棋的玩家;之后填充5个0⑷玩家退出(第二个字节为04时):第三个字节表示退出游戏玩家颜色(见颜色值表);第四个字节为00第五个字节表示下一个走棋玩家的颜色(见颜色值表);之后填充5个0⑸游戏结束(第二个字节为05时):第三个字节固定填00,第四个字节表示战局结果,02和局04其中一方战败06其中有玩家逃跑;第五个字节为FF表无下一个走棋的玩家,之后填充5个03.最后填充8个04)棋步评论信息1.开始四个字节为一整形数(机器字节序)表示共有多少条评论2.填充16个03.每27×8个字节代表一条评论信息⑴前4个字节四个字节为一整形数(机器字节序)表示是第几步棋的评论⑵余下212个字节为内容为评论信息字符串,余留字节填0。

相关文档
最新文档