学习总结三

写五子棋程序,这个是对迷宫的加深,以下是五子棋的分解过程:

五子棋:

分析数据:
	char board[15][15]; 棋盘
	char key_x,key_y; 接收棋子的坐标。
	char role; 记录角色'@','#'。
业务逻辑:
	1、初始化棋盘,所有位置赋值为'*';
	while(true)
	{
		2、清理屏幕,显示棋盘。
		3、请输入棋盘的坐标
			检查坐标是否合法、是否已经有棋子。
		4、检查是否形成五子
			break;
		5、切换角色
	}
#include<stdio.h>
#include<stdlib.h>
  int  ppp(char x,char y);
	char board[15][15]={0};
	char key_x=0,key_y=0;
	char role='@';
	int  p=0;
int main()
{
	for(int i=0;i<15;i++)
	{
		for(int j=0;j<15;j++)
		{
			board[i][j]='*';
		}
	}
	while(1)
	{
		system("clear");
		for(int i=0;i<15;i++)
		{
			for(int j=0;j<15;j++)
			{
				printf("%c",board[i][j]);
			}
			printf("\n");
		}
		printf("请输入你要下的棋子的坐标");
		scanf("%d %d",&key_x,&key_y);
		if (board[key_x][key_y]=='@' || board[key_x][key_y]=='#') continue;
		if (role=='@') {
			        board[key_x][key_y]='@';
					p=ppp(key_x,key_y);
					if (1==p) break;
					role='#';
					continue;
				  }
		  else {
			      board[key_x][key_y]='#';
				  p=ppp(key_x,key_y);
				  if (1==p) break;
				  role='@';
				  continue;
		       }

	}
	if ('#'==role) printf("后手胜利!");
      else printf("先手胜利!");
}

int ppp(char m,char n)
{
  //  char x=a[m][n];
	int c=1,d=1;

		                   while(1)
		                     {
                                 if (board[m-d][n-d]==role ) {
									                    c++;
														d++;
														
													 }
								   else break;
							 }
							 d=1;
							while(1)
							{
                                 if (board[m+d][n+d]==role) {
									                    c++;
														d++;
													 }
								   else break;

							}
							if (c>=5) return 1;
							c=1;
							d=1;
							while(1)
							{
								if(board[m][n-d]==role) {
									                c++;
													d++;
												}
									else break;
							}
							d=1;
							while(1)
							{
								if (board[m][n+d]==role) {
									                c++;
													d++;
												}
									else break;
							}
							if (c>=5) return 1;
							c=0;
							d=1;
							while(1)
							{
								if (board[m+d][n-d]==role) {
									                c++;
                                                    d++;
												}
									else break;
							}
							d=1;
							while(1)
							{
								if (board[m-d][n+d]==role) {
									                  c++;
													  d++;
													}
										else break;
							}
							if (c>=5) return 1;
							c=0;
							d=1;
							while(1)
							{
								if (board[m-d][n]==role) {
									                c++;
													d++;
												}
									else break;	
							}
							d=1;
							while(1)
							{
								if (board[m+d][n]==role)  {
									                  c++;
													  d++;
												}
									else break;
							if (c>=5) return 1;
							}

}

这个程序的大致框架和迷宫差不多,主要是如何判定是否五子连珠。我是通过键盘输入15*15的方格的坐标来落子,用@和#来代替黑白子,判定方法是通过4次判定,判定横竖两个斜线是否有5个棋子。

以上是通过键盘输入坐标下子,经过老师的优化,可以直接通过光标下子

while(true)
		{
			printf("\33[%hhd;%hhdH",key_x+1,(key_y+1)*2);
			switch(getch())
			{
				case 183:key_x>0&&key_x--;break;
				case 184:key_x<14&&key_x++;break;
				case 185:key_y<14&&key_y++;break;
				case 186:key_y>0&&key_y--;break;
				case 10:if('*'==board[key_x][key_y])
				{
					board[key_x][key_y]=role;
					return;
				}
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值