| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1233 人关注过本帖
标题:蠕虫游戏(即贪吃蛇)
只看楼主 加入收藏
风卷浪起
Rank: 3Rank: 3
来 自:universe
等 级:论坛游侠
威 望:4
帖 子:190
专家分:149
注 册:2021-11-13
结帖率:68.18%
收藏
已结贴  问题点数:30 回复次数:6 
蠕虫游戏(即贪吃蛇)
N. 蠕虫游戏
内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述
蠕虫是一个古老的电脑游戏,它有许多版本。但所有版本都有一个共同的规则:操纵一条蠕虫在屏幕上转圈,并试着去避免撞到自己或障碍物。

这里我们将模拟一个简单的版本。游戏将在50×50的棋盘上进行,棋盘的左上角为(1,1),蠕虫在初始时是一串20个相连的方格。所谓相连是指方格在水平或垂直方向上相接。蠕虫开始时是水平地伸展开的,从(25,11)到(25,30)。其中(25,30)是它的头。蠕虫只能向东(E)、西(W)、南(s)、北(N)四个方向移动,但不能向自己移动,因此在开始时向西(W)是不允许的。每次移动时,蠕虫向给定的方向移动,一次只移一格,并且保持它的长度不变。因此只有蠕虫的头和尾所占据的方格在移动一步后被改变。注意:蠕虫的头能移动到虫尾刚刚让出的空格。

你将被给定一系列移动指令并模拟虫的移动,直到:蠕虫撞上了自己;蠕虫越出了棋盘;蠕虫成功地完成了这些指令。在前两种情况下你应当忽略剩下的指令。

输入格式
每个输入文件包含了多组数据。每个数据占2行,第1行是一个整数n(n<100),表示移动指令的指令数(以n=0表示输入结束);第2行包括了n个字符(E、W、S、N),字符之间没有空格,表示移动的指令。

输出格式
每个数据输出一行,格式为以下3种中的一种:

The worm ran into itself on move m.

The worm ran off the board on move m.

The worm successfully made all m moves.

注:m是你要决定输出的步数。

样例
输入1
18
NWWWWWWWWWWSESSSWS
20
SSSWWNENNNNNWWWWSSSS
30
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
13
SWWWWWWWWWNEE
0
输出1
The worm successfully made all 18 moves.
The worm ran into itself on move 9.
The worm ran off the board on move 21.
The worm successfully made all 13 moves.


各位大佬,求助!
搜索更多相关主题的帖子: The 游戏 输入 移动 指令 
2023-09-10 21:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9017
专家分:53971
注 册:2011-1-18
收藏
得分:15 
随手瞎写的,没有验证过,仅供参考

程序代码:
#include <cstdio>
#include <utility>

class worm
{
public:
    worm() noexcept : ptail_(&grid_[25][11]), phead_(&grid_[25][30])
    {
        for( size_t y=0; y!=52; ++y )
        {
            for( size_t x=0; x!=52; ++x )
            {
                if( y==0 || y==51 || x==0 || x==51 )
                    grid_[y][x] = '~';
                else if( y==25 && (x>=11 && x<30) )
                    grid_[y][x] = +1;
                else
                    grid_[y][x] = 0;
            }
        }
    }

    enum RESULT{ SUCCESSFULLY, RAN_OFF_THE_BOARD, RAN_INTO_ITSELF };
    RESULT move( char cmd ) noexcept
    {
        signed char* ptemp = ptail_;
        ptail_ += *ptail_;
        *ptemp = 0;

        switch( cmd )
        {
        case 'E': *phead_= +1; break;
        case 'W': *phead_= -1; break;
        case 'S': *phead_=+52; break;
        case 'N': *phead_=-52; break;
        }
        phead_ += *phead_;

        if( *phead_ == '~' )
            return RAN_OFF_THE_BOARD;
        if( *phead_ != 0 )
            return RAN_INTO_ITSELF;
        return SUCCESSFULLY;
    }

    std::pair<RESULT,size_t> move( const char* cmds ) noexcept
    {
        size_t index;
        for( index=0; cmds[index]; ++index )
        {
            RESULT result = move( cmds[index] );
            if( result != SUCCESSFULLY )
                return {result,index+1};
        }
        return {SUCCESSFULLY,index};
    }

protected:
    worm( const worm& ) = delete;
    worm& operator=( const worm& ) = delete;
private:
    signed char grid_[52][52];
    signed char* ptail_;
    signed char* phead_;
};

int main( void )
{
    for( unsigned n; scanf("%u",&n)==1 && n!=0; )
    {
        char cmds[101];
        scanf( "%s", cmds );

        auto [result,m] = worm().move( cmds );
        switch( result )
        {
        case worm::SUCCESSFULLY:      printf("The worm successfully made all %zu moves.\n", m ); break;
        case worm::RAN_OFF_THE_BOARD: printf("The worm ran off the board on move %zu.\n", m );   break;
        case worm::RAN_INTO_ITSELF:   printf("The worm ran into itself on move %zu.\n", m );     break;
        }
    }
}
2023-09-11 10:45
风卷浪起
Rank: 3Rank: 3
来 自:universe
等 级:论坛游侠
威 望:4
帖 子:190
专家分:149
注 册:2021-11-13
收藏
得分:0 
回复 2楼 rjsp
Thanks!

人生苦短,我用Python~~~
对Pygame相关内容有兴趣,求带。
2023-09-11 21:15
风卷浪起
Rank: 3Rank: 3
来 自:universe
等 级:论坛游侠
威 望:4
帖 子:190
专家分:149
注 册:2021-11-13
收藏
得分:0 
回复 2楼 rjsp
但是,这是我的编程作业,不可能有这么复杂

人生苦短,我用Python~~~
对Pygame相关内容有兴趣,求带。
2023-09-11 21:31
风卷浪起
Rank: 3Rank: 3
来 自:universe
等 级:论坛游侠
威 望:4
帖 子:190
专家分:149
注 册:2021-11-13
收藏
得分:0 
回复 2楼 rjsp
我那边的课才讲到字符数组呢

人生苦短,我用Python~~~
对Pygame相关内容有兴趣,求带。
2023-09-11 21:35
残念·独裁官
Rank: 2
等 级:论坛游民
帖 子:2
专家分:15
注 册:2023-9-12
收藏
得分:15 
我有点小蒙。C++用来做题,Python用来做游戏。嗨害嗨。qwp
2023-09-12 11:07
风卷浪起
Rank: 3Rank: 3
来 自:universe
等 级:论坛游侠
威 望:4
帖 子:190
专家分:149
注 册:2021-11-13
收藏
得分:0 
好吧,其实我也是这么想的,但是问题是老师要求是用C++做,而且这不是真正的游戏。

人生苦短,我用Python~~~
对Pygame相关内容有兴趣,求带。
2024-05-04 14:34
快速回复:蠕虫游戏(即贪吃蛇)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035212 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved