記第一次在程序中埋彩蛋

寫在前面

相信進(jìn)來的觀眾一定很想知道我究竟埋了什么彩蛋??,這里說的“彩蛋”,指的是程序里的彩蛋(我的理解是一種區(qū)別于程序本身別有洞天的一番景象,并具有一定代表意義的小程序??),
我埋的彩蛋的是在一個(gè)網(wǎng)站里的,彩蛋必須是玩家自己找到才有用的??,先看看下面的彩蛋提示再進(jìn)入網(wǎng)站找彩蛋哈??。

彩蛋提示

埋彩蛋的程序是編程貓官網(wǎng),用瀏覽器訪問,再打開瀏覽器的開發(fā)者工具的控制臺(tái)??。
可以看到一個(gè)大大的codemao字符畫(如果看不清楚可以拉大控制臺(tái)的窗口大小),就是下面這個(gè)字符畫

                      █████                                            
                      ??███                                             
  ██████   ██████   ███████   ██████  █████████████    ██████    ██████ 
 ███??███ ███??███ ███??███  ███??███??███??███??███  ?????███  ███??███
?███ ??? ?███ ?███?███ ?███ ?███████  ?███ ?███ ?███   ███████ ?███ ?███
?███  ███?███ ?███?███ ?███ ?███???   ?███ ?███ ?███  ███??███ ?███ ?███
??██████ ??██████ ??████████??██████  █████?███ █████??████████??██████ 
 ??????   ??????   ????????  ??????  ????? ??? ?????  ????????  ??????  

發(fā)揮你們的探索能力??,看看能不能在控制臺(tái)里找到跟這個(gè)字符畫有關(guān)的彩蛋。

找到的話如果覺得有意思的話可以點(diǎn)個(gè)贊??或者發(fā)評(píng)論提點(diǎn)提點(diǎn)??,有更好的想法都可以提哈??。

沒找到的話下面就是彩蛋答案??,但是記住彩蛋必須是玩家自己找到才有用的??,所以想清楚再?zèng)Q定看不看答案。


彩蛋答案

其實(shí)很容易能找到彩蛋,當(dāng)你看到控制臺(tái)上那么顯眼的codemao字符畫時(shí),其實(shí)重點(diǎn)不在字符畫,而是codemao這幾個(gè)字符,嘗試在控制臺(tái)里輸入codemao,你會(huì)發(fā)現(xiàn)codemao是一個(gè)全局變量,按回車打印出來的值就是彩蛋入口了!
而打印出來的值就是"恭喜少年,你找到了編程貓的第一顆彩蛋,輸入 start(); 后即可開始《編程貓躲車車》游戲!",繼續(xù)在控制臺(tái)輸入start()即可觸發(fā)彩蛋游戲。

埋這個(gè)彩蛋的緣由和我的想法:

為啥突然想到要在自己開發(fā)的網(wǎng)站上埋這個(gè)彩蛋呢??,可能是因?yàn)殚_發(fā)工作時(shí)間長了??????,想在工作中增加點(diǎn)趣味??????,也可以給用戶一個(gè)耳目一新的感覺,自己擅自加了這么個(gè)需求哈哈??。做完這個(gè)彩蛋之后給到產(chǎn)品經(jīng)理看,覺得很有意思,而且具有傳播價(jià)值,所以值得一試。
然而有個(gè)運(yùn)營同事聽聞此事后卻跟我說起教來,“彩蛋應(yīng)該怎么做才有價(jià)值,才能運(yùn)營起來blablabla”的??,我是聽不懂,作為一個(gè)程序員,我覺得不要為了“埋彩蛋”而“埋彩蛋”,我做這個(gè)彩蛋的時(shí)候沒有太多想法??,并不是考慮怎么運(yùn)營才怎么設(shè)計(jì)的,也不是想著怎么設(shè)計(jì)彩蛋而設(shè)計(jì)彩蛋。

“史上第一款含有彩蛋的游戲”——《冒險(xiǎn)/魔幻歷險(xiǎn)(Adventure)》深入人心??,而《Starship 1》的開發(fā)者因?yàn)槟甏眠h(yuǎn),Ron Milner早已忘記該怎么觸發(fā)彩蛋,40多年后查了代碼費(fèi)盡周折才找到??。

我覺得一個(gè)程序員在自己的程序里埋彩蛋,完全是出于自己的第一想法??,這個(gè)想法可以是像Warren Robinett一樣為了打破雅達(dá)利的約束讓自己的名字留在游戲里??,也可以像Ron Milner一樣為了讓玩家探索彩蛋,發(fā)現(xiàn)自己的名字,得到10條命的獎(jiǎng)勵(lì)??。

而我設(shè)計(jì)這個(gè)彩蛋的想法??,是因?yàn)槲野l(fā)現(xiàn)了可以在控制臺(tái)里跑起來的字符小游戲《編程貓躲車車》,這有別于編程貓創(chuàng)作工具做出來的作品,一貫的在網(wǎng)頁里運(yùn)行的小游戲,同樣是簡單的操作,放到控制臺(tái)運(yùn)行卻別有一番天地,雖然畫質(zhì)低劣又清奇,體驗(yàn)也差,但足以達(dá)到我理解的彩蛋效果,有別于程序本身的小游戲,codemao代表了編程貓,說不定還能激發(fā)用戶的創(chuàng)作欲望和創(chuàng)意呢。。。

以上純屬個(gè)人觀點(diǎn),如有寫的不正當(dāng)?shù)牡胤娇梢詸?quán)威批評(píng)

最后

其實(shí)這個(gè)彩蛋游戲是從網(wǎng)上搬過來的,只是換了貓和車而已,感謝知乎大佬小芋頭君的分享,啥也不說了,源碼奉上:

(function(){
  if(!window.console){window.console ={log:function(){}};return;}
  var me = 19;
  var Star = function(){
    this.x=0;
    this.speed = 1;
    this.y=0;
  }
  var score = 0;
  var strs = function(){
    var result = '';
    for(var i=0;i<20;i++){
      result+="\n"
      for(var n =0;n<40;n++){
        var now = '一'
        if(i==19&&n==me){
          now="碼"
        }
        if(i==19&&n==me+1){
          now="農(nóng)"
        }
        stars.forEach(function(star){
          var x= Math.floor(star.x);
          var y = Math.floor(star.y)
          if(x==n&&y==i){
            if(Math.abs(star.y-19)<1&&(n==me||n==me+1)){
              die()
            }
            now="車"
          }
        })
        result+=now;

      }

    }
    result+="       《全民躲車車》得分:"+score
    return result;
  }
  window.onkeydown = function(e){
    if(e.keyCode==37){
      me-=1;
      if(me<0) me=0;
    }else if(e.keyCode==39){
      me+=1
      if(me>38) me=38
    }
}
var count=0;
var die = function(){
  clearInterval(timer1)
  clearInterval(timer2)
  clearInterval(timer3)
  setTimeout(function(){
    console.log("游戲結(jié)束,您的得分:"+score+",分享到微博:%o","http://service.weibo.com/share/share.php?url=http%3A%2F%2Ftangeche.com&pic=http://img.souche.com/test/aab0c3d397799533e446759083c2f97c.gif&title=%E6%88%91%E5%9C%A8%E3%80%90%E5%BC%B9%E4%B8%AA%E8%BD%A6%E3%80%91%E7%8E%A9%E7%A0%81%E5%86%9C%E4%B8%93%E6%9C%89%E6%B8%B8%E6%88%8F%E3%80%8A%E7%A0%81%E5%86%9C%E8%BA%B2%E8%BD%A6%E8%BD%A6%E3%80%8B%E8%8E%B7%E5%BE%97%E4%BA%86"+score+"%E5%88%86%2C%E5%BF%AB%E6%9D%A5%E6%8C%91%E6%88%98%E6%AF%94%E6%AF%94%E7%9C%8B%E3%80%82%E7%94%A8%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8%E6%89%93%E5%BC%80www.tangeche.com%E9%A6%96%E9%A1%B5%EF%BC%8C%E6%89%93%E5%BC%80%E8%B0%83%E8%AF%95%E5%B7%A5%E5%85%B7%E7%9A%84%E6%8E%A7%E5%88%B6%E5%8F%B0%EF%BC%8C%E8%BE%93%E5%85%A5start%28%29%3B%E5%9B%9E%E8%BD%A6%EF%BC%8C%E7%84%B6%E5%90%8E%E6%8C%89%E7%85%A7%E6%8F%90%E7%A4%BA%E5%8D%B3%E5%8F%AF%E5%BC%80%E5%A7%8B%E6%B8%B8%E6%88%8F%E3%80%82%40%E5%BC%B9%E4%B8%AA%E8%BD%A6")
  },100)

}
var stars = []
var appearP = 1
var timer1,timer2,timer3;
var begin = function(){
  timer1 = setInterval(function(){
    var createCount=Math.floor(Math.random()*5*appearP)
    for(var i=0;i<createCount;i++){
      var star = new Star();
      star.x = Math.floor(Math.random()*40)
      star.y = 0;
          star.speed = Math.random()*appearP;//Math.floor(Math.random()*3+1)
          stars.push(star)
        }

      },1000)
  timer2 = setInterval(function(){
    stars.forEach(function(star,i){
      star.y+=star.speed;
      if (star.y>=31){
        stars.splice(i,1);
        score++
      }
    })
    console.log(strs())
    count++;
    if(count>300){
      console.clear()
      count = 0;
    }
  },100)
  timer3 = setInterval(function(){
    appearP*=1.1
  },3000)
}
console.log("輸入 start(); 后即可開始《碼農(nóng)躲車車》游戲!")
window.start = function(){
  appearP=1.1
  starts=[];
  score=0;
  me = 19;
  count = 0;
  console.log("%c請先用鼠標(biāo)點(diǎn)擊一下彈個(gè)車網(wǎng)頁頁面,游戲需要捕捉網(wǎng)頁上的鍵盤事件(你應(yīng)該懂吧)!","font-size:16px;color:#ff6700;")
  console.log("使用鍵盤左右鍵移動(dòng)最下方的碼農(nóng),躲開所有的汽車,汽車數(shù)量和速度會(huì)一直增加,看看誰堅(jiān)持的最久吧!")

  var countdown = 6;
  setTimeout(function(){
    if(countdown--<=1){
      begin();
    }else{
      console.log(countdown)
      setTimeout(arguments.callee,1000)
    }
  },1000)
  return ("倒計(jì)時(shí)!")
}
})();
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 早上五點(diǎn)醒來,習(xí)慣性等她電話,然后意識(shí)到我們已經(jīng)結(jié)束了,陣痛感忽然襲來。 出門的時(shí)候浦東飄著小雨,掃了眼手機(jī),沒有...
    棒子君閱讀 401評(píng)論 0 2
  • 拉薩游記(一) 今天我們就要到西藏去了。我們先到拉薩。出發(fā)前我們做了充足的準(zhǔn)備,專門去戶外運(yùn)動(dòng)商店,買了遮...
    耿元方閱讀 530評(píng)論 0 0
  • 總?cè)蝿?wù)1200件 小件折算 計(jì)劃25天完成任務(wù)每天46件 高單周一到周五2個(gè) 六日4個(gè) 每周做一個(gè)高高單日 單筆最...
    盧慧_d4d3閱讀 380評(píng)論 0 0
  • 2016年快結(jié)尾了,本想給自己一個(gè)好的結(jié)束,結(jié)果缺以58分的成績結(jié)束了。去年我用59分開始了我的2015,一氣之下...
    空wda白閱讀 533評(píng)論 0 0

友情鏈接更多精彩內(nèi)容