最新文章:

首页 C/C++

数据结构五子棋(然而就用了二维数组,没有啥数据结构)

发布时间:2018年09月03日 评论数:抢沙发 阅读数:366

    话不多说先上图

    主要功能就是两方下子,加了下子边界判断,以及重复落子判断(说白了就是15X15棋盘,下子坐标只能是0-14.然后已经有子了的点再放就会提示错误)

    然后当一方五子连珠就会结束游戏,不然就会一直循环下去(懒得写满盘判出了,加个二维数组全遍历函数就可以,如果整个数组放满了就跳出程序。。懒得写了。)

    上源码:亲测可直接运行,如果发现bug请留言

    #include<iostream>
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    #define STACK_SIZE 130 //题目给出长度最长胃128
    using namespace std;
    char Checkerboard[15][15];
    
    void init(){ //初始化棋盘
        int i,j;
        printf("************五子棋游戏****************\n");
        for(i=0;i<15;i++){
            for(j=0;j<15;j++){
                Checkerboard[i][j] = '_';
                printf("%c ",Checkerboard[i][j]);
            }
            printf("\n");
        }
    }
    void menu(){ //每次下子后更新棋盘
        system("cls");
        int i,j;
        printf("************五子棋游戏****************\n");
        for(i=0;i<15;i++){
            for(j=0;j<15;j++){
                printf("%c ",Checkerboard[i][j]);
            }
            printf("\n");
        }
    }
    bool Decide(int x,int y,char flag){ //四向遍历检测是否胜利
        int i=1;
        if(x-1>0&&y-1>0&&Checkerboard[x-1][y-1]==flag){//左上
            i++;
            if(x-2>0&&y-2>0&&Checkerboard[x-2][y-2]==flag){
                i++;
                if(x-3>0&&y-3>0&&Checkerboard[x-3][y-3]==flag){
                    i++;
                    if(x-4>0&&y-4>0&&Checkerboard[x-4][y-4]==flag){
                        i++;
                        return true;
                    }
                }
            }
        }
        if(x+1<15&&y+1<15&&Checkerboard[x+1][y+1]==flag){//右下
            i++;
            if(i>4){
                return true;
            }
            if(x+2<15&&y+2<15&&Checkerboard[x+2][y+2]==flag){
                i++;
                if(i>4){
                    return true;
                }
                if(x+3<15&&y+3<15&&Checkerboard[x+3][y+3]==flag){
                    i++;
                    if(i>4)
                        return true;
                    if(x+4<15&&y+4<15&&Checkerboard[x+4][y+4]==flag){
                            return true;
                    }
                }
            }
        }
        i=1;
        if(y-1>0&&Checkerboard[x][y-1]==flag){//左
            i++;
            if(y-2>0&&Checkerboard[x][y-2]==flag){
                i++;
                if(y-3>0&&Checkerboard[x][y-3]==flag){
                    i++;
                    if(y-4>0&&Checkerboard[x][y-4]==flag){
                        i++;
                        return true;
                    }
                }
            }
        }
        if(y+1<15&&Checkerboard[x][y+1]==flag){//右
            i++;
            if(i>4){
                return true;
            }
            if(y+2<15&&Checkerboard[x][y+2]==flag){
                i++;
                if(i>4){
                    return true;
                }
                if(y+3<15&&Checkerboard[x][y+3]==flag){
                    i++;
                    if(i>4)
                        return true;
                    if(y+4<15&&Checkerboard[x][y+4]==flag){
                            return true;
                    }
                }
            }
        }
        i=1;
        if(x+1<15&&y-1>0&&Checkerboard[x+1][y-1]==flag){//左下
            i++;
            if(x+2<15&&y-2>0&&Checkerboard[x+2][y-2]==flag){
                i++;
                if(x+3<15&&y-3>0&&Checkerboard[x+3][y-3]==flag){
                    i++;
                    if(x+4<15&&y-4>0&&Checkerboard[x+4][y-4]==flag){
                        i++;
                        return true;
                    }
                }
            }
        }
        if(x-1>0&&y+1<15&&Checkerboard[x-1][y+1]==flag){//右上
            i++;
            if(i>4){
                return true;
            }
            if(x-2>0&&y+2<15&&Checkerboard[x-2][y+2]==flag){
                i++;
                if(i>4){
                    return true;
                }
                if(x-3>0&&y+3<15&&Checkerboard[x-3][y+3]==flag){
                    i++;
                    if(i>4)
                        return true;
                    if(x-4>0&&y+4<15&&Checkerboard[x-4][y+4]==flag){
                            return true;
                    }
                }
            }
        }
        i=1;
        if(x+1<15&&Checkerboard[x+1][y]==flag){//下
            i++;
            if(x+2<15&&Checkerboard[x+2][y]==flag){
                i++;
                if(x+3<15&&Checkerboard[x+3][y]==flag){
                    i++;
                    if(x+4<15&&Checkerboard[x+4][y]==flag){
                        i++;
                        return true;
                    }
                }
            }
        }
        if(x-1>0&&Checkerboard[x-1][y]==flag){//上
            i++;
            if(i>4){
                return true;
            }
            if(x-2>0&&Checkerboard[x-2][y]==flag){
                i++;
                if(i>4){
                    return true;
                }
                if(x-3>0&&Checkerboard[x-3][y]==flag){
                    i++;
                    if(i>4)
                        return true;
                    if(x-4>0&&Checkerboard[x-4][y]==flag){
                            return true;
                    }
                }
            }
        }
        return false;
    }
    int main(){
        char flag = '*'; //落子方记录
        int x,y; //x为行 y为列
        init();
        while(true){ //循环下子,除非有一方胜利才退出。应该还要加个棋盘满了也退出的。懒得写了
            printf("请%c方下子:",flag);
            scanf("%d %d",&x,&y);//输入下子坐标
            if(x>15||x<0||y>15||y<0){
                printf("落子点非法。请重新输入");
                continue;
            }
            if(Checkerboard[x][y]=='#'||Checkerboard[x][y]=='*'){
                printf("该点已存在子,请重新输入");
                continue;
            }
            Checkerboard[x][y]=flag;
            menu();
            if(Decide(x,y,flag)){
                printf("%c方胜利",flag);
                break;
            }
            flag=='*'?flag='#':flag='*';
        }
        return 0;
    }
    


二维码加载中...
本文作者:HDC      文章标题: 数据结构五子棋(然而就用了二维数组,没有啥数据结构)
本文地址:http://hdcin.cn/?post=300
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论