人工智能化井字棋的實現(xiàn)_第1頁
人工智能化井字棋的實現(xiàn)_第2頁
人工智能化井字棋的實現(xiàn)_第3頁
人工智能化井字棋的實現(xiàn)_第4頁
人工智能化井字棋的實現(xiàn)_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

...wd......wd......wd...人工智能井字棋的實現(xiàn)學(xué)院:信息工程學(xué)院教師:羅會蘭專業(yè):計算機應(yīng)用技術(shù)學(xué)號:6120160166姓名:王碩豪簡介2016年3月9日,李世石與AlphaGo的人機大戰(zhàn)開場。這將成為寫入人類史冊的一天。計算機AI可以在圍棋上戰(zhàn)勝人類頂尖棋手的時代已經(jīng)到來。兩個月之后,美國白宮就推動成立了機器學(xué)習(xí)與人工智能分委會,由其主持和協(xié)調(diào)撰寫了三個關(guān)于人工智能開展的報告:?為人工智能的未來做好準(zhǔn)備??國家人工智能研究和開展戰(zhàn)略方案?和?人工智能、自動化與經(jīng)濟(jì)報告?。歐盟、英國和日本等也相繼發(fā)布了研發(fā)和應(yīng)用人工智能的報告。顯然,中國應(yīng)當(dāng)參與到這種戰(zhàn)略布局當(dāng)中,這種布局不僅是國家和民族的需要,而且也是贏得未來的利器。再厲害的程序員,也是從“helloworld〞程序開場寫起。再“聰明〞的機器,也是從零樣本開場“訓(xùn)練〞出來的。所以今天就來寫一個最簡單棋類游戲:TicTacToe,又叫井字棋,大陸、臺灣又稱為井字游戲、圈圈叉叉;另外也有打井游戲、OX棋的稱呼,香港多稱井字過三關(guān)、過三關(guān),是種紙筆游戲。大致說下井字棋的規(guī)那么:1.棋盤為3*3共9格,類似漢字“井〞;2.一方為o,一方為x,輪流落子;3.任一方先有連成一條線的3個棋子〔橫、豎、斜皆可〕那么為勝利;4.棋盤擺滿仍沒有一方勝利,那么為平局。這種游戲?qū)嶋H上是由第一位玩家所控制,第一位玩家是攻,第二位玩家是守。第一位玩家在角位行第一子的話贏面最大〔見圖一〕,第二位玩家假設(shè)是在邊,角位下子,第一位玩家就可以以兩粒連線牽制著第二位玩家,然后制造“兩頭蛇〞。圖一運行開場的時候,會讓你輸入你的名字,我那么輸入我名字的縮寫wsh;接下來,由我們來選擇是先下還是后下,1是先下,2是后下;我們的符號是X,電腦的是O,由于我們選擇了先下,我們在3*3的棋盤上先下在第2行第2列;電腦那么下在了第1行第1列,再次由我們決定,如果我們下在了已經(jīng)有棋子的位置上那么會提示你已經(jīng)下過了;我們決定下在第1行第3列,電腦那么下在第3行第1列,我們需要注意到如果電腦再下到第2行第1列就獲得勝利,所以我們需要防守我們?yōu)榱朔朗叵略诹说?行第1列,電腦又下在了第2行第3列,這時候其實我們可以注意到如果想要勝利只有將第2列連成直線一種方法了;我們下在了第1行第2列,電腦下在了第3行第2列,這時候已經(jīng)可以看出是個平局了;我們把最后一個位置填上,電腦告訴我們這是一個平局,是否還想要再玩;輸入y,電腦讓我們再次選擇先后手,大家就可以根據(jù)自己的想法來試著戰(zhàn)勝電腦了。如果失敗了,也會詢問你是否再次挑戰(zhàn),如果輸入n那么會直接跳出;代碼實現(xiàn)棋盤本身的數(shù)據(jù),用inta[3][3]來表示,棋盤中0表示空,1表示我們下的,其余的那么是電腦下的;voidprint(){inti,j;cout<<"\n";for(i=0;i<3;i++){for(j=0;j<3;j++){if(a[i][j]==0)cout<<".\t";elseif(a[i][j]==1)cout<<"X\t";elsecout<<"O\t";}cout<<endl;}}檢查是否有人獲勝,分別是三行,三列,對角線的8種情況intcheck(){for(inti=0;i<3;i++)if((a[i][0]!=0&&a[i][0]==a[i][1]&&a[i][1]==a[i][2])||(a[0][i]!=0&&a[0][i]==a[1][i]&&a[1][i]==a[2][i]))return1;if(a[0][0]!=0&&a[0][0]==a[1][1]&&a[1][1]==a[2][2])return1;elseif(a[0][2]!=0&&a[0][2]==a[1][1]&&a[1][1]==a[2][0])return1;elsereturn0;}我們下棋的時候,下第幾行第幾列,如果輸入大于2或者小于0提示輸入正確的數(shù)字,如果下的位置已經(jīng)被下過了提示這里已經(jīng)被下過了;voidpin(){intr=0,c=0;cout<<"Enterrow:";cin>>r;cout<<"Entercolumn:";cin>>c;r--;c--;if(r>2||c>2||r<0||c<0){strcpy(str,"Entercorrectvalue");strcat(str,name);strcat(str,".\n");puts(str);pin();}elseif(a[r][c]!=0){cout<<"Itisalreadyfilled.\n";pin();}elsea[r][c]=t;}電腦的防守策略,即我們選擇先手時電腦的應(yīng)對策略intdefend(intc,intp,intb){if(b<3)return0;elseif(a[0][0]+a[1][1]+a[2][2]==2*c&&a[0][0]!=p&&a[1][1]!=p&&a[2][2]!=p){for(inti=0;i<3;i++){if(a[i][i]==0){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}elseif(a[0][2]+a[1][1]+a[2][0]==2*c&&a[0][2]!=p&&a[1][1]!=p&&a[2][0]!=p){for(inti=0;i<3;i++){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}else{inti,j;for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==2*c&&a[i][0]!=p&&a[i][1]!=p&&a[i][2]!=p){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}elseif(a[0][i]+a[1][i]+a[2][i]==2*c&&a[0][i]!=p&&a[1][i]!=p&&a[2][i]!=p){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}return0;}電腦的進(jìn)攻策略,即我們選擇后手時電腦的落子策略intattack()//takesamoveastowininfuture.{inti,j;if(a[0][0]+a[0][2]+a[2][0]+a[2][2]==t||a[0][0]+a[0][2]+a[2][0]+a[2][2]==2*t){for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y)){if(i==1){for(j=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}}if(a[0][i]+a[1][i]+a[2][i]==y&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)){if(i==1){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}}else{if(a[0][0]+a[1][1]+a[2][2]==y&&(a[0][0]==y||a[1][1]==y||a[2][2]==y)){for(i=2;i>=0;i--){if((a[i][i]==0)&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][i]+a[1][i]+a[2][i]==y)&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)))){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}for(i=2;i>=0;i--){if(a[i][i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][i]+a[1][i]+a[2][i]==t&&(a[0][i]==t||a[1][i]==t||a[2][i]==t))){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][i]==0){a[i][i]=y;cout<<"Computerturn:"<<i+1<<""<<i+1<<endl;return1;}}}elseif(a[0][2]+a[1][1]+a[2][0]==y&&(a[0][2]==y||a[1][1]==y||a[2][0]==y)){for(i=2;i>=0;i--){if(a[i][2-i]==0&&((a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y))||((a[0][2-i]+a[1][2-i]+a[2][2-i]==y)&&(a[0][2-i]==y||a[1][2-i]==y||a[2][2-i]==y)))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}for(i=2;i>=0;i--){if(a[i][2-i]==0){if((a[i][0]+a[i][1]+a[i][2]==t&&(a[i][0]==t||a[i][1]==t||a[i][2]==t))&&(a[0][2-i]+a[1][2-i]+a[2][2-i]==t&&(a[0][2-i]==t||a[1][2-i]==t||a[2][2-i]==t))){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}for(i=2;i>=0;i--){if(a[i][2-i]==0){a[i][2-i]=y;cout<<"Computerturn:"<<i+1<<""<<3-i<<endl;return1;}}}else{for(i=0;i<3;i++){if(a[i][0]+a[i][1]+a[i][2]==y&&(a[i][0]==y||a[i][1]==y||a[i][2]==y)){if(i==1){for(intj=0;j<3;j++){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;return1;}}}}elseif(a[0][i]+a[1][i]+a[2][i]==y&&(a[0][i]==y||a[1][i]==y||a[2][i]==y)){if(i==1){for(j=0;j<3;j++){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}else{for(j=2;j>=0;j--){if(a[j][i]==0){a[j][i]=y;cout<<"Computerturn:"<<j+1<<""<<i+1<<endl;return1;}}}}}}}return0;}電腦的AI運用進(jìn)攻和防守策略控制其的落子voidai(intb){if(!defend(y,t,b)){if(!defend(t,y,b)){if((a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+y||a[0][0]+a[0][2]+a[2][0]+a[2][2]==t+2*y)&&a[1][1]==0){for(inti=0;i<3;i+=2){for(intj=0;j<3;j+=2)if(a[i][j]==0){a[i][j]=y;cout<<"Computerturn:"<<i+1<<""<<j+1<<endl;gotoend;}}}elseif

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論