双人五子棋(C++游戏)游戏代码在最底下
五子棋起源于中國(guó),是全國(guó)智力運(yùn)動(dòng)會(huì)競(jìng)技項(xiàng)目之一,是一種兩人對(duì)弈的純策略型棋類游戲。雙方分別使用黑白兩色的棋子,下在棋盤直線與橫線的交叉點(diǎn)上,先形成五子連珠者獲勝。
五子棋容易上手,老少皆宜,而且趣味橫生,引人入勝。它不僅能增強(qiáng)思維能力,提高智力,而且富含哲理,有助于修身養(yǎng)性。
稱謂
五子棋,日文亦有連五子、五子連、串珠、五目、五目碰、五格、五石、五法、五聯(lián)、京棋等多種稱謂;英文則稱之為FIR(Five In A Row的縮寫)、Gomoku(日語(yǔ)“五目”的羅馬拼音)、Gobang、connect 5、mo-rphion等;捷克文piskvorky,韓文omok等等。
許多國(guó)家的人對(duì)五子棋都有不同的愛稱,例如,韓國(guó)人把五子棋稱為“情侶棋”,表示情人之間下五子棋有利于增加情感的交流;歐洲人稱其為“紳士棋”,代表下五子棋的君子風(fēng)度勝似紳士;日本人則稱其為“中老年棋”,說明五子棋適合中老年人的生理特點(diǎn)和思維方式。
歷史沿革
發(fā)展
-
日本
關(guān)于五子棋的起源,史料上并無明確記載。相傳,在“堯造圍棋”之前,五子棋就已經(jīng)流行于民間。大約在南北朝時(shí)期,五子棋隨圍棋傳入高麗(今朝鮮),后又傳至日本。?[7]?
起初,五子棋主要在日本的皇宮貴族間流行,到元祿(1688—1703)末期已盛行于民間。明治3年(1899),《萬朝報(bào)》經(jīng)過公開征名,取意《漢書·律歷志上》中“日月如合璧,五星如連珠”將五子棋正式命名為“連珠”。
-
歐洲
20世紀(jì)初,傳統(tǒng)五子棋及連珠從日本傳入歐洲。五子棋英譯為“Five In A Row”(縮寫為FIR),漢語(yǔ)拼音“wǔ zǐ qí”,同時(shí)根據(jù)日語(yǔ)的羅馬拼音,把“五目、五目碰”英譯為“Gomoku、Gobang”,“連珠”英譯為“Renju”。
1958年以及1979年,瑞典和前蘇聯(lián)分別成立了連珠聯(lián)盟。1988年,日本、前蘇聯(lián)以及瑞典三個(gè)國(guó)家的連珠組織在瑞典成立國(guó)際連珠聯(lián)盟(Renju International Federation,簡(jiǎn)稱RIF)。
20世紀(jì)90年代歐洲一些國(guó)家給傳統(tǒng)五子棋引入“交換”等規(guī)則后,經(jīng)過發(fā)展逐漸形成一系列的Gomoku新規(guī)則。中歐一些國(guó)家成立了Gomoku組織,并和六子棋共同成立了國(guó)際聯(lián)盟(GCIF)。
21世紀(jì)初,在舉辦世界連珠(renju)錦標(biāo)賽的同時(shí)也舉辦了世界Gomoku錦標(biāo)賽(GT)及六子棋國(guó)際公開賽(CT)。
2009年8月,在捷克共和國(guó)(Czech Republic)帕爾杜比采市(Pardubice)舉行了第11屆世界連珠錦標(biāo)賽和第3屆世界Gomoku錦標(biāo)賽。
-
中國(guó)
五子棋雖起源于中國(guó),但長(zhǎng)久以來五子棋在中國(guó)一直沒有得到發(fā)展。
2001年,國(guó)家體育總局批準(zhǔn)中國(guó)棋院試辦全國(guó)性五子棋比賽(更準(zhǔn)確地說,這里的“五子棋”應(yīng)該被稱為“連珠五子棋”或“連珠棋”)。
2002年8月2—4日,中國(guó)棋院舉辦了首屆全國(guó)五子棋個(gè)人邀請(qǐng)賽,此后每年舉辦一次。
2003年,國(guó)家體育總局批準(zhǔn)了中國(guó)棋院審定的《中國(guó)五子棋競(jìng)賽規(guī)則》(試行)和《中國(guó)五子棋段級(jí)位制》(試行)。
2006年2月,國(guó)家體育總局對(duì)五子棋正式立項(xiàng),作為圍棋下的一個(gè)二級(jí)項(xiàng)目。全國(guó)各地相繼成立了新的五子棋俱樂部。
2007年5月和10月,中國(guó)棋院先后舉辦了首屆全國(guó)五子棋團(tuán)體錦標(biāo)賽和首屆全國(guó)五子棋個(gè)人錦標(biāo)賽。
2008年6月和12月,中國(guó)棋院先后舉辦了第二屆全國(guó)五子棋團(tuán)體錦標(biāo)賽和第二屆全國(guó)五子棋個(gè)人錦標(biāo)賽。
2009年5月和10月,中國(guó)棋院先后舉辦了第三屆全國(guó)五子棋團(tuán)體錦標(biāo)賽和第三屆全國(guó)五子棋個(gè)人錦標(biāo)賽。
2009年11月,首屆全國(guó)智力運(yùn)動(dòng)會(huì)將五子棋作為正式比賽項(xiàng)目?[1]??。
2010年6月14日,國(guó)家體育總局棋牌運(yùn)動(dòng)管理中心舉辦了全國(guó)五子棋公開賽。
2010年11月至2011年5月,中國(guó)移動(dòng)首屆全國(guó)棋牌網(wǎng)絡(luò)爭(zhēng)霸賽設(shè)有五子棋?[2]??。
2011年11月8日至18日,在湖北省武漢市舉辦了第二屆全國(guó)智力運(yùn)動(dòng)會(huì),五子棋增設(shè)女子團(tuán)體項(xiàng)目,湖北籍棋手喜獲雙冠。?[4]?
2011年11月至2012年11月,全國(guó)網(wǎng)絡(luò)智力運(yùn)動(dòng)會(huì)。
2013年4月1日,正式啟動(dòng)第二屆全國(guó)網(wǎng)絡(luò)智力運(yùn)動(dòng)會(huì)。
2019年,中共海口市委宣傳部、海南省五子棋運(yùn)動(dòng)協(xié)會(huì)承辦了全國(guó)五子棋錦標(biāo)賽,于10月3日上午在海南省海口市黃金海景大酒店正式開賽。比賽共吸引來自北京、河北、上海、浙江、河南、山東、江蘇、安徽、四川、湖北、廣東、海南12個(gè)省市148名選手。
2021年,國(guó)家體育總局棋牌中心、中國(guó)棋院、海南省體育總會(huì)主辦,海南省五子棋運(yùn)動(dòng)協(xié)會(huì)承辦全國(guó)五子棋錦標(biāo)賽。?[5]?
針對(duì)先行必勝的改革
隨著五子棋的發(fā)展,人們逐步發(fā)現(xiàn)先行優(yōu)勢(shì)非常大,最后得出“先行必勝”的結(jié)論。五子棋要成為競(jìng)技運(yùn)動(dòng),核心問題是要解決傳統(tǒng)五子棋下法中“先行必勝”的問題。
“競(jìng)技五子棋”就是參賽雙方以棋盤和棋子為介體,進(jìn)行智力性對(duì)抗的競(jìng)技體育項(xiàng)目。
“交換”思維
“交換”思維有個(gè)形象的比喻:一個(gè)人切蛋糕,一個(gè)人選蛋糕。即:一人開局,另一人選擇黑方還是白方。此方法最為公平、最有效率,且最為簡(jiǎn)潔實(shí)用。不過此方法使開局者不走已知的必勝,把棋藝的較量演化為對(duì)局者開局的博弈,而“必勝開局”依然存在。
如:歐洲的Swap2、Swap1;中國(guó)的Swap3、一手交換規(guī)則等。
“禁手”思維
禁止以某種手段取勝。為了平衡先后手之間的差距,削弱先手優(yōu)勢(shì),日本連珠提出“禁手”。后來連珠的發(fā)展證明禁手并不能平衡先后手之間的差距,依然是“先行必勝”。
“泡沫”原理
像泡沫一樣會(huì)破滅。如“吃子”五子棋。連成5個(gè)后消失,同時(shí)拿掉對(duì)方一個(gè)棋子,自己再補(bǔ)一子。此原理的的特點(diǎn)是:把五子棋金球制改成了“進(jìn)球制”,同時(shí)也最大效率地利用了棋盤和棋子,帶來了全新的思維。問題是怎樣計(jì)算勝負(fù)。
“井字游戲”原理
井字游戲又叫圈叉棋,圈叉棋是和棋,原因是空間很小。
通過縮小棋盤來抑制五子棋先行的優(yōu)勢(shì)。如:15路棋盤,13路棋盤等等。問題是多大的棋盤才能是和棋,知道和棋后還能成為競(jìng)技運(yùn)動(dòng)嗎。
“蹺蹺板”原理
五子棋始終是先行領(lǐng)先一子。如果雙方輪流領(lǐng)先一子呢
臺(tái)灣教授發(fā)明的六子棋,就如“蹺蹺板”一樣。先行先下一子,然后雙方輪流下兩子,先連成6子者勝利。六子棋為第11屆奧林匹亞計(jì)算機(jī)游戲程序競(jìng)賽項(xiàng)目,驗(yàn)證其公平性與復(fù)雜性。
“連珠棋”原理
“禁手”思維+“交換”思維+“井字游戲”原理=連珠
如:RIF規(guī)則、Sakata規(guī)則、Yamaguchi規(guī)則Tarannikov規(guī)則等。
以上內(nèi)容來自百度網(wǎng)盤
———————————————————————————————————————————
五子棋游戲的代碼:
#include<iostream> #include<conio.h> #include<Windows.h> using namespace std; int n[31][31]; int a, b; bool gameover = false; int win = 0; int q; char er; void shuchu() { cout << " "; for(int z = 65; z <= q + 64; z++) { er = z; er = char(er); cout << er << " "; } cout << endl; for(int i = 1; i <= q; i++) { if(i <= 9) { cout << " "<< i; } if(i > 9) { cout << i; } for(int j = 1; j <= q; j++) { if(n[i][j] == 0) { if(i == 1 && j == 1) { cout << "┌"; continue; } if(i == 1 && j == q) { cout << "┐"; continue; } if(i == q && j == 1) { cout << "└"; continue; } if(i == q && j == q) { cout << "┘"; continue; } if(i == 1) { cout << "┬"; continue; } if(i == q) { cout << "┴"; continue; } if(j == 1) { cout << "├"; continue; } if(j == q) { cout << "┤"; continue; } cout << "┼"; continue; } if(n[i][j] == 1) { cout << "○" ; continue; } if(n[i][j] == 2) { cout << "●"; continue; } } cout << " " << i; cout << endl; } cout << " "; for(int z = 65; z <= q + 64; z++) { er = z; er = char(er); cout << er << " "; } cout << endl; } void doublep() { int y = 1; cout << "五子棋(雙人游戲)A,B,C,D....各代表1,2,3,4...." <<endl; cout << "輸入0,0離開游戲(雙方均同意)" << endl; cout << "請(qǐng)選擇棋盤大小:"<<endl; cout << "小(9*9)<S> 中(15*15)<M> 大(21*21)<B> 自定義(5-26)<Y>" << endl; char ss; cin >> ss; if(ss == 'S') { q = 9; } if(ss == 'M') { q = 15; } if(ss == 'B') { q = 21; } if(ss == 'Y') { cout << "請(qǐng)輸入棋盤大小" << endl << "輸入"; cin >> q; if(q > 26 || q < 5) { cout << "你還皮???" << endl; return; } } if(ss != 'S' && ss != 'M' && ss != 'B' && ss != 'Y') { cout << "你還皮???"; return; } cout << "你選擇了"<< q << "乘" << q << "大小的棋盤" <<endl; cout << " "; for(int z = 65; z <= q + 64; z++) { er = z; er = char(er); cout << er << " "; } cout << endl; for(int i = 1; i <= q; i++) { if(i <= 9) { cout << " " << i; } if(i > 9) { cout << i; } for(int j = 1; j <= q; j++) { if(n[i][j] == 0) { if(i == 1 && j == 1) { cout << "┌"; continue; } if(i == 1 && j == q) { cout << "┐"; continue; } if(i == q && j == 1) { cout << "└"; continue; } if(i == q && j == q) { cout << "┘"; continue; } if(i == 1) { cout << "┬"; continue; } if(i == q) { cout << "┴"; continue; } if(j == 1) { cout << "├"; continue; } if(j == q) { cout << "┤"; continue; } cout << "┼"; continue; } if(n[i][j] == 1) { cout << "○" ; continue; } if(n[i][j] == 2) { cout << "●"; continue; } } cout << " " << i; cout << endl; } cout << " "; for(int z = 65; z <= q + 64; z++) { er = z; er = char(er); cout << er << " "; } cout << endl; while(gameover == false) { if(y % 2 == 1) { cout << "黑方下棋,輸入放下棋子的坐標(biāo)(橫+豎),坐標(biāo)均為數(shù)字" << endl; cin >> a >> b; if(a == 0 && b == 0) { cout << "請(qǐng)問白方是否同意?" << endl << "同意<Y> 不同意<其他字符>" << endl; char fg; cin >> fg; if(fg == 'Y') { cout << "Bye!" << endl; return; } else { cout << "白方不同意,請(qǐng)重新輸入。" << endl; continue; } } if(a > q || b > q) { cout << "對(duì)不起,輸出超限,請(qǐng)重新輸入。" << endl; continue; } if(a < 1 || b < 1) { cout << "對(duì)不起,輸出超限,請(qǐng)重新輸入。" << endl; continue; } if(n[a][b] == 1 || n[a][b] == 2) { cout << "對(duì)不起,此格子已有棋子,請(qǐng)重新輸入。" << endl; continue; } n[a][b] = 1; shuchu(); } if(y % 2 == 0) { cout << "白方下棋,輸入放下棋子的坐標(biāo)(橫+豎),坐標(biāo)均為數(shù)字" << endl; cin >> a >> b; if(a == 0 && b == 0) { cout << "請(qǐng)問黑方是否同意?" << endl << "同意<Y> 不同意<其他字符>" << endl; char fg; cin >> fg; if(fg == 'Y') { cout << "Bye!" << endl; return; } else { cout << "黑方不同意,請(qǐng)重新輸入。" << endl; continue; } } if(a > q || b > q) { cout << "對(duì)不起,輸出超限,請(qǐng)重新輸入。" << endl; continue; } if(a < 1 || b < 1) { cout << "對(duì)不起,輸出超限,請(qǐng)重新輸入。" << endl; continue; } if(n[a][b] == 1 || n[a][b] == 2) { cout << "對(duì)不起,此格子已有棋子,請(qǐng)重新輸入。" << endl; continue; } n[a][b] = 2; shuchu(); } if(y == q * q) { win = 3; gameover = true; } for(int i = 1; i <= q; i++) { for(int j = 1; j <= q; j++) { if(n[i][j] == 1 && n[i + 1][j] == 1 && n[i + 2][j] == 1 && n[i + 3][j] == 1 && n[i + 4][j] == 1) { win = 1; gameover = true; } if(n[i][j] == 2 && n[i + 1][j] == 2 && n[i + 2][j] == 2 && n[i + 3][j] == 2 && n[i + 4][j] == 2) { win = 2; gameover = true; } if(n[i][j] == 2 && n[i][j + 1] == 2 && n[i][j + 2] == 2 && n[i][j + 3] == 2 && n[i][j + 4] == 2) { win = 2; gameover = true; } if(n[i][j] == 1 && n[i][j + 1] == 1 && n[i][j + 2] == 1 && n[i][j + 3] == 1 && n[i][j + 4] == 1) { win = 1; gameover = true; } if(n[i][j] == 1 && n[i + 1][j + 1] == 1 && n[i + 2][j + 2] == 1 && n[i + 3][j + 3] == 1 && n[i + 4][j + 4] == 1) { win = 1; gameover = true; } if(n[i][j] == 2 && n[i + 1][j + 1] == 2 && n[i + 2][j + 2] == 2 && n[i + 3][j + 3] == 2 && n[i + 4][j + 4] == 2) { win = 2; gameover = true; } if(n[i][j] == 2 && n[i + 1][j + 1] == 2 && n[i + 2][j + 2] == 2 && n[i + 3][j + 3] == 2 && n[i + 4][j + 4] == 2) { win = 2; gameover = true; } if(n[i][j] == 2 && n[i - 1][j + 1] == 2 && n[i - 2][j + 2] == 2 && n[i - 3][j + 3] == 2 && n[i - 4][j + 4] == 2) { win = 2; gameover = true; } if(n[i][j] == 1 && n[i - 1][j + 1] == 1 && n[i - 2][j + 2] == 1 && n[i - 3][j + 3] == 1 && n[i - 4][j + 4] == 1) { win = 1; gameover = true; } } } y++; } if(win == 1) { cout << "恭喜黑方獲勝!"; return; } if(win == 2) { cout << "恭喜白方獲勝!"; return; } if(win == 3) { cout << "平局!"; return; } } void singlep() { cout << "五子棋(單人游戲,與電腦對(duì)抗)A,B,C各代表10,11,12" <<endl; cout << "輸入0,0離開游戲" << endl; cout << " 1 2 3 4 5 6 7 8 9 A B C " << endl; for(int i = 1; i <= 12; i++) { if(i <= 9) { cout << i << " "; } if(i > 9) { cout << i; } for(int j = 1; j <= 12; j++) { n[i][j] = 0; if(n[i][j] == 0) { if(i == 1 && j == 1) { cout << "┌"; continue; } if(i == 1 && j == 12) { cout << "┐"; continue; } if(i == 12 && j == 1) { cout << "└"; continue; } if(i == 12 && j == 12) { cout << "┘"; continue; } if(i == 1) { cout << "┬"; continue; } if(i == 12) { cout << "┴"; continue; } if(j == 1) { cout << "├"; continue; } if(j == 12) { cout << "┤"; continue; } cout << "┼"; continue; } if(n[i][j] == 1) { cout << "○" ; continue; } if(n[i][j] == 2) { cout << "●"; continue; } } cout << endl; } while(gameover == false) { cout << "你是黑方"; } } int main() { char tu; cout << "五子棋~~" << endl; cout << "雙人模式" << endl; cout << "輸入任意鍵開始游戲"; getch(); system("cls"); doublep(); }總結(jié)
以上是生活随笔為你收集整理的双人五子棋(C++游戏)游戏代码在最底下的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国计算机等级考试题库二级C操作题100
- 下一篇: STL学习笔记(仿函数)