博客主页 🐟
C语言------(游戏)扫雷
C语言------(游戏)扫雷

Author:

©

Wordage:

共计 6877 字

needs:

约 1 分钟

Popular:

175 ℃

Created:

目 录
    #include<stdio.h>
    #include<math.h>
    #include<time.h>
    #include<stdlib.h>
    main()
    {
    char a[102][102],b[102][102],c[102][102],w;
    int i,j; /*循环变量*/
    int x,y,z[999]; /*雷的位置*/
    int t,s; /*标记*/
    int m,n,lei; /*计数*/
    int u,v; /*输入*/
    int hang,lie,shu,choice; /*自定义*/
    srand((int)time(NULL));
    h:
    /*选择模式*/
    printf("请选择模式\n1.标准 2.自定义\n");
    scanf("%d",&choice);
    if(choice==2)
    {
    do
    {
    t=0;
    printf("请输入\n行数 列数 雷的个数\n");
    scanf("%d%d%d",&hang,&lie,&shu);
    if(hang<2)
    {
    printf("行数太少\n");
    t=1;
    }
    if(hang>100)
    {
    printf("行数太多\n");
    t=1;
    }
    if(lie<2)
    {
    printf("列数太少\n");
    t=1;
    }
    if(lie>100)
    {
    printf("列数太多\n");
    t=1;
    }
    if(shu<1)
    {
    printf("至少要有一个雷\n");
    t=1;
    }
    if(shu>=(hang*lie))
    {
    printf("雷太多了\n");
    t=1;
    }
    }
    while(t==1);
    }
    else
    {
    hang=10,lie=10,shu=10;
    }
    /*确定雷的位置*/
    for(i=1;i<=shu;i=i+1)
    {
    do
    {
    t=0;
    z[i]=rand()%(hang*lie);
    for(j=1;j<i;j=j+1)
    {
    if(z[i]==z[j])
    t=1;
    }
    }
    while(t==1);
    }
    /*初始化a,b,c*/
    for(i=0;i<=hang+1;i=i+1)
    {
    for(j=0;j<=lie+1;j=j+1)
    {
    a[i][j]='1';
    b[i][j]='1';
    c[i][j]='0';
    }
    }
    for(i=1;i<=hang;i=i+1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    a[i][j]='+';
    }
    }
    /*把雷放入c*/
    for(i=1;i<=shu;i=i+1)
    {
    x=z[i]/lie+1;
    y=z[i]%lie+1;
    c[x][y]='#';
    }
    /*计算b中数字*/
    for(i=1;i<=hang;i=i+1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    m=48;
    if(c[i-1][j-1]=='#')
    m=m+1;
    if(c[i][j-1]=='#')
    m=m+1;
    if(c[i-1][j]=='#')
    m=m+1;
    if(c[i+1][j+1]=='#')
    m=m+1;
    if(c[i][j+1]=='#')
    m=m+1;
    if(c[i+1][j]=='#')
    m=m+1;
    if(c[i+1][j-1]=='#')
    m=m+1;
    if(c[i-1][j+1]=='#')
    m=m+1;
    b[i][j]=m;
    }
    }
    /*把雷放入b中*/
    for(i=1;i<=shu;i=i+1)
    {
    x=z[i]/lie+1;
    y=z[i]%lie+1;
    b[x][y]='#';
    }
    /*游戏设计*/
    lei=shu;
    do
    {
    g:
    /*输出*/
    printf(" ");
    for(i=1;i<=lie;i=i+1)
    {
    w=(i-1)/10+48;
    printf("%c",w);
    w=(i-1)%10+48;
    printf("%c ",w);
    }
    printf("\n |");
    for(i=1;i<=lie;i=i+1)
    {
    printf("---|");
    }
    printf("\n");
    for(i=1;i<=hang;i=i+1)
    {
    w=(i-1)/10+48;
    printf("%c",w);
    w=(i-1)%10+48;
    printf("%c |",w);
    for(j=1;j<=lie;j=j+1)
    {
    if(a[i][j]=='0')
    printf(" |");
    else
    printf(" %c |",a[i][j]);
    }
    if(i==2)
    printf(" 剩余雷个数");
    if(i==3)
    printf(" %d",lei);
    printf("\n |");
    for(j=1;j<=lie;j=j+1)
    {
    printf("---|");
    }
    printf("\n");
    }
    /*输入*/
    scanf("%d%c%d",&u,&w,&v);
    u=u+1,v=v+1;
    if(w!='#'&&a[u][v]=='f')
    goto g;
    if(w=='#')
    {
    if(a[u][v]=='+')
    {
    a[u][v]='f';
    lei=lei-1;
    }
    else if(a[u][v]=='f')
    {
    a[u][v]='?';
    lei=lei+1;
    }
    else if(a[u][v]=='?')
    {
    a[u][v]='+';
    }
    goto g;
    }
    a[u][v]=b[u][v];
    /*打开0区*/
    f:
    t=0;
    if(a[u][v]=='0')
    {
    for(i=1;i<=hang;i=i+1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    s=0;
    if(a[i-1][j-1]=='0')
    s=1;
    if(a[i-1][j+1]=='0')
    s=1;
    if(a[i-1][j]=='0')
    s=1;
    if(a[i+1][j-1]=='0')
    s=1;
    if(a[i+1][j+1]=='0')
    s=1;
    if(a[i+1][j]=='0')
    s=1;
    if(a[i][j-1]=='0')
    s=1;
    if(a[i][j+1]=='0')
    s=1;
    if(s==1)
    a[i][j]=b[i][j];
    }
    }
    for(i=1;i<=hang;i=i+1)
    {
    for(j=lie;j>=1;j=j-1)
    {
    s=0;
    if(a[i-1][j-1]=='0')
    s=1;
    if(a[i-1][j+1]=='0')
    s=1;
    if(a[i-1][j]=='0')
    s=1;
    if(a[i+1][j-1]=='0')
    s=1;
    if(a[i+1][j+1]=='0')
    s=1;
    if(a[i+1][j]=='0')
    s=1;
    if(a[i][j-1]=='0')
    s=1;
    if(a[i][j+1]=='0')
    s=1;
    if(s==1)
    a[i][j]=b[i][j];
    }
    }
    for(i=hang;i>=1;i=i-1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    s=0;
    if(a[i-1][j-1]=='0')
    s=1;
    if(a[i-1][j+1]=='0')
    s=1;
    if(a[i-1][j]=='0')
    s=1;
    if(a[i+1][j-1]=='0')
    s=1;
    if(a[i+1][j+1]=='0')
    s=1;
    if(a[i+1][j]=='0')
    s=1;
    if(a[i][j-1]=='0')
    s=1;
    if(a[i][j+1]=='0')
    s=1;
    if(s==1)
    a[i][j]=b[i][j];
    }
    }
    for(i=hang;i>=1;i=i-1)
    {
    for(j=lie;j>=1;j=j-1)
    {
    s=0;
    if(a[i-1][j-1]=='0')
    s=1;
    if(a[i-1][j+1]=='0')
    s=1;
    if(a[i-1][j]=='0')
    s=1;
    if(a[i+1][j-1]=='0')
    s=1;
    if(a[i+1][j+1]=='0')
    s=1;
    if(a[i+1][j]=='0')
    s=1;
    if(a[i][j-1]=='0')
    s=1;
    if(a[i][j+1]=='0')
    s=1;
    if(s==1)
    a[i][j]=b[i][j];
    }
    }
    /*检测0区*/
    for(i=1;i<=hang;i=i+1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    if(a[i][j]=='0')
    {
    if(a[i-1][j-1]=='+'||a[i-1][j-1]=='f'||a[i-1][j-1]=='?')
    t=1;
    if(a[i-1][j+1]=='+'||a[i-1][j+1]=='f'||a[i-1][j+1]=='?')
    t=1;
    if(a[i+1][j-1]=='+'||a[i+1][j-1]=='f'||a[i+1][j-1]=='?')
    t=1;
    if(a[i+1][j+1]=='+'||a[i+1][j+1]=='f'||a[i+1][j+1]=='?')
    t=1;
    if(a[i+1][j]=='+'||a[i+1][j]=='f'||a[i+1][j]=='?')
    t=1;
    if(a[i][j+1]=='+'||a[i][j+1]=='f'||a[i][j+1]=='?')
    t=1;
    if(a[i][j-1]=='+'||a[i][j-1]=='f'||a[i][j-1]=='?')
    t=1;
    if(a[i-1][j]=='+'||a[i-1][j]=='f'||a[i-1][j]=='?')
    t=1;
    }
    }
    }
    if(t==1)
    goto f;
    }
    /*检查结束*/
    n=0;
    for(i=1;i<=hang;i=i+1)
    {
    for(j=1;j<=lie;j=j+1)
    {
    if(a[i][j]!='+'&&a[i][j]!='f'&&a[i][j]!='?')
    n=n+1;
    }
    }
    }
    while(a[u][v]!='#'&&n!=(hang*lie-shu));
    /*游戏结束*/
    for(i=1;i<=shu;i=i+1)
    {
    x=z[i]/lie+1;
    y=z[i]%lie+1;
    a[x][y]='#';
    }
    printf(" ");
    for(i=1;i<=lie;i=i+1)
    {
    w=(i-1)/10+48;
    printf("%c",w);
    w=(i-1)%10+48;
    printf("%c ",w);
    }
    printf("\n |");
    for(i=1;i<=lie;i=i+1)
    {
    printf("---|");
    }
    printf("\n");
    for(i=1;i<=hang;i=i+1)
    {
    w=(i-1)/10+48;
    printf("%c",w);
    w=(i-1)%10+48;
    printf("%c |",w);
    for(j=1;j<=lie;j=j+1)
    {
    if(a[i][j]=='0')
    printf(" |");
    else
    printf(" %c |",a[i][j]);
    }
    /*if(i==2)
    printf(" 剩余雷个数");
    if(i==3)
    printf(" %d",lei);*/
    printf("\n |");
    for(j=1;j<=lie;j=j+1)
    {
    printf("---|");
    }
    printf("\n");
    }
    if(n==(hang*lie-shu))
    printf("success!\n");
    else
    printf("game over!\n");
    printf("重玩请输入1\n");
    t=0;
    scanf("%d",&t);
    if(t==1)
    goto h;
    } 
文章二维码
C语言------(游戏)扫雷
共计 0 条评论,点此发表评论
博客主页 哀.net OωO
萌ICP备20238808号 本站已运行 1 年 209 天 3 小时 31 分 Copyright © 2023 ~ 2024. 哀.net All rights reserved.
打赏图
打赏博主
欢迎
搜 索
足 迹
分 类
  • 默认分类
  • 语言分类
  • 其他分类