[問題] 四子棋棋盤

看板C_and_CPP (C/C++)作者 (50G)時間16年前 (2010/02/09 18:49), 編輯推噓3(3011)
留言14則, 2人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 我想要寫一個四子棋的程式,現在的問題在於我可以正常下子 但是列數大於7的時候下過的棋子會開始跟前面幾列互相影響 例如第0列跟第7列 第1跟2第8 以此類推 不論之前有沒有下過 都會變成後面下的 例如我一直打1 在第二次開始 在第7列開始也會出現 同樣的子 希望得到的正確結果: 程式跑出來的錯誤結果: 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 4.9.9.2 有問題的code: (請善用置底文標色功能) #include <iostream> using namespace std; int n = 7, k = 6; int t = 0; int site[6] = {0}; // char piece[7][6]; // piece[n][k]; void showBoard(); int down(); // bool getWinner(int, int);// int main() { // cin >> n >> k; for(int i = 0; i < n; i++) { for(int j = 0; j < k; j++) { piece[i][j] = ' '; } } showBoard(); while(t != n * k) //平手 { int tmp = down(); if(getWinner(tmp, site[tmp])) break; } system("pause"); } void showBoard() { for(int i = k - 1; i >= 0; i--) { for(int j = 0; j < n; j++) { cout << "----"; } cout << "--" << endl; for(int j = 0; j < n; j++) { cout << " | " << piece[i][j]; //棋子 } cout << " |" << endl; } for(int j = 0; j < n; j++) { cout << "----"; } cout << "--" << endl; } int down() { int row; cout << "Enter a row:"; cin >> row; if(site[--row] < k) { if(t % 2) { piece[site[row]][row] = 'X'; } else { piece[(site[row])][row] = 'O'; } t++; site[row]++; showBoard(); return row; } else { cout << "Error site" <<endl; return down(); } } bool getWinner(int x, int y) { return false; } 補充說明: -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.208.9

02/09 19:30, , 1F
char piece[7][6]; 你的array就這麼大, 下超過了自然會
02/09 19:30, 1F

02/09 19:30, , 2F
有overwrite或其它怪問題, 把array開大試試先吧; 另外,
02/09 19:30, 2F

02/09 19:31, , 3F
為什麼另一個維度只開6啊?_?
02/09 19:31, 3F

02/09 19:59, , 4F
這位大大..我的問題應該不是array不夠大..7*6是棋盤大小
02/09 19:59, 4F

02/09 20:02, , 5F
問題是在第1列下第2個子以後 第七列的第一個也會出現
02/09 20:02, 5F

02/09 20:03, , 6F
就算我開大一點的 也是這樣..而且在加大第2列的也會
02/09 20:03, 6F

02/09 20:03, , 7F
跟第八列的第二個子影響到
02/09 20:03, 7F
※ 編輯: lctwolf 來自: 218.160.208.9 (02/09 20:12)

02/09 20:40, , 8F
j = 0; j < n; j++ .. cout << " | " << piece[i][j];
02/09 20:40, 8F

02/09 20:40, , 9F
啊 n 不是 7 嗎?? 可是array宣告 char piece[7][6]; 吧.
02/09 20:40, 9F

02/09 20:50, , 10F
看起來你把col與row有點搞錯了, site[]的大小似乎也不夠
02/09 20:50, 10F

02/09 20:51, , 11F
重新把piece兩個維度與site[]的mapping, 還有output時的
02/09 20:51, 11F

02/09 20:52, , 12F
兩個維度再想一想吧; 話說, 原來4子棋是這樣子玩的啊Orz
02/09 20:52, 12F

02/09 23:09, , 13F
喔喔..感謝大大..是我開始就把行列的順序弄反了
02/09 23:09, 13F

02/09 23:11, , 14F
找到問題點了..感激
02/09 23:11, 14F
文章代碼(AID): #1BSJsSd2 (C_and_CPP)
文章代碼(AID): #1BSJsSd2 (C_and_CPP)