前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C/关于N子棋小游戏的创建

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

作者头像
用户10788736
发布2023-10-16 08:26:13
1580
发布2023-10-16 08:26:13
举报
文章被收录于专栏:CSDN搬移文章CSDN搬移文章

本文是用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("\t\t\t欢迎来到三子棋游戏!!!\n\n\n");

	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.exit\n");
}

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

int main()
{

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

	return 0;
}

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!! 如果有什么疑问或不同的见解,欢迎评论区留言哦。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档