象棋,跳棋,孔明棋哪个棋子最简单的国际象棋

价格从低到高
价格从高到低
相关推荐词
激发宝宝潜能,早教玩具要怎么选?
爱玩是每个孩子的天性,也是每个孩子在成长过程中必经的一步。在玩乐之中能锻炼孩子的自我学习、创造和探索能力,还能提高宝宝的人际交往、自省能力、数理逻辑、语言音乐……
相关推荐词
开启8大智能,早教玩具分类推荐
早教玩具按照智力种类可分为八项,分别是人际智能、内省智能、数理逻辑智能、空间智能、语言智能、音乐智能、肢体运动智能和自然智能。你知道如何挑选玩具,才能全方位培养宝宝的各项能力吗?从关心我们自家的小宝贝,让ta从小接受高质量教育,走上光明开阔的阳关大道。爸妈们准备好了吗?快来找到八
相关推荐词
孩子叛逆关键期!怎样给孩子挑选智能玩具?
孩子的智能科技玩具种类繁多,琳琅满目,玩法和品质也各异,父母在选购玩具时,无不伤透了脑筋。
其实,人类智能分为人际智能、内省智能、数理逻辑智能、空间智能、语言智能、音乐智能、肢体运动智能和自然智能等
玩具也关系到宝宝的特长发展哦
孩子的玩具种类是非常多的,材质形状也都是不一样的。爸爸妈妈在给孩子买玩具的时候,总是不知道买什么好。一般来说,玩具的厂商为了方便爸爸妈妈选择,在玩具上会标明这个玩具的作用。有的玩具有增加孩子动作技巧的
相关推荐词
相关推荐词
[{"chanpin":"tmall","mobileUrl":"https://m.tmall.com/mblist/cp_v9fD97_Xw_fG5Q.html","pcUrl":"https://www.tmall.com/mlist/cp_v9fD97_Xw_fG5Q.html","word":"孔明孔明棋"},{"chanpin":"tmall","mobileUrl":"https://m.tmall.com/mblist/cp_v9fD98bl.html","pcUrl":"https://www.tmall.com/mlist/cp_v9fD98bl.html","word":"孔明棋"},{"chanpin":"tmall","mobileUrl":"https://m.tmall.com/mblist/cp_0ubWx7_Xw_fG5Q.html","pcUrl":"https://www.tmall.com/mlist/cp_0ubWx7_Xw_fG5Q.html","word":"益智孔明棋"}]Triangle Peg Solitaire(孔明棋)
孔明棋,是法国跳棋在中国的别称,也有人叫它跳弹珠,或者叫它「Pegged」。一般流传的玩法是先取去中央的那个棋子,便可以展开游戏。游戏时,是将棋子跳过邻近的棋子,到达一个旁边空着的位置,被跳过的棋子则从棋盘上取开;跳的路径可以前,后,左,右,但不可对角跳,直到剩下最后的一颗棋子,游戏便结束了。这是一种流传很广的益智游戏,也有很多种变形的棋盘摆法,而本文要讲的是在三角形棋盘上的玩法,它是自17世纪末就在欧洲开始被人们玩起来了。当各大餐厅为每一个餐桌上等待食物的顾客都放置一个棋盘以供他们娱乐的时候,这类益智游戏变得越来越流行。
本文实际上通过一段简单的回溯算法DFS去搜索找出一个解决给定棋盘上的出发点的解决方案。
这个方案的主要目的是陈述一个递归函数的概念,本质上就是递归问题和回溯。它还提供了一个面向对象的思维,在一个可重用的类里来保存所有回溯逻辑形式。解决这个难题,需要使用被称为回溯的技术来搜索所有可能的移动路径,这是很容易使用递归实现的。
基本的步骤
三角之谜是15孔组织成一个三角形的集合,在其中放置钉,留下至少一个空孔。通常,该益智游戏开始只有一个空孔,如在结构(a)所示,其中实心圆圈代表钉,而空的圆圈代表孔。解谜的目的是通过一系列合法的移动,每个移动造成一个钉被删除,直到最后只剩下一个钉。一个钉被删除仅仅是通过跳过它的其他钉。因此,一个合法的移动只能是由一个位于孔和其他钉的侧面的钉移动,它们排列在一行。例如,结构(b)所示的结构是由结构(a)经过一次跳跃获得,然后(c)又由(b)再次一次跳跃得到。
GameBoard.java:此类是为了生成三角形状的棋盘
package com.game.
import java.util.L
import java.util.ArrayL
public class GameBoard {
// board consists of pegs and holes in a 5 x 5, but only uses triangular pyramid
boolean[][] pins = new boolean[5][5];
public GameBoard(int row, int col) {
for (int i = 0; i & 5; ++i)
for (int j = 0; j &= ++j)
pins[i][j] =
pins[row][col] =
public GameBoard(int board) {
for (int i = 4; i &= 0; --i)
for (int j = j &= 0; --j) {
if ((board & 1 ) == 1)
pins[i][j] =
pins[i][j] =
board /= 2;
// copy constructor
public GameBoard(GameBoard that) {
for (int i = 0; i & 5; ++i)
for (int j = 0; j &= ++j)
pins[i][j] = that.pins[i][j];
public List&GameBoard& possibleBoards() {
List&GameBoard& boards = new ArrayList&GameBoard&();
for (int i = 0; i & 5; ++i)
for (int j = 0; j &= ++j) {
Position start = new Position(i,j);
List&Move& possibleMoves = Moves.getMoves(start);
for (Move move : possibleMoves) {
if (validMove(move))
boards.add(jump(move));
public boolean validMove(Move move) {
if (!pins[move.getStart().getRow()][move.getStart().getCol()]) // empty start
if (!pins[move.getJump().getRow()][move.getJump().getCol()]) // empty jump over
if (pins[move.getEnd().getRow()][move.getEnd().getCol()])
// filled in end
public GameBoard jump(Move move) {
GameBoard gb = new GameBoard(this);
gb.pins[move.getStart().getRow()][move.getStart().getCol()] =
gb.pins[move.getJump().getRow()][move.getJump().getCol()] =
gb.pins[move.getEnd().getRow()][move.getEnd().getCol()] =
public boolean finalBoard() {
int remainingPins = 0;
for (int i = 0; i & 5; ++i)
for (int j = 0; j &= ++j)
if (pins[i][j]) {
remainingPins++;
if (remainingPins & 1) // optimize, early out, more than 1 pin is not final board
return remainingPins == 1;
public int toInt() {
int ret = 0;
for (int i = 0; i & 5; ++i)
for (int j = 0; j &= ++j) {
if (pins[i][j]) {
public String toString() {
StringBuffer sb = new StringBuffer();
for (int i = 0; i & 5; ++i) {
for (int s = 4-i; s & 0; --s)
sb.append(" ");
for (int j = 0; j &= ++j) {
sb.append(pins[i][j] ? 'X' : 'O').append(" ");
sb.append("\n");
sb.append(toInt()+ "\n");
return sb.toString();
Move.java:移动的坐标指向类package com.game.
public class Move {
public Move(Position start, Position jump, Position end) {
this.start =
this.jump =
this.end =
public Position getStart() { }
public Position getJump() { }
public Position getEnd() { }
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("{"+start);
sb.append(","+jump);
sb.append(","+end+ "}");
return sb.toString();
Moves.java:将所有起始点可以移动的方向全部列举并放入map集合中package com.game.
import java.util.M
import java.util.HashM
import java.util.L
import java.util.ArrayL
public class Moves {
private static Map&Position,List&Move&& validMoves = new HashMap&Position,List&Move&&();
start = new Position(0,0);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(1,0), new Position(2,0)));
validMoves.get(start).add(new Move(start, new Position(1,1), new Position(2,2)));
start = new Position(1,0);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,0), new Position(3,0)));
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(3,2)));
start = new Position(1,1);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(3,1)));
validMoves.get(start).add(new Move(start, new Position(2,2), new Position(3,3)));
start = new Position(2,0);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(1,0), new Position(0,0)));
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(2,2)));
validMoves.get(start).add(new Move(start, new Position(3,0), new Position(4,0)));
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(4,2)));
start = new Position(2,1);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(4,1)));
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(4,3)));
start = new Position(2,2);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(1,1), new Position(0,0)));
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(2,0)));
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(4,2)));
validMoves.get(start).add(new Move(start, new Position(3,3), new Position(4,4)));
start = new Position(3,0);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,0), new Position(1,0)));
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(3,2)));
start = new Position(3,1);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(1,1)));
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(3,3)));
start = new Position(3,2);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,1), new Position(1,0)));
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(3,0)));
start = new Position(3,3);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(2,2), new Position(1,1)));
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(3,1)));
start = new Position(4,0);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,0), new Position(2,0)));
validMoves.get(start).add(new Move(start, new Position(4,1), new Position(4,2)));
start = new Position(4,1);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(2,1)));
validMoves.get(start).add(new Move(start, new Position(4,2), new Position(4,3)));
start = new Position(4,2);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,1), new Position(2,0)));
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(2,2)));
validMoves.get(start).add(new Move(start, new Position(4,1), new Position(4,0)));
validMoves.get(start).add(new Move(start, new Position(4,3), new Position(4,4)));
start = new Position(4,3);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,2), new Position(2,1)));
validMoves.get(start).add(new Move(start, new Position(4,2), new Position(4,1)));
start = new Position(4,4);
validMoves.put(start, new ArrayList&Move&());
validMoves.get(start).add(new Move(start, new Position(3,3), new Position(2,2)));
validMoves.get(start).add(new Move(start, new Position(4,3), new Position(4,2)));
public static List&Move& getMoves(Position position) {
if (!validMoves.containsKey(position))
throw new RuntimeException("Invalid position: " + position);
return validMoves.get(position);
public String toString() {
return validMoves.toString();
position.java:坐标类package com.game.
public class Position {
public Position(int row, int col) {
this.row =
this.col =
public int getRow() { }
public int getCol() { }
public String toString() {
return "[" + row + "," + col + "]";
public int hashCode() {
int result = 17;
result = 37*result +
result = 37*result +
public boolean equals(Object other) {
if (!(other instanceof Position))
Position that = (Position)
if (this.row != that.row)
return this.col == that.
GameTree.java:以树的形式保存遍历的所有路径package com.game.
import java.util.L
import java.util.ArrayL
import com.game.board.GameB
public class GameTree {
List&GameTree& children = new ArrayList&GameTree&();
public GameTree(GameBoard gb) {
public void addChild(GameTree child) {
children.add(child);
public GameBoard getGameBoard() { }
public boolean hasChildren() {
return children.size() & 0;
public GameTree getFirstChild() {
return children.get(0);
public void removeFirstChild() {
children.remove(0);
public int numChildren() {
return children.size();
Play.java:通过DFS搜索所有可能的路径package com.game.
import java.io.IOE
import java.util.L
import java.io.BufferedR
import java.io.InputStreamR
import com.game.board.GameB
public class Play {
GameBoard startB
public Play(String[] args) throws IOException {
if (args.length == 0) {
int n1,n2;
BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Name: samudra ");
System.out.println("......................................");
System.out.println("Enter the position of the hole:");
n1=Integer.parseInt( stdin.readLine());
n2=Integer.parseInt( stdin.readLine());
init(n1,n2);
init(Integer.parseInt( args[0]),Integer.parseInt( args[1]));
private void init(int row, int col) {
startBoard = new GameBoard(row, col);
//DFS function
public void DFS() {
GameTree root = new GameTree(startBoard);
for (GameBoard nextBoard : startBoard.possibleBoards()) {
GameTree nextNode = new GameTree(nextBoard);
if (play(nextBoard, nextNode))
root.addChild(nextNode);
printWinningGame(root);
// to iterate is human, to recurse divine
// print game board at each node on the way down, removing the printed child on the way up
private void printWinningGame(GameTree parent) {
System.out.println(parent.getGameBoard());
if (parent.numChildren() & 0) {
GameTree nextNode = parent.getFirstChild();
printWinningGame(nextNode);
// recurse
if (nextNode.numChildren() == 0)
parent.removeFirstChild();
System.out.println("===============================================");
// chase all possible boards
private boolean play(GameBoard gb, GameTree parent) {
if (gb.finalBoard()) // remember this path was a winning path
List&GameBoard& nextBoards = gb.possibleBoards();
boolean found =
for (GameBoard nextBoard : nextBoards) {
GameTree nextNode = new GameTree(nextBoard);
if (play(nextBoard, nextNode)) {
// recurse
parent.addChild(nextNode);
PegBord.java:主方法package com.game.
import java.io.IOE
import com.game.play.P
public class PegBoard {
* @param args
public static void main(String[] args) throws IOException {
Play play = new Play(args);
play.DFS();
运行结果展示:
Name: samudra
......................................
Enter the position of the hole:
===============================================
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!孔明跳棋【多图】_价格_图片- 天猫精选
搜索 天猫 商品/品牌/店铺
共24件相关商品
糖儿甜糖儿香
月成交 0笔
游家木玩玩具商城
月成交 0笔
月成交 0笔
月成交 0笔
月成交 0笔
娇娇商贸中心
月成交 0笔
songhaitao1225
月成交 0笔
月成交 0笔
月成交 0笔
月成交 0笔
月成交 0笔
水是冰的泪6508
月成交 0笔
月成交 0笔
月成交 0笔跳棋教材_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩12页未读,
定制HR最喜欢的简历
你可能喜欢跳棋怎么玩?跳棋的游戏规则及注意事项_可可
跳棋怎么玩?跳棋的游戏规则及注意事项
规则相关经验《跳棋怎么玩?跳棋的游戏规则及注意事项》。本文热点:跳棋,应该,怎么,跳棋,怎么,其实,非常,简单,不像,。
跳棋怎么玩?其实跳棋是非常简单的,它不像象棋或是围棋那样有许多规则要记住,这里的规则都是很简单的,以下经验由可可经验频道小编带大家一起去看一下吧。
跳棋应该怎么玩
跳棋是一项老少皆宜、流传广泛的益智型棋类游戏。由于其规则简单,一玩就懂,一辈子都不会忘,所以几乎每个人从小到大都下过跳棋。 跳棋的游戏规则很简单,棋子的移动可以一步步在有直线连接的相邻六个方向进行,如果相邻位置上有任何方的一个棋子,该位置直线方向下一个位置是空的,则可以直接&跳&到该空位上,&跳&的过程中,只要相同条件满足就可以连续进行。谁最先把正对面的阵地全部占领,谁就取得胜利。
一、棋盘设置
棋盘的都是塑料的软皮的,可以把它固定在硬塑料压膜上面,铺平,四端用订书机订一下就OK了。 现在大多都在网上玩,更是轻而易举。
二、基本规则
游戏人数: 2 , 3 , 4 , 6 人。
你的营区:起初你10颗棋子的放置位置,是一个正三角形。
你的目标:你的10颗棋子要离乡别井,连走带跳奔向对家,完全占领正对面的营区。
入营:棋子进入目标营区。
走子:只能一步走。
棋子可六个方向走动,每步只能达到相邻的空位上。
跳子:可以连续跳。
一子跳棋规则:隔一个棋子可以跳!
空跳棋规则:像跷跷板一样,一个棋子在中间,两旁有相等的空位,就可以直接跳到对称位置上!
三、注意事项
1、跳棋的收官以快为原则,通过运用技巧以最快的速度进。
2、入对面的阵地,是比较近似的。而香气的残局还是攻防的继续。
四、其他玩法
除了遵循传统规则的玩法外,还衍生出了其他玩法,例如其中一种被称作&食棋&,实际上就是应用了孔明棋的规则。把本应放在一角的所有棋子由中央开始放满棋盘,正中央的一格要空出,形成正六边形。可多位玩家参与,玩家每次可选任何一枚棋子移动,当一枚棋子跨过另一枚棋子的时候,被跨过的棋子就为被吃掉。每次的移动一定要吃到棋子,到最后无法通过移动来吃到其他棋子时,就仿照跳棋中的平移走法,棋子可以移动到相邻六格其中一格,直到有棋可吃为止,最终目标是使棋盘中的棋子仅剩一枚。
|娱乐 本文相关
扑克是流行全世界的一种可娱乐可赌博的纸质工具,那么扑克牌有哪些玩法呢?以下经验由可可经验小编为大家带来扑克牌的玩法大全,大家一起去看看吧。扑克牌玩法大全扑克牌玩法桥牌基本介绍桥牌所使用普通扑克牌去掉大小王后的52张扑克牌,共分梅花、方片
娱乐 | 06-01
看英文电影能够帮助中学生学习英文,让可可小编给网友们推荐10部适合中学生看的电影,欢迎参阅。适合中学生看的十部英文电影01《美丽人生》(LifeisBeautiful)二次世界大战期间的意大利,由罗伯托贝里尼(RobertoBenigni)饰演的小人物─基多,来到图斯
娱乐 | 06-01
张鲁一,出生于北京,中国内地演员、导演,毕业于中央戏剧学院99级导演系,曾出演《他来了请闭眼》反派角色,演技出众收到大众的关注,那么张鲁一演过的电视剧有哪些呢?以下经验由可可经验小编带大家一起去了解一下吧。张鲁一演过的电视剧有哪些电视剧名
娱乐 | 06-01
一些爱情的电影,非常的有感觉,而且也会让人泪流满面,特别是喜欢看爱情电影的朋友,一定不要错过韩国的爱情电影。以下经验由可可经验小编给大家推荐几部韩国爱情电影排行榜,希望大家喜欢。韩国爱情电影排行榜推荐韩国爱情电影排行榜推荐:悲伤电影每
娱乐 | 06-01
生日晚会上设置一些小游戏能让自己的不同朋友之间相互熟悉,带动整个生日晚会的气氛,那么生日晚会小游戏有哪些呢?以下经验由可可经验小编给大家介绍一些吧。生日晚会小游戏有哪些生日晚会小游戏一:抢玩具,四人都在跳的皮筋里,每人面前的一段距离都有
娱乐| 06-01
立夏钓鲤鱼需要什么技巧吗?以下经验由可可经验小编给大家介绍一下立夏钓鲤鱼的技巧,大家一起去看看吧。立夏钓鲤鱼技巧立夏钓鲤鱼技巧一、选择天气出钓当天的气温最好低于30度;阴天伴有小雨,并有二三级风;暴雨之后。在这些天气出钓,气温低,水中的溶氧
娱乐| 06-01
跑得快是扑克牌的玩法之一,由四个人一起去玩,以下经验由可可经验小编给大家带来扑克牌跑得快的玩法和技巧,大家一起去看看吧。扑克牌跑得快的玩法技巧【扑克牌跑得快的玩法】跑得快是由4人玩的一款棋牌类游戏,主要流行于江浙一带,大学校园当中亦很盛
娱乐| 06-01
扑克牌可以多人玩、两个人玩、也可以一个人玩,那么扑克牌一个人怎么玩呢?以下经验由可可经验小编给大家带来扑克牌一个人的玩法大全,大家一起去看看吧。扑克牌一个人玩法大全一、扑克牌一个人玩法:倒梯形二、扑克牌一个人玩法:被囚禁的皇后三、扑克
娱乐| 06-01
陈彦妃今日在个人微博上发文,公开自己结婚的消息,瞬间成为网络热搜榜的第一,那位曾经在十几年前拍过《星梦缘》的林思彤大家还记得吗?陈彦妃演过的电视剧有哪些呢?以下经验由可可经验小编带大家一起去看看吧。陈彦妃演过的电视剧有哪些2013《爱的创可贴
娱乐| 06-01
· Copyright @
可可. 版权所有 侵权必究}

我要回帖

更多关于 最简单的象棋玩法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信