查看完整版本: 電腦中國象棋與簡易合理棋例

xianrenb 2017-6-8 07:20 PM

電腦中國象棋與簡易合理棋例

我在設計電腦中國象棋程式時,有個要考慮的問題,值得與大家分享、討論一下。
那就是棋例了。
當然走子方式是基本的要求,但是其他複雜棋例,並不容易在電腦程式中實現。
事實上,有些棋例其實根本不太合理。

我認為,應該為中國象棋設定一種最簡易又合理的棋例。
至少可用於我的象棋程式中。

1. 首先是勝負是將死、困死。
電腦象棋設定成不可犯棋例。

2. 和局只考慮最後吃子後走了多少茬ㄗS有吃子。我暫時的設定是,多於或等於 60 虓磼M局。

3. 不考慮所謂的長捉長將等問題,換成是是否循環問題;大循環合棋例可走,小循環犯棋例不可走。

4. 考慮象棋程式要能高速運算,只考慮走子的座標變化有否循環。
如:
+--將-/--+ 紅 黑
|+++++++|    
|俥+/+\+#| 帥 將
#+#+#+#+# 仕 士
+-------+ 相 象
+-------+ 傌 馬
#+#+車+#+# 俥 車
|#+\卒/+#| 炮 砲
|++卒+卒++| 兵 卒
+--/帥\--+    

1:俥(3,2)->(1,2)。
2:將(1,4)->(2,4)。
3:俥(1,2)->(2,2)。
4:將(2,4)->(1,4)。
5:俥(2,2)->(1,2)。
6:將(1,4)->(2,4)。
7:俥(1,2)->(1,8)。

第 7 茪ㄔi循環走俥(1,2)->(2,2)。
換言之,小循環一般最多是 6 荂A不可有 7 茤峊H上。
唯一例外是被將軍時,循環走法與別的走法都合棋例。

棋例就是到此為止。

這種棋例算是簡單又與正式棋例比較相似。
只是始終有分別,對於某些棋局會有奇怪的效果。
如單馬擒孤士,會因不可小循環而變得較易解。

大家怎樣看?

這種簡易合理棋例已用於我的象棋程式中。

stfolk 2017-6-11 08:42 PM

長將長捉會作負 (敗棋)

xianrenb 2017-6-11 09:19 PM

[quote]原帖由 [i]stfolk[/i] 於 2017-6-11 08:42 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=462803042&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
長將長捉會作負 (敗棋) [/quote]

一般棋例就是長將長捉作負。
但問題之一就是若寫程式,要檢查長捉就已經十分浪費運算資源。
寫得出也不會高效能。

另一問題是,大部份人一直以來都是按前人定下的規則來下棋。
但有沒有想過為什麼要跟這些規則?
這些規則合不合理?

我看長將長捉作負的本意,是這種走子方式會無限循環,可能使本來能勝的一方不能得勝而變得不公平。
所以長將長捉一方應作負。
我看小循環的話,就是一樣的效果,所以應限定不可走小循環。
但大循環的話,一來是檢查較困難,二來是,如果非雙方配合,很難走得出,雙方都應該有責任。
同時,一方如果能“犯”大循環而得利的話,其實算是高招走法才是,反而應該嘉許。
所以我認為大循環是合棋例,小循環是犯棋例。
這樣分就已經足夠合理。
前人定下的規矩,不一定合理。

stfolk 2017-6-12 12:44 AM

RE #3

以你上面局譜為例,車長將長捉 (不斷進一和退一) ,是屬於小循環?

一些棋局需要馬行走不同的 "日字" 來將死對方,過程需要走多幾步棋才勝利,這屬於大循環? :smile_41:

xianrenb 2017-6-12 08:59 AM

[quote]原帖由 [i]stfolk[/i] 於 2017-6-12 12:44 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=462815961&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
RE #3

以你上面局譜為例,車長將長捉 (不斷進一和退一) ,是屬於小循環?

一些棋局需要馬行走不同的 "日字" 來將死對方,過程需要走多幾步棋才勝利,這屬於大循環? :smile_41: [/quote]

我指的小循環,就是用最少蚍い咱X完全一樣的局面。
也就是同一方來回走子。
如前面的不斷俥八退一、俥八進一就是。

而大循環就像以下:

+-象\-/象-+ 紅 黑
|++兵士將++|    
|#+士+\+#| 帥 將
#+#+#+兵+# 仕 士
+-------+ 相 象
+-------+ 傌 馬
#+#+#炮#+# 俥 車
|#+\+/+#| 炮 砲
|+車卒+卒++| 兵 卒
+--/帥\--+    

1:兵(4,7)->(4,6)。
2:士(2,5)->(3,6)。
3:兵(4,6)->(4,5)。
4:士(3,6)->(2,5)。
5:兵(4,5)->(4,6)。
6:士(2,5)->(3,6)。
7:兵(4,6)->(4,7)。
8:士(3,6)->(2,5)。

這樣紅方用了多茪~能走成循環。
雖然紅方這樣走是走不成勝局,但是棋力亦要相當才能走成這樣的局面。
所以我看類似的情況,應該允許這種大循環走法。
也就是相等於判和局。
按舊例長將作負來判就顯得太不合理了。

stfolk 2017-7-1 01:59 AM

以此棋局為例,(紅棋走先)

先平兵將、進兵將,平將吃掉兵,跟著進馬、平將...

...
馬七進六、將5平4;馬六進八、將4平5;馬八進七、將5平4;馬七進五、將4平5;馬五退4。 (紅勝)

連續將軍多達七步棋有多,算不算長將長促呢?   而紅棋馬的走法又算不算循環呢?
:smile_41:

stfolk 2017-7-1 02:15 AM

RE #5

你這例子應該不會循環吧...

+-象\-/象-+ 紅 黑
|++兵士將++|    
|#+士+\+#| 帥 將
#+#+#+兵+# 仕 士
+-------+ 相 象
+-------+ 傌 馬
#+#+#炮#+# 俥 車
|#+\+/+#| 炮 砲
|+車卒+卒++| 兵 卒

+--/帥\--+       

1:兵(4,7)->(4,6)。
2:士(2,5)->(3,6)。
3:兵(2,4)->(2,5)。
4:士(3,4)->(2,5)。
5:兵(4,6)->(4,5)。(紅勝)

xianrenb 2017-7-3 12:02 PM

[quote]原帖由 [i]stfolk[/i] 於 2017-7-1 01:59 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=463803545&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
以此棋局為例,(紅棋走先)

先平兵將、進兵將,平將吃掉兵,跟著進馬、平將...

...
馬七進六、將5平4;馬六進八、將4平5;馬八進七、將5平4;馬七進五、將4平5;馬五退4。 (紅勝)

連續將軍多達七步棋有多 ... [/quote]

無論按一般舊棋例或者我提倡的新棋例,這個情況都無犯棋例。

我所述的新棋例中,將軍多少步不是重點。
就算上萬步,也無關係。
茞朝I在於有棋子的移動,有無重複位置。
只有來回走相同的棋子,才有可能犯這樣的棋例。

xianrenb 2017-7-3 12:06 PM

[quote]原帖由 [i]stfolk[/i] 於 2017-7-1 02:15 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=463803850&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
RE #5

你這例子應該不會循環吧...

+-象\-/象-+ 紅 黑
|++兵士將++|    
|#+士+\+#| 帥 將
#+#+#+兵+# 仕 士
+-------+ 相 象
+-------+ 傌 ... [/quote]

我要指出的問題,是像這樣的棋局,不應判紅方敗。
紅方走子會否循環,是紅方的決定。
而這決定,不一定是最佳決定。

良心之光 2017-8-5 11:41 PM

[quote]原帖由 [i]xianrenb[/i]

貌似 你參考了 國際象棋比賽的棋例?

xianrenb 2017-8-6 10:30 AM

[quote]原帖由 [i]良心之光[/i] 於 2017-8-5 11:41 PM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=465670700&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
[quote]原帖由 xianrenb

貌似 你參考了 國際象棋比賽的棋例? [/quote]

我不太算會國際象棋,但知道有種棋例叫欠行,會是和局,與中國象棋不同。
這方面我提倡的新棋例還是與一般中國象棋棋例一樣,會是欠行方敗。

而其他方面,我就不清楚有無相似的地方。

我認為我的新棋例,可能會產生很多巧妙救局的情況。
公平之餘,亦能增加中國象棋的趣味性。

良心之光 2017-8-6 10:36 AM

[quote]原帖由 [i]xianrenb[/i] 。

對,國際象棋中如果欠行,會是和局。
我也贊成中國象棋棋例維持欠行一方敗。

2.國際象棋,
-- 如果50步之內,沒有吃子》》和局。
--連續三步 局勢相同 》和局。

xianrenb 2017-8-6 11:55 AM

[quote]原帖由 [i]良心之光[/i] 於 2017-8-6 10:36 AM 發表 [url=http://www.discuss.com.hk/redirect.php?goto=findpost&pid=465684930&ptid=26710561][img]http://www.discuss.com.hk/images/common/back.gif[/img][/url]
[quote]原帖由 xianrenb 。

對,國際象棋中如果欠行,會是和局。
我也贊成中國象棋棋例維持欠行一方敗。

2.國際象棋,
-- 如果50步之內,沒有吃子》》和局。
--連續三步 局勢相同 》和局。 [/quote]

其實以 1 樓的例子來看,大家都可能發現到,本應檢查首 5 荂A不循環就可以了。
因為如果 5 茬ㄓㄣ`環,自然不可能走出 7 茠煽`環情況。

其實我先前就是這樣想,寫出的程式本來只檢查 5 荋恁C
後來,卻遇到一個殘局情況。
當中正茯O要來回走車。
特別之處是,第 1 荇优O吃子。
吃了,形勢又不同,才能勝局。

於是我就要想方法來解決。

吃子的資訊,在我的象棋程式中的分析過程是沒有特別記錄的。
要加不是不可能,但一來本身是沒有,二來就是想到現在的方法:檢查共 7 荋N能解決。
這種解決方式,要改動程式比較少,而且以人類描述規則的看法來看,也相對簡單。
結果,我就用了這個方法。

良心之光 2017-8-6 12:39 PM

[i]xianrenb[/i]

單車難破士象全,逼和。

沒自信的人 2017-9-16 02:51 PM

要考慮用亞洲棋規定中國棋規
頁: [1]
查看完整版本: 電腦中國象棋與簡易合理棋例