C语言实现五子棋对弈(简单输入坐标下棋,可设置悔棋次数版)

一、 设计题目、任务及要求
题目:五子棋对弈
对弈规则如下:
主要功能是实现两人之间的对弈,在画好的棋盘上,两个玩家轮流选择自己的落子坐标,然后由五子棋系统自动识别判断游戏的进展,知道一方的五子连成一条线或者棋盘已经无法落子时游戏结束。
选定五子棋的棋盘大小为1919,玩家可以在这个棋盘上选择落子坐标位置,通过在棋盘上显示不同的符号来代替不同玩家所下的棋子,“o”代表A玩家,“”代表B玩家。玩家每次落子之后游戏系统都会对落子位置进行检查,如果落子坐标输入有错应提示错误,并要求玩家继续输入。
当出现同一玩家五子连成一线时,无论是行、列或是对角线的五子连线,都表示玩家游戏胜利,退出游戏
任务:编程实现以下功能

  1. 欢迎主界面
    提示玩家选择游戏开始,结束,设置悔棋次数等。
  2. 绘制棋盘
    该模块要求的功能是实现棋盘的显示及棋子的显示,,“o”代表A玩家,“*”代表B玩家。在每次下棋后要对棋盘进行刷新,将棋盘的状态变化为当前最新状态,然后等待另一个玩家下棋。
  3. 玩家交替下棋
    玩家能在棋盘上下棋,玩家每次选择好下棋的行和列坐标,并在该位置落子。
    要求:a.提示当前玩家输入落子坐标
    b.能判断用户输入的坐标是否正确(坐标超出范围或该处已有棋子)
  4. 悔棋功能
    玩家选择悔棋后刷新棋盘,删除前一次的落子,悔棋次数有限制。
  5. 输赢判断
    判断输赢模块的作用是每次玩家落子后判断是否已分出胜负,如果是,则返回胜利者相关信息。
  6. 设计丰富的用户界面,方便用户操作
    设计要求:
    ① 根据以上功能需求,自己定义合适的数据结构,并说明原因;
    ② 每个功能能提供友好的用户界面,方便用户操作。
    二、概要设计
    1、系统功能需求分析
    主要由五个函数模块来实现系统功能,依此分别是:
    欢迎界面函数welcome();
    画棋盘函数draw_checkbox();
    下棋函数duty();
    悔棋功能函数back();
    和输赢判断函数judge()。
    2、部分重要子函数代码
    欢迎界面
void draw_welcome()
{
	printf("\n\n\n\n\n                                                     SPACE:游戏开始\n");
	printf("\n                                                      ESC:退出游戏\n\n\n");
	printf("                                                     design by xx");
}

画棋盘

void draw_checkbox()
{
	system("color E0");
	printf("00 ");                        
		for (i = 0; i <= 18; i++)
		printf(" %02d ", i+1);
	printf("\n");
	for (i = 0; i <= col; i++)           
	{
		printf("%02d", i+1);
		for (j = 0; j <= row; j++)
		{
			chessman[i][j] =Player[2].shape;
			printf("  %c ",chessman[i][j]);
		}			
		printf("\n\n");
	}
}

下棋

void duty()
{
	scanf_s("%d%d", &a, &b);
	a--; b--;
	if (a > row || b > col)
	{
		printf("输入坐标超出范围,请重新输入坐标!\n");
		error_flag = 1;
	}
	if (chessman[a][b] == Player[0].shape || chessman[a][b] == Player[1].shape)
	{
		printf("此处已落子,请重新输入坐标!\n");
		error_flag = 1;
	}
	else//落子并刷新棋盘
	{
		error_flag = 0;
		chessman[a][b] = Player[count].shape;        
		count++;
		system("cls");
		system("color E0");
		printf("00 ");
		for (i = 0; i <= 18; i++)
			printf(" %02d ", i + 1);
		printf("\n");
		for (i = 0; i <= col; i++)
		{
			printf("%02d", i + 1);
			for (j = 0; j <= row; j++)
			{
				printf("  %c ", chessman[i][j]);
			}
			printf("\n\n");
		}
	}
}

悔棋

void back()
{
	char button;
	if (error_flag == 0)
	{
		button = _getch();
		if (button == 8)
		{
			backer[count - 1].back_count++;              
			if (backer[count - 1].back_count <= back_max)
				back_flag = 1;
			else                                         
			{
				back_flag = 0;
				printf("悔棋次数已达上限%d次\n", back_max);
			}
			if (back_flag == 1)
			{
				chessman[a][b] = Player[2].shape;
				system("cls");
				system("color E0");
				printf("00 ");
				for (i = 0; i <= 18; i++)
					printf(" %02d ", i + 1);
				printf("\n");
				for (i = 0; i <= col; i++)
				{
					printf("%02d", i + 1);
					for (j = 0; j <= row; j++)
					{
						printf("  %c ", chessman[i][j]);
					}
					printf("\n\n");
				}
				count--;                                      
				printf("%c方悔棋重输:", Player[count].who);       
				duty();
				back_flag = 0;                                
			}
		}
	}
}

效果图:
棋盘,对弈
游戏结束
完整代码在我上传的资源里有,大家需要的可以下载~

  • 21
    点赞
  • 124
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
一个很好的五子棋c语言源程序代码,最重要的是能运行正确!!! #include #include #include #include #include #define CROSSRU 0xbf /*右上角点*/ #define CROSSLU 0xda /*左上角点*/ #define CROSSLD 0xc0 /*左下角点*/ #define CROSSRD 0xd9 /*右下角点*/ #define CROSSL 0xc3 /*左边*/ #define CROSSR 0xb4 /*右边*/ #define CROSSU 0xc2 /*上边*/ #define CROSSD 0xc1 /*下边*/ #define CROSS 0xc5 /*十字交叉点*/ /*定义棋盘左上角点在屏幕上的位置*/ #define MAPXOFT 5 #define MAPYOFT 2 /*定义1号玩家的操作键键码*/ #define PLAY1UP 0x1157/*上移--'W'*/ #define PLAY1DOWN 0x1f53/*下移--'S'*/ #define PLAY1LEFT 0x1e41/*左移--'A'*/ #define PLAY1RIGHT 0x2044/*右移--'D'*/ #define PLAY1DO 0x3920/*落子--空格键*/ /*定义2号玩家的操作键键码*/ #define PLAY2UP 0x4800/*上移--方向键up*/ #define PLAY2DOWN 0x5000/*下移--方向键down*/ #define PLAY2LEFT 0x4b00/*左移--方向键left*/ #define PLAY2RIGHT 0x4d00/*右移--方向键right*/ #define PLAY2DO 0x1c0d/*落子--回车键Enter*/ /*若想在游戏中途退出, 可按 Esc 键*/ #define ESCAPE 0x011b /*定义棋盘上交叉点的状态, 即该点有无棋子 */ /*若有棋子, 还应能指出是哪个玩家的棋子 */ #define CHESSNULL 0 /*没有棋子*/ #define CHESS1 'O'/*一号玩家的棋子*/ #define CHESS2 'X'/*二号玩家的棋子*/ /*定义按键类别*/ #define KEYEXIT 0/*退出键*/ #define KEYFALLCHESS 1/*落子键*/ #define KEYMOVECURSOR 2/*光标移动键*/ #define KEYINVALID 3/*无效键*/ 下载可看到完整的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值