再解炸弹人

#include<stdio.h>
struct note
{
    int x;//横坐标
    int y;//纵坐标
};
char a[20][21];//用来存储地图
int getnum(int i,int j)
{
    int sum,x,y;
    sum=0;//sum用来计数消灭的敌人,所以每次要初始化
    //将坐标i,j复制到两个新的变量x,y中,便于想上下左右统计可以消灭的敌人数
    //向上统计可以消灭的敌人数
    x=i;
    y=j;
    while(a[x][y]!='#')//判断是不是墙,如果不是墙就继续
    {
        //如果当前点是敌人,则进行计数
        if(a[x][y]=='G')
            sum++;
        //x--的作用是继续向上统计
        x--;
    }

    //向下统计可以消灭的敌人数
    x=i;
    y=j;
    while(a[x][y]!='#')
    {
        if(a[x][y]=='G')
            sum++;
        //x++的作用是继续向下统计
        x++;
    }
    //向左统计可以消灭的敌人数

    x=i;
    y=j;
    while(a[x][y]!='#')
    {
        if(a[x][y]=='G')
            sum++;
        //y--的作用是继续向左统计
        y--;
    }

    //向右统计可以消灭的敌人数
    x=i;
    y=j;
    while(a[x][y]!='#')
    {
        if(a[x][y]=='G')
            sum++;
        //y++的作用是继续向右统计
        y++;
    }
    return sum;
}
int main()
{
    struct note que[401];//假设这里的地图大小超过20*20
    int head,tail;
    int book[20][20]= {0}; //定义一个标技术组并全部初始化为0
    int i,j,k,sum,max=0,mx,my,n,m,startx,starty,tx,ty;
    //定义一个用于表示走的方向的数组
    int next[4][2]= {{0,1},//向右走
        {1,0},  //向下走
        {0,-1},//向左走
        {-1,0}
    };//向上走
    //读入n和m,n表示行数,m表示列
    scanf("%d%d%d%d",&n,&m,&startx,&starty);
    //读入n行字符
    for(i=0; i<n; i++)
        scanf("%s",a[i]);
    //队列初始化
    head=1;
    tail=1;
    //往队列中小人的起始坐标
    que[tail].x=startx;
    que[tail].y=starty;
    tail++;
    book[startx][starty]=1;
    max=getnum(startx,starty);
    mx=startx;
    my=starty;
    //当队列不为空的时候循环
    while(head<tail)
    {
        //枚举4个方向
        for(k=0; k<=3; k++)
        {
            //尝试走的下一个点的坐标
            tx=que[tail].x+next[k][0];
            ty=que[tail].x+next[k][1];
            //判断是否越界
            if(tx<0||tx>n-1||ty<0||ty>m-1)
                continue;
            //判断是否为平地或者曾经走过
            if(a[tx][ty]=='.'&&book[tx][ty]==0)
            {
                //每个点只入对一次,所以要标记这个点已经走过
                book[tx][ty]=1;
                //输入新扩展的点到队列中
                que[tail].x=tx;
                que[tail].y=ty;
                tail++;

                //统计当前新扩展的点可以消灭敌人的总数目
                sum=getnum(tx,ty);
                //更新max的值
                if(sum>max)
                {
                    max=sum;
                    mx=tx;
                    my=ty;
                }
            }
        }
        head++;//注意这地方千万不要忘记,当一个点扩展结束后,必须要head++才能对后面的点进行扩展
    }
    printf("将炸弹放置在(%d,%d)处,可以消灭%d个敌人\n",mx,my,max);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity是一款跨平台的游戏开发引擎,可以用来制作各种类型的游戏,包括3D炸弹人。 首先,我们需要使用Unity的3D建模工具来创建炸弹人的角色模型。我们可以使用简单的几何图形,如立方体和球体,来构建角色的身体、头部、四肢等部分。然后,我们可以为角色添加纹理和材质,使其看起来更加逼真。 接下来,我们需要为炸弹人添加动画。Unity提供了强大的动画制作工具,可以使角色能够行走、跳跃、爆炸等。我们可以使用关键帧动画或骨骼动画来实现这些动作,从而让角色在游戏中能够有生动的表现。 然后,我们需要创建游戏的场景。可以使用Unity提供的场景编辑器,通过添加地图和障碍物来设计游戏背景。我们可以设置每个障碍物的属性,如是否可以被炸毁、是否可以被穿过等。 接着,我们需要为游戏添加一些规则和机制。例如,当炸弹人触碰到炸弹时会触发爆炸,炸弹的爆炸范围内的障碍物会被摧毁,等等。通过使用Unity的脚本编程功能,我们可以为角色和物体添加交互逻辑,从而让游戏更加有趣和挑战。 最后,我们需要为游戏增加音效和背景音乐,以及一些界面和用户操作的元素。可以使用Unity的音频编辑器来添加音效,通过添加按钮、计分牌等UI元素来增强游戏的可玩性。 总之,利用Unity制作3D炸弹人需要进行模型建立、动画制作、场景设计、脚本编程以及音效等方面的工作,但凭借Unity强大的功能和友好的用户界面,我们可以相对容易地完成这个任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值