滴滴滴高产博主来啦!
今天是用C语言实现三子棋小游戏,逻辑很简单而且配置比较低,就不多废话直接贴源代码啦~~
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#define ROW 3
#define COL 3
//1.用二维数组定义棋盘
char chess_board[ROW][COL];
void Init(){
//初始化棋盘
for (int row = 0; row < ROW; row++){
for (int col = 0; col < COL; col++){
chess_board[row][col] = ' ';
}
}
}
void PrintBoard(){
//打印棋盘
for (int row = 0; row < ROW; row++){
printf("|%c |%c |%c |\n", chess_board[row][0], chess_board[row][1],
chess_board[row][2]);
if (row != ROW - 1){
printf("|---|---|---|\n");
}
}
}
void PlayerMove(){
//玩家落子
while (1){
int row = -1;
int col = -1;
printf("请玩家落子(row,col)\n");
scanf("%d %d", &row, &col);
if (row < 0 || row >= ROW || col < 0 || col >= COL){
printf("输入不在范围内,请重新输入\n");
continue;
}
if (chess_board[row][col] != ' '){
printf("此位置已经有子,请重新输入\n");
continue;
}
chess_board[row][col] = 'x';
break;
}
}
void ComputerMove(){
//电脑落子
srand(time(NULL));
printf("电脑落子\n");
while (1){
int row = rand() % ROW;
int col = rand() % COL;
if (chess_board[row][col] != ' '){
continue;
}
chess_board[row][col] = 'o';
break;
}
}
int IsFull(){
for (int row = 0; row < ROW; row++){
for (int col = 0; col < COL; col++){
if (chess_board[row][col] == ' '){
return 0;
}
}
}
return 1;
}
char CheckWinner(){
//检查是否获胜
//返回空格 表示继续游戏 返回x 表示玩家获胜 返回o 表示电脑获胜
//检查行是否连成一串
for (int row = 0; row < ROW; row++){
if (chess_board[row][0] == chess_board[row][1] &&
chess_board[row][0] == chess_board[row][2] &&
chess_board[row][0] != ' '){
return chess_board[row][0];
}
}
//检查列是否连成一串
for (int col = 0; col < COL;col++){
if (chess_board[0][col] == chess_board[1][col] &&
chess_board[0][col] == chess_board[2][col] &&
chess_board[0][col] != ' '){
return chess_board[0][col];
}
}
//检查对角线是否连成一串
if (chess_board[0][0] == chess_board[1][1] &&
chess_board[0][0] == chess_board[2][2] &&
chess_board[0][0] != ' '){
return chess_board[0][0];
}
if (chess_board[0][2] == chess_board[1][1] &&
chess_board[0][2] == chess_board[2][0] &&
chess_board[0][2] != ' '){
return chess_board[0][2];
}
//检查是否和棋
if (IsFull()){
return 'q';
}
return ' ';
}
int main(void){
char winner = ' ';
//2.初始化棋盘
Init();
while (1){
//3.打印棋盘
PrintBoard();
//3.玩家落子并判断胜负
PlayerMove();
winner=CheckWinner();
if (winner != ' '){
//游戏结束
break;
}
//4.电脑落子并判断胜负
ComputerMove();
winner=CheckWinner();
if (winner != ' '){
//游戏结束
break;
}
//5.回到第三步
}
if (winner == 'x'){
printf("玩家获胜!\n");
}
if (winner == 'o'){
printf("电脑获胜!\n");
}
if (winner=='q'){
printf("和棋\n");
}
system("pause");
return 0;
}