C语言数组应用实例1:三子棋

实现结果

在这里插入图片描述

实现代码

总共分为三个文件:
1、main.c

#include "game.h"
// 主函数
int main() {
	int quit = 0;
	while (!quit) {
		Menu();
		int select = 0;
		scanf("%d", &select);
		// 1 开始游戏
		// 2 退出游戏
		switch (select) {
		case 1:
			Game();
			break;
		case 2:
			printf("quit!\n");
			quit = 1;
			break;
		default:
			printf("Enter  Error! Try again!\n");
			break;

		}
	}
	printf("Bey!Bey!\n");
	system("pause");
	return 0;
}


2、game.h

#ifndef _GAME_H_
#define _GAME_H_

#include<stdio.h>
#include<time.h>
#include<windows.h>

#define ROW 3
#define COL 3
#define P_COLOR 'X'
#define C_COLOR 'O'
#define N_COLOR 'N'// 继续
#define B_COLOR 'P'//平局

#pragma warning(disable:4996)

void Menu();
void Game();

#endif

3、game.c

#include "game.h"

void Menu() {
	printf("######################\n");
	printf("## 1.play  2.Exit   ##\n");
	printf("######################\n");
	printf("Please Enter#");
}


void DrawBoard(char board[][COL],int  row, int col) {

	printf("   1| 2| 3| \n");
	printf("------------------\n");
	for (int i = 0; i < row; i++) {
		printf("%d|", i + 1);
		for (int j = 0; j < col; j++) {
			printf(" %c|",board[i][j]);
		}
		printf("\n------------------\n");

	}

}
void PlayMove(char  board[][COL], int  row, int col) {
	int x = 0;
	int y = 0;
	while (1) {
		printf("Please Enter Your Pos#");
		scanf("%d %d", &x, &y);
		//  判断玩家输入的值是否是正确的
		if (x < 1 || x > 3 || y < 1 || y > 3) {
			printf("Pos Error\n");
			continue;
		}
		// 判断玩家输入的位置是否已经有元素
		if (board[x - 1][y - 1] != ' ') {
			printf("Chress Exist! \n");
			continue;
		}
		board[x - 1][y - 1] = P_COLOR;// 注意在这里 对玩家输入的值减一
		return ;
		
	}
}

char Judge(char board[][COL], int  row, int col) {
	for (int i = 0; i < row; i++) {
		if (board[i][0] == board[i][1] && board[i][0] == board[i][2] && board[i][0] != ' ') {
			return board[i][0];
		}
	}

	for (int i = 0; i < col; i++) {
		if (board[0][i] == board[1][i] && board[0][i] == board[2][i] && board[0][i] != ' ') {
			return board[0][i];
		}
	}


	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ') {
		return board[0][0];

	}
	if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') {
		return board[1][1];

	}

	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			if (board[i][j] == ' ') {
				return N_COLOR;
			}
		}
	}
	return B_COLOR;

}
void ComputerMove(char board[][COL], int  row, int col) {
	while (1) {
		int x = rand() % row;
		int y = rand() % col;
		// 判断是否已经有棋子
		if (board[x][y] != ' ') {
			printf("Chress Exist! \n");
			continue;
		}
		board[x][y] = C_COLOR;// 注意在这里 不用减一
		break;
	}
}
void Game() {
	srand((unsigned long)time(NULL));
	char board[ROW][COL];
	memset(board,  ' ', sizeof(board)); //将ptr指向的内存块的前num个字节设置为指定值
	char win = '\0';
	do{
		DrawBoard(board, ROW, COL);//画出棋盘
		PlayMove(board, ROW, COL);// 玩家下棋
		win = Judge(board, ROW, COL);// 判断 谁赢了或者平局或者是否继续
		if (win != N_COLOR) {
			break;
		}
		ComputerMove(board, ROW, COL);// 电脑下
		win = Judge(board, ROW, COL); // 判断
		if (win != N_COLOR) {
			break;
		}

	} while (1);
	switch (win) {
	case P_COLOR:
		printf("you win!\n");
		break;
	case C_COLOR:
		printf("you lose!\n");
		break;
	case B_COLOR:
		printf("平局\n");
		break;
	default:
		break;
	}
	// 最后打印出棋盘
	DrawBoard(board, ROW, COL);
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值