简易五子棋 c语言

#include<stdio.h>
#include<windows.h>
#define len 15
int status[2][4*len][2*len]={0};//记录落子 
int player=0;//游戏者 
int x=1,y=1;//光标位置 
void gotoxy(int x, int y) //光标移动函数 
{
	COORD pos;
	pos.X=x-1;
	pos.Y=y-1;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void graphy()//绘制棋盘 
{
	memset(status,0,sizeof(status));
	x=y=1;
	player=0; 
	int i,j;
	system("cls");
	system("color E1");
	printf("┌─");
	for(i=0;i<len-2;i++)
		printf("┬─");
	printf("┐");//
	for(i=0;i<len-2;i++)
    {
    	printf("\n");
    	for(j=0;j<len;j++)
        	printf("│  ");
    	printf("\n├") ;
    	for(j=0;j<len-2;j++)
			printf("─┼");
		printf("─┤");
    }//
	printf("\n");
	for(i=0;i<len;i++)
    	printf("│  ");
	printf("\n└");//
	for(i=0;i<len-2;i++)
    	printf("─┴");
	printf("─┘\npalyer 1");
	gotoxy(1,1);//此轮玩家 
}
void move()//位置移动 
{
	graphy();
	while(1)
	{
		switch(getch())
		{
			case 'a':if(x>0) x-=4;break;
			case 's':if(y<2*(len-1)) y+=2;break;
			case 'd':if(x<4*(len-1)) x+=4;break;
			case 'w':if(y>0) y-=2;break;
			case ' ':if(!status[0][x][y]&&!status[1][x][y]) set();
		}
		gotoxy(x,y);
	}
}
void set()//落子 
{
	if(player)
	printf("●");
	else printf("○");
	status[player][x][y]=1;
	gotoxy(x,y);
	if(win()) final();
	else 
	{
		player=!player;
		gotoxy(8,30);
		printf("%d",player+1);
	}//此时玩家 
}
int win(void)//输赢判断 
{
	int i,j,n=0,dx[9],dy[9],p,q;
	for(i=-1;i<=1;i++)
	for(j=-1;j<=1;j++)
		if(status[player][x+4*i][y+2*j]&&(i||j))
		{
			dx[n]=4*i;
			dy[n]=2*j;
			n++;
		}//周围九子 
	for(i=0;i<n;i++)
	{
		p=q=0;
		for(j=1;j<=4;j++)
		{
			if(status[player][x+j*dx[i]][y+j*dy[i]]) p++;
			else break; 
		}
		for(j=1;j<=4;j++)
		{
			if(status[player][x-j*dx[i]][y-j*dy[i]]) q++;
			else break; 
		}
		if(p+q=4) return 1;
		else return 0;		
	}//合五即胜 
}
void final()//赢后显示 
{
	system("color F1");
	gotoxy(1,30);
	printf("player %d win\n空格键重新开始...",player+1);
	if(getch()==' ') move();
	else exit(0); 
}
int main()
{
	system("mode con cols=60 lines=32");
	move();
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个很好的五子棋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/*无效键*/ 下载可看到完整的...

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值