智慧型系統控制 趙春棠老師 四技機電四甲 49422019 黃秉宏 井字遊戲並沒有什麼必勝的著法, 但只要適當的回應, 就可保持不敗 也 1 2 3 4 5 6 7 8 9 法則 手玩家的最佳著法其第一步最好下在四個角落 ( 即 2 4 6 8 號位置 ), 因為後手玩家除了下在中央的 5 號位置之外必敗 即使對手下了該位置, 只要回以馬步佈局或對角佈局也還有一半的勝算 先手玩家第一步的次佳選擇在 5 號位置, 因為後手玩家除了下在四個角落外必敗, 即使對手下了該位置, 只要再下在對手的另一個對角也還有三分之二的勝算 後手玩家的第一步, 如果 5 號位置是空的則選擇 5 號位置, 否則選擇在四個角落 只要掌握以上要領, 再針對當時情況稍微思考一下, 必可保持不敗 固因此我就依此原理來寫此小程式 具有智慧的電腦對手 頂多與他平手不可能贏電腦 意外發現到的網址 http://www.casperwang.idv.tw/archives/story_2/000020.html#more
#include "stdafx.h" #include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; char XY[3][3] = {{'1', '2', '3', {'4', '5', '6', {'7', '8', '9'; void show()// 顯示畫面 { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) cout << XY[i][j] << " "; cout << endl; void judge()// 玩家的輸入位置判斷 { int position; cout << " 換玩家輸入 " ; cin >> position; if (position < 1 position > 9) cout << " 輸入錯誤 " << endl; int x = (position-1)/3, y = (position-1)%3; if (XY[x][y] == 'o' XY[x][y] == 'x'){ cout << " 選過了, 不要亂選!" << endl; else XY[x][y]='x';
cout<<" 換電腦輸入 "<<endl; void reset() { int i, j, ch = '1'; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) XY[i][j] = ch + i*3 + j; int _tmain(int argc, _TCHAR* argv[]) { //int select; cout << " 電腦優先按 "<< endl; //1, 玩家優先請按 " << endl; //cout << " 第位玩家是 o, 第位玩家是 x" << endl; //cout << " 請問由誰先下 :"; //cin >> select; //if (select==1){ char Q; Q='o'; cout << " 由電腦先輸入 : "<< endl; XY[1][1]=Q; // 狀態 if(xy[1][1]=='o'&& XY[0][1]=='x'){ if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){
if(xy[2][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][2]=='x'){ else{ // 狀態 else if(xy[1][1]=='o'&& XY[1][2]=='x'){ if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){ if(xy[1][0]=='x' XY[0][1]=='x'){
else if(xy[0][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ else{ // 狀態 else if(xy[1][1]=='o'&& XY[2][1]=='x'){ if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][2]=='x'){
else{ // 狀態 else if(xy[1][1]=='o'&& XY[1][0]=='x'){ if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){
else{ // 狀態 else if(xy[1][1]=='o'&& XY[0][2]=='x'){ //staic01 if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][1]=='x'){ if(xy[2][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][2]=='x'){ //staic02 else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][0]=='x'){
if(xy[0][1]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ if(xy[1][0]=='x' && XY[1][1]=='o' && XY[1][2]=='o'){ cout<<" 雙方平手!!"<<endl; else{ //staic03 else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[1][0]=='x'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){
//staic04 else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][2]=='x'){ //staic05 else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[2][2]=='x'){ if(xy[1][0]=='x' && XY[1][1]=='o' && XY[1][2]=='o'){
if(xy[0][1]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ cout<<" 雙方平手!!"<<endl; else{ //staic06 else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[1][2]=='x'){ if(xy[0][1]=='x' XY[1][0]=='x'){ else if(xy[0][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){
// 狀態 else if(xy[1][1]=='o'&& XY[2][2]=='x'){ //staic01 if(xy[0][0]=='o' && XY[1][1]=='o' && XY[1][2]=='x'){ if(xy[1][0]=='x' XY[2][1]=='x'){ else if(xy[0][0]=='o' && XY[0][1]=='x' && XY[0][2]=='o'){ //staic02 else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){ if(xy[1][0]=='x' && XY[1][1]=='o' && XY[1][2]=='o'){
if(xy[0][1]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ cout<<" 雙方平手!!"<<endl; else{ //staic03 else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[0][1]=='x'){ if(xy[1][2]=='x' XY[2][1]=='x'){ else if(xy[0][0]=='o' && XY[1][0]=='x' && XY[2][0]=='o'){
//staic04 else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[1][0]=='x'){ if(xy[2][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[0][1]=='x' && XY[0][2]=='o'){ //staic05 else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][0]=='x'){ if(xy[0][1]=='x' && XY[1][1]=='o' && XY[2][1]=='o'){ if(xy[1][0]=='o' && XY[1][1]=='o' && XY[1][2]=='x'){
cout<<" 雙方平手!!"<<endl; else{ //staic06 else if(xy[0][0]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[1][0]=='x' && XY[2][0]=='o'){
// 狀態 else if(xy[1][1]=='o'&& XY[2][0]=='x'){ //staic01 if(xy[2][1]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[0][1]=='x' XY[1][0]=='x'){ else if(xy[0][2]=='o' && XY[1][2]=='x' && XY[2][2]=='o'){ //staic02 else if(xy[2][2]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[0][1]=='x' && XY[1][1]=='o' && XY[2][1]=='o'){
if(xy[1][0]=='x' && XY[1][1]=='o' && XY[1][2]=='o'){ cout<<" 雙方平手!!"<<endl; else{ //staic03 else if(xy[1][2]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[2][1]=='x' XY[1][0]=='x'){ else if(xy[0][0]=='o' && XY[0][1]=='x' && XY[0][2]=='o'){
//staic04 else if(xy[0][1]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[2][1]=='x' XY[1][0]=='x'){ else if(xy[0][2]=='o' && XY[1][2]=='x' && XY[2][2]=='o'){ //staic05 else if(xy[0][0]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[1][0]=='o' && XY[1][1]=='o' && XY[1][2]=='x'){ if(xy[0][1]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ cout<<" 雙方平手!!"<<endl;
else{ //staic06 else if(xy[1][0]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ if(xy[2][1]=='x' XY[1][2]=='x'){ else if(xy[0][0]=='o' && XY[0][1]=='x' && XY[0][2]=='o'){ // 狀態
else if(xy[1][1]=='o'&& XY[0][0]=='x'){ //staic01 if(xy[1][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[0][1]=='x' XY[1][2]=='x'){ else if(xy[2][0]=='o' && XY[1][1]=='o' && XY[0][2]=='x'){ //staic02 else if(xy[2][0]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[1][0]=='o' && XY[1][1]=='o' && XY[1][2]=='x'){ if(xy[0][1]=='x' && XY[1][1]=='o' && XY[2][1]=='o'){
cout<<" 雙方平手!!"<<endl; else{ //staic03 else if(xy[2][1]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[0][1]=='x' XY[1][0]=='x'){ else if(xy[0][2]=='o' && XY[1][1]=='o' && XY[2][0]=='x'){ //staic04
else if(xy[1][2]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[0][1]=='x' XY[1][0]=='x'){ else if(xy[0][2]=='x' && XY[1][1]=='o' && XY[2][0]=='o'){ //staic05 else if(xy[0][2]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[0][1]=='o' && XY[1][1]=='o' && XY[2][1]=='x'){ if(xy[1][0]=='x' && XY[1][1]=='o' && XY[1][2]=='o'){ cout<<" 雙方平手!!"<<endl; else{
//staic06 else if(xy[0][1]=='x' && XY[1][1]=='o' && XY[2][2]=='o'){ if(xy[2][1]=='x' XY[1][0]=='x'){ else if(xy[2][0]=='x' && XY[1][1]=='o' && XY[0][2]=='o'){ //
/* else{ cout << " 由玩家先輸入 : "<< endl; cout<<" 未完成設計, 敬請期待 "<<endl; return 0; */