新手小白学习计算机的第十二天(老王专场)

📅 2026/8/22 9:48:46
新手小白学习计算机的第十二天(老王专场)
#define_CRT_SECURE_NO_WARNINGS#includestdio.h#includestdlib.h// 宏定义棋盘尺寸统一管理修改方便#defineROW15#defineCOL15// 函数声明voidinitBoard(charboard[ROW][COL]);// 初始化棋盘voiddrawBoard(charboard[ROW][COL]);// 绘制棋盘intputChess(charboard[ROW][COL],intx,inty,charch);// 落子intisWin(charboard[ROW][COL],intx,inty,charch);// 判断胜利intisDraw(charboard[ROW][COL]);// 判断平局// 棋盘初始化函数voidinitBoard(charboard[ROW][COL]){for(inti0;iROW;i){for(intj0;jCOL;j){board[i][j] ;// 全部置空}}}// 棋盘绘制函数voiddrawBoard(charboard[ROW][COL]){// 打印顶部坐标printf( );for(inti0;iCOL;i){printf(%2d,i);}printf(\n);// 打印棋盘主体for(inti0;iROW;i){printf(%2d ,i);// 打印左侧坐标for(intj0;jCOL;j){printf(%c,board[i][j]);if(jCOL-1){printf(|);}}printf(\n);// 打印分割线if(iROW-1){printf( );for(intk0;kCOL;k){printf(--);if(kCOL-1){printf();}}printf(\n);}}}// 落子函数成功返回1失败返回0intputChess(charboard[ROW][COL],intx,inty,charch){// 坐标越界判断if(x0||xROW||y0||yCOL){return0;// 落子失败}// 判断位置是否已有棋子if(board[x][y]! ){return0;// 落子失败}// 合法落子更新棋盘board[x][y]ch;return1;// 落子成功}// 判断胜负四大方向检测五子连珠intisWin(charboard[ROW][COL],intx,inty,charch){intcount1;// 当前棋子本身为1// 1. 水平方向 左右判断for(intiy-1;i0;i--){if(board[x][i]ch)count;elsebreak;}for(intiy1;iCOL;i){if(board[x][i]ch)count;elsebreak;}if(count5)return1;// 2. 垂直方向 上下判断count1;for(intix-1;i0;i--){if(board[i][y]ch)count;elsebreak;}for(intix1;iROW;i){if(board[i][y]ch)count;elsebreak;}if(count5)return1;// 3. 左斜方向 左上-右下count1;for(intix-1,jy-1;i0j0;i--,j--){if(board[i][j]ch)count;elsebreak;}for(intix1,jy1;iROWjCOL;i,j){if(board[i][j]ch)count;elsebreak;}if(count5)return1;// 4. 右斜方向 右上-左下count1;for(intix-1,jy1;i0jCOL;i--,j){if(board[i][j]ch)count;elsebreak;}for(intix1,jy-1;iROWj0;i,j--){if(board[i][j]ch)count;elsebreak;}if(count5)return1;// 无五子连珠继续游戏return0;}// 判断平局intisDraw(charboard[ROW][COL]){for(inti0;iROW;i){for(intj0;jCOL;j){if(board[i][j] ){return0;// 还有空位不是平局}}}return1;// 棋盘已满平局}// 主函数游戏逻辑整体调度intmain(){charboard[ROW][COL];intx,y;intret;intturn0;// 0:玩家1黑子 1:玩家2白子// 初始化棋盘initBoard(board);while(1){system(cls);// 清屏刷新界面drawBoard(board);// 切换玩家if(turn0){printf(【玩家1 黑子】请输入落子坐标(行 列));scanf(%d %d,x,y);retputChess(board,x,y,);// 落子失败重新输入while(ret0){printf(坐标非法或已有棋子请重新输入);scanf(%d %d,x,y);retputChess(board,x,y,);}// 判断是否获胜if(isWin(board,x,y,)){system(cls);drawBoard(board);printf( 玩家1黑子获胜游戏结束\n);break;}}else{printf(【玩家2 白子】请输入落子坐标(行 列));scanf(%d %d,x,y);retputChess(board,x,y,#);while(ret0){printf(坐标非法或已有棋子请重新输入);scanf(%d %d,x,y);retputChess(board,x,y,#);}if(isWin(board,x,y,#)){system(cls);drawBoard(board);printf( 玩家2白子获胜游戏结束\n);break;}}// 判断平局if(isDraw(board)){system(cls);drawBoard(board);printf( 棋盘已满平局游戏结束\n);break;}// 切换回合turn!turn;}return0;}