瀏覽代碼

Add random team button

Kirk Trombley 5 月之前
父節點
當前提交
faf5226807
共有 3 個文件被更改,包括 33 次插入1 次删除
  1. 1 0
      web/index.html
  2. 31 0
      web/main.js
  3. 1 1
      web/styles.css

+ 1 - 0
web/index.html

@@ -420,6 +420,7 @@
         >
           clear
         </button>
+        <button form="nameSearchForm" type="button" name="team">Weighted Random Team</button>
         <button form="nameSearchForm" type="button" name="all">Show All (slow)</button>
       </div>
       <div id="name-results" class="flex wrap"></div>

+ 31 - 0
web/main.js

@@ -596,6 +596,33 @@ const model = {
     }
     renderPokemon(toRender, colorSearchResultsTarget);
   },
+
+  getRandomTeam(p=0.05, n=6, m=1000) {
+    const selected = new Set();
+    const selectedSpecies = new Set();
+    let iter = 0;
+    while (selected.size < n && iter < m) {
+      iter++;
+      for (let i = 0;i < this.ranked.length; i++) {
+        const pkmn = this.ranked[i];
+        if (selected.has(i) || selectedSpecies.has(pkmn.num)) {
+          continue;
+        }
+        if (filterElements.hideNoStart.checked && pkmn.traits.includes("nostart")) {
+          continue;
+        }
+        if (!filterElements.allowNFE.checked && pkmn.traits.includes("nfe")) {
+          continue;
+        }
+        if (Math.random() < p) {
+          selected.add(i);
+          selectedSpecies.add(pkmn.num);
+          break;  
+        }
+      }
+    }
+    return Array.from(selected).map(i => this.ranked[i]);
+  }
 };
 
 // ---- Form Controls ----
@@ -625,6 +652,10 @@ nameSearchFormElements.random.addEventListener("click", () => {
   );
 });
 
+nameSearchFormElements.team.addEventListener("click", () => {
+  model.setNameSearchResults(model.getRandomTeam());
+});
+
 targetColorElements.colorText.addEventListener("input", ({ target }) => {
   if (target.willValidate && !target.validity.valid) {
     target.value = target.dataset.lastValid || "";

+ 1 - 1
web/styles.css

@@ -506,7 +506,7 @@ button[name="clear"] {
   align-items: stretch;
 }
 
-#name-search-controls button[name="all"] {
+#name-search-controls :is(button[name="all"], button[name="team"]) {
   padding-inline: 1ch;
 }