C/关于N子棋小游戏的创建

2023-10-16 08:26:13 浏览数 (2)

本文是用C语言写的N子棋小游戏

头文件:

代码语言:javascript复制
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

#define H 3//行
#define L 3//列

void blank_borad(char board[H][L], int h, int l);//初始化棋盘
void print(char board[H][L], int h, int l);//打印棋局
void play_game(char board[H][L], int h, int l);//玩家下棋
void computer_game(char board[H][L], int h, int l);//电脑下棋
char is_win(char board[H][L], int h, int l);//判断输赢

函数功能的实现:

代码语言:javascript复制
#include"game.h"

char is_win(char board[H][L], int h, int l)//判断输赢
{
/*	 |   |
  ---|---|---
	 |   |
  ---|---|---
	 |   |		*/

	int jade = 0;

	int i = 0;
	int j = 0;

	//行 -> win
	for (j = 0;j < h;j  )
	{
		jade = 0;
		for (i = 1;i < l;i  )
		{
			if (board[j][0] == board[j][i]
				&& board[j][0] != ' ')
			{
				jade  ;
			}
		}

		if (jade == l - 1)
		{
			return board[j][0];
		}
	}


	//列 -> win
	for (i = 0;i < l;i  )
	{
		jade = 0;
		for (j = 1;j < h;j  )
		{

			if (board[0][i] == board[j][i]
				&& board[0][i] != ' ')
			{
				jade  ;
			}
		}

		if (jade == h - 1)
		{
			return board[0][i];
		}
	}


	//左对角线
	jade = 0;
	for (i=1,j=1;(i<h)&&(j<l);i  ,j  )
	{
		if ((board[0][0] == board[i][j])
			&& (board[0][0] != ' '))
		{
			jade  ;
		}
	}
	if (jade == h-1 || jade==l-1)
	{
		return board[0][0];
	}

	//右对角线
	jade = 0;
	for (i=1,j=l-2;(i < h) && (j>=0);i  ,j--)
	{
		if ((board[0][l-1] == board[i][j])
			&& (board[0][l-1] != ' '))
		{
			jade  ;
		}
	}
	if (jade == h-1 || jade == l-1)
	{
		return board[0][l-1];
	}


	//平局
	jade = 0;
	for (j = 0;j < h;j  )
	{
		for (i = 0;i < l;i  )
		{
			if (board[j][i] != ' ')
			{
				jade  ;
			}
		}
	}
	if (jade==l*h)
	{
		return 'Z';
	}


}

void computer_game(char board[H][L], int h, int l)//电脑下棋
{
	int i = 0;
	int j = 0;

	printf("电脑下棋:n");
	while (1)
	{
		i = rand() % h;
		j = rand() % l;

		if (board[i][j] == ' ')
		{
			board[i][j] = '#';
			break;
		}
	}

}

void play_game(char board[H][L], int h, int l)//玩家下棋
{
	int i = 0;
	int j = 0;
	printf("玩家下棋,请输入选择下的棋的坐标:");
	while (1)
	{
		scanf("%d %d", &i, &j);
		//玩家不知道下标从0开始
		i -= 1;
		j -= 1;
		if (board[i][j] == ' ')
		{
			board[i][j] = '*';
			break;
		}
		else
		{
			printf("输入的该坐标非法,请重新输入:");
		}
	}


}

void print(char board[H][L], int h, int l)//打印棋局
{
	/*   |   |
	  ---|---|---
		 |   |   
	  ---|---|---
	     |   |		*/
	
	int i = 0;
	int j = 0;
	for (j = 0;j < h;j  )
	{
		for (i = 0;i < l-1;i  )
		{
			printf(" %c |", board[j][i]);

			if (i==l-2)
			{
				printf(" %c n", board[j][i   1]);
			}
		}

		if (j < h-1)
		{
			for (i = 0;i < l - 1;i  )
			{
				printf("---|");

				if (i == l - 2)
				{
					printf("---n");
				}
			}
		}
	}

}

void blank_borad(char board[H][L], int h, int l)//初始化棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0;i < h;i  )
	{
		for (j = 0;j < l;j  )
		{
			board[i][j] = ' ';
		}
	}
}

主函数代码:

代码语言:javascript复制
#include"game.h"

void menu1();//选择界面
void test();//选择函数
void Game();//三子棋游戏运行函数
void menu2();//再次选择玩游戏函数

void Game()
{
	srand((unsigned int)time(NULL));
	system("cls");
	printf("ttt欢迎来到三子棋游戏!!!nnn");

	char win;

	char board[H][L];
	//初始化棋盘
	blank_borad(board, H, L);
	//打印空白棋局
	print(board, H, L);

	while (1)
	{
		//玩家下棋
		play_game(board, H, L);
		//打印棋局
		print(board, H, L);
		//判断输赢
		win = is_win(board, H, L);
		if (win == '*')
		{
			printf("玩家胜利");
			break;
		}
		else if (win == '#')
		{
			printf("电脑胜利");
			break;
		}
		else if (win == 'Z')
		{
			printf("平局");
			break;
		}

		//电脑下棋
		computer_game(board, H, L);
		//打印棋局
		print(board, H, L);
		//判断输赢
		win = is_win(board, H, L);
		if (win == '*')
		{
			printf("玩家胜利");
			break;
		}
		else if (win == '#')
		{
			printf("电脑胜利");
			break;
		}
		else if (win == 'Z')
		{
			printf("平局");
			break;
		}
	}



}

void test()//选择函数
{
	int choice = 0;
	do
	{
		scanf("%d", &choice);

		switch (choice)
		{
		case 1:
			Game();//三子棋游戏运行函数
			break;
		case 2:
			printf("已退出游戏....n");
			break;
		default:
			printf("输入错误,请重新选择:");
			break;
		}

		if (choice==1)
		{
			menu2();//再次选择玩游戏函数
		}

	} while (choice != 2);


}

void menu2()//再次选择玩游戏函数
{
	printf("t您是否再玩一轮三子棋游戏?n");
	printf("t 1.play 2.exitn");
}

void menu1()//选择界面
{
	printf("t***********************************n");
	printf("t********欢迎来到三子棋游戏*********n");
	printf("t***** 请选择: 1.play 2.exit ******n");
	printf("t***********************************n");
}

int main()
{

	menu1();//选择界面
	test();//选择函数

	return 0;
}

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位

0 人点赞