Downasaur

Google恐龍遊戲的難度是無限增加還是停在某一點?

  • March 15, 2022

在此處輸入圖像描述

Google瀏覽器的恐龍亞軍遊戲的難度是否會達到上限?當我試圖獲得高分時(大約 2000 年左右),我注意到一路上難度緩慢但肯定地上升,不僅是恐龍的速度,還有仙人掌的分組,以及引入翼龍道路。

我想知道的是遊戲是否無限擴展?它只是迅速變得越來越快嗎?或者遊戲是否在特定的分數/距離上限制了難度?

TL;博士

似乎有一個最大速度限制,因此“限制”了難度。最大速度為 13。速度還用於確定障礙物之間的距離,因此,如果您達到最大速度,您也會達到障礙物之間距離的上限。


“Downasaur”的原始碼可以在一個名為offline.js的 Javascript 文件中找到。它可通過Chromium GitHub儲存庫公開獲得。我不能說我參與過 Chromium 項目,但我至少可以嘗試根據其結構來解釋程式碼。

文件的頂部是遊戲的配置區域。它從第 115 行開始:

/**
* Default game configuration.
* @enum {number}
*/
Runner.config = {
 ACCELERATION: 0.001,
 BG_CLOUD_SPEED: 0.2,
 BOTTOM_PAD: 10,
 // Scroll Y threshold at which the game can be activated.
 CANVAS_IN_VIEW_OFFSET: -10,
 CLEAR_TIME: 3000,
 CLOUD_FREQUENCY: 0.5,
 GAMEOVER_CLEAR_TIME: 750,
 GAP_COEFFICIENT: 0.6,
 GRAVITY: 0.6,
 INITIAL_JUMP_VELOCITY: 12,
 INVERT_FADE_DURATION: 12000,
 INVERT_DISTANCE: 700,
 MAX_BLINK_COUNT: 3,
 MAX_CLOUDS: 6,
 MAX_OBSTACLE_LENGTH: 3,
 MAX_OBSTACLE_DUPLICATION: 2,
 MAX_SPEED: 13,
 MIN_JUMP_HEIGHT: 35,
 MOBILE_SPEED_COEFFICIENT: 1.2,
 RESOURCE_TEMPLATE_ID: 'audio-resources',
 SPEED: 6,
 SPEED_DROP_COEFFICIENT: 3,
 ARCADE_MODE_INITIAL_TOP_POSITION: 35,
 ARCADE_MODE_TOP_POSITION_PERCENT: 0.1
};

請注意本節中的一些值,主要是:

  • ACCELERATION= 0.001
  • SPEED= 6
  • MAX_SPEED= 13

速度

update在文件的第 545 行開始呼叫一個函式。從這個函式的程式碼註釋來看,這是更新遊戲幀並安排下一幀的函式。在這個函式中是從第 578 行開始的碰撞檢查:

// Check for collisions.
     var collision = hasObstacles &&
         checkForCollision(this.horizon.obstacles[0], this.tRex);

     if (!collision) {
       this.distanceRan += this.currentSpeed * deltaTime / this.msPerFrame;

       if (this.currentSpeed < this.config.MAX_SPEED) {
         this.currentSpeed += this.config.ACCELERATION;
       }
     } else {
       this.gameOver();
     }

if語句評估條件,這意味著在語句本身之前定義的!collision“如果變數不為真”。如果不是,那麼我們就沒有碰撞,所以在塊內執行程式碼。我們可以在塊內進一步看到,還有另一個條件檢查目前速度是否小於設置為 13 的配置。如果目前速度(預設為文件第 44 行上的配置值)小於,我們進入程式碼塊,它採用 currentSpeed 值並將配置值 .001 添加到它。因此,每個遊戲幀都將加速 0.001 倍,最高可達 13 幀。collision``if``if``if``MAX_SPEED``SPEED``MAX_SPEED``if``ACCELERATION

障礙

據我所知,除了翼手龍障礙之外,所有障礙都遵循相同的邏輯。這個障礙物的獨特之處在於它可以隨機生成 3 個不同的 Y 座標(如果在移動設備上,則為 2 個)。障礙物類型可以在文件的第 1556 行找到。為了限制這篇文章的長度,我只包括PTERODACTYL範例目的:

{
   type: 'PTERODACTYL',
   width: 46,
   height: 40,
   yPos: [ 100, 75, 50 ], // Variable height.
   yPosMobile: [ 100, 50 ], // Variable height mobile.
   multipleSpeed: 999,
   minSpeed: 8.5,
   minGap: 150,
   collisionBoxes: [
     new CollisionBox(15, 15, 16, 5),
     new CollisionBox(18, 21, 24, 6),
     new CollisionBox(2, 14, 4, 3),
     new CollisionBox(6, 10, 4, 7),
     new CollisionBox(10, 8, 6, 9)
   ],
   numFrames: 2,
   frameRate: 1000/6,
   speedOffset: .8
 }

在第 2863 行有一個函式呼叫updateObstacles,它是通過另一個名為 的函式添加實際障礙物的地方addNewObstacle。該addNewObstacle函式是程式碼決定它是什麼障礙物類型(小仙人掌、大仙人掌或翼龍)的地方。

創建障礙物後,將init呼叫第 1388 行的另一個函式。該init函式位於第 1409 行,在這裡它通過一些條件邏輯確定用於障礙物的 Y 座標:

// Check if obstacle can be positioned at various heights.
   if (Array.isArray(this.typeConfig.yPos))  {
     var yPosConfig = IS_MOBILE ? this.typeConfig.yPosMobile :
         this.typeConfig.yPos;
     this.yPos = yPosConfig[getRandomNum(0, yPosConfig.length - 1)];
   } else {
     this.yPos = this.typeConfig.yPos;
   }

if語句正在檢查障礙物的 ( this)yPos屬性是否為數組。如果是,它評估三元運算符(程式碼位var yPosConfig = IS_MOBILE ? this.typeConfig.yPosMobile : this.typeConfig.yPos;)。三元運算符的作用很像一條if語句,可用於根據某些條件確定變數值設置為什麼。在這種情況下,如果變數IS_MOBILE為真(在第 106 行設置),則設置yPosConfigthis.typeConfig.yPosMobile. 如果IS_MOBILE為假,則設置yPosConfigthis.typeConfig.yPos。在這兩種情況下,yPosConfig都設置為具有 3 個元素(不是移動設備)或 2 個(移動設備)的數組。設置後yPosConfig,它將障礙設置為yPosyPosConfig隨機排列。如果第一個if語句確定yPos不是一個數組,它只是將障礙設置為yPos障礙定義中指定的值。

我還發現了我認為是障礙程式碼之間的差距大小:

 /**
  * Calculate a random gap size.
  * - Minimum gap gets wider as speed increses
  * @param {number} gapCoefficient
  * @param {number} speed
  * @return {number} The gap size.
  */
 getGap: function(gapCoefficient, speed) {
   var minGap = Math.round(this.width * speed +
         this.typeConfig.minGap * gapCoefficient);
   var maxGap = Math.round(minGap * Obstacle.MAX_GAP_COEFFICIENT);
   return getRandomNum(minGap, maxGap);
 },

無需過多討論,看起來障礙之間的最小間隙大小會隨著您的進步而變化。然而,因為MAX_SPEED是 13,如果你達到那個速度,我相信障礙之間的差距也會縮小。間隙大小設置在函式內的第 1450 行。init

引用自:https://gaming.stackexchange.com/questions/359245