c语言 多人在线n子彩色棋盘PLUS

作者分享了一款基于C语言的游戏程序的PLUS版本,增加了用户自定义颜色选项和改进了棋盘布局,便于玩家操作。源代码包含主函数、游戏开始、棋盘初始化等关键部分,展示了作者作为非计算机专业学生对编程的热爱和实践。
摘要由CSDN通过智能技术生成

说在前面:上一篇博客发布之后获得很多关注,但是我感觉还是不太好,所以打磨了几天,放出了这个PLUS版本(本人期末周,还不是计算机专业的,所以这么慢,大家见谅)。这次修改主要优化了布局还加了一些彩蛋,我先介绍一下,源码在后面会全部放给大家。

——————修改

1 .修改了颜色,可以自我选择喜欢的数字而确定要什么颜色(注意,不要大于65535哦)

一般来说,选择的数字不同,之后主色调会不同,像这样

2 .相信大家都很烦,这么多行,这么多列,下在哪,根本看不清好吧,所以,我在每一行每一列都标上了序号,这样,就可以很快找到下棋地方了

其他彩蛋可以自己试试,如果你是大佬也可以自己找源代码

(下棋的颜色也不同)

——————————源代码(强调)
 

主函数

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdlib.h>
#include <windows.h>
#include "game.h"


int main()
{
	int y = 0;
	int x = 0;
	int z = 0;
	int choice = 0;
	while (1)
	{
		//准备开始游戏
		y=game_begin();
		if (0 ==y )break;
		else if ( 1==y )
		{
			
			while (1)
			{
				//棋盘初始化
			    board_init();
				color(COLOR % 15 + 1);
				printf("请选择玩家数量:> ");
				scanf("%d", &num);
				color(16);
				printf("\n");
				if (1 < num)
				{
					break;
				}
				else
				{
					color(COLOR % 15 + 1);
					printf("你干嘛,哎呦,玩家请别瞎闹\n");
					Sleep(2000);
					system("cls");
					color(16);
					return 0;
				}
			}
			//起始玩家数量输入,赋值num
			
			//玩家开始玩
			x=gaming();
			color(COLOR % 15 + 1);
			printf("!!!!!!!!!   WINNER:Player %d   !!!!!!!!\n",x);
			printf("*********      GAME OVER       ********\n");
			Sleep(2000);
			system("cls");
			printf("是否再来一局:>(1代表是;0代表否)\n");
			printf("选择:");
			scanf("%d", &choice);
			/*getchar();*/
			if ( 0==choice )
				break;
			else
			{
				printf("请稍等片刻,游戏加载中\n");
				Sleep(1000);
				system("cls");
		    }
			color(16);


		}
		else
		{
			game_error();
		}
	}

	return 0;
}

game.h

#include <stdio.h> 
#ifndef _GAME__H_
#define _GAME__H_
extern int num ;
extern unsigned int COLOR;
void color(int x);
int game_begin();
void board_init();
int gaming();
void game_error();

#endif

game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#define COL 14
#define LIN 14
#define NUM 5
int num = 0;
unsigned int COLOR = 0;
int game_board[LIN + NUM][COL + NUM] = { 0 };


void color(short x)
{
	if (x >= 0 && x <= 15)
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
	else
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}




int game_begin()
{
	int choose = 0;
	int i = COL;
	int j = LIN;
	int n = NUM;
	color(11);
	printf("****************************** \n");
	printf("          玩家准备游戏        \n");
	color(3);
	printf("本棋盘有%d行,有%d列,是%d子棋\n", j, i,n);
	color(11);
	printf("****************************** \n");
	printf("**********输入你的选择******** \n");
	printf("****1:开始游戏****0:离开***** \n");	
	printf("选择:");
	scanf("%d", &choose);
	while (1)
	{
		Sleep(200);
		system("cls");
		printf("请选择本局幸运数字:");
		while (getchar() != '\n');
		scanf("%d", &COLOR);
		if (COLOR < 65535)
		{
			break;
		}
		else
		{
			COLOR = 0;

		}
	}
	color(16);
	return choose;
}





void board_init()
{
	int a = 0;
	int b = 0;
	color(COLOR%15+1);
	for (a = 0; a < LIN + NUM; a++)
	{
		for (b = 0; b < COL + NUM; b++)
		{
			game_board[a][b] = 0;
		}
	}
	int j = 0;
	for (j = 0; j < LIN; j++)
	{
		int i = 0;
		for (i = 0; i < COL; i++)
		{
			printf("   ");
			if (i < COL - 1)
				printf("|");
			if ( COL - 1== i)
				printf("  第%d行\n",j+1);

		}
		if (j < LIN - 1)
		{
			for (i = 0; i < COL; i++)
			{
				printf("...");
				if (i < COL - 1)
					printf("|");
				if ( i ==COL - 1)
					printf("\n");

			}
		}

	}
	printf("\n");
	for (b = 1; b < COL + 1; b++)
	{
		if (b)
		{
			if (b < 10)
			{
				printf(" %d  ", b);
			}
			else if (b < 100)
			{
				printf(" %d ", b);
			}
			else if (b < 1000)
			{
				printf("%d ", b);
			}
			else
			{
				printf("你玩呢\n");
				Sleep(2200);
				system("cls");
				return 0;
			}
		}
	}
	printf("\n");
	color(16);
}







void game_play(int n)
{
	int i = 0;
	int j = 0;
	int a = 0;
	int b = 0;
	while (1)
	{
		color(COLOR % 15 + 1);
		while (1)
		{
			printf("玩家%d请下棋:>", n);
			while (getchar() != '\n');
			scanf("%d %d", &i, &j);
			if (i >= 1 && j >= 1)
			{
				break;
			}
			else
			{
				*(&i) = 0;
				*(&j) = 0;

			}
		}
		if (game_board[i - 1][j - 1] != 0)
		{
			printf("请玩家%d重新输入,目前输入已被占用\n", n);
		}
		else
		{
			if (i < LIN + 1 && j < COL + 1)
			{
				game_board[i - 1][j - 1] = n;				
				break;
			}
			else
			{
				printf("请输入合法格式\n");
			}
		}
	}
	color(16);
	
}	


void game_play_low()
{
	int i = 0;
	int j = 0;
	int a = 0;
	int b = 0;
	while (1)
	{		
		printf("\n");
		printf("\n");
		
			if (i < LIN + 1 && j < COL + 1)
			{				
				for (a = 0; a < LIN; a++)
				{

					for (b = 0; b < COL; b++)
					{
						if (game_board[a][b])
						{
							if (game_board[a][b] < 10)
							{
								color((COLOR+game_board[a][b]) % 15 + 1);
								printf(" %d ", game_board[a][b]);
								color(16);
							}
							else if (game_board[a][b] < 100)
							{
								color((COLOR + game_board[a][b]) % 15 + 1);
								printf(" %d", game_board[a][b]);
								color(16);
							}
							else if (game_board[a][b] < 1000)
							{
								color((COLOR + game_board[a][b]) % 15 + 1);
								printf("%d", game_board[a][b]);
								color(16);
							}
							else
							{
								printf("你玩呢\n");
								Sleep(2200);
								system("cls");
								return 0;
							}

						}
						else printf("   ");
						color(COLOR % 15 + 1);
						if (b < COL - 1)
							printf("|");
						if (COL - 1 == b)
						{
							printf("  第%d行\n", a + 1);
						}
						color(16);
				
					}
					if (a < LIN - 1)
					{
						color(COLOR % 15 + 1);
						for (b = 0; b < COL; b++)
						{
							printf("...");
							if (b < COL - 1)
								printf("|");
							if (COL - 1 == b)
								printf("\n");

						}
						color(16);
					}

				}
				break;
			}
			
		



	}
	printf("\n");
	color(COLOR % 15 + 1);
	for (b = 1; b < COL + 1; b++)
	{
		if (b)
		{
			
			if (b < 10)
			{
				printf(" %d  ", b);
			}
			else if (b < 100)
			{
				printf(" %d ", b);
			}
			else if (b < 1000)
			{
				printf("%d ", b);
			}
			else
			{
				printf("你玩呢\n");
				Sleep(2200);
				system("cls");
				return 0;
			}
			
		}
	}
	color(16);
	printf("\n");
}
	
	





//返回值是胜利者
int game_who_win()
{
	int i = 0;
	int a = 0;
	int b = 0;
	int c = 0;
	int winner = 0;
	for (i = 1; i <= num; i++)
	{
		for (a = 0; a < LIN; a++)
		{
			for (b = 0; b < COL; b++)
			{
				int low = 0;
				int high = 0;
				int line = 0;
				int column = 0;
				for (c = 1; c <= NUM; c++)
				{

					if (game_board[a][b] == i)
					{
						if (game_board[a + c][b + c] == i)low++;
						if (game_board[a + c][b - c] == i)high++;
						if (game_board[a + 0][b + c] == i)line++;
						if (game_board[a + c][b + 0] == i)column++;
					}
				}
				if ( NUM == low + 1|| NUM == high + 1 || NUM == line + 1 || NUM==  column + 1)
				{
					winner = i;
					break;
				}

			}
			if (winner)
			{
				break;
			}
		}
		if (winner)
		{
			break;
		}
	}
	return winner;
}

//返回值为胜利者序号,不然返回0
int game_if_win()
{
	int i = 0;
	int m = 0;

	for (i = 0; i < num; i++)
	{
		m = game_who_win();
		if (m)
		{
			break;
		}

	}
	return m;
}

int gaming()
{
	int i = 0;
	int j = 0;
	while (1)
	{
		for (i = 1; i <= num; i++)
		{
			system("cls");
			game_play_low();
			game_play(i);
			j = game_if_win();
			if (j)
				break;//如果发现返回值不为0,代表有胜利者,结束死循环
		}
		if (j)
			break;
	}
	return j;
}

void game_error()
{
	color(COLOR % 15 + 1);
	printf("请重新选择\n");
	color(16);

}

最后,谢谢大家的支持,本人机械大一,学习c主要为了单片机嵌入式和开发自己小游戏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳月寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值