当前位置:首页 » 操作系统 » 对战算法题

对战算法题

发布时间: 2022-08-27 07:45:41

⑴ vb五子棋判定胜负的算法

给你一个简单的五子棋(双人对战)游戏代码,自己慢慢研究,分好少!
首先,我们要确定棋盘的格子数,比如10*10的
然后,声明两个数组 Hei(1 To 10 * 10) ,Bai(1 To 10 * 10) 表示双方已经下的棋子,再创建10*10个控件数组与之对应。游戏开始时,两个数组的所有元素都为空,当鼠标按下一个控件时改变对应数组元素的值即表示下了一个棋子。
最后,为了便于判断赢输,我们还要声明一个二维数组 HWs(1 To 10, 1 To 10)来记录前面两个数组的索引值,便于分清两个数组元素的行列(坐标)状况,这样才容易判断赢输。
'新建一个工程
'添加一个按钮command1
'添加一个标签label1,index属性设为0
'黏贴以下代码到窗体代码编辑窗内
'f5运行,单击按钮即可游戏
Dim Ws As Long '棋盘的宽度(即一行可以下几个棋子)
Dim Hs As Long '棋盘的高度
Dim Hei() As Boolean ' 代表黑方的棋子
Dim Bai() As Boolean ' 代表白方的棋子
Dim HWs() As Integer ' 棋盘的行列号

Dim HBGo As Boolean ' 真时黑方下棋
Dim GameStart As Boolean

Private Sub Form_Load()
Dim i As Long, j As Long, w As Long, h As Long, l As Long
Init '初始化

'生成棋盘布局

'label1.index=0'设计时将index属性设为1
Me.BackColor = vbBlue
Label1(0).BackColor = RGB(100, 100, 100)
Label1(0) = ""
Label1(0).Height = 250
Label1(0).Width = 250
Label1(0).Top = 0
Label1(0).Left = 0
h = 100
l = 0
For i = 1 To Hs
h = h + 100 + Label1(0).Height
w = 100
For j = 1 To Ws
w = w + 100 + Label1(0).Width
l = l + 1
Load Label1(l)
Label1(l).Top = h
Label1(l).Left = w
Label1(l).Visible = True
Next
Next
GameStart = False
End Sub

Private Sub Init() '初始化
Dim i As Integer, j As Long, k As Long
Ws = 10 '定义棋盘行列大小
Hs = 10
ReDim Hei(1 To Ws * Hs) '初始化棋盘
ReDim Bai(1 To Ws * Hs) '当下棋时将对应的元素置为真即可
ReDim HWs(1 To Ws, 1 To Hs) '记录棋盘行列中的索引号,便于判断赢输
j = 0: k = 1
For i = 1 To Hs * Ws
j = j + 1 '列数计算
HWs(j, k) = i '记下棋盘数组元素号
If j = Ws Then j = 0: k = k + 1 '满一列后,重计列数,行数加1
Next
On Error Resume Next
For j = 1 To Hs * Ws
Label1(j).BackColor = Label1(0).BackColor
Next
End Sub

Private Sub Command1_Click() '开始游戏
Init '初始化
GameStart = True

End Sub

Private Sub Label1_Click(Index As Integer) '单击标签控件数组下棋
If Index = 0 Or GameStart = False Then Exit Sub
If HBGo Then '判断下棋方
If Bai(Index) = False And Hei(Index) = False Then '当双方都没有在这里下过棋子时,才可以下到这里
Hei(Index) = True ',才可以将棋子下到这里
HBGo = False '轮到黑方下棋
Label1(Index).BackColor = vbBlack '将该棋子设为黑色
If Winner(Hei) Then '判断赢输
MsgBox "黑方赢"
GameStart = False
Exit Sub
End If
End If
Else
If Bai(Index) = False And Hei(Index) = False Then
Bai(Index) = True
HBGo = True
Label1(Index).BackColor = vbWhite
If Winner(Bai) Then
MsgBox "白方赢"
GameStart = False
Exit Sub
End If
End If
End If

End Sub

Private Function Winner(ByRef QiZi() As Boolean) As Boolean '判断输赢,参数为某一方的棋子数组
Dim FiveQ As Long, j As Long, k As Long
Dim i As Long
For i = 1 To Hs '行判断
FiveQ = 0
For j = 1 To Ws
If QiZi(HWs(j, i)) Then
FiveQ = FiveQ + 1
Else
If FiveQ > 0 And FiveQ < 5 Then FiveQ = 0
End If
Next
If FiveQ >= 5 Then Winner = True: Exit Function
Next
For i = 1 To Ws '列判断
FiveQ = 0
For j = 1 To Hs
If QiZi(HWs(i, j)) Then
FiveQ = FiveQ + 1
Else
If FiveQ > 0 And FiveQ < 5 Then FiveQ = 0
End If
Next
If FiveQ >= 5 Then Winner = True: Exit Function
Next
For n = 1 To Hs - 4
For i = 5 To Ws '斜列判断
If QiZi(HWs(i, n)) And _
QiZi(HWs(i - 1, n + 1)) And _
QiZi(HWs(i - 2, n + 2)) And _
QiZi(HWs(i - 3, n + 3)) And _
QiZi(HWs(i - 4, n + 4)) Then Winner = True: Exit Function
Next
For i = 1 To Ws - 5 '反斜列判断
If QiZi(HWs(i, n)) And _
QiZi(HWs(i + 1, n + 1)) And _
QiZi(HWs(i + 2, n + 2)) And _
QiZi(HWs(i + 3, n + 3)) And _
QiZi(HWs(i + 4, n + 4)) Then Winner = True: Exit Function
Next
Next

End Function

⑵ 关于对战游戏,队伍匹配的算法问题。

1
ELO算法是累积

当你赢得顶级球队的时候,你会增加很多的ELO价值

当你失去了一个强大的团队,你会减少少量的ELO BR />当弱队时,你赢了,你会增加少量的ELO值

你输给弱队的时候,你会减少很多的ELO值

不管下降的同时,或以其他方式。该值将被计算。

例如,如果你放弃了,但到底你的球队取得胜利,你还是会增加ELO。

匹配模式ELO隐藏

看不到

多玩盒子看战斗力评估,只需按照你的

行位,胜率,总场数数。 ,

仅供参考,实际的游戏战网与ELO值相差很大。

例如,你能赢得两强的球队失去了一个强大的团队,你一个实际的ELO值高

但是,如果你赢了弱和他的团队输给弱队,您的实际ELO值?低
但的发挥更只有运营商,两场比赛.500胜率的字段数。

⑶ 求五子棋人机对战算法

总的来说,要让电脑知道该在哪一点下子,就要根据盘面的形势,为每
一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋型(如:“冲四”、“活三”等),然后通览
全盘选出最重要的一点,这便是最基本的算法。当然,仅靠当前盘面进行判定是远远不够的,这样下棋很轻易掉进
玩家设下的陷阱,因为它没有考虑以后的变化。所以在此基础上我们加入递归调用,即:在电脑中猜测出今后几步
的各种走法,以便作出最佳选择,这也是我们下棋时常说的“想了几步”。如此一来您的程序便具有一定的水平了。
什么?不信!过来试试吧!
总体思路弄清之后,下面进行具体讨论:
一:数据结构
先来看看数据结构,我们需要哪些变量?
首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个15*15的二维数组 Table[15][15] (15*15是
五子棋棋盘的大小),数组的每一个元素对应棋盘上的一个交叉点,用‘0’表示空位、‘1’代表己方的子、‘2’
代表对方的子;这张表也是今后分析的基础。
在此之后还要为电脑和玩家双方各建立一张棋型表Computer[15][15][4]和Player[15][15][4],用来存放棋型
数据,就是刚才所说的重要程度,比如用‘20’代表“冲四”的点,用‘15’代表“活三”的点,那么在计算重要
性时,就可以根据20>15得出前者比后者重要,下子时电脑便会自动选择“冲四”的点。那为什么棋型表要使用三
维数组呢?因为棋盘上的每一个点都可以与横、竖、左斜、右斜四个方向的棋子构成不同的棋型,所以一个点总共
有4个记录;这样做的另一个好处是可以轻易判定出复合棋型,例如:假如同一点上有2个‘15’就是双三、有一个‘15’和一个‘20’就是四三。
怎么样!3个数组构成了程序的基本数据骨架,今后只要再加入一些辅助变量便可以应付自如了。应该不会太
难吧?OK!有了这么多有用的数据,我们就可以深入到程序的流程中去了。
二:程序流程
我们主要讨论五子棋的核心算法,即:人工智能部分,而其他像图形显示、键盘鼠标控制等,因较为简单,所
以就不作过多介绍了。
我们看到本程序由六个基本功能模块构成,各模块的具体分析如下:
(1)初始化:首先,建立盘面数组Table[15][15]、对战双方的棋型表Computer[15][15][4]和Player[15]
[15][4]并将它们清零以备使用;然后初始化显示器、键盘、鼠等输入输出设备并在屏幕上画出棋盘。
(2)主循环控制模块:控制下棋顺序,当轮到某方下子时,负责将程序转到相应的模块中去,主要担当一个
调度者的角色。
(3)玩家下子:当轮到玩家下时,您通过键盘或鼠标在棋盘上落子,程序会根据该点的位置,在Table[15]
[15]数组的相应地方记录‘2’,以表明该子是玩家下的。
(4)盘面分析填写棋型表:本程序核心模块之一,人工智能算法的根本依据!其具体实现方法如下:您在下
五子棋时,一定会先根据棋盘上的情况,找出当前最重要的一些点位,如“活三”、“冲四”等;然后再在其中
选择落子点。但是,电脑不会像人一样分析问题,要让它知道哪是“活三”、哪是“冲四”,就得在棋盘上逐点
计算,一步一步的教它。
先来分析己方的棋型,我们从棋盘左上角出发,向右逐行搜索,当碰到一个空白点时,以它为中心向左挨个
查找,假如碰到己方的子则记录然后继续,假如碰到对方的子、空白点或边界就停止查找。左边完成后再向右进
行同样的操作;最后把左右两边的记录合并起来,得到的数据就是该点横向上的棋型,然后把棋型的编号填入到Computer[x][y][n]中就行了(x、y代表坐标,n=0、1、2、3分别代表横、竖、左斜、右斜四个方向)。而其他三
个方向的棋型也可用同样的方法得到,当搜索完整张棋盘后,己方棋型表也就填写完毕了。然后再用同样的方法
填写对方棋型表。
注重:所有棋型的编号都要事先定义好,越重要的号数越大!
OK! 怎么样?有点累了吧?不过千万别泄气!因为好戏还在后头。
Let's go!
(5)电脑下子:有了上面填写的两张棋型表,现在要作的就是让电脑知道在哪一点下子了。其中最简单的
计算方法,就是遍历棋型表Computer[15][15][4]和Player[15][15][4]找出其中数值最大的一点,在该点下子即
可。但这种算法的弱点非常明显,只顾眼前利益,不能顾全大局,这就和许多五子棋初学者一样犯了“目光短浅”
的毛病。
要解决这个问题,我们引入‘今后几步猜测法’,具体方法是这样的: 首先, 让电脑分析一个可能的点,
假如在这儿下子将会形成对手不得不防守的棋型(例如:‘冲四’、‘活三’);那么下一步对手就会照您的思
路下子来防守您,如此一来便完成了第一步的猜测。这时再调用模块4对猜测后的棋进行盘面分析,假如出现了
‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了(当然对黑棋而言‘双三’、‘双四’是禁手
,另当别论);否则照同样的方法向下分析,就可猜测出第二步、第三步……
等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手
调换一下位置,然后用上面的方法来猜测对手的棋,这样既可以防住对手巧妙的攻击,又能侍机发动反击,何乐
而不为呢!
但是必须告诉大家的是:猜测法的运算量相当之大,据我的经验,用Pentium-100猜测3步的走法平均需要15
秒以上时间,所以建议猜测量在5步以内。可别小瞧了这5步,有时它甚至会走出让您拍手叫绝的妙着呢!
(6)胜败判定:务须多言,某方形成五子连即获胜;若黑棋走出‘双三’、‘双四’或长连即以禁手判负。
到现在为止,整个五子棋软件就基本完成了,其水平大约在中级上下。当然,这种算法并不是最好的,但我
相信它的基本思路是正确的。

⑷ 如果两个AlphaGo对战,谁会赢

2017年5月23日,AlphaGo与柯洁在浙江乌镇进行对决。此前AlphaGo于2016年3月以4:1的比分战胜了韩国选手李世石,之后AlphaGo以Master作为ID在网络围棋平台上战胜了众多知名选手取得了60连胜的战绩,这其中也包括了要与其在乌镇对决的柯洁。AlphaGo的强势崛起已经让部分人开始担心未来人工智能会代替甚至毁灭人类,着名的物理学家霍金也曾在公开场合多次提及过“人工智能威胁论”。

出品:科普中国

制作:王轩

监制:中国科学院计算机网络信息中心

“科普中国”是中国科协携同社会各方利用信息化手段开展科学传播的科学权威品牌。

本文由科普中国融合创作出品,转载请注明出处。

⑸ c++编写小游戏,五子棋人机对战的算法要怎么写啊,希望大神路过指点一下

ai啊
一般都是DFS算法+分支评分(用于alpha/beta剪枝)

⑹ vs对战平台魔兽2V2积分算法 (越详细越好)

以1级为例

胜利基础分为100分
失败基础分为50分

胜利敌人级别比你高出1 +15 2=2*15=30
你和10级的人打赢了

那么就是 他的级别减去你的级别 *15 +100分基础分
那么 你赢了10级 也就是 【10-1】*9+100=245
输了 就是你的级别减去他的级别 *10+上50分基础分
当他的级别高于你5级以上 你输看 无论他是多少级 【必须是大于你5级以上】 你都扣1分.. 所以你1级 输给 6级的和20级的是没区别的

2V2 是同样的道理

只是队友级别互相加在一起然后减

举例 你1 你队友2
敌人 一个3 一个2

那么输赢就是

你的队伍 级别 是1+2
他的队伍级别是 3+2
然后最后是 3级对5级
级别差2

那么最后

你们赢 就是 【5-3】*15+100=130
输就是 50-【5-3】*10=30分

⑺ 高分求算法:关于井字棋(三子棋)的算法!!面谈感谢!!!!

“井字棋”游戏(又叫“三子棋”),是一款十分经典的益智小游戏,想必很多玩家都有玩过。“井字棋”的棋盘很简单,是一个3×3的格子,很像中国文字中的“井”字,所以得名“井字棋”。“井字棋”游戏的规则与“五子棋”十分类似,“五子棋”的规则是一方首先五子连成一线就胜利;“井字棋”是一方首先三子连成一线就胜利。

井字棋(英文名Tic-Tac-Toe)

井字棋的出现年代估计已不可考,西方人认为这是由古罗马人发明的;但我们中国人认为,既然咱们都发明了围棋、五子棋,那发明个把井字棋自然是不在话下。这些纯粹是口舌之争了,暂且不提。

想起小时候上课喜欢玩井字棋,只要一张草稿纸、一支笔、同桌两人就可以玩了。上体育课,也可以拿着树枝在沙坑里玩。但一直感觉这游戏太简单了,后来接触了五子棋,着迷了一阵,但水平总是很差,便也不玩了。

一字棋游戏极小极大分析法

设有九个空格,由MAX,MIN二人对弈,轮到谁走棋谁就往空格上放一只自己的棋子,谁先使自己的棋子构成“三子成一线”(同一行或列或对角线全是某人的棋子),谁就取得了胜利。
用叉号表示MAX,用圆圈代表MIN。

比如右图中就是MIN取胜的棋局。

为了不致于生成太大的博弈树,假设每次仅扩展两层。估价函数定义如下:

设棋局为P,估价函数为e(P)。
(1) 若P对任何一方来说都不是获胜的位置,则e(P)=e(那些仍为MAX空着的完全的行、列或对角线的总数)-e(那些仍为MIN空着的完全的行、列或对角线的总数)

(2) 若P是MAX必胜的棋局,则e(P)=+∞。

(3) 若P是B必胜的棋局,则e(P)=-∞。
比如P如右图示,则e(P)=6-4=2

要注意利用棋盘位置的对称性,在生成后继节点的位置时,下列博弈结局

都是相同的棋局(在博弈中,一宇棋的分枝系数比较小起初是由于对称性,而后是由于棋盘上未布子的空格减少所致)。图3.15画出了经过两层搜索生成的博弈树,静态估值记在端节点下面,倒推值记在圆圈内。
由于右图所示位置具有最大的倒推值,它应当选取为MAX的第一步(正好是MAX的最好的优先走步)。
现在我们假设MAX走了这一步,而MIN的回步是直接在X上方的空格里放上一个圆圈(对MAX来说这是一步坏棋,他一定没有采用好的搜索策略)。下一步,MAX又在新的格局下搜索两层,产生如图3.16所示的搜索图。

现在图中MAX有两个可能“最好的”优先走步,假设MAX走了图上指明的那一步。而MIN为了避免立即败北被迫走了另一步,从而产生如下棋局:MAX再次搜索,产生如图3.17所示的树。
在这棵树中某些端节点(例如其中一个标记着A)代表MIN获胜,因此它们的估值为—∞。当这些估值被倒推回去时,可看到MAX的最好的也是唯一能使他避免立即失败的一个走步。现在,MIN可以看出MAX必然在他的下一走步中获胜,因此,MIN只好认输。
按极大极小算法编程下一字棋的演示(右图,可以点击操作)...

我们就利用Visual Basic编写一个“井字棋”的小游戏。

【设计思路】

首先,我们要知道,“井字棋”游戏是一款典型的棋类游戏,游戏时一方式是电脑,另一方是玩家。所以,这类游戏在开始时有两种方式:一种是玩家先走;另一种是电脑先走。这是我们要考虑的第一个问题。

其次,由于与玩家对战的是计算机,所以我们要编写一个过程(Chuqi),它可以使程序模拟人的思维与人下棋(其实就是“人工智能”的体现),这个Chuqi过程也是本游戏软件的关键。此外,我们还要编写两个过程(Lianxian和Shuying),Lianxian过程用来时刻判断棋盘中是否有三个棋子连成一线;Shuying过程用来判断如果有三个棋子连成一线,是哪一方连成一线的,即判断哪一方获胜。

以上几个问题就是该“井字棋”游戏实现的关键思路。....
QQ:744192659
邮箱:[email protected]

⑻ 人机五子棋对战算法 棋盘是15*15的棋盘,我定义map[15][15]的二维数组,里面的用来存储

学习一下博弈树吧

热点内容
韩服lol挂机脚本 发布:2025-05-15 12:42:56 浏览:460
监控存储服务器如何调试 发布:2025-05-15 12:36:30 浏览:217
一万级净化车间有哪些配置 发布:2025-05-15 12:16:41 浏览:97
javazip解压加密 发布:2025-05-15 12:15:02 浏览:941
dnf服务器存放什么信息 发布:2025-05-15 12:11:07 浏览:216
办公室视频剧本脚本 发布:2025-05-15 12:03:51 浏览:491
编译失败什么意思 发布:2025-05-15 11:58:18 浏览:87
lcs脚本官网 发布:2025-05-15 11:56:15 浏览:88
三国志战略版打9级矿什么配置 发布:2025-05-15 11:41:29 浏览:953
安卓加速器怎么关 发布:2025-05-15 11:38:16 浏览:466