用c语言制作的简单五子棋

制作五子棋游戏,首先我们要绘制棋盘
我们可以通过调用函数来显示棋盘

void watch(int s[11][11])
{
	int i,j;
	for(i=0;i<11;i++)
		{
			for(j=0;j<11;j++)
			{
				if(i==0)
				{
		          if(j>=0&&j<9) printf("%d ",j+1);
				  else if(j==9) printf("%d\n",j+1);
				}
				if(i==0&&j==10) continue;
				if(i==1)
				{
					if(j==0)
					{
		if(s[i][j]==2) printf("┏ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==9)
					{
		if(s[i][j]==2) printf("┓ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==10) printf("%d\n",i);
					else if(j<9&&j>0)
					{
		if(s[i][j]==2) printf("┳ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
				}
				else if(i>1&&i<10)
				{
		           if(j==0)
					   {
						  if(s[i][j]==2) printf("┣ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   else if(j>0&&j<9)
				   {
				if(s[i][j]==2) printf("╋ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   else if(j==9) 
					   {
						  if(s[i][j]==2) printf("┫ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   if(j==10) printf("%d\n",i);
				}
				else if(i==10)
				{
					if(j==0)
					{
		if(s[i][j]==2) printf("┗ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j>0&&j<9)
					{
						if(s[i][j]==2) printf("┻ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
				}
					else if(j==9)
					{
		if(s[i][j]==2) printf("┛ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==10) printf("%2d\n",i);
				}
			}
		}
}

其次,我们还要判断双方的输赢,和平局等情况

int wf(int s[11][11])
{
	int i,j,d,x=1;
	for(i=1;i<11;i++)
	{
		for(j=0;j<6;j++)
		{
			if(s[i][j]==0&&s[i][j+1]==0&&s[i][j+2]==0&&s[i][j+3]==0&&s[i][j+4]==0)
			{
				d=0;
				return d;
			}
			 else if(s[i][j]==1&&s[i][j+1]==1&&s[i][j+2]==1&&s[i][j+3]==1&&s[i][j+4]==1)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
				 d=3;
			 }
		}
	}
	for(j=0;j<10;j++)
	{
		for(i=1;i<7;i++)
		{
			if(s[i][j]==0&&s[i+1][j]==0&&s[i+2][j]==0&&s[i+3][j]==0&&s[i+4][j]==0)
			{
				d=0;
				return d;
			}
			 else if(s[i][j]==1&&s[i+1][j]==1&&s[i+2][j]==1&&s[i+3][j]==1&&s[i+4][j]==1)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
				 d=3;
			 }
		}
	}
	for(j=0;j<6;j++)
	{
	for(i=1;i<7;i++)
	{
		if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
	}
	}
	for(i=1;i<7;i++)
	{
		for(j=1;j<6;j++)
		{
			if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	for(i=1;i<7;i++)
	{
		for(j=4;j<10;j++)
		{
			if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	for(j=5;j<10;j++)
	{
		for(i=2;i<7;i++)
		{
			if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	if(d==3)
	{
		for(i=1;i<11;i++)
		{
			for(j=0;j<10;j++)
			{
				if(s[i][j]==2) x=0;
			}
		}
		if(x==1) d=2;
	}
	return d;
}

先后手的问题,我们可以用for循环判断,看是否能被2整除来决定谁落子
同时我们加入sleep函数和system(“cls”)清屏函数和system(“color xx”)来调色
另外可添加游戏说明进去,使游戏更完善。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
void main()
{
    int n,i;
	void game();
	void read();
    system("color F0");
	printf("正在加载中......\n");
	for(i=1;i<=50;i++)
	{
		printf(" ");
		printf("%d%%",i*2);
		Sleep(100-2*i);
		printf("\b\b\b");
	}
	printf("\n加载成功,请稍等......");
	Sleep(1500);
	while(1)
	{
	system("cls");
	printf("------------------------------欢迎进入五子棋游戏------------------------------\n");
	printf("----------‘1’开始游戏---------‘2’游戏说明---------‘0’退出游戏-----------\n");
	printf("请输入序号[ ]\b\b");
	scanf("%d",&n);
	if(n==1) {printf("开始游戏\n");game();printf("游戏结束\n");break;}
	else if(n==2) {system("cls");read();}
	else if(n==0) {printf("退出游戏成功\n") ; break;}
	else {printf("输入有误,请重新输入\n"); continue;}
	}
}
void game()
{
	int i,j,x,y,d,e=1;
	int s[11][11];
	int wf(int s[11][11]);
	void watch(int s[11][11]);
	while(e)
	{
		for(i=0;i<11;i++)
		{
		  for(j=0;j<11;j++)
		  {
	        s[i][j]=2;
		  }
		}
		d=2;
		system("cls");
        printf("初始化棋盘中......\n");
		Sleep(1200);
		system("cls");
		watch(s);
       for(i=1;;i++)
	   {
		   if(i%2!=0)
		   {
               printf("轮到你了\n");
begin: printf("请输入棋子的坐标:(例如:3 3)\n");
		scanf("%d%d",&x,&y);
		if(x>=1&&x<=10&&y>=1&&y<=10)
		{
		if(s[x][y-1]!=2)
		{
			printf("此处已经有棋子了,请重新落子\n");
			goto begin;
		}
		else 
		{
				s[x][y-1]=0;
				system("cls");
		        watch(s);
		}
		    d=wf(s);
		Sleep(1200);
		if(d==0){ printf("恭喜你获得了胜利\n"); break;}
		else if(d==2) {printf("平局\n"); break;}
		else;
		}
		else {printf("输入错误,请重新输入\n"); goto begin;}
		   }
		   else
		   {
			   system("cls");
			   printf("轮到电脑落子\n");
			   srand((unsigned)time(NULL));
end:x=rand()%10+1;
			   y=rand()%10;
			   if(s[x][y]!=2) goto end;
			   else s[x][y]=1;
			   Sleep(1200);
			   system("cls");
			   watch(s);
			   d=wf(s);
			   Sleep(1200);
			   if(d==1) {printf("你输了\n"); break;}
			   else if(d==2) {printf("平局\n"); break;}
			   else;
		   }
		   }
		   printf("继续游戏请按‘1’,结束游戏请按‘0’\n");
		   printf("请输入序号[ ]\b\b");
	   scanf("%d",&e);
	}
}
void read()
{
	printf("游戏说明:\n");
	printf("\n玩家执白棋先行(别问我为什么执白棋先行,因为老子喜欢),输入与棋盘相对应的横纵坐标即可,随后电脑开始落子\n");
	printf("\n注意:必须输入与棋盘对应的横纵坐标,且横坐标在前,纵坐标在后,中间用空格隔开\n");
	printf("\n获胜条件:\n棋子一排或者一列或者斜行之中连续五子连续即为胜利\n");
	printf("\nps:别点右上角叉叉退出程序,输入数字结束游戏有惊喜!\n");
	printf("\n请按任意键退出游戏说明\n");
	getch();
}
int wf(int s[11][11])
{
	int i,j,d,x=1;
	for(i=1;i<11;i++)
	{
		for(j=0;j<6;j++)
		{
			if(s[i][j]==0&&s[i][j+1]==0&&s[i][j+2]==0&&s[i][j+3]==0&&s[i][j+4]==0)
			{
				d=0;
				return d;
			}
			 else if(s[i][j]==1&&s[i][j+1]==1&&s[i][j+2]==1&&s[i][j+3]==1&&s[i][j+4]==1)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
				 d=3;
			 }
		}
	}
	for(j=0;j<10;j++)
	{
		for(i=1;i<7;i++)
		{
			if(s[i][j]==0&&s[i+1][j]==0&&s[i+2][j]==0&&s[i+3][j]==0&&s[i+4][j]==0)
			{
				d=0;
				return d;
			}
			 else if(s[i][j]==1&&s[i+1][j]==1&&s[i+2][j]==1&&s[i+3][j]==1&&s[i+4][j]==1)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
				 d=3;
			 }
		}
	}
	for(j=0;j<6;j++)
	{
	for(i=1;i<7;i++)
	{
		if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
	}
	}
	for(i=1;i<7;i++)
	{
		for(j=1;j<6;j++)
		{
			if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j+1]==0&&s[i+2][j+2]==0&&s[i+3][j+3]==0&&s[i+4][j+4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	for(i=1;i<7;i++)
	{
		for(j=4;j<10;j++)
		{
			if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	for(j=5;j<10;j++)
	{
		for(i=2;i<7;i++)
		{
			if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
		{
			    d=0;
				return d;
			}
			 else if(s[i][j]==0&&s[i+1][j-1]==0&&s[i+2][j-2]==0&&s[i+3][j-3]==0&&s[i+4][j-4]==0)
			 {
				 d=1;
				 return d;
			}
			 else
			 {
		       d=3;
			 }
		}
	}
	if(d==3)
	{
		for(i=1;i<11;i++)
		{
			for(j=0;j<10;j++)
			{
				if(s[i][j]==2) x=0;
			}
		}
		if(x==1) d=2;
	}
	return d;
}
void watch(int s[11][11])
{
	int i,j;
	for(i=0;i<11;i++)
		{
			for(j=0;j<11;j++)
			{
				if(i==0)
				{
		          if(j>=0&&j<9) printf("%d ",j+1);
				  else if(j==9) printf("%d\n",j+1);
				}
				if(i==0&&j==10) continue;
				if(i==1)
				{
					if(j==0)
					{
		if(s[i][j]==2) printf("┏ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==9)
					{
		if(s[i][j]==2) printf("┓ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==10) printf("%d\n",i);
					else if(j<9&&j>0)
					{
		if(s[i][j]==2) printf("┳ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
				}
				else if(i>1&&i<10)
				{
		           if(j==0)
					   {
						  if(s[i][j]==2) printf("┣ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   else if(j>0&&j<9)
				   {
				if(s[i][j]==2) printf("╋ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   else if(j==9) 
					   {
						  if(s[i][j]==2) printf("┫ ");
		        else if(s[i][j]==1) printf("○");
		        else if(s[i][j]==0) printf("●");
				   }
				   if(j==10) printf("%d\n",i);
				}
				else if(i==10)
				{
					if(j==0)
					{
		if(s[i][j]==2) printf("┗ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j>0&&j<9)
					{
						if(s[i][j]==2) printf("┻ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
				}
					else if(j==9)
					{
		if(s[i][j]==2) printf("┛ ");
		else if(s[i][j]==1) printf("○");
		else if(s[i][j]==0) printf("●");
					}
					else if(j==10) printf("%2d\n",i);
				}
			}
		}
}

转载需要表明出处。
大家如有想法,比方说添加悔棋功能,使人机的难度可供选择等,可以跟我一起讨论。
或者有什么不对的地方,请各位赐教。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
题目:五子棋对弈 对弈规则如下: 主要功能是实现两人之间的对弈,在画好的棋盘上,两个玩家轮流选择自己的落子坐标,然后由五子棋系统自动识别判断游戏的进展,知道一方的五子连成一条线或者棋盘已经无法落子时游戏结束。 选定五子棋棋盘大小为19*19,玩家可以在这个棋盘上选择落子坐标位置,通过在棋盘上显示不同的符号来代替不同玩家所下的棋子,“o”代表A玩家,“*”代表B玩家。玩家每次落子之后游戏系统都会对落子位置进行检查,如果落子坐标输入有错应提示错误,并要求玩家继续输入。 当出现同一玩家五子连成一线时,无论是行、列或是对角线的五子连线,都表示玩家游戏胜利,退出游戏 任务:编程实现以下功能 1. 欢迎主界面 提示玩家选择游戏开始,结束,设置悔棋次数等。 2. 绘制棋盘 该模块要求的功能是实现棋盘的显示及棋子的显示,,“o”代表A玩家,“*”代表B玩家。在每次下棋后要对棋盘进行刷新,将棋盘的状态变化为当前最新状态,然后等待另一个玩家下棋。 3. 玩家交替下棋 玩家能在棋盘上下棋,玩家每次选择好下棋的行和列坐标,并在该位置落子。 要求:a.提示当前玩家输入落子坐标 b.能判断用户输入的坐标是否正确(坐标超出范围或该处已有棋子) 4. 悔棋功能 玩家选择悔棋后刷新棋盘,删除前一次的落子,悔棋次数有限制。 5. 输赢判断 判断输赢模块的作用是每次玩家落子后判断是否已分出胜负,如果是,则返回胜利者相关信息。 6. 设计丰富的用户界面,方便用户操作 设计要求: ① 根据以上功能需求,自己定义合适的数据结构,并说明原因; ② 每个功能能提供友好的用户界面,方便用户操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值