鱼C论坛

 找回密码
 立即注册
查看: 1154|回复: 4

[技术交流] 一个五子棋代码

[复制链接]
发表于 2019-12-29 18:23:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

Hello,大家好,刚学完C写了一个五子棋,目前是1.0版本有不足之处还请指正
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#define length 15//棋盘的大小
#define width 15
int x=length/2,y=width/2;//光标的起始位置
int k=1;//k是用来判断玩家是谁,k为奇数为玩家一,k为偶数为玩家2
char chessboard[length][width]={0};//棋盘
char stus[2][20];//玩家名字
int n=0;//n=0为正常棋盘,n=1则为黑子,n=2则为白子
int main(void)
{
        void start();//棋盘界面
        void accessment();//判断谁先五子
        void welcome();//开始界面
        void wanjia();//谁在下棋
        char choice;
        char ch;//操作命令
        SetConsoleTitle("五子棋");//设置标题
        system("color 0A");//背景颜色
        welcome();
        system("mode con cols=45 lines=20");//控制台大小
        system("color E0");
        while(1)//死循环
        {
                system("cls");//清屏
                start();
                wanjia();
                accessment();
                system("cls");
                start();
                wanjia();
                ch=getch();
                switch(ch)//扫描键盘码
                {
                case 27://ESC
                        exit(0);
                        break;
                case 72://上
                        if(x==0)
                                x=length;
                        x--;
                        break;
                case 80://下
                        if(x==length-1)
                                x=-1;
                        x++;
                        break;
                case 77://右
                        if(y==width-1)
                                y=-1;
                        y++;
                        break;
                case 75://左
                        if(y==0)
                                y=width;
                        y--;
                        break;
                case 32://空格
                        if(chessboard[x][y]==0)//判断这个位置没有落子
                        {
                                n++;
                                k++;
                                if(n==1)
                                        chessboard[x][y]=1;
                                if(n==2)
                                {
                                        chessboard[x][y]=2;
                                        n=0;
                                }
                        }
                        else//如果落过子
                        {
                                system("cls");
                                system("color 74");
                                printf("不许耍赖!\n");
                                system("pause");
                                fflush(stdin);//清空键盘缓冲区
                                printf("还要玩吗(Y/N):");
                                scanf("%c",&choice);
                                if(choice=='Y'||choice=='y')
                                {
                                        system("color E0");
                                }
                                else if(choice=='N'||choice=='n')
                                {
                                        system("pause");
                                        exit(0);
                                }
                                else
                                {
                                        printf("gg!\n");
                                        system("pause");
                                        exit(0);
                                }
                        }
                }
        }
        return 0;
}
void start()
{
        int i,j;
        for(i=0;i<length;i++)
        {
                for(j=0;j<width;j++)
                {
                        if((i==x)&&(j==y))
                                printf("╬");
                        else if(chessboard[i][j]==1)
                                printf("●");
                        else if(chessboard[i][j]==2)
                                printf("○");
                        else if(i==0&&j==0)
                                printf("┌");
                        else if(i==0&&j==width-1)
                                printf("┐");
                        else if(i==0)
                                printf("┬");
                        else if(i==length-1&&j==0)
                                printf("└");
                        else if(j==0)
                                printf("├");
                        else if(i==length-1&&j==width-1)
                                printf("┘");
                        else if(i==length-1)
                                printf("┴");
                        else if(j==width-1)
                                printf("┤");
                        else
                                printf("┼");
                       
                }
                printf("\n");
        }
}
void accessment()
{
        int i,j;
        for(i=0;i<length;i++)//判断横着的
                for(j=0;j+4<width;j++)
                {
                        if(chessboard[i][j]==1&&chessboard[i][j+1]==1&&chessboard[i][j+2]==1&&chessboard[i][j+3]==1&&chessboard[i][j+4]==1)
                        {
                                system("cls");
                                printf("黑子胜利\n");
                                system("pause");
                                for(i=0;i<length;i++)
                                        for(j=0;j<width;j++)
                                                chessboard[i][j]=0;
                                        n=0;
                                        k=1;
                        }
                        if(chessboard[i][j]==2&&chessboard[i][j+1]==2&&chessboard[i][j+2]==2&&chessboard[i][j+3]==2&&chessboard[i][j+4]==2)
                        {
                                system("cls");
                                printf("白子胜利\n");
                                system("pause");
                                for(i=0;i<length;i++)
                                        for(j=0;j<width;j++)
                                                chessboard[i][j]=0;
                                        n=0;
                                        k=1;
                        }
                }
                for(i=0;i+4<length;i++)//判断竖着的
                        for(j=0;j<width;j++)
                        {
                                if(chessboard[i][j]==1&&chessboard[i+1][j]==1&&chessboard[i+2][j]==1&&chessboard[i+3][j]==1&&chessboard[i+4][j]==1)
                                {
                                        system("cls");
                                        printf("黑子胜利\n");
                                        system("pause");
                                        for(i=0;i<length;i++)
                                                for(j=0;j<width;j++)
                                                        chessboard[i][j]=0;
                                                n=0;
                                                k=1;
                                }
                                if(chessboard[i][j]==2&&chessboard[i+1][j]==2&&chessboard[i+2][j]==2&&chessboard[i+3][j]==2&&chessboard[i+4][j]==2)
                                {
                                        system("cls");
                                        printf("白子胜利\n");
                                        system("pause");
                                        for(i=0;i<length;i++)
                                                for(j=0;j<width;j++)
                                                        chessboard[i][j]=0;
                                                n=0;
                                                k=1;
                                }
                        }
                        //判断斜着的
                        for(i=0;i<length;i++)
                                for(j=0;j<width;j++)
                                {
                                        //左上角\型
                                        if(chessboard[i][j]==1&&chessboard[i+1][j+1]==1&&chessboard[i+2][j+2]==1&&chessboard[i+3][j+3]==1&&chessboard[i+4][j+4]==1)
                                        {
                                                system("cls");
                                                printf("黑子胜利\n");
                                                system("pause");
                                                for(i=0;i<length;i++)
                                                        for(j=0;j<width;j++)
                                                                chessboard[i][j]=0;
                                                        n=0;
                                                        k=1;
                                        }
                                        //左下角/型
                                        if(chessboard[i][j]==1&&chessboard[i-1][j+1]==1&&chessboard[i-2][j+2]==1&&chessboard[i-3][j+3]==1&&chessboard[i-4][j+4]==1)
                                        {
                                                system("cls");
                                                printf("黑子胜利\n");
                                                system("pause");
                                                for(i=0;i<length;i++)
                                                        for(j=0;j<width;j++)
                                                                chessboard[i][j]=0;
                                                        n=0;
                                                        k=1;
                                        }
                                        //左上角\型
                                        if(chessboard[i][j]==2&&chessboard[i+1][j+1]==2&&chessboard[i+2][j+2]==2&&chessboard[i+3][j+3]==2&&chessboard[i+4][j+4]==2)
                                        {
                                                system("cls");
                                                printf("白子胜利\n");
                                                system("pause");
                                                for(i=0;i<length;i++)
                                                        for(j=0;j<width;j++)
                                                                chessboard[i][j]=0;
                                                        n=0;
                                                        k=1;
                                        }
                                        //左下角/型
                                        if(chessboard[i][j]==2&&chessboard[i-1][j+1]==2&&chessboard[i-2][j+2]==2&&chessboard[i-3][j+3]==2&&chessboard[i-4][j+4]==2)
                                        {
                                                system("cls");
                                                printf("白子胜利\n");
                                                system("pause");
                                                for(i=0;i<length;i++)
                                                        for(j=0;j<width;j++)
                                                                chessboard[i][j]=0;
                                                        n=0;
                                                        k=1;
                                        }
                                }
}
void wanjia()
{
        if(k%2!=0)//k是奇数
                printf("△玩家%s正在下棋\n",stus[0]);
        else//k是偶数
                printf("▽玩家%s正在下棋\n",stus[1]);
}
void welcome()
{
        int help;
        printf("*************************************************\n");
        printf("******欢迎来到史上最牛逼的五子棋游戏系统v1.0*****\n");
        printf("***********先给自己起个帅气逼人的名字吧!*********\n");
        printf("*************************************************\n");
        printf("玩家1:");
        gets(stus[0]);
        printf("玩家2:");
        gets(stus[1]);
        printf("需要查看帮助吗(Y/N):");
        help=getchar();
        if(help=='Y'||help=='y')
        {
                printf("**********************************************\n");
                printf("************1.移动方向键控制棋子的位置********\n");
                printf("************2.按空格键下子********************\n");
                printf("************3.按ESC退出***********************\n");
                printf("************4.按空格正式开始******************\n");
                printf("**********************************************\n");
        }
        system("pause");
        printf("祝您游玩愉快!");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-12-29 18:25:32 | 显示全部楼层
在图书馆写了快一天,大家多支持下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-29 19:35:24 | 显示全部楼层
C学了多久呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 22:30:05 From FishC Mobile | 显示全部楼层
Chen-tf 发表于 2019-12-29 19:35
C学了多久呀

3个多月了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-31 00:18:12 From FishC Mobile | 显示全部楼层
没人看吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表