C语言综合应用实例(1)

“你处理情绪的速度,就是你迈向成功的速度。”

C语言是一门面向过程、抽象化的通用程序设计语言,广泛应用于底层开发。之前在之后上看过一段话“C语言水平决定你C++水平的上限”。

今天第一次分享,争取每天敲代码,分享在这里。

相比于C语言书上,利用C语言解决数学问题的例子太多了,真正让人们感兴趣的,我想就是设计一些有意思的程序。这里提供一个“井字棋”小程序。可以作为在进入学习指针部分之前的一个综合应用。

井字棋的规则可自行百度哈!

主程序:

#include"game.h"



int main()
{
	void menu();
	void game();
	int input;
	do
	{
		menu();
		printf("请选择:\t");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("欢迎来到三子棋游戏\n");
			game();
			break;
		case 0:
			printf("退出!");
			break;
		default:
			printf("输入有误,请重新输入!");
			break;/*break结束switch*/
		}
	} while (input);
		return 0;
}

void menu()
{
	printf("************************\n");
	printf("******1.Play Games******\n");
	printf("******0.Exit************\n");
	printf("************************\n");
}

void game()
{
	srand((unsigned)time(NULL)); //产生一个种子,需要调用两个库函数time.h和stdlib.h
	char board [ROW][COL];
	//二维数组的初始化问题
	InitBoard(board, ROW, COL);
	
	
	//二维数组棋盘的实现
	DisplayBoard(board, ROW, COL);
	
	char ret=0;
	//玩家先手下棋
	do
	{
		PlayerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret=IsWin(board, ROW, COL);
		//如果玩家赢,ret为*;如果电脑赢,ret为#;如果平局,ret为Q;都一定要跳出循环!                        
        if (ret != 'C')
			break;

		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret=IsWin(board, ROW, COL);
		if (ret != 'C')
			break;
	} while(1);
	
	
	
	//判断因为什么跳出了循环?是玩家赢?是平局?还是电脑赢?
	switch (ret)
	{
	case '*':
		printf("玩家赢!\n");
		break;
	case '#':
		printf("电脑赢!\n");
		break;
	default:
		printf("平局!\n");
		break;
	}
	DisplayBoard(board, ROW, COL);
}

 接下来把game.h的头文件给出:

#pragma once
#include
#include 
#include 

#define ROW 3
#define COL 3



void InitBoard(char board[ROW][COL],int row, int col);

void DisplayBoard(char board[ROW][COL], int row, int col);

void PlayerMove(char board[ROW][COL], int row,int col);

void ComputerMove(char board[ROW][COL], int row, int col);

char IsWin(char board[ROW][COL], int row, int col);

 真正的游戏程序运行段:

#include"game.h"

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

}

void DisplayBoard(char board[ROW][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			printf(" %c ",board[i][j]);
			if (j < col - 1)
				printf("|");
		}
		printf("\n");
		if (i < row - 1)
		{
			for (int j = 0; j < col; j++)
			{
				printf("---");
				if (j < col - 1)
					printf("|");
			}
			printf("\n");
		}
	}

}

void PlayerMove(char board[ROW][COL], int row,int col)
{
	int x, y;
	do
	{
		printf("玩家走,请输入坐标:\n");
		scanf("%d %d", &x, &y);
		if (x < row+1 && y < col+1 && x>0 && y>0)
		{
			if(board[x - 1][y - 1] != ' ')
			printf("该处已被占用,请重新输入!\n");
			else
			{
				board[x - 1][y - 1] = '*';
				break;
			}
		}
		else
			printf("输入有误!请重新输入!\n");
	} while (1);
	
}

void ComputerMove(char board[ROW][COL], int row, int col)
{
	printf("电脑下!\n");
	while (1)
	{
		int x = rand()%row;
		int y = rand()%col;
		if (board[x][y] == ' ')
		{
			board[x][y] = '#';
			break;
		}
		else
			continue;
	}	
}


//判断平局和继续,是IsWin的调用函数
char IsDraw(char board[ROW][COL], int row, int col)
{
	for(int i=0;i

不过,这个程序只能是电脑玩家【简单版】,因为电脑下棋的逻辑完全的随机的,后续如果有时间,会在推出一个电脑玩家【进阶版】。

互相讨论,共同进步!

你可能感兴趣的:(C语言学习,c语言,r语言,c++)