r语言 循环次数超过了50这个最大值_错过了520还可以一起过儿童节,如何用R语言‘撸’一个文字跑马灯去表白...

本文介绍了如何使用R语言通过面向对象编程创建一个文字跑马灯,作为表白工具。首先定义一个基类,实现PPT逐页播放文字功能,然后派生一个类以自动设置跑马灯的文字播放。通过这种方式,可以轻松制作个性化的情感表达。
摘要由CSDN通过智能技术生成

引言

和大家分享一下如何用R语言来写一个文字跑马灯吧。这个文字跑马灯写起来基本不费时间,在办公室摸一下鱼大概就够了。

正文

这个文字跑马灯我准备按照面向对象编程来写。因为,面向对象就会有对象。而且,这个东西写出来就是拿给你们去表白的。

首先我们定义一个基类,这个基类要具有像PPT一样的逐页播放文字的功能。

#' @title projector
projector <- R6::R6Class(
  classname = "projector",
  public = list(
    initialize = function(sildes) { # 构造函数
      private$slides <- sprintf("r%s",sildes) # 给每页文字的开始加上'r'字符以覆盖上一页
      private$length <- base::length(private$slides) # 记录所有的播放页数量
      private$position <- 0 # 初始播放位置为第一页之前
      private$slide <- private$slides[private$position]
    },
    nextslide = function(){ # 播放下一页
        private$position <- private$position + 1 # 获取下一页位置
        if ( private$position > private$length ){ # 播放到最后一页后回到第一页
            private$position <- private$position - private$length
        }
        private$slide <- private$slides[ private$position ] # 设置当前播放页为下一页
        base::cat(private$slide) # 播放当前播发页
    },
    autoplay = function(fps = 10){ # 自动播放,播放速率每秒10页
        while(T){ # 无限循环,可以用for改写控制循环次数
            self$nextslide() # 播放下一页
            base::Sys.sleep(1/fps) # 休眠控制播放速率
        }
    }
  ),
  private = list(
    slide = NA,# 当前播放页
    slides = c(), # 所有的播放页
    length = 0,# 播放页的总数
    position = 0# 当前播放位置
  )
)
#' @test 
player <-  projector$new(c("我是第一页","我是第二页","我是第三页"))
player$nextslide() # 播放下一页
player$nextslide()
player$nextslide()
player$nextslide()
player$autoplay(3) # 以每秒三张的速率播放,可以使用 Ctrl+C 组合键 跳出

d9447cfedf727e2819e4ac28eac83846.gif

利用这个文字PPT播放器,我们只要设置好播放页就可以实现文字跑马灯了。比如:

player2 <-  projector$new(
  c(
    "我是第一页        ",
    "是第一页        我",
    "第一页        我是",
    "一页        我是第",
    "页        我是第一",
    "        我是第一页",
    "      我是第一页  ",
    "    我是第一页    ",
    "  我是第一页      ", 
    "我是第一页        " # 最后一页的下一页是第一页,让播放页闭环以到达流畅的视觉效果
  )
)
player2$autoplay(3)

99a887e2136316e98881c05c13a34f1b.gif

当然我们不需要那么傻的的每次都手动设置播放页。接下来,我们从PPT文字播放器这个基类派生一个类,这个派生类新增了根据跑马灯文字自动设置播放页的功能。

#' @title scroller
scroller <- R6::R6Class("scroller", 
  inherit = projector,
  public = list(
    initialize = function(film, width = 50 ) { # 重载基类的构造函数,根据输入的文字和宽度自动设置播放页
        film <- paste0( base::strrep(" ",width), film,base::strrep(" ",width), collapse="" ) 
        slides <- rep( base::strrep(" ",width) , nchar(film)-width+1 )
        for( i in 1:length(slides) ){
            slides[i] <- substr(film,i,i+width-1)
        }
        super$initialize(slides)
    }
  )
)
#' @test 
boy <- scroller$new("你可真是个小可爱! 不如...   和我在一起吧^_^",50) # 设置播放页的宽度为50
boy$autoplay(10) # 以每秒10页的速率播放
girl <- scroller$new("哈哈哈*—*  我就知道你喜欢我! 好吧,我就勉强答应你咯~",50) # 设置播放页的宽度为50
girl$autoplay(10) # 以每秒10页的速率播放

5393d83c2febd0d9b8bab2721aea615e.gif

6d64dd49403a804cdd1cd01bc1e80907.gif

结束语

好了,摸鱼结束,我要去搬砖了。爱TA,就为TA建造一个家!祝你们表白成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值