C语言小游戏 三子棋

c语言三子棋小游戏,通过二维数组构建棋盘.利用七个个函数

void Init();\\构建棋盘

void meau();\\游戏菜单
void display();\\构建棋盘
void player();\\玩家进行
void computer();\\电脑进行

char Iswin();\\判断输赢

int Isfull();\\判断棋盘是否下满

来实现逻辑.

头文件 game.h

#ifndef _GAME_H__
#define _GAME_H_
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#define LOW 3
#define ROW 3
void Init();
void meau();
void display();
void player();
void computer();
char Iswin();
int Isfull();

#endif _GAME_H_
棋盘成一个二维数组,可通过LOW,ROW修改棋盘大小.对函数进行声明.


源文件 text.c

#include "game1.h"

void meau()
{
	
	printf("***************************\n");
	printf("****1.play       2.exit****\n");
	printf("***************************\n");

}
int text(char arr[ROW][LOW])
{
	char ret = '0';
	Init(arr);
	do
	{
		display(arr);
		player(arr);
		display(arr);
		Iswin(arr);
		Isfull(arr);
		if (Iswin(arr) != ' ')
		{
			ret = Iswin(arr);
			break;
		}
		computer(arr);
	} while (ret != ' ');
	display(arr);
	if (ret == 'X')
	{
		printf("玩家赢\n");
	}
	else if (ret == '@')
	{
		printf("电脑赢\n");
	}
	if (Iswin(arr) == 'F')
	{
		printf("平局\n");
	}
}

int main()

{
	char arr[ROW][LOW] = { 0 };
	meau();
	printf("请选择:>");
	int a = 0;
	char b = '0';
	while (1)
	{
		scanf("%d", &a);
		switch (a)
		{
		case 1:text(arr);
			break;
		case 2:
			printf("游戏结束");
			return 0;
		default:
			printf("请重新选择");
			break;
		}
	}
}
主函数,函数测试部分.


源文件 game.c

#include"game1.h"
void Init(char arr[ROW][LOW])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < LOW; j++)
		{
			arr[i][j] = ' ';
		}
	}
}
void display(char arr[ROW][LOW])
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		printf("%c |%c |%c \n",arr[0][i],arr[1][i],arr[2][i]);
		if (i < 2)
		{
			printf("--|--|--");
		}
		printf("\n");
	}
}

void player(char arr[ROW][LOW]) 
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请输入坐标>");
		scanf("%d%d", &x, &y);
		x--;
		y--;
		if (arr[y][x] == ' ')
		{
			arr[y][x] = 'X';
			break;
		}
		else
			{
			printf("输入坐标无效");
				continue;
			}
		}
	}

void computer(char arr[ROW][LOW])
{
	int x = 0;
	int y = 0;
        int rand();
	int srand();
	srand((unsigned)time(NULL));
	while (1)
	{
		x = rand() % 3;
		y = rand() % 3;
		if (arr[y][x]== ' ')
		{
			arr[y][x] = '@';
			break;
		}
		else if (arr[y][x]=='X')
		continue;
	}
}

int Isfull(char arr[ROW][LOW])
{
	int i = 0;
	int j = 0;
	for (i = 0; i < ROW; i++)
	{
		for (j = 0; j < LOW; j++)
		{
			if (arr[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}

char Iswin(char arr[ROW][LOW])
{
	int ret = 0;
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if ((arr[i][0] == arr[i][1]) && (arr[i][2] == arr[i][1]))
		{
			return arr[i][0];
		}
	}
	for (i = 0; i < LOW; i++)
	{
		if ((arr[0][i] == arr[1][i]) && (arr[2][i] == arr[1][i]))
		{
			return arr[0][i];
		}
	}
	if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]))
	{
		return arr[0][0];
	}
	if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]))
	{
		return arr[2][0];
	}
	ret = Isfull(arr);
	if (ret == 1)
	{
		return 'F';
	}
	return ' ';
}
函数逻辑的实现.



结束还应对以下几点进行测试:

玩家是否能够取得胜利

电脑是否能够取得胜利

是否能够产生平局





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值