初学者简易版三子棋

目录:

       一.需求分析

       二. 代码实现

需求分析:

      “三子棋”俗称“井字棋”,是我们日常生活中经常接触到的游戏,游戏上手简单,但也存在及其容易和棋的弊端。今天,我们尝试用C语言实现一款简单的三子棋游戏,对战双方设置为玩家和电脑,因此可以用两种不同的符号分别表示玩家和电脑的棋子,棋盘应为3X3的井字棋盘,由玩家先进行落子,再由电脑落子,只要满足任意一方的三颗棋子连成直线,对应方即可获得胜利,或者棋盘上已经没有可以落子的坐标,则和棋,游戏结束。

代码实现:

      在有了上述的初步了解后,我们可以进行初步的代码构建:  

      我们建立了两个源文件和一个头文件,分别用于测试,实现。在编写源文件时,直接调用我们建立的头文件即可。

首先编写我们自定义的头文件:

头文件中包含调用库函数所需要的头文件,以及宏定义,同时声明我们将会用到的函数。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>

#define ROW   3
#define COL   3

void Init(char arr[ROW][COL], int row, int col);        //初始化

void display(char arr[ROW][COL], int row, int col);     //打印

void playerMove(char arr[ROW][COL], int row, int col);  //玩家下棋

void computerMove(char arr[ROW][COL], int row, int col);  //电脑下棋

char Iswin(char arr[ROW][COL], int row, int col);  // 判断输赢

下面开始定义我们所声明的函数:

初始化棋盘:

void Init(char arr[ROW][COL], int row, int col)
{
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COL; j++)
			arr[i][j] = ' ';
	}
}

打印棋盘:

void display(char arr[ROW][COL], int row, int col)
{

	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf(" %c ", arr[i][j]);
			if (j < (col - 1))
				printf("|");
		}
		printf("\n");
		for (int j = 0; j < col; j++)
		{
			if (i < row - 1)
				printf("---");
			if (i < row - 1&&j<col-1)
				printf("|");
		}
		printf("\n");
	}
}

玩家落子:

void playerMove(char arr[ROW][COL], int row, int col)
{
	printf("玩家下棋\n");
	int x = 0, y = 0;
	while (1)
	{
		display(arr, ROW, COL);
		printf("请输入坐标:\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*';
				break;
			}
			else
			
               printf("该坐标已经被占用\n");

		}
		else
			printf("输入错误,请重新输入\n");
	}
}

电脑落子:

void computerMove(char arr[ROW][COL], int row, int col)
{

	int x = 0;
	int y = 0;
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (arr[x][y] == ' ')
			arr[x][y] = '#';
		else
			continue;

		break;
	
	}
}

判断胜利与和棋:

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

	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			if (arr[i][j] == ' ')
				return 0;
		}
	}
	return 'P';
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值