Progremmer Log3[三子棋游戏.初版]_18.10.28

本文分享了一个使用C语言实现的简单三子棋小游戏源代码。游戏包括玩家与电脑对战模式,通过二维数组定义棋盘,实现玩家与电脑交替下棋的逻辑,并检查胜利条件。代码详细展示了游戏的初始化、打印棋盘、玩家和电脑落子、检查是否平局及获胜等功能。

滴滴滴高产博主来啦!

今天是用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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值