<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rachel Anne Cilon</title>
    <description>The latest articles on Forem by Rachel Anne Cilon (@rachelannec).</description>
    <link>https://forem.com/rachelannec</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3007657%2Fd345545c-53e3-47fc-8945-99327eeea22e.jpg</url>
      <title>Forem: Rachel Anne Cilon</title>
      <link>https://forem.com/rachelannec</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rachelannec"/>
    <language>en</language>
    <item>
      <title>"Rise Up, Power Up, Never Give Up" - RoboRebellion</title>
      <dc:creator>Rachel Anne Cilon</dc:creator>
      <pubDate>Mon, 28 Apr 2025 03:27:08 +0000</pubDate>
      <link>https://forem.com/rachelannec/rise-up-power-up-never-give-up-roborebellion-1b67</link>
      <guid>https://forem.com/rachelannec/rise-up-power-up-never-give-up-roborebellion-1b67</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://int.alibabacloud.com/m/1000402443/" rel="noopener noreferrer"&gt;Alibaba Cloud&lt;/a&gt; Challenge: &lt;a href="https://dev.to/challenges/alibaba"&gt;Build a Web Game&lt;/a&gt;.&lt;/em&gt;*&lt;/p&gt;

&lt;h2&gt;
  
  
  What WE Built
&lt;/h2&gt;

&lt;p&gt;RoboRebellion is a top-down action shooter where players control one of three specialized combat robots. Fight through endless waves of enemy robots in an arena-style battlefield, collecting powerups and maximizing your score.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;FOR MORE INFORMATION ABOUT OUR GAME, SEE &lt;a href="https://github.com/rachelannec/RR-R/blob/main/README.md" rel="noopener noreferrer"&gt;README.md&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7yur6fvapk0cumy055v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7yur6fvapk0cumy055v.png" alt="RoboRebellion Start Screen" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  PLAY IT HERE: &lt;a href="https://robot-rr.vercel.app/" rel="noopener noreferrer"&gt;https://robot-rr.vercel.app/&lt;/a&gt;
&lt;/h3&gt;
&lt;h3&gt;
  
  
  GITHUB REPO HERE: &lt;a href="https://github.com/rachelannec/RR-R" rel="noopener noreferrer"&gt;https://github.com/rachelannec/RR-R&lt;/a&gt;
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. Gameplay
&lt;/h4&gt;
&lt;h5&gt;
  
  
  1.1 Core Loop
&lt;/h5&gt;

&lt;ol&gt;
&lt;li&gt; Select robot class&lt;/li&gt;
&lt;li&gt; Battle waves of enemies&lt;/li&gt;
&lt;li&gt; Collect powerups&lt;/li&gt;
&lt;li&gt; Survive as long as possible&lt;/li&gt;
&lt;li&gt; Game over when health reaches zero&lt;/li&gt;
&lt;li&gt; Compete for high scores&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;
  
  
  1.2 Player Controls
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Movement&lt;/strong&gt;: WASD or Arrow Keys&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Aim&lt;/strong&gt;: Mouse pointer&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Shoot&lt;/strong&gt;: Left mouse button&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Dash&lt;/strong&gt;: Spacebar (3-second cooldown)&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Pause&lt;/strong&gt;: ESC key&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;
  
  
  1.3 Player Characters
&lt;/h5&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Robot Type&lt;/th&gt;
&lt;th&gt;Color&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Health&lt;/th&gt;
&lt;th&gt;Fire Rate&lt;/th&gt;
&lt;th&gt;Damage&lt;/th&gt;
&lt;th&gt;Special Traits&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Assault&lt;/td&gt;
&lt;td&gt;Green&lt;/td&gt;
&lt;td&gt;220&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Balanced, versatile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tank&lt;/td&gt;
&lt;td&gt;Yellow&lt;/td&gt;
&lt;td&gt;160&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Durable, powerful shots&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stealth&lt;/td&gt;
&lt;td&gt;Blue&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;td&gt;75&lt;/td&gt;
&lt;td&gt;Very Fast&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Agile, rapid fire&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h5&gt;
  
  
  1.4 Enemies
&lt;/h5&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Enemy Type&lt;/th&gt;
&lt;th&gt;Appearance&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;th&gt;Health&lt;/th&gt;
&lt;th&gt;Damage&lt;/th&gt;
&lt;th&gt;Points&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chaser&lt;/td&gt;
&lt;td&gt;Triangle&lt;/td&gt;
&lt;td&gt;Pursues player directly&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shooter&lt;/td&gt;
&lt;td&gt;Diamond&lt;/td&gt;
&lt;td&gt;Maintains distance, fires at player&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tank&lt;/td&gt;
&lt;td&gt;Hexagon&lt;/td&gt;
&lt;td&gt;Slow movement, fires in multiple directions&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;250&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h5&gt;
  
  
  1.5 Powerups
&lt;/h5&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Powerup&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Health Pack (Green)&lt;/td&gt;
&lt;td&gt;Restores 30 heath&lt;/td&gt;
&lt;td&gt;Permanent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rapid Fire (Yellow)&lt;/td&gt;
&lt;td&gt;50% faster firing rate&lt;/td&gt;
&lt;td&gt;10 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Damage Boost (Red)&lt;/td&gt;
&lt;td&gt;50% increased damage&lt;/td&gt;
&lt;td&gt;10 seconds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h4&gt;
  
  
  2. Progression
&lt;/h4&gt;
&lt;h5&gt;
  
  
  2.1 Wave System
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;  Game starts at Wave 1&lt;/li&gt;
&lt;li&gt;  Each wave increases enemy count and health&lt;/li&gt;
&lt;li&gt;  Enemy type distribution changes as waves progress:

&lt;ul&gt;
&lt;li&gt;  Early waves: Mostly chasers&lt;/li&gt;
&lt;li&gt;  Mid waves: Mix of chasers and shooters&lt;/li&gt;
&lt;li&gt;  Later waves: All types with more tanks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h5&gt;
  
  
  2.2 Difficulty Scaling
&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;  Enemy health increases each wave&lt;/li&gt;
&lt;li&gt;  Enemy damage increases slightly&lt;/li&gt;
&lt;li&gt;  More enemies spawn per wave&lt;/li&gt;
&lt;li&gt;  Enemy type mix becomes more challenging&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Alibaba Cloud Services Implementation
&lt;/h2&gt;


&lt;h3&gt;
  
  
  Overview of Alibaba Cloud Services in Your Game
&lt;/h3&gt;

&lt;p&gt;Our Robo Rebellion game uses &lt;strong&gt;Alibaba Cloud Object Storage Service (OSS)&lt;/strong&gt; as the backend storage solution. Here's a comprehensive guide to how it's implemented. &lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;OSS Integration Architecture&lt;/strong&gt; 
&lt;code&gt;Game Client (Browser) ↔ Node.js Server ↔ Alibaba Cloud OSS&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-side&lt;/strong&gt;: Makes API calls to your server&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server-side&lt;/strong&gt;: Authenticates and interacts with OSS&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;OSS&lt;/strong&gt;: Stores and retrieves game data&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Key Components&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Server-Side Integration (server.js)&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// OSS Client configuration&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createOSSClient&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OSS&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OSS_REGION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;accessKeyId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OSS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;accessKeySecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OSS_ACCESS_KEY_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OSS_BUCKET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OSS_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;secure&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Data Storage Structure&lt;/strong&gt;&lt;br&gt;
Your implementation uses three main storage areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;leaderboard.json - Global leaderboard data&lt;/li&gt;
&lt;li&gt;scores/ - Individual score files&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;OSS Operations Used&lt;/strong&gt; 
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;put&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Store data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;client.put('scores/123456.json', Buffer.from(JSON.stringify(data)))&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;get&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Retrieve data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;client.get('leaderboard.json')&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;list&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;List files&lt;/td&gt;
&lt;td&gt;&lt;code&gt;client.list({ prefix: 'scores/', 'max-keys': 100 })&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;head&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Check if file exists&lt;/td&gt;
&lt;td&gt;&lt;code&gt;client.head('leaderboard.json')&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Key Features&lt;/strong&gt;
&lt;strong&gt;Leaderboard System&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Update leaderboard with the new score&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Get existing leaderboard&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;leaderboard.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;leaderboard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="c1"&gt;// Add new score&lt;/span&gt;
  &lt;span class="nx"&gt;leaderboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scoreData&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Sort by score (highest first)&lt;/span&gt;
  &lt;span class="nx"&gt;leaderboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;score&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Keep top 100 scores&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;topScores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;leaderboard&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Save back to OSS&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;leaderboard.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Buffer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;topScores&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Individual Score Records&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each score is saved as an individual JSON file&lt;/li&gt;
&lt;li&gt;Filename pattern: scores/{timestamp}&lt;em&gt;{robotType}&lt;/em&gt;{score}.json&lt;/li&gt;
&lt;li&gt;Includes metadata like player name, robot type, and timestamp&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Our Experience Working With Alibaba Cloud
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Just similar on what we have written in our another submission.&lt;/strong&gt; &lt;em&gt;Lemme just copy &amp;amp; paste it&lt;/em&gt; &lt;br&gt;&lt;br&gt;
&lt;strong&gt;Story time.&lt;/strong&gt; &lt;br&gt;Since we cannot avail the free trial we really went out buying for the stuff 😆. &lt;br&gt;&lt;br&gt;
About setting the OSS up, at first I really got no idea on where to start after availing it, like &lt;strong&gt;&lt;em&gt;"what do you mean buckets?" and "where do I actually find and get this access keys?" 😭&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
Luckily, there are some tutorials on Youtube and there's also AI, that really helped us to set up the backend of our game (let me also say that this is my first time tapping into backend stuff, so it really crack my head) &lt;br&gt;&lt;br&gt;
So, yeah! Even though we don't really know what we are doing on the first line, as long as we keep going, we'll get there. (⚠ LOCAL JOKE AHEAD) &lt;br&gt;&lt;br&gt;&lt;br&gt;
Like, &lt;strong&gt;STEP BY STEP PALA S'YA, SASAKSES RIN PALA! in integrating the Alibaba Cloud Services 😆😅&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Game Development Highlights
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvgro9wr58pp5une6r4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvgro9wr58pp5une6r4l.png" alt="IG Story Screenshot" width="375" height="671"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this one, the aspect of our development process that we proud of is that we did not give up, as you can see here on the picture, it is coded in Svelte but if you look in our github repository, it's in Javascript. And that was because we pivot. 😆&lt;br&gt;&lt;br&gt;
&lt;em&gt;We did not give up, but we pivot.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet the TEAM
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Inso, Eliazar N.&lt;/strong&gt;  &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/deadbush225"&gt;@deadbush225&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
&lt;strong&gt;Rodriguez, Jan Earl F.&lt;/strong&gt;  &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/rawrearl"&gt;@rawrearl&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; &lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cilon, Rachel Anne&lt;/strong&gt;  &lt;strong&gt;&lt;em&gt;&lt;a href="https://dev.to/rachelannec"&gt;@rachelannec&lt;/a&gt;&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

</description>
      <category>alibabachallenge</category>
      <category>devchallenge</category>
      <category>gamedev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>FIRST TIME HERE</title>
      <dc:creator>Rachel Anne Cilon</dc:creator>
      <pubDate>Wed, 02 Apr 2025 12:52:36 +0000</pubDate>
      <link>https://forem.com/rachelannec/first-time-here-22hl</link>
      <guid>https://forem.com/rachelannec/first-time-here-22hl</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is up!?&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
