-
图文榜单
- 1.
个基于opencv的33拼图游戏程序
- 2.
跑步如何跑得快要比赛的
- 3.
普通象棋怎么玩啊我很想学
- 4.
新版天天象棋215关怎么过
- 5.
跑步跑得快有什么技巧吗
- 6.
打麻将能不能对大脑起到锻炼的作用
- 7.
pascal五子棋
- 8.
扑克牌跑得快怎么玩?
请问:下五子棋我点击和棋或者认输电脑就卡了谁能帮我解决
整理:yaobaiwang.com 时间:09月12日
[谁能帮我写一个JAVA人人对战的五子棋]java五子棋人机:package com.java.demo1; import javax.swing.* ; import java.awt.*; import java.awt.event.*;/** * 自定义五子棋棋盘面板类 * */ public class Gobang ext...+阅读
请问:下五子棋我点击和棋或者认输电脑就卡了谁能帮我解决
Option Explicit
'五子棋程序 人机对战版本
'需要2个Label控件 2个CommandButton控件
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
'Dim PlayStep() As String '记录棋谱的数组
'Dim Label2Cap As String
Private Const BoxL As Single = 50, BoxT As Single = 50, BoxW As Single = 25, BoxN As Integer = 18
Dim Table() As Long '棋盘(0-BoxN,0-BoxN) 0-空 1-黑子 2-白子
Dim PsCore() As Long '定义当前玩家桌面空格的分数
Dim CsCore() As Long '定义当前电脑桌面空格的分数
Dim pWin() As Boolean '定义玩家的获胜组合
Dim cWin() As Boolean '定义电脑的获胜组合
Dim pFlag() As Boolean '定义玩家的获胜组合标志
Dim cFlag() As Boolean '定义电脑的获胜组合标志
Dim ThePlayFlag As Boolean '定义游戏有效标志
Private Sub Command1_Click()
If Not ThePlayFlag Then Call InitPlayEnvironment: Exit Sub
If MsgBox("本局还没有下完,是否重新开始?(Y/N)", vbYesNo) = vbNo Then Exit Sub
Call InitPlayEnvironment
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
Dim i As Long, lw As Long, lh As Long
'Label2Cap = "000 黑方 行 00 列 00"
Me.Width = 10815: Me.Height = 8040
' Me.Caption = "五子棋 - 人机对战": Me.Show
lw = Me.Width \ Screen.TwipsPerPixelX: lh = Me.Height \ Screen.TwipsPerPixelY
SetWindowRgn Me.hWnd, CreateRoundRectRgn(0, 0, lw, lh, 60, 60), True
With Label1
.Alignment = vbCenter: .FontSize = 12: .FontBold = True
.ForeColor = vbRed: .BackStyle = 0: .AutoSize = True: .Move 8910, 510
End With
Label2.AutoSize = True: Label2.WordWrap = True
Label2.BackStyle =
下五子棋有什么诀窍
下五子棋其实不难,一开始作为新手,面对高手最主要的还是防御别人的进攻。等到你基本能赢过别人,你就可以再研究些高级的攻击方法了。你只要考虑几个问题: 1. 对方下那个地方有什么意图?这点主要是看前后左右或斜着的那排,如果有出现三个的就马上堵。当然有的人下棋只是因为时间到了而随便下下,那个就不用多担心了。(菜鸟都知道,不过能真正做到这点却很难。真正的高手也会有因为没有看见已经三个子,而失败。学五子棋还是从这个开始吧。最有用。) 2. 如果上面的看不出来,那么你就要小心了。仔细看看对方有没有横的、斜的、竖的将要连成“三”,如果真的那样的话,一旦对方形成,你就输了(通常和电脑下就是靠这点赢的)我也许说的有些复杂,不过你可以参考百科里面的“战术相关术语:二头蛇”你也可以自己研究一些,在下棋的时候很管用,只不过要逃过对方的眼睛做出来还要大多靠VCF做“障眼法”(下面会说到) 3. 如果遇到较熟练地对手发出“VCF”攻势(可以参考百科),那么你就要仔细地思考,同样是堵住对方的“路”,堵哪边对自己会更有利一些?VCF看上去很难攻破,但正因为它们棋与棋之间是有联系的,所以有的时候看上去断绝一方的路,实际上双方,甚至三方都能被你断绝。
这一点对付VCF非常有用。如果你是新手,建议可以用用VCF。很爽的,五分钟以内就能把同是菜鸟的对手搞定。当然,在使用VCF的时候,你也要考虑考虑,在哪个地方落子是对你最有用的。一旦VCF源源不断地形成,还能使出“二头蛇”(就是上面提到的),对方就再也对你没有抵抗之力了。 一开始其实第一步是最基础的。不要急着下,先观察对方是最好的。咱啥米时候和你玩玩、呵呵。 希望对你有帮助(咱一个字一个字打出来的哈)。
我玩五子棋老是输!
五子棋提升棋力除了看棋谱,多下棋,再没什么好方法了。如果硬要说一条,那就是多思考,提高自己的计算能力!
要是你经常在网上下棋,那就用 ORC 。那是真正能提升能力的地方。ORC里高手云集,定期比赛,最重要的事它有“反软件”功能,开着“黑石”是不可能在ORC下棋的!
我建议你买一本比较基础的五子棋书(这个书店有卖),再买一副好棋盘,照着书在盘上下棋,多揣摩揣摩作者的话,体会 做棋 的技巧,时间长了棋力就会有个质的飞跃。(棋谱要看,棋要多下,可是一定要有效,不要做无用功哦!) 要是你嫌这样麻烦,也可以下载“黑石”软件,登录 .rifchina.com (中国连珠网),上面内容很多的。
另外,如果你想成为五子棋高手,不知道基础的定式是不行的,你可以通过定式掌握很多有效的攻防技巧。各个开局的基本定式应做到心中有数,但是实战中 计算能力 会发挥主要作用。总之“计算为主,定式为辅”。
最后,下棋很考验人的耐性,五子棋虽然规则简单,但下棋能力的提升不是在短时间内能够完成的,这需要经验,等你练到一定程度,有了“棋感”的时候,在联众有规则的房间里,就可以鹤立鸡群了!
以上是我自己的经验
祝你成功!
五子棋人机对战算法
总的来说,要让电脑知道该在哪一点下子,就要根据盘面的形势,为每 一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋型(如:“冲四”、“活三”等),然后通览 全盘选出最重要的一点,这便是最基本的算法。当然,仅靠当前盘面进行判定是远远不够的,这样下棋很轻易掉进 玩家设下的陷阱,因为它没有考虑以后的变化。所以在此基础上我们加入递归调用,即:在电脑中猜测出今后几步 的各种走法,以便作出最佳选择,这也是我们下棋时常说的“想了几步”。如此一来您的程序便具有一定的水平了。 什么?不信!过来试试吧! 总体思路弄清之后,下面进行具体讨论: 一:数据结构 先来看看数据结构,我们需要哪些变量? 首先得为整个棋盘建立一张表格用以记录棋子信息,我们使用一个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对猜测后的棋进行盘面分析,假如出现了 ‘四三’、‘双三’或‘双四’等制胜点,那么己方就可以获胜了(当然对黑棋而言‘双三’、‘双四’是禁手 ,另当别论);否则照同样的方法向下分析,就可猜测出第二步、第三步…… 等一等,要是盘面上没有对手必须防的棋型,哪该怎么办呢?进攻不成的话就得考虑防守了,将自己和对手 调换一下位置,然后用上面的方法来猜测对手的棋,这样既可以防住对手巧妙的攻击,又能侍机发动反击,何乐 而...
以下为关联内容:
谁能帮我说明大富翁这款游戏的历史大富翁的游戏历史:久游的作为休闲游戏的王牌产品《大富翁》系列早已家喻户晓。十多年来始终引领着华人同类游戏的潮流动向。随着全球网络化潮流,久游网和大宇资讯也让所有希望...
谁能告诉我五子棋有哪5子啊五子棋的玩法:传统五子棋 五子棋棋具传统五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为19*19,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个...
谁能告诉我五子棋棋谱五子棋这个棋谱怎么解:浦月是先手必胜的珠形。白4是不太好的防守,最强的防守点是 5、 7、 11、9等位置。以下黑棋走了 5、 7、9的位置,非常痛快,对于白10的防守,黑11活三相当棒。...
请问如何下好五子棋如何下好五子棋:连接着同类棋子的交汇处,是制胜的一步。如图,假如你是白棋,在箭头所指处放上白棋后,白棋必胜无疑了,因为横着竖着都是三个白子,对手堵住一头,另一头可以联成五子棋。...
谁能帮我算一下开台球室的成本如何打台球桌有什么规则:八张台至少需要200平方的房子,如果预算五千元一张的球台,可以选好一些的二手台,杂牌台子是用不住的,宁选好的二手台更换好些的台尼,也比新的杂牌强好多,而...
谁能帮我做一个台球室的预算!谁能帮我算一下开台球室的成本:我在青岛这开了一家球厅,我不知道你是在那个城市,但我去年也想在大学附近开球厅,做过一个调查,以你这个定价,去打的学生不会太多,基本上就是一些打得...
谁能帮我用C语言做一个五子棋的程序我有一个C版本的C怎么运用面向对象的思想制作五子棋:#include#define N 20 int p[N][N]; int t, len; int lastx, lasty; void draw(void); void chess(void); int haswin(void); int main(v...
谁能帮我解一下这个数独数独的种类:此题属简单数独范围,难度不大,答案如下:.---------.---------.---------.| 6 4 9 | 2 5 7 | 1 8 3 || 3 7 8 | 6 4 1 | 5 2 9 || 5 1 2 | 9 8 3 | 4 7 6 |:---------...
请问怎么下好五子棋下五子棋有什么方法:解棋局,棋到中局,设计禁手来防范黑棋进攻。成功之后,再换过来,用黑棋避免禁手取胜。这样双向思维行棋,两周内就会有明显效果,禁手意识会提高许多。 追问: 除了禁...