c语言 数组基础
#include#include #include #include #define ROW 3 //宏定义 行为3 #define COL 3 //宏定义 列为3 #define PLAYER 'o' //玩家棋子用'o'表示 #define COMPUTER 'x' //电脑棋子用'x'表示 //判断棋盘是否下满 bool ChessBoardFull(char chess_board[ROW][COL]) { //遍历数组,判断数组中是否有元素值等于' ' for (int i = 0; i < ROW; ++i) { for (int j = 0; j < COL; ++j) { if (chess_board[i][j] == ' ') return false; } } return true; } char CheckResult(char chess_board[ROW][COL]) { //返回'o',玩家赢;返回'x',电脑赢;返回'h',和棋;返回'c',继续游戏 //判断行 for (int i = 0; i < ROW; ++i) { //判断每行元素是否相等,同时元素不能为' ' if (chess_board[i][0] != ' ' && chess_board[i][0] == chess_board[i][1] && chess_board[i][0] == chess_board[i][2]) return chess_board[i][0]; } //判断列 for (int j = 0; j < COL; ++j) { //判断每列元素是否相等,同时元素不能为' ' if (chess_board[0][j] != ' ' && chess_board[0][j] == chess_board[1][j] && chess_board[0][j] == chess_board[2][j]) return chess_board[0][j]; } //判断对角线 if (chess_board[1][1] != ' ' && chess_board[1][1] == chess_board[0][0] && chess_board[1][1] == chess_board[2][2]) return chess_board[1][1]; if (chess_board[1][1] != ' ' && chess_board[1][1] == chess_board[0][2] && chess_board[1][1] == chess_board[2][0]) return chess_board[1][1]; if (ChessBoardFull(chess_board)) { return 'h'; } return 'c'; } void ComputerMove(char chess_board[ROW][COL]) { int x, y; //随机数函数 srand(time(0)); while (1) { //电脑随机产生俩个数 int x = rand() % ROW; int y = rand() % COL; if (chess_board[x][y] == ' ') { chess_board[x][y] = COMPUTER; break; } } } void PlayerMove(char chess_board[ROW][COL]) { printf("玩下下棋.n"); printf("请输入你要下的坐标:"); int x, y; while (1) { scanf_s("%d %d", &x, &y); //判断坐标有效性 if (x >= ROW || x < 0 || y >= COL || y < 0) { printf("输入错误,请重新输入:"); continue; } if (chess_board[x][y] == ' ') { chess_board[x][y] = PLAYER; break; } } } void DisplayChessBoard(char chess_board[ROW][COL]) { for (int i = 0; i < ROW; ++i) { printf("| %c | %c | %c |n", chess_board[i][0],chess_board[i][1],chess_board[i][2]); if (i < ROW - 1) printf(" --- --- ---n"); } } void InitChessBoard(char chess_board[ROW][COL]) { for (int i = 0; i < ROW; ++i) { for (int j = 0; j < COL; ++j) { chess_board[i][j] = ' '; } } } void StartGame() { //定义棋盘 char chess_board[ROW][COL]; //初始化棋盘 InitChessBoard(chess_board); //进入游戏 char winner; while (1) { //显示棋盘 DisplayChessBoard(chess_board); //玩家下棋 PlayerMove(chess_board); //判断结果 winner=CheckResult(chess_board); if (winner != 'c') break; //电脑下棋 ComputerMove(chess_board); //判断结果 winner = CheckResult(chess_board); if (winner != 'c') break; } //显示结果 DisplayChessBoard(chess_board); if (winner == 'h') { printf("和棋!n"); } else if (winner == 'o') { printf("玩家赢!n"); } else if (winner == 'x') { printf("很遗憾,你输了!n"); } } void menu() { printf("*********************************************n"); printf("*****************简易三子棋******************n"); printf("** [1].Play **n"); printf("** [0].Exit **n"); printf("*********************************************n"); } int main() { //system函数 用来设置美化代码框 system("title 三子棋"); system("mode con cols=46 lines=40"); system("color F3"); int select=1; menu(); while (select) { printf("请选择:>"); scanf_s("%d", &select); switch (select) { case 1: StartGame(); menu(); break; case 0: printf("退出成功!"); break; default: printf("输入错误,请重新输入n"); break; } } return 0; }



