C语言入门小游戏——三子棋

上面这个就是我画的一个简单的三子棋   羞涩.jpg

三子棋大家应该都玩过,这可是童年呀。

下面就让我一起来用计算机系学生的方式去实现它。嘿嘿~      滑稽.jpg

正题:

工具:VS2015

一般写这种程序的时候,需要创建一个项目,我的项目名称叫 Three_game

分别创建一个头文件     game head.h

两个源文件                    game body.c

                                      game test.c

一、头文件顾名思义,就是把你在这个游戏中所引用的函数名等包括进去,类似    stdio.h  

只不过这个是咱们自己编写的头文件

     game head.h

#ifndef __GAME_H__
#define __GAME_H__

#include<stdio.h>
#include<time.h>

#define ROW 3//定义棋盘的行
#define COL 3//定义棋盘的列

void ResetBoard(char board[ROW][COL], int row, int col);//初始化棋盘
void PrintBoard(char board[ROW][COL], int row, int col);//打印棋盘
void GetPlayerAdd(char board[ROW][COL, int row, int col);//玩家走
void GetComputerAdd(char board[ROW][COL], int row, int col);//电脑走
char JudgeWin(char board[ROW][COL], int row, int col);//判断输赢
void JudgeWinner(char win);//输出输赢结果

#endif //__GAME_H__

函数的具体作用做了批注

二、在game test.c文件中写出游戏大体流程,之后逐个功能进行实现,从而使游戏一步步完善。

   game test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game head.h"

void menu()//游戏菜单
{

	printf("******************************************\n");
	printf("*********  1.start    0.quit    **********\n");
	printf("******************************************\n");

}
void game()//游戏流程
{
	char board[ROW][COL] = {0};
	char win;
	ResetBoard(board, ROW, COL);//重置棋盘
	PrintBoard(board, ROW, COL);//打印棋盘
	srand((unsigned int)time(NULL));
	while (1)
	{
		GetPlayerAdd(board);//玩家下棋位置获取
		PrintBoard(board, ROW, COL);
		win = JudgeWin(board, ROW, COL);
		if (win != ' ')
		{
			JudgeWinner(win);
			break;
		}
		GetComputerAdd(board, ROW, COL);//电脑下棋位置获取
		PrintBoard(board, ROW, COL);
		win = JudgeWin(board, ROW, COL);
		if (win != ' ')
		{
			JudgeWinner(win);
			break;
		}
	}
}
void test()//游戏提示
{
	int input = 0;
	do
	{
		menu();
		printf("请选择你要进行的操作:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("\n游戏载入中.....\n\n");
			game();
			break;
		case 0:
			printf("\n游戏已登出.....\n\n");
			break;
		default:
			printf("\n无效操作\n\n");
			break;
		}
	} while (input);
}

int main()
{
	test();
	return 0;
}

三、在game body.c中实现游戏中所需的功能。

  game body.c  

#define _CRT_SECURE_NO_WARNINGS 1

#include"game head.h"

void ResetBoard(char board[ROW][COL], int row, int col)//初始化棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
		for (j = 0; j < col; j++)
		{
			board[i][j] = ' ';
		}
	}
}

void PrintBoard(char board[ROW][COL], int row, int col)//打印棋盘
{
	int i;
	for (int i = 0; i < row; i++)
	{
		printf("  %c | %c | %c  \n", board[i][0], board[i][1], board[i][2]);
		if (i != row - 1)
			printf(" ---|---|--- \n");
	}
}

void GetPlayerAdd(char board[ROW][COL], int row, int col)//玩家走
{
	int x = 0,y = 0;
	while (1)
	{ 
	printf("请输入你想下棋的位置:( X , Y )");
	printf("X=");
	scanf("%d",&x);
	printf("Y=");
	scanf("%d",&y);
	if (x > 0 && x <= ROW&& y > 0 && y <= COL) 
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = 'o';
				break;
			}
			else
			{
				printf("对不起,已有棋子\n");
			}
		}
		else 
			printf("无效坐标,请重新输入。\n");
	}
}
void GetComputerAdd(char board[ROW][COL], int row, int col)//电脑走
{
	printf("电脑走>>>\n");
	int x, y;
	while (1)
	{
		x = rand() % row;
		y = rand() % col;
		if (x >= 0 && x < row&&y >= 0 && y < col)
		{
			if (board[x][y] == ' ')
					{
						board[x][y] = 'X';
						break;
					}
		}	
	}
}

void JudgeWin(char board[ROW][COL], int row, int col)//判断输赢
{
	int i = 0;
	//行相等
	for (int i = 0; i < row; i++) {
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
			return board[i][0];
		}
	}
	//列相等
	for (int j = 0; j < col; j++) {
		if (board[0][j] == board[1][j] && board[1][j] == board[2][j]) {
			return board[1][j];
		}
	}
	//斜相等
	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[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ') {
		return board[1][1];
	}
	//棋盘满(平局)
	for (int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			if (board[i][j] == ' ')
				return ' ';
		}
	}
	return 'p';
}

void JudgeWinner(char win)//打印输赢结果
{
	if (win == 'o')
		printf("玩家赢!\n");
	else if (win == 'X')
		printf("电脑赢!\n");
	else 
		printf("平局!\n");
}

这个游戏中所用到的C语言知识都比较简单,编写的重点在于对整个游戏过程的理解,以及在编写过程中自己的细心程度

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值