c语言 数组基础
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<stdbool.h>
#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;
}