




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、人工智能 井字棋的實(shí)現(xiàn)學(xué)院:信息工程學(xué)院教師:羅會(huì)蘭 專業(yè):計(jì)算機(jī)應(yīng)用技術(shù)學(xué)號(hào):6120160166姓名:王碩豪簡(jiǎn)介2016年3月9日,李世石與 AlphaGo 的人機(jī)大戰(zhàn)開始。這將成為寫入人類史冊(cè)的一天。計(jì)算機(jī) AI 可以在圍棋上戰(zhàn)勝人類頂尖棋手的時(shí)代已經(jīng)到來(lái)。兩個(gè)月之后,美國(guó)白宮就推動(dòng)成立了機(jī)器學(xué)習(xí)與人工智能分委會(huì),由其主持和協(xié)調(diào)撰寫了三個(gè)關(guān)于人工智能發(fā)展的報(bào)告:為人工智能的未來(lái)做好準(zhǔn)備國(guó)家人工智能研究和發(fā)展戰(zhàn)略計(jì)劃和人工智能、自動(dòng)化與經(jīng)濟(jì)報(bào)告。歐盟、英國(guó)和日本等也相繼發(fā)布了研發(fā)和應(yīng)用人工智能的報(bào)告。顯然,中國(guó)應(yīng)當(dāng)參與到這種戰(zhàn)略布局當(dāng)中,這種布局不僅是國(guó)家和民族的需要,而且也是贏得未來(lái)的利
2、器。再厲害的程序員,也是從“hello world”程序開始寫起。再“聰明”的機(jī)器,也是從零樣本開始“訓(xùn)練”出來(lái)的。所以今天就來(lái)寫一個(gè)最簡(jiǎn)單棋類游戲:Tic Tac Toe,又叫井字棋,大陸、臺(tái)灣又稱為井字游戲、圈圈叉叉;另外也有打井游戲、OX棋的稱呼,香港多稱井字過三關(guān)、過三關(guān),是種紙筆游戲。大致說(shuō)下井字棋的規(guī)則:1.棋盤為 3*3 共 9 格,類似漢字“井”;2.一方為 o,一方為 x,輪流落子;3.任一方先有連成一條線的 3 個(gè)棋子(橫、豎、斜皆可)則為勝利;4.棋盤擺滿仍沒有一方勝利,則為平局。這種游戲?qū)嶋H上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子
3、的話贏面最大(見圖一),第二位玩家若是在邊,角位下子,第一位玩家就可以以兩粒連線牽制著第二位玩家,然后制造“兩頭蛇”。圖一運(yùn)行開始的時(shí)候,會(huì)讓你輸入你的名字,我則輸入我名字的縮寫wsh;接下來(lái),由我們來(lái)選擇是先下還是后下,1是先下,2是后下;我們的符號(hào)是X,電腦的是O,由于我們選擇了先下,我們?cè)?*3的棋盤上先下在第2行第2列;電腦則下在了第1行第1列,再次由我們決定,如果我們下在了已經(jīng)有棋子的位置上則會(huì)提示你已經(jīng)下過了;我們決定下在第1行第3列,電腦則下在第3行第1列,我們需要注意到如果電腦再下到第2行第1列就獲得勝利,所以我們需要防守我們?yōu)榱朔朗叵略诹说?行第1列,電腦又下在了第2行第3列
4、,這時(shí)候其實(shí)我們可以注意到如果想要?jiǎng)倮挥袑⒌?列連成直線一種方法了;我們下在了第1行第2列,電腦下在了第3行第2列,這時(shí)候已經(jīng)可以看出是個(gè)平局了;我們把最后一個(gè)位置填上,電腦告訴我們這是一個(gè)平局,是否還想要再玩;輸入y,電腦讓我們?cè)俅芜x擇先后手,大家就可以根據(jù)自己的想法來(lái)試著戰(zhàn)勝電腦了。如果失敗了,也會(huì)詢問你是否再次挑戰(zhàn),如果輸入n則會(huì)直接跳出;代碼實(shí)現(xiàn)棋盤本身的數(shù)據(jù),用int a33來(lái)表示,棋盤中0表示空,1表示我們下的,其余的則是電腦下的;void print() int i,j; cout<<"n" for(i=0;i<3;i+) for(j=0;
5、j<3;j+) if(aij=0) cout<<".t" else if(aij=1) cout<<"Xt" else cout<<"Ot" cout<<endl; 檢查是否有人獲勝,分別是三行,三列,對(duì)角線的8種情況int check() for(int i=0;i<3;i+) if(ai0!=0&&ai0=ai1&&ai1=ai2)|(a0i!=0&&a0i=a1i&&a1i=a2i) return 1; i
6、f(a00!=0&&a00=a11&&a11=a22) return 1; else if(a02!=0&&a02=a11&&a11=a20) return 1; else return 0;我們下棋的時(shí)候,下第幾行第幾列,如果輸入大于2或者小于0提示輸入正確的數(shù)字,如果下的位置已經(jīng)被下過了提示這里已經(jīng)被下過了;void pin() int r=0,c=0; cout<<"Enter row: " cin>>r; cout<<"Enter column: "
7、; cin>>c; r-; c-; if(r>2|c>2|r<0|c<0) strcpy(str,"Enter correct value "); strcat(str,name); strcat(str,".n"); puts(str); pin(); else if(arc!=0) cout<<"It is already filled.n" pin(); else arc=t;電腦的防守策略,即我們選擇先手時(shí)電腦的應(yīng)對(duì)策略int defend(int c, int p, int b
8、) if(b<3) return 0; else if(a00+a11+a22=2*c&&a00!=p&&a11!=p&&a22!=p) for(int i=0;i<3;i+) if(aii=0) aii=y; cout<<"Computer turn: "<<i+1<<" "<<i+1<<endl; return 1; else if(a02+a11+a20=2*c&&a02!=p&&a11!=p&am
9、p;&a20!=p) for(int i=0;i<3;i+) if(ai2-i=0) ai2-i=y; cout<<"Computer turn: "<<i+1<<" "<<3-i<<endl; return 1; else int i,j; for(i=0;i<3;i+) if(ai0+ai1+ai2=2*c&&ai0!=p&&ai1!=p&&ai2!=p) for(j=0;j<3;j+) if(aij=0) aij=y
10、; cout<<"Computer turn: "<<i+1<<" "<<j+1<<endl; return 1; else if(a0i+a1i+a2i=2*c&&a0i!=p&&a1i!=p&&a2i!=p) for(j=0;j<3;j+) if(aji=0) aji=y; cout<<"Computer turn: "<<j+1<<" "<<i+1&
11、lt;<endl; return 1; return 0;電腦的進(jìn)攻策略,即我們選擇后手時(shí)電腦的落子策略int attack()/takes a move as to win in future. int i,j; if(a00+a02+a20+a22=t|a00+a02+a20+a22=2*t) for(i=0;i<3;i+) if( ai0+ai1+ai2=y && (ai0=y|ai1=y|ai2=y) ) if(i=1) for(j=0;j<3;j+) if(aij=0) aij=y; cout<<"Computer turn:
12、"<<i+1<<" "<<j+1<<endl; return 1; else for(j=2;j>=0;j-) if(aij=0) aij=y; cout<<"Computer turn: "<<i+1<<" "<<j+1<<endl; return 1; if(a0i+a1i+a2i=y && (a0i=y|a1i=y|a2i=y) if(i=1) for(j=0;j<3;j+) if(a
13、ji=0) aji=y; cout<<"Computer turn: "<<j+1<<" "<<i+1<<endl; return 1; else for(j=2;j>=0;j-) if(aji=0) aji=y; cout<<"Computer turn: "<<j+1<<" "<<i+1<<endl; return 1; for(i=2;i>=0;i-) if(ai2-i=0) i
14、f(ai0+ai1+ai2=t&&(ai0=t|ai1=t|ai2=t)&&(a02-i+a12-i+a22-i=t&&(a02-i=t|a12-i=t|a22-i=t) ai2-i=y; cout<<"Computer turn: "<<i+1<<" "<<3-i<<endl; return 1; for(i=2;i>=0;i-) if(ai2-i=0) ai2-i=y; cout<<"Computer turn: &
15、quot;<<i+1<<" "<<3-i<<endl; return 1; else if(a00+a11+a22=y && (a00=y|a11=y|a22=y) for(i=2;i>=0;i-) if(aii=0)&& (ai0+ai1+ai2=y&&(ai0=y|ai1=y|ai2=y) |( (a0i+a1i+a2i=y)&&(a0i=y|a1i=y|a2i=y) aii=y; cout<<"Computer turn: &qu
16、ot;<<i+1<<" "<<i+1<<endl; return 1; for(i=2;i>=0;i-) if(aii=0) if(ai0+ai1+ai2=t&&(ai0=t|ai1=t|ai2=t)&&(a0i+a1i+a2i=t&&(a0i=t|a1i=t|a2i=t) aii=y; cout<<"Computer turn: "<<i+1<<" "<<i+1<<endl
17、; return 1; for(i=2;i>=0;i-) if(aii=0) aii=y; cout<<"Computer turn: "<<i+1<<" "<<i+1<<endl; return 1; else if( a02+a11+a20=y && (a02=y|a11=y|a20=y) for(i=2;i>=0;i-) if(ai2-i=0&&(ai0+ai1+ai2=y&&(ai0=y|ai1=y|ai2=y)|( (a02-
18、i+a12-i+a22-i=y)&&(a02-i=y|a12-i=y|a22-i=y) ai2-i=y; cout<<"Computer turn: "<<i+1<<" "<<3-i<<endl; return 1; for(i=2;i>=0;i-) if(ai2-i=0) if(ai0+ai1+ai2=t&&(ai0=t|ai1=t|ai2=t)&&(a02-i+a12-i+a22-i=t&&(a02-i=t|a12-i=t
19、|a22-i=t) ai2-i=y; cout<<"Computer turn: "<<i+1<<" "<<3-i<<endl; return 1; for(i=2;i>=0;i-) if(ai2-i=0) ai2-i=y; cout<<"Computer turn: "<<i+1<<" "<<3-i<<endl; return 1; else for(i=0;i<3;i+) if(
20、ai0+ai1+ai2=y && (ai0=y|ai1=y|ai2=y) ) if(i=1) for(int j=0;j<3;j+) if(aij=0) aij=y; cout<<"Computer turn: "<<i+1<<" "<<j+1<<endl; return 1; else for(j=2;j>=0;j-) if(aij=0) aij=y; cout<<"Computer turn: "<<i+1<<
21、;" "<<j+1<<endl; return 1; else if(a0i+a1i+a2i=y && (a0i=y|a1i=y|a2i=y) if(i=1) for(j=0;j<3;j+) if(aji=0) aji=y; cout<<"Computer turn: "<<j+1<<" "<<i+1<<endl; return 1; else for(j=2;j>=0;j-) if(aji=0) aji=y; cout&l
22、t;<"Computer turn: "<<j+1<<" "<<i+1<<endl; return 1; return 0;電腦的AI運(yùn)用進(jìn)攻和防守策略控制其的落子void ai(int b) if(!defend(y,t,b) if(!defend(t,y,b) if(a00+a02+a20+a22=t+y|a00+a02+a20+a22=t+2*y)&&a11=0) for(int i=0;i<3;i+=2) for(int j=0;j<3;j+=2) if(aij=0) aij=
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)男性護(hù)理液行業(yè)市場(chǎng)全景分析及前景機(jī)遇研判報(bào)告
- 中班美術(shù)活動(dòng)變臉
- 無(wú)創(chuàng)呼吸機(jī)應(yīng)用和護(hù)理
- 智慧教育發(fā)展
- 煤礦機(jī)電運(yùn)輸事故原因及控制對(duì)策探究
- 物業(yè)品質(zhì)管理與培訓(xùn)
- 車用尿素研發(fā)生產(chǎn)與銷售合作協(xié)議書
- 房地產(chǎn)租賃合同補(bǔ)充協(xié)議書
- 員工培訓(xùn)計(jì)劃表
- 知識(shí)產(chǎn)權(quán)侵權(quán)代理授權(quán)協(xié)議
- 山東省聊城市2023-2024學(xué)年高一下學(xué)期期末考試英語(yǔ)試題
- 公路水運(yùn)工程施工企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員考核大綱和模擬試題庫(kù)1
- 預(yù)應(yīng)力混凝土管樁(L21G404)
- 企業(yè)法務(wù)概論智慧樹知到期末考試答案章節(jié)答案2024年溫州大學(xué)
- 第1課 多姿與多彩(生活色彩)課件-2023-2024學(xué)年高中美術(shù)人教版(2019)選擇性必修1《繪畫》
- 海拔高度與氣壓、空氣密度、重力加速度對(duì)照表
- 考評(píng)員職業(yè)道德課件
- 物控培訓(xùn)教程預(yù)防呆滯料與庫(kù)存控制的實(shí)用方法
- 天氣數(shù)據(jù)分析與氣象預(yù)測(cè)
- 駕照體檢表完整版本
- 核醫(yī)學(xué)工作中輻射防護(hù)知識(shí)課件
評(píng)論
0/150
提交評(píng)論