【【C Language Rehabilitation Training-3】】

C language rehabilitation training 3

head.c

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


int main()
{
    
    
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
    
    
		menu();
		scanf("%d", &input);
		switch (input)
		{
    
    
		case 1 : game(); break;
		case 0 : printf("爱玩玩,不玩滚\n"); break;
		default: printf("请重新输入\n"); break;
		}
	} while (input);
	return 0;
}

project,c

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

//目录设计
void menu()
{
    
    
	printf("**********************\n");
	printf("**********************\n");
	printf("******1.开始游戏******\n");
	printf("******0.退出游戏******\n");
	printf("**********************\n");
	printf("**********************\n");
}



//游戏主体设计
void game()
{
    
    
	char ret = 0;
	//先设计三子棋的棋盘大小
	//行列 
	char board[hang][lie];
	//定义完成之后先初始化该数组
	chushihua(board, hang, lie);
	xianshi(board, hang, lie);
	//接下来用while循环判断两次 玩家胜利 电脑胜利 然后是胜利基础
	while (1)
	{
    
    
		wanjiadong(board, hang, lie);
		xianshi(board, hang, lie);
		ret = panduan(board, hang, lie);
		if (ret != 'j')
		{
    
    
			break;
		}
		diannaodong(board, hang, lie);
		xianshi(board, hang, lie);
		ret = panduan(board, hang, lie);
		if (ret != 'j')
		{
    
    
			break;
		}
	}
	if (ret == '*')
	{
    
    
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
    
    
		printf("电脑赢\n");
	}
	else if (ret == 'p')
	{
    
    
		printf("平局\n");
	}
}




//把三行三列全部初始化为空白
void chushihua(char board[hang][lie], int Hang, int Lie)
{
    
    
	int i = 0;
	int j = 0;
	for (i = 0;i < Hang;i++)
	{
    
    
		for (j = 0;j < Lie;j++)
		{
    
    
			board[i][j] = ' ';
		}
	}
}

//显示效果分析
//我想做到 假设1是有0是没有
// 1 | 0 | 0 (0行)
//---|---|---
// 1 | 0 | 0 
//---|---|---
// 1 | 0 | 0 
//效果是每输入一行数字就再补一行横线
//显示模块
void xianshi(char board[hang][lie], int Hang, int Lie)
{
    
    
	int i = 0;
	for (i = 0;i < hang;i++)
	{
    
    
		int j = 0;
		for (j = 0;j < lie;j++)
		{
    
    
			printf(" %c ", board[i][j]);
			if (j < lie - 1)
			{
    
    
				printf("|");
			}
		}
		printf("\n");
		if (i < hang - 1)
		{
    
    
			for (j = 0; j < lie; j++)
			{
    
    
				printf("---");
				if (j < lie - 1)

					printf("|");
			}
			printf("\n");

			//同理对于上面以列为标准附加”---"
		}

	}
}




//玩家动作模块
void wanjiadong(char board[hang][lie], int Hang, int Lie)
{
    
    
	int x = 0;
	int y = 0;
	while (1)
	{
    
    
		printf("请输入想要输入的坐标;\n");
		scanf("%d""%d", &x, &y);
		if (x >= 1 && x <= Hang && y >= 1 && y <= Lie)
		{
    
    
			if (board[x - 1][y - 1] == ' ')
			{
    
    
				board[x - 1][y - 1] = '*';
				break;
			}
			else
			{
    
    
				printf("该坐标被占用\n");
			}
		}
		else
		{
    
    
			printf("坐标非法,请重新输入\n");
		}
	}
}





//电脑动模块
void diannaodong(char board[hang][lie], int Hang, int Lie)
{
    
    
	//电脑动需要生成一个随机数
	int x = 0;
	int y = 0;
	printf("电脑开始动了\n");
	while (1)
	{
    
    
		x = rand() % Hang;
		y = rand() % Lie;
		if (board[x][y] == ' ')
		{
    
    
			board[x][y] = '#';
			break;
		}
	}
}







//判断模块写好就行了
char panduan(char board[hang][lie], int Hang, int Lie)
{
    
    
	/// 玩家赢  *电脑赢   #平局  (p)  pingju 继续 (j) jixu
	// sorry 上面这个不太好判断
	//我无法直接判断是电脑赢还是我自己赢还需要转,直接用# *
	int i = 0;
	//同行同列 对角线算赢
	for (i = 0; i < hang; i++)
	{
    
    
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
		{
    
    
			return board[i][0];//行
		}
	}
	for (i = 0; i < lie; i++)
	{
    
    
		if (board[0][i] == board[2][i] && board[2][i] == board[1][i] && board[1][i] != ' ')
		{
    
    
			return board[0][i];//列
		}
	}
	if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
	{
    
    
		return board[1][1];//左对角线
	}
	if (board[0][2] == board[2][0] && board[2][0] == board[1][1] && board[1][1] != ' ')
	{
    
    
		return board[1][1];//右对角线
	}
	if (1 == shibushiman(board, Hang, Lie))
	{
    
    
		return 'p';
	}
	return 'j';
}






int shibushiman(char board[hang][lie], int Hang, int Lie)
{
    
    
	int i = 0;
	int j = 0;
	for (i = 0; i < hang; i++)
	{
    
    
		for (j = 0; j < lie; j++)
		{
    
    
			if (board[i][j] == ' ')
			{
    
    
				return 0;
			}
		}
	}
	return 1;
}

project.h

#pragma once
#define hang 3
#define lie  3
void menu();
void game();
void chushihua(char board[hang][lie], int Hang, int Lie);
void xianshi(char board[hang][lie], int Hang, int Lie);
void wanjiadong(char board[hang][lie], int Hang, int Lie);
void diannaodong(char board[hang][lie], int Hang, int Lie);
char panduan(char board[hang][lie], int Hang, int Lie);
int shibushiman(char board[hang][lie], int Hang, int Lie);

Guess you like

Origin blog.csdn.net/weixin_50965981/article/details/132779227