| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 340 人关注过本帖
标题:fivechess
只看楼主 加入收藏
lovejj23
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2011-4-17
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
fivechess
#include <stdio.h>
char str[10][10];
void init()
{
    int i,j;
    printf("  ");
    for(i=0;i<10;i++)
        printf("%2d",i+1);   
    printf("\n");
    for(i=0;i<10;i++)
    {
        printf("%2d",i+1);
        for(j=0;j<10;j++)
        {
            str[i][j]='_';
            printf("%2c",str[i][j]);
        }
        printf("\n");
    }
}
void print()
{
    int i;
    int j;
    printf("  ");
    for(i=0;i<10;i++)
        printf("%2d",i+1);   
    printf("\n");
    for(i=0;i<10;i++)
    {
        printf("%2d",i+1);
        for(j=0;j<10;j++)
        {
            printf("%2c",str[i][j]);
        }
        printf("\n");
    }
}

bool tell(int i,int j)
{
    if(str[i][j]!='_')
        return 0;
    return 1;

}

int drew(char c,int x,int y)
{
    if(tell(x,y))
    {
        str[x][y]=c;
        print();
        return 0;
    }
    else
    {
        printf("输入有误!\n");
        return 1;
    }
   
}
int defi(char c,int x, int y)
{
    int nu1 = 0;
    int nu2 = 0;
    int i;
    int flag=0;
   
    while(1)
    {
        /*************水平方向检测************/
        for(i=0;str[x][y+i]==c;i++)
        {
            if(y+i>9)
                break;
            if(str[x][y+i]==c)
                nu1++;
        }   
        for(i=1;str[x][y-i]==c;i++)
        {
            if(y-i<0)
                break;
            if(str[x][y-i]==c)
                nu2++;
        }
        if(nu2+nu1>=5)
        {
            flag = 1;
            break;
        }
        /*************垂直方向检测************/
        nu1=0;
        nu2=0;
        for(i=0;str[x+i][y]==c;i++)
        {
            if(y+i>9)
                break;
            if(str[x+i][y]==c)
                nu1++;
        }   
        for(i=1;str[x-i][y]==c;i++)
        {
            if(x-i<0)
                break;
            if(str[x-i][y]==c)
                nu2++;
        }
        if(nu2+nu1>=5)
        {
            flag = 1;
            break;
        }
        /*************二、四象限检测************/
        nu1=0;
        nu2=0;
        for(i=0;str[x+i][y+i]==c;i++)
        {
            if(y+i>9||x+i>9)
                break;
            if(str[x+i][y+i]==c)
                nu1++;
        }   
        for(i=1;str[x-i][y-i]==c;i++)
        {
            if(x-i<0||y-i<0)
                break;
            if(str[x-i][y-i]==c)
                nu2++;
        }
        if(nu2+nu1>=5)
        {
            flag = 1;
            break;
        }
        /*************一、三象限检测************/
        nu1=0;
        nu2=0;
        for(i=0;str[x+i][y-i]==c;i++)
        {
            if(y-i<0||x+i>9)
                break;
            if(str[x+i][y-i]==c)
                nu1++;
        }   
        for(i=1;str[x-i][y+i]==c;i++)
        {
            if(x-i<0||y+i>9)
                break;
            if(str[x-i][y+i]==c)
                nu2++;
        }
        if(nu2+nu1>=5)
        {
            flag = 1;
            break;
        }
        break;
    }
    if(flag==1)
        return 1;
    return 0;
}
void game()
{
    int x,y;
   
    while(1)
    {
        int d=1;
        while(d)
        {
            printf("黑棋落子!请输入坐标:\n");
            scanf("%d %d",&x,&y);
            d=drew('X',x-1,y-1);
        }
        if(defi('X',x-1,y-1))    //判断胜负函数
        {
            printf("黑子获胜!");
            break;
        }
        int b=1;
        while(b)
        {   
            printf("白棋落子!请输入坐标:\n");
            scanf("%d %d",&x,&y);               
            b=drew('O',x-1,y-1);
        }
        if(defi('O',x-1,y-1))    //判断胜负函数
        {
            printf("白子获胜!");
            break;
        }
    }
}

void main()
{
    init();
    game();

}
发个简易的五子棋 麻烦有兴趣的朋友帮测试下
搜索更多相关主题的帖子: include 
2011-06-30 19:02
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:10 
测试了,顶楼主啊
要是把界面再做下就好了··
2011-06-30 21:56
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:10 
2011-07-01 09:29
lovejj23
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2011-4-17
收藏
得分:0 
回复 楼主 lovejj23
呵呵 谢谢了 随意写的个作业没来得及测试
2011-07-04 19:48
loveshuang
Rank: 9Rank: 9Rank: 9
来 自:湖北武汉
等 级:蜘蛛侠
帖 子:270
专家分:1198
注 册:2010-11-14
收藏
得分:0 
       好东西。。。
2011-07-05 01:30
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:0 
怎样判断五个同样的棋子是否连成线?
2011-07-05 08:01
lovejj23
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2011-4-17
收藏
得分:0 
回复 6楼 hjywyj
中间有一段写了注释的代码 你可以看看就是4个方向的检测
2011-07-05 08:32
lccwyj
Rank: 4
等 级:业余侠客
帖 子:71
专家分:203
注 册:2011-5-6
收藏
得分:0 
回复 7楼 lovejj23
楼主,看不太懂,穷举为啥不行?
2011-07-05 09:04
lovejj23
Rank: 2
等 级:论坛游民
帖 子:20
专家分:41
注 册:2011-4-17
收藏
得分:0 
回复 8楼 lccwyj
没尝试过穷举,感觉那个可能会有点费时了,我做的时候想的是结合实际一点,既然规则如此就按游戏规则写算法的
2011-07-05 17:58
快速回复:fivechess
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044385 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved