• C语言:连连看


    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    #include<time.h>
    #include<math.h>
    int aa[8][8]={0},b[6]={0};
    void Produce()//随机产生
    {
    int i,j,h=1;
    srand(time(NULL));
    for(i=1;i<6;i++)
    for(j=1;j<7;j++)
    {
    aa[i][j]=1+rand()%6;
    b[aa[i][j]-1]++;
    }
    for(i=0,j=1;i<6&&j<7;i++,j++)
    {
    if(b[i]%2!=0)
    aa[6][j]=i+1;
    else
    aa[6][j]=7;
    }
    }
    void Show()//
    {
    int i,j,m;
    system("cls");
    for(i=0;i<8;i++)
    {
    for(j=0;j<8;j++)//输出图
    {
    if(aa[i][j]==0)printf("");
    if(aa[i][j]==1)printf("¤");
    if(aa[i][j]==2)printf("");
    if(aa[i][j]==3)printf("");
    if(aa[i][j]==4)printf("");
    if(aa[i][j]==5)printf("Θ");
    if(aa[i][j]==6)printf("Ф");
    if(aa[i][j]==7)printf("");
    if(j==7)
    {
    printf("");
    }
    }
    for(m=0;m<8;m++)//输出坐标
    {
    if(aa[i][m]==0)
    printf("");
    if(aa[i][m]!=0)
    printf("<%d,%d>",i,m);
    if(m==7)
    printf("\n");
    }
    }
    }
    void Fun(int a,int b,int a1,int b1)
    {
    int arow[2],aline[2],brow[2],bline[2];
    int start=0,end=0,m;
    int i,j,n;
    for(i=0;i<2;i++)
    {
    arow[i]=a;
    brow[i]=a1;
    aline[i]=b;
    bline[i]=b1;
    }
    ////////////////////////////与 a 所在行有关的列
    for(i=a+1;i<10;i++)
    {
    if(aa[i][b]==0)
    arow[1]=i;
    else
    break;
    }
    for(i=a-1;i>=0;i--)
    {
    if(aa[i][b]==0)
    arow[0]=i;
    else
    break;
    }
    ////////////////////////////与 a1 所在行有关的列
    for(i=a1+1;i<10;i++)
    {
    if(aa[i][b1]==0)
    brow[1]=i;
    else
    break;
    }
    for(i=a1-1;i>=0;i--)
    {
    if(aa[i][b1]==0)
    brow[0]=i;
    else
    break;
    }
    ////////////////////////////与 b 所在行有关的行
    for(i=b+1;i<10;i++)
    {
    if(aa[a][i]==0)
    aline[1]=i;
    else
    break;
    }
    for(i=b-1;i>=0;i--)
    {
    if(aa[a][i]==0)
    aline[0]=i;
    else
    break;
    }
    ////////////////////////////与 b1 所在行有关的行
    for(i=b1+1;i<10;i++)
    {
    if(aa[a1][i]==0)
    bline[1]=i;
    else
    break;
    }
    for(i=b1-1;i>=0;i--)
    {
    if(aa[a1][i]==0)
    bline[0]=i;
    else
    break;
    }

    if(brow[0]>=arow[0])
    start=brow[0];
    else
    start=arow[0];
    if(brow[1]<=arow[1])
    end=brow[1];
    else
    end=arow[1];

    for(;start<=end;start++)
    {
    if(b<b1)
    {
    j=b;
    i=b1;
    }
    else
    {
    j=b1;
    i=b;
    }
    for(n=0;j<i;j++)
    {
    if(aa[start][j]==0)
    n++;
    else
    break;
    }
    if((n==b-b1)&&(n>0))
    aa[a][b]=aa[a1][b1]=0;
    if((n==b1-b)&&(n>0))
    aa[a][b]=aa[a1][b1]=0;
    }
    if(aline[0]>=bline[0])
    start=aline[0];
    else
    start=bline[0];
    if(aline[1]<bline[1])
    end=aline[1];
    else
    end=bline[1];

    for(i=start;i<=end;i++)
    {
    for(j=a,n=0;j<a1;j++)
    {
    if(aa[j][i]==0)
    n++;
    else
    break;
    }
    if(n==a1-a&&n>0)
    {
    aa[a][b]=aa[a1][b1]=0;
    break;
    }
    }
    if(a==a1)//一条线(横坐标相同)
    for(i=b;i<b1;i++)
    if(abs(b-b1)==1||aa[a][i]==0)
    aa[a][b]=aa[a1][b1]=0;
    else
    if(b==b1)//一条线(纵坐标相同)
    for(i=a;i<a1;i++)
    if(abs(a-a1)==1||aa[i][b]==0)
    aa[a][b]=aa[a1][b1]=0;
    }
    void Play()//输入坐标
    {
    int a,b,a1,b1;
    puts("\n输入坐标 格式:1 2,1 3");
    scanf("%d %d,%d %d",&a,&b,&a1,&b1);
    if(aa[a][b]==aa[a1][b1])
    {
    if(a<=a1)
    Fun(a,b,a1,b1);
    else
    Fun(a1,b1,a,b);
    }
    }
    void ReForm()//重排
    {
    int k,p,q,p2,q2,t;
    srand(time(NULL));
    k=40;
    while(k--)//k控制随机的程度
    {
    p=rand()%(8-1)+1;
    q=rand()%(8-1)+1;
    p2=rand()%(8-1)+1;
    q2=rand()%(8-1)+1;
    if(q==8-1||q2==8-1||p==8-1||p2==8-1)
    continue;
    t=aa[p][q];
    aa[p][q]=aa[p2][q2];
    aa[p2][q2]=t;
    }
    }
    int Exit() //游戏完成退出
    {
    int i,j;
    for(i=0;i<8;i++)
    {
    for(j=0;j<8;j++)
    if(aa[i][j]!=0)
    return 1;
    }
    puts("You win !!!");
    return 0;
    }
    void Menu()
    {
    char a;
    Show();
    puts("选项:");
    puts(" a 输入坐标");
    puts(" b 重新排列");
    puts(" c 重新开始");
    puts(" d 退 出");
    a=getch();
    switch(a)
    {
    case 'a'://输入坐标
    Play();
    break;
    case 'b'://重排
    ReForm();
    break;
    case 'c'://重新开始
    Produce();
    Show();
    break;
    case 'd'://退出
    exit(1);
    break;
    }
    }
    void main()
    {
    Produce();
    Show();
    do
    {
    Menu();
    }
    while(Exit());
    }
  • 相关阅读:
    从零开始写一个Tomcat(贰)--建立动态服务器
    从零开始写一个Tomcat(壹)
    struts2,hibernate,spring整合笔记(4)--struts与spring的整合
    struts2,hibernate,spring整合笔记(3)
    struts2,hibernate,spring整合笔记(2)
    struts2,hibernate,spring整合笔记(1)
    ANSYS018.1案例 三维冷热水混合器流体仿真
    详细分析小米抢购软件的实现步骤
    12306改版之后简单抢票软件的实现(二)完结
    12306改版之后简单抢票软件的实现
  • 原文地址:https://www.cnblogs.com/gaorui/p/2274924.html
Copyright © 2020-2023  润新知