五子棋c语言

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>//可能不是所有的都会用到 




int player=1;//对于游戏者的选择 
int state[2][300][300];//用于记录之前子的位置 
int x=1,y=1;//用于记录光标位置
#define len 16






void gotoxy(int x, int y) //定义出一个移动光标的函数 
{
COORD pos;
pos.X = x - 1;
pos.Y = y - 1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}


void qipan()
{
   int i,j;
    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(j=0;j<len;j++)
    {
        printf("│  ");
    }
    printf("\n└");
    for(i=0;i<len-2;i++)
    {
        printf("─┴");
    } 
    printf("─┘");//打出最后两行 
    gotoxy(x,y);//光标回到左上角 


}




void move()//一个移动光标的函数,并将使用了落子函数 
{
switch(getch())//之所以x和y分别移动一次的大小不同是为了每次都移动到方格的交叉点,另外黑框的长和宽的长度应该是不同的,所以这样 
{
case 'a':if(x>1) x-=4; break ;
case 's':if(y<2*len-2) y+=2; break;
case 'w':if(y>1) y-=2; break;
case 'd':if(x<4*len-4) x+=4; break;
case ' ':if(state[0][x][y]==0&&state[1][x][y]==0) luo(); break;
}
gotoxy(x,y);



void luo()
{
switch(player)
{
case 1: printf("●"); state[player][x][y]=1; break;
case 0: printf("○"); state[player][x][y]=1; break;
}
win();
player++;
player=player%2;//玩家切换 
}




void win()
{
int i,j,m,n,shu,k,jishu;
for(i=x-4;i<x+8;i+=4)
for(j=y-2;j<y+4;j+=2)
if(state[player][i][j]==1&&(i!=x|j!=y))//对周围9子进行搜索,如果有子进行下一步 
{
   
m=x;
n=y;
jishu=0;
for(k=0;k<4;k++)
{
if(m>0&&n>0)//利用已知的俩个子写出一个函数然后从变量=x/y-4处开始搜素,用if是防止数组炸掉
{
m+=i-x;
n+=j-y;

}
else
break;
}
for(k=0;k<9;k++)//依照函数向前搜索9格, 有5个连续胜利。 
{
if(state[player][m][n]==1)
   {
    jishu++;
    if(jishu>=5)
    {
    gotoxy(1,1);
    printf("最后落子者胜利");
}
   
}
   else
    jishu=0;
   
if(m>0&&n>0)
{
m-=i-x;
n-=j-y;
}
else
break; 

}
}



}


void main()
{
system("mode con cols=64 lines=33");//调整窗口大小 
system("color E1");//调整窗口指颜色 
qipan();
while(1)
{
move();
}
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值