JavaScript中国象棋程序(0) - 前言

“JavaScript中国象棋程序” 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序。希望通过这个系列,我们对博弈程序的算法有一定的了解。同时,我们也将构建出一个不错的中国象棋程序。

JavaScript中国象棋程序系列共有9个部分:

0、JavaScript中国象棋程序(0)- 前言

1、JavaScript中国象棋程序(1)- 界面设计

2、JavaScript中国象棋程序(2)- 校验棋子走法

3、JavaScript中国象棋程序(3)- 电脑自动走棋

4、JavaScript中国象棋程序(4)- 极大极小搜索算法

5、JavaScript中国象棋程序(5)- Alpha-Beta搜索

6、JavaScript中国象棋程序(6)- 克服水平线效应、检查重复局面

7、JavaScript中国象棋程序(7)- 置换表

8、JavaScript中国象棋程序(8)- 进一步优化

在进入正题之前,本节是一些闲聊。如果你急切想进入正题,请跳过本节。


我学习中国象棋程序的历程

最初是买了本书《C/C++中国象棋程序入门与提高》。这是本好书,写得细致、透彻,我很愉快地读完了前6章,毫无压力。这6章讲解了局面表示、走法生成、局面评估、基本搜索算法等内容。遗憾的是,第7章我读不下去了。第7章是在讲解,如何使用VC6.0设计图形用户界面。天啊,我是一个web程序员,我只想了解一下象棋程序的设计思想以及算法,我实在不想去使用陈旧的VC6.0来学习windows GUI编程啊。

幸运的是,我在这本书最后一页的参考文献里,发现了象棋百科全书网。在这家网站的github仓库,发现了一个JavaScript版本的中国象棋软件,而且性能还不错。使用HTML + JavaScript来设计界面,自然是简单了很多啊,这样就能集中精力去学习象棋程序的算法了。


为什么选择JavaScript

本教程之所以选择JavaScript,讲解JavaScript版本的中国象棋程序,我有以下几个理由吧:

1、这个JavaScript版本的中国象棋程序,性能还不错。

2、界面设计简单,可以把主要精力用在对算法的学习上。

3、不用搭建环境。只要有文本编辑器(比如notepad++)和浏览器(最好是chrome吧),就足够了。

4、程序用到的都是很基础的JavaScript语法,应该没有语法方面的障碍。


项目初衷

曾经读到过一个教程手把手教你构建 C 语言编译器,我觉得很有意思。于是我就仿照这它的格式,写下了这个中国象棋程序教程。本教程的绝大部分思想都来自《C/C++中国象棋程序入门与提高》和象棋百科全书网象棋百科全书网上面还有很多不错的文章,让我受益匪浅。

如果你想了解原版的程序,请前往象棋百科全书网的github下载,这里面有很多个版本,我们使用的是JavaScript版。


这个教程难学吗?

1、至少前4节是不难的吧,都是一些基本的东西。

2、第5节介绍了Alpha-Beta搜素,这个算法很重要,是后面几节教程的基础。

3、如果搞明白了Alpha-Beta搜索算法,随后的3节应该也不算难吧,都是在Alpha-Beta算法的基础上进行优化。


最后,非常感谢象棋百科全书网的前辈以及《C/C++中国象棋程序入门与提高》的作者。

祝你学得愉快。

时间: 2024-10-06 05:37:52

JavaScript中国象棋程序(0) - 前言的相关文章

中国象棋-1.0开源啦

代码下载地址:https://code.csdn.net/FansUnion/chinesechess-v1 /** * 项目名称: FansChineseChess * 版本号:1.0 * 名字:雷文 * 博客: http://FansUnion.cn * CSDN:http://blog.csdn.net/FansUnion * 邮箱: [email protected] * QQ:240-370-818 * 版权所有: 2011-2013,leiwen */ 上次更新:2010-11-12

GMchess Linux下的中国象棋游戏

gmchess,一款Linux下的中国象棋程序

中国象棋棋子及棋盘的绘制

一.题目简介 本课程设计主要是使用Swing这个Java自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,可以设计棋谱,完成棋谱的保存和对已保存的棋谱的演示,方便现在爱棋人士对残局的收藏于研究,而且达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的. 1.当两方有一方将(帅)被吃掉后,程序不能自动结束或提示游戏结束,但想到该程序并不是要进行两方对弈,而是要设计棋谱所以在能力实现范围内

[转载] 中国象棋软件-引擎实现(二)棋局表示

对于棋盘的表示当前比较先进的思想是“位棋盘”.“位棋盘”用于国际象棋非常便捷,因为国际象棋的棋盘正好有64个格子,可以将一个棋盘的信息用一个64位的变量来表示.其基本思想就是用位上的值是1或0来表示棋子在棋盘相应位置上的存在与否,这样做的好处是可以通过位操作运算来加快局面评估和着法生成的速度.当用于中国象棋时需要进行拼凑以表示中国象棋棋盘的90个格子…… 由于考虑到本人目前水平精力均着实有限.当前应以实现本程序为首要目标,而不是致力于高质量算法研究,所以就偷懒采用了传统的较为简单的“棋盘数组”—

[转载] 中国象棋软件-引擎实现(一)概述

2005年6月我系第二批科技小组的项目正式确定为实现一款中国象棋对弈软件.基本功能包括人机对战.网络对战.我负责开发人机对战的引擎部分,也就是让计算机下棋.经过了暑假整整两个月的学习与实践,我终于初步完成了程序,虽然电脑的下棋水平实在不敢恭维,但好歹也是我心血所成,所以就苟且将其命名为scCChess1.0版本,整理一下发到blog上来.(本程序在8月底就完工了,之所以现在才贴上来是因为我本想在这个学期对它进行改善,力求让电脑的下棋水平再上一个层次之后再贴出来,免得众老鸟笑话.结果这个学期实在是

编程之美读书笔记1.2——中国象棋将帅问题

http://blog.csdn.net/pipisorry/article/details/36380669 问题:下过中国象棋的朋友都知道,双方的"将"和"帅"相隔遥远,并且它们不能照面.在象棋残局中,许多高手能利用这一规则走出精妙的杀招.假设棋盘上只有"将"和"帅"二子(如图1-3所示)(为了下面叙述方便,我们约定用A表示"将",B表示"帅"): A.B二子被限制在己方3×3的格子

VC++源码分析 - 中国象棋源码分析

下载自 http://www.newxing.com/Code/VC/game/1750.html 运行界面如下: 看下类图: 资源: 主对话框: 源码说明: 本人机对弈程序采用了多种搜索算法.以下是本程序主要的类说明: 1.CEveluation类:估值类,对给定的棋盘进行估值. 2.CMoveGenerator类:走法产生器,对给定的棋盘局面搜索出所有可能的走法. 3.CSearchEngine类:搜索引擎基类. 4.CNegaMaxEngine类:负极大值法搜索引擎. 5.CAlphaBe

中国象棋将帅问题

中国象棋将帅问题 flyfish 2015-8-11 问题引自 <编程之美>中国象棋将帅问题 将帅每一着只许走一步,前进.后退.横走都可以,但不能走出"九宫",被限制在3×3的格子里运动.将和帅不准在同一直线上直接对面. 请写出一个程序,输出将帅所有合法的位置,要求在代码中只能使用一个变量. 约定用a表示"将",b表示"帅" 一个解法是关于位操作 跳过 原文提供解法一 struct { unsigned char a:4; unsig

《编程之美》 1.2 中国象棋将帅问题

问题描述: 下过中国象棋的朋友都知道.双方的"将"和"帅"相隔遥远,并且不能照面.在象棋残局中,许多高手座利用这一规则走出精妙的杀招.假设棋盘上只有"将"和"帅"二子 (为了下面叙述方便,我们约定用A 表示"将",B表示"帅"). A.B二子被限制在己方3x3 的格子里运动.每一步,A.B分别可以横向或纵向移 动一格.但不能沿对角线移动.另外,A不能面对B,也就是说,A 和B不能处于同一