C語言編寫五子棋遊戲
阿新 • • 發佈:2020-02-06
本文例項為大家分享了C語言編寫五子棋遊戲的具體程式碼,供大家參考,具體內容如下
一、構建棋盤
首先可以用一個二維陣列來構建棋盤,下標表示位置,內容表示黑子白子或者空位。當陣列內容為1時,該位置為白字,當陣列為0時,該位置為白子,空位輸出+
int w[11][11],flag = 0; int a,b; for (int k = 0; k < 11; k++) printf("第%d列\t",k); printf("\n"); for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (w[i][j] == 0) printf("黑\t"); else if (w[i][j] == 1) printf("白\t"); else printf("+\t"); } printf("第%d行\n\n",i); }
二、判斷位置超範圍與錯誤輸入
當輸入的棋子座標超出範圍或者該位置已經存在棋子,則再次輸入棋子座標。其中flag作為標誌作為判別黑手白手的標誌。
if (flag == 0) { printf("黑色下棋\n"); scanf("%d %d",&a,&b); while (a < 0 || a>10 || b < 0 || b>10) { printf("此位置超出範圍,請重新輸入:"); scanf("%d %d",&b); } while (w[a][b] == 0 || w[a][b] == 1) { printf("此位置已有棋子,請重新輸入:"); scanf("%d %d",&b); } flag = 1; w[a][b] = 0; } else { printf("白色下棋\n"); scanf("%d %d",&b); } while (w[a][b] == 0 || w[a][b] == 1) { printf("此位置已有棋子,請重新輸入:"); scanf("%d %d",&b); }
三、判斷勝負
在五子棋中,出現五個棋子排成一排或者一列或者斜排即可判為勝出。每當落下一個棋子,對該棋子前後上下斜排五個棋子進行判別,超過五個連續的一樣顏色的棋子則勝出。
int A = 1,B = 1,jieguo = 0,C = 1,D = 1; int x = 1,y = 1,m = 1,n = 1; if (w[a][b] == 1) { for (int i = 1; i < 5; i++) { if (w[a][b + i] == 1) A++; else break; } for (int i = 1; i < 5; i++) { if (w[a][b - i] == 1) A++; else break; } for (int i = 1; i < 5; i++) { if (w[a+i][b] == 1) C++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b] == 1) C++; else break; } if (A > 4 || C > 4) jieguo = 1;//白棋勝利標誌 else { for (int i = 1; i < 5; i++) { if (w[a+i][b + i] == 1) x++; else break; } for (int i = 1; i < 5; i++) { if (w[a-i][b - i] == 1) x++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b-i] == 1) y++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b+i] == 1) y++; else break; } if (x > 4 || y > 4) jieguo = 1; } } if (w[a][b] == 0) { for (int i = 1; i < 5; i++) { if (w[a][b + i] == 0) B++; else break; } for (int i = 1; i < 5; i++) { if (w[a][b - i] == 0) B++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b] == 0) D++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b] == 0) D++; else break; } if (B > 4 || D > 4) jieguo = 2;//黑棋勝利標誌 else { for (int i = 1; i < 5; i++) { if (w[a + i][b + i] == 0) m++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b - i] == 0) m++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b - i] == 0) n++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b + i] == 0) n++; else break; } if (m > 4 || n > 4) jieguo = 2; } }
程式完成
四、演示結果
五、原始碼
int main() { int w[11][11],b; while (1) { if (flag == 0) { printf("黑色下棋\n"); scanf("%d %d",&b); } flag = 0; w[a][b] = 1; } int A = 1,n = 1; if (w[a][b] == 1) { for (int i = 1; i < 5; i++) { if (w[a][b + i] == 1) A++; else break; } for (int i = 1; i < 5; i++) { if (w[a][b - i] == 1) A++; else break; } for (int i = 1; i < 5; i++) { if (w[a+i][b] == 1) C++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b] == 1) C++; else break; } if (A > 4 || C > 4) jieguo = 1;//白棋勝利標誌 else { for (int i = 1; i < 5; i++) { if (w[a+i][b + i] == 1) x++; else break; } for (int i = 1; i < 5; i++) { if (w[a-i][b - i] == 1) x++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b-i] == 1) y++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b+i] == 1) y++; else break; } if (x > 4 || y > 4) jieguo = 1; } } if (w[a][b] == 0) { for (int i = 1; i < 5; i++) { if (w[a][b + i] == 0) B++; else break; } for (int i = 1; i < 5; i++) { if (w[a][b - i] == 0) B++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b] == 0) D++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b] == 0) D++; else break; } if (B > 4 || D > 4) jieguo = 2;//黑棋勝利標誌 else { for (int i = 1; i < 5; i++) { if (w[a + i][b + i] == 0) m++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b - i] == 0) m++; else break; } for (int i = 1; i < 5; i++) { if (w[a + i][b - i] == 0) n++; else break; } for (int i = 1; i < 5; i++) { if (w[a - i][b + i] == 0) n++; else break; } if (m > 4 || n > 4) jieguo = 2; } } for (int k = 0; k < 11; k++) printf("第%d列\t",i); } if (jieguo == 1) { printf("白棋勝利"); break; } if (jieguo == 2) { printf("黑棋勝利"); break; } } return 0; }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。