用R做个带闹铃功能的钟

一个很有意思的小东西。t为闹铃运行时间,单位是秒,我们可以写一个简单的转换程序来使得t变为输入格式为hour:minute:second。

原帖地址:http://bbs.pinggu.org/thread-2266932-1-1.html

简单修改

clock<-function(hour,minute,second,back,circle,hou,sec,min,method){
#请事先安装sound包!
#back为闹铃背景色
#circle为闹钟外框颜色
#hou为时针颜色
#sec秒针颜色
#min分针颜色
#hou时针颜色
#method参数为选择提醒方式,取值为1,2,3,1为响铃,2为弹出窗口,其余数值都进行
t<-hour*3600+minute*60+second
  #定义缺省值
  if(missing(back)){
     back="gray";
     if(missing(circle)){
     circle="green";
     }
  }
  if(missing(hou)){
     hou<-"red";
     if(missing(min)){
        min<-"orange";
        if(missing(sec)){
          sec<-"blue";
        }
        else{next}     
    }
    else{next}
  }
  else{next}
  if(missing(method)){
      method=3;
  }
  library(sound);#sound用于发声
  #绘制闹钟
  par(bg=back,lwd=3,bty="n",xaxt="n", yaxt="n")
  x=seq(0,2*pi,0.01);
  plot(cos(x),sin(x),type="l",xlab="",ylab="",col=circle);
    lines(1.05*sin(x),1.05*cos(x),col=circle);
    title(main="clock",font=2,cex=2);
  #标记时刻
   for(k in 1:12){
       second<-c("1","2","3","4","5","6","7",
                 "8","9","10","11","12");
       text(0.93*cos(2*pi/12*(3-k)),0.93*sin(2*pi/12*(3-k)),
            labels = second[k],adj=c(0.5,0.5),col="yellow",
            font=2,cex=1.7);
  
   }
   #获取系统时间
   A<-date();
   h0<-as.numeric(substr(A,12,13));  
   m0<-as.numeric(substr(A,15,16));
   n0<-as.numeric(substr(A,18,19));
   if(h0>12){
      h0=h0-12;
   }
  #设置时钟,三针已齐全  
  n=60;m=60;h=12;
  #设置分针,时针进位判别函数
  #分针
    f1<-function(ii){
       if((16-n0-i)<=-45){
           arrows(0,0,0.7*cos(2*pi/n*(16-m0-j)),
                  0.7*sin(2*pi/n*(16-m0-j)),col=back);   
           arrows(0,0,0.7*cos(2*pi/n*(15-m0-j)),
                  0.7*sin(2*pi/n*(15-m0-j)),col=min);
        }else{
           arrows(0,0,0.7*cos(2*pi/n*(16-m0-j)),
                  0.7*sin(2*pi/n*(16-m0-j)),col=min);
          }
    }
    f2<-function(jj){     
       if((16-m0-j)<=-44&(16-n0-i)<=-45){
           arrows(0,0,0.5*cos(2*pi/h*(4-h0-l)),
                  0.5*sin(2*pi/h*(4-h0-l)),col=back);    
           arrows(0,0,0.5*cos(2*pi/h*(3-h0-l)),
                  0.5*sin(2*pi/h*(3-h0-l)),col=hou);
        }else{
            arrows(0,0,0.5*cos(2*pi/h*(4-h0-l)),
                   0.5*sin(2*pi/h*(4-h0-l)),col=hou);
        }
    } 
    #时钟部分循环主体
 repeat{
    for(l in 1:h){
      for(j in 1:m){
         for(i in 1:n){
            points(0,0,cex=2);
            arrows(0,0,0.85*cos(2*pi/n*(16-n0-i)),
                   0.85*sin(2*pi/n*(16-n0-i)),col=back);
             f1(i);
             f2(j);            
            arrows(0,0,0.85*cos(2*pi/n*(15-n0-i)),
                   0.85*sin(2*pi/n*(15-n0-i)),col=sec);
            Sys.sleep(1);
            arrows(0,0,0.85*cos(2*pi/n*(15-n0-i)),
                   0.85*sin(2*pi/n*(15-n0-i)),col=back);
            f1(i);
            f2(j);
            lines(sin(x),cos(x),col=circle);
            #编辑闹铃功能
            t=t-1;
             if(t==0){
                break;
              }else{next}
         }
       #
       f2(j);
       #    
       if(t==0){
           arrows(0,0,0.7*cos(2*pi/n*(15-m0-j)),
                  0.7*sin(2*pi/n*(15-m0-j)),col=back); 
           points(0,0,cex=2);
           break;
       }else{next}

     }
     if(t==0){
       arrows(0,0,0.5*cos(2*pi/h*(3-h0-l)),
              0.5*sin(2*pi/h*(3-h0-l)),col=back); 
       points(0,0,cex=2);
       break;
     }
   }
    if(t==0){break}
    else{next}
 }
  #闹铃提醒
  #编制闹铃 
  #定义音符
  s0 <- Sine(0,0.25);
  s1 <- Sine(523.25,0.25);
  s2 <- Sine(587.33,0.25);
  s3 <- Sine(659.26,0.25);
  s4 <- Sine(698.46,0.25);
  s5 <- Sine(784,0.25);
  s6 <- Sine(880,0.25);
  s7 <- Sine(987.77,0.25);
  s11 <- Sine(1046.5,0.25);
  sound<-appendSample(s5,s6,s5,s3,s4,s5,s4,s2,s1,s3,s5,s11);
  s<-mirror(sound);
  if(method==1){
      play(s);#播放铃声     
  }
  else if(method==2){ 
      winDialog(,"时间到!!!");
  }
  else{
      play(s);#播放铃声
      winDialog(,"时间到!!!");
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值