第一次编一个简单的程序(三子棋),纪念一下

game.h: 

#pragma once
//声明参数
#include<stdio.h>//头文件的包含
#include<stdlib.h>
#include<time.h>
#define row 3
#define col 3


//声明函数
void initable(char table[row][col], int Row, int Col);//初始化棋盘
void displayboard(char table[row][col],int Row,int Col);//打印棋盘
void man_play(char table[row][col], int Row, int Col);//玩家下
void computer_play(char table[row][col], int Row, int Col);//电脑下
int whowin(char table[row][col], int Row, int Col);//判断输赢

game.c:

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void initable(char table[row][col], int Row, int Col)//初始化棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0;i < Row;i++)
	{
		for (j = 0;j < Col;j++)
		{
			table[i][j] = ' ';
		}
	}
}
void displayboard(char table[row][col], int Row, int Col)//打印棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0;i < Row;i++)
	{
		for (j = 0;j < Col;j++)
		{
			printf(" %c ", table[i][j]);
			if (j < Col - 1)
			{
				printf("|");
			}
		}
		printf("\n");
		for (j = 0;j < Col;j++)
		{
			if (i < Row - 1)
			{
				printf("---");
			}
			
			if (j < Col - 1 && i < Row - 1)
			{
				printf("|");
			}
		}
		printf("\n");
	}
}
void man_play(char table[row][col], int Row, int Col)
{
	int x = 0;
	int y = 0;
	printf("玩家请输入\n");
	printf("-->");
	scanf("%d %d", &x, &y);
	if (x > 0 && x < row + 1 && y>0 && y < col + 1 && table[x-1][y-1]==' ')
	{
		
		table[x - 1][y - 1] = '*';

	}
	else
	{
		printf("输入不符合规范\n");
	}

}
void computer_play(char table[row][col], int Row, int Col)
{
	srand((unsigned)time(0));
	
	int flag = 1;
	while (flag)
	{
		int x = rand() % 3;
		int y = rand() % 3;
		if (x >= 0 && x < row  && y>=0 && y < col  && table[x][y] == ' ')
		{
			table[x][y] = '#';
			flag = 0;
		}
		else
		{
			flag = 1;
		}
	}
	
}
int whowin(char table[row][col], int Row, int Col)
{
	int i = 0;
	int j = 0;
	int wan = 0;
	int dian = 0;
	for(i=0;i<Row;i++)
	{ 
		wan = 0;
		dian = 0;
		for (j = 0;j < Col-1;j++)
		{
			if (table[i][j]==table[i][j+1] &&table[i][j] == '*')
			{
				wan++;
			}
			if (table[i][j] == table[i][j + 1] &&table[i][j] == '#')
			{
				dian++;
			}
		}
		
	}

	for (j = 0;j < Col;j++)
	{
		wan = 0;
		dian = 0;
		for (i = 0;i < Row-1;i++)
		{
			if (table[i][j] == table[i+1][j] &&table[i][j] == '*')
			{
				wan++;
			}
			if (table[i][j] == table[i+1][j] &&table[i][j] == '#')
			{
				dian++;
			}
		}

	}
	i = 0;
	j = 0;
	if (table[i][j] == table[i + 1][j + 1] && table[i + 1][j + 1] == table[i + 2][j + 2] && table[i][j] == '*')
	{
		wan = 2;
	}
	if (table[i][j] == table[i + 1][j + 1] && table[i + 1][j + 1] == table[i + 2][j + 2] && table[i][j] == '#')
	{
		dian = 2;
	}
	if (wan == 2)
	{
		printf("玩家赢\n");
		return 1;
	}
	if (dian == 2)
	{
		printf("电脑赢\n");
		return 2;
	}
	int p = 0;//判断是否平局的工具
	for (i = 0;i < Row;i++)
	{
		for (j = 0;j < Col;j++)
		{
			if (table[i][j] != ' ')
			{
				p++;
			}
		}
	}
	if(p==9)
	{
		printf("平局\n");
		return 5;
	}
}

text.c:

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void menu()
{
	printf("*************************************\n");
	printf("**********     0.exit     ***********\n");
	printf("**********     1.play     ***********\n");
	printf("*************************************\n");
}
void game()
{
	char table[row][col];//定义函数
	initable(table, row, col);//初始化棋盘
	displayboard(table, row, col);//打印棋盘
	while (1)
	{

		man_play(table, row, col);	 //玩家玩
		if (whowin(table, row, col) == 1)//()中的whowin(table, row, col)会执行一次
		{
			displayboard(table, row, col);//打印棋盘
			break;
		}
		if (whowin(table, row, col) == 5)
		{
			displayboard(table, row, col);//打印棋盘
			break;
		}
		computer_play(table, row, col);	//电脑玩
		displayboard(table, row, col);//打印棋盘
		if (whowin(table, row, col) == 2 )//()中的whowin(table, row, col)会执行一次
		{
			break;
		}
		if (whowin(table, row, col) == 5)
		{
			displayboard(table, row, col);//打印棋盘
			break;
		}
	}
}
int main()
{
	
	int input = 0;
	
	do 
	{
		menu();
		scanf("%d", &input);

		switch (input)
		{
		case 0:
			printf("退出游戏\n");
				break;
		case 1:
			game();
				break;
		default:
			printf("搞错了重来\n");
			break;
		}
	} 
	while (input);

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值