電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[C++]自製:五子棋(雙打) 15x15

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
阿蛇
稍嫌羞澀的路人


註冊時間: 2012-04-15
文章: 1
來自: 台灣
53.00 果凍幣

發表發表於: 2012-4-19, AM 12:11 星期四    文章主題: [C++]自製:五子棋(雙打) 15x15 引言回覆

小弟初次發文, 請大家多多觀照

小疑問:上傳的檔名似乎沒有辦法跟原本電腦檔案的名稱一樣

原始碼分享 Very Happy
代碼:

/*
名稱:五子棋(雙打) 15x15
作者:阿蛇
完成日期:2012年4月19日
目前版本:1.0
*/

#include<iostream>
#include<string>
using namespace std;
short board[17][17];
bool endtry;

void default_board();//初始化棋盤15x15
void show_board();//顯示棋盤15x15
void put_chess(short,short,short);//下棋+判斷有無棋子
bool winner(short i,short j,short whosturn);//勝負 win = 1 勝利
void multiplayer();//兩個玩家, 黑棋先下
int main()//※ 主程式 ※
{
    cout <<"遊戲名稱:五子棋(雙打)"<< endl
         <<"  作者:阿蛇"<< endl
         <<"  版本:1.0"<< endl
         << endl;
    string choose;
    system("pause");
    do{
       default_board();
       multiplayer();
       cout <<"輸入 y 再玩一次?:";
       getline(cin,choose);
    }while(choose == "y" || choose == "Y");
    return 0;
}
/*
進度:
20120417棋盤初始化完
20120418可以下棋了, 重開局時有bug:多餘顯示「下棋的範圍超出格子外!」
20120419修正
*/
void default_board()//初始化棋盤15x15
{
     for(int i=0 ;i<=16 ;i++){
        for(int j=0 ;j<=16 ;j++){
            if(i==0 && j==0){
                 board[i][j] = 0;
            }else if(i==16 || j==16){
                 board[i][j] = 0;
            }else if(i==0){
                 board[i][j] = j+30;
            }else if(j==0){
                 board[i][j] = i+10;
            }else if(i==1 && j==1){
                 board[i][j] = -7;
            }else if(i==1 && j==15){
                 board[i][j] = -9;
            }else if(i==15 && j==1){
                 board[i][j] = -1;
            }else if(i==15 && j==15){
                 board[i][j] = -3;
            }else if(i==1){
                 board[i][j] = -8;
            }else if(j==1){
                 board[i][j] = -4;
            }else if(j==15){
                 board[i][j] = -6;
            }else if(i==15){
                 board[i][j] = -2;
            }else{
                 board[i][j] = -5;
            }
        }
     }
}
void show_board()//顯示棋盤15x15
{
     for(int i=0 ;i<=16 ;i++){
           for(int j=0 ;j<=16 ;j++){
                 switch(board[i][j]){
                    case -1:
                      cout << "└";
                      break;
                    case -2:
                      cout << "┴";
                      break;
                    case -3:
                      cout << "┘";
                      break;
                    case -4:
                      cout << "├";
                      break;
                    case -5:
                      cout << "┼";
                      break;
                    case -6:
                      cout << "┤";
                      break;
                    case -7:
                      cout << "┌";
                      break;
                    case -8:
                      cout << "┬";
                      break;
                    case -9:
                      cout << "┐";
                      break;
                    case 0:
                      cout << " ";
                      break;
                    case 1:
                      cout << "○";
                      break;
                    case 2:
                      cout << "●";
                      break;
                    /*case 3:
                      cout << "☆";
                      break;
                    case 4:
                      cout << "★";
                      break;*/
                    case 11:
                      cout << "1";
                      break;
                    case 12:
                      cout << "2";
                      break;
                    case 13:
                      cout << "3";
                      break;
                    case 14:
                      cout << "4";
                      break;
                    case 15:
                      cout << "5";
                      break;
                    case 16:
                      cout << "6";
                      break;
                    case 17:
                      cout << "7";
                      break;
                    case 18:
                      cout << "8";
                      break;
                    case 19:
                      cout << "9";
                      break;
                    case 20:
                      cout << "10";
                      break;
                    case 21:
                      cout << "11";
                      break;
                    case 22:
                      cout << "12";
                      break;
                    case 23:
                      cout << "13";
                      break;
                    case 24:
                      cout << "14";
                      break;
                    case 25:
                      cout << "15";
                      break;
                    case 31:
                      cout << "A";
                      break;
                    case 32:
                      cout << "B";
                      break;
                    case 33:
                      cout << "C";
                      break;
                    case 34:
                      cout << "D";
                      break;
                    case 35:
                      cout << "E";
                      break;
                    case 36:
                      cout << "F";
                      break;
                    case 37:
                      cout << "G";
                      break;
                    case 38:
                      cout << "H";
                      break;
                    case 39:
                      cout << "I";
                      break;
                    case 40:
                      cout << "J";
                      break;
                    case 41:
                      cout << "K";
                      break;
                    case 42:
                      cout << "L";
                      break;
                    case 43:
                      cout << "M";
                      break;
                    case 44:
                      cout << "N";
                      break;
                    case 45:
                      cout << "O";
                      break;
                   
                 }
           }
           cout << endl;
     }
}
void put_chess(short i,short j,short whosturn){//下棋+判斷有無棋子
     if(i == 0 || i >= 16 || j == 0 || j >= 16){
        cout <<"下棋的範圍超出格子外!"<< endl;
        endtry = 0;
        system("pause");
     }else if(board[i][j] == 1 || board[i][j] == 2){
        cout <<"此位置已經有棋子了!"<< endl;
        endtry = 0;
        system("pause");
     }else{
        board[i][j] = whosturn;
     }
}

bool winner(short i,short j,short whosturn){//勝負 win = 1 勝利
   short count,tempi,tempj;
   bool win = 0;
   //←→
   count = 1;
   tempi = i;
   while(board[--tempi][j] == whosturn){count++;}
   tempi = i;
   while(board[++tempi][j] == whosturn){count++;}
   if(count >= 5){win = 1; goto winner_check_end;}
   //↑↓
   count = 1;
   tempj = j;
   while(board[i][--tempj] == whosturn){count++;}
   tempj = j;
   while(board[i][++tempj] == whosturn){count++;}
   if(count >= 5){win = 1; goto winner_check_end;}
   //↖↘
   count = 1;
   tempi = i,tempj = j;
   while(board[--tempi][--tempj] == whosturn){count++;}
   tempi = i,tempj = j;
   while(board[++tempi][++tempj] == whosturn){count++;}
   if(count >= 5){win = 1; goto winner_check_end;}
   //↙↗
   count = 1;
   tempi = i,tempj = j;
   while(board[++tempi][--tempj] == whosturn){count++;}
   tempi = i,tempj = j;
   while(board[--tempi][++tempj] == whosturn){count++;}
   if(count >= 5){win = 1; goto winner_check_end;}
winner_check_end:
   return win;
}
void multiplayer(){//兩個玩家, 黑棋先下
     string keyin;
     short whosturn = 1,I,J;
     system("cls");
     show_board();
nextstep:
     I = 0;
     J = 0;
     endtry = 1;
     system("cls");
     show_board();
     if(whosturn == 1){
          cout <<"○換黑子下:";
     }else{
          cout <<"●換白子下:";
     }
     getline(cin,keyin);
     for(int n=0 ;n<keyin.length() ;n++){//處理字串keyin
        if(keyin[n]>='a' && keyin[n]<='o'){
           J = keyin[n] - 'a' + 1;
        }else if(keyin[n]>='A' && keyin[n]<='O'){
           J = keyin[n] - 'A' + 1;
        }else if(keyin[n]>='0' && keyin[n]<='9'){
           I = I*10 + keyin[n] - '0';
        }else if(keyin[n] == ' '){
           continue;
        }else{
           cout <<"輸入了不合法的字元!"<< endl;
           system("pause");
           goto nextstep;
        }
     }
     put_chess(I,J,whosturn);
     if(endtry == 0){goto nextstep;}
     endtry = winner(I,J,whosturn);
     whosturn = (whosturn == 1? 2:1);
     if(endtry == 0){goto nextstep;}
     else{
        whosturn = (whosturn == 1? 2:1);
        system("cls");
        show_board();
        if(whosturn == 1){cout <<"黑棋贏了!"<< endl;}else{cout <<"白棋贏了!"<< endl;}
     }
     
}




X 阿蛇五子棋.zip
 描述:
版本1.0

下載
 檔名:  X 阿蛇五子棋.zip
 附件大小:  122.14 KB
 下載次數:  共 1090 次

回頂端
檢視會員個人資料 發送私人訊息
彌幽
偶而上來逛逛的過客


註冊時間: 2012-06-13
文章: 5
來自: 台灣
60.12 果凍幣

發表發表於: 2012-6-18, PM 9:56 星期一    文章主題: 引言回覆

大大有沒有想過改成圍棋或者黑白棋?
有辦法和電腦下棋嗎?
我是C++的新手,所以看到就想問問
回頂端
檢視會員個人資料 發送私人訊息 雅虎訊息通
阿德
稍嫌羞澀的路人


註冊時間: 2013-04-11
文章: 1
來自: 台灣
5.38 果凍幣

發表發表於: 2013-4-11, PM 8:56 星期四    文章主題: 引言回覆

幹!好酷 又公開原始碼!! 讚^_^
_________________
沒有最強,只有更強!
回頂端
檢視會員個人資料 發送私人訊息 雅虎訊息通
Dogeatyub
稍嫌羞澀的路人


註冊時間: 2015-09-17
文章: 2

10.71 果凍幣

發表發表於: 2015-9-17, PM 1:24 星期四    文章主題: 引言回覆

I feel it's really great.
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作