Требования к уровню для Pokemon Go От 40 до 50

Требования к уровню для Pokemon Go От 40 до 50

5 марта 2023 г.

Прокачиваться с 41 по 50 уровень непросто, но, увидев игроков 50-го уровня в своем списке друзей, вы задаетесь вопросом, когда же вы когда-нибудь окажетесь в «клубе PoGo mile-50».

Как специалист по данным, ваше рефлекторное действие – поиск в Google (или, возможно, поиск)

<цитата>

требования к уровню pokemon go 40-50

Или, если вы предпочитаете спросить барда / chatgpt, вы бы набрали:

<цитата>

Каковы требования к уровню для Pokemon Go с 40 по 50 уровень?

Вырезка: мы обычно разговаривали, пока не вернулись к общению с компьютерами, отбрасывая «стоп-слова» и SEO-нажатия клавиш. А теперь вы хотите, чтобы мы снова начали печатать предложения целиком, чтобы компьютеры могли попытаться выучить человеческий язык?! Возможно, эти модели ИИ должны начать понимать:

<цитата>

(╯°□°)╯︵◓ 🪜 как?

Хорошо, вернемся к правильному графику...

Это руководство GameRadar — хорошее начало, но оно просто неудобно для данных, давайте преобразуем информацию в JSON.

https://www.gamesradar.com/pokemon-go-level- задачи-требования-41-50/

level_guide = {
    41: {
        'xp': 6_000_000,
        'rewards': {
            'ultra_balls': 20,
            'max_potions': 20,
            'max_revives': 20,
            'razz_berries': 20,
            'incubator': 1,
            'xl_candy': 1
        },
        'tasks': ['Power up a Legendary Pokemon 20 times',
            'Win 30 raids',
            'Catch 200 Pokemon in a single day',
            'Earn 5 gold medals'
        ]
    },

    42: {
        'xp': 7_000_000,
        'rewards': {
            'ultra_balls': 20,
            'max_potions': 20,
            'max_revives': 20,
            'nanab_berries': 20,
            'incubator': 1,
            'premium_pass': 1,
            'xl_candy': 1
        },
        'tasks': ['Evolve Eevee into each of its unique evolutions',
            'Use items to evolve Pokemon 15 times',
            'Make 3 Excellent Throws',
            'Use 200 berries to help catch Pokemon'
        ]
    }, ...,

    50: {
        'xp': 30_000_000,
        'rewards': {
            'ultra_balls': 50,
            'max_potions': 50,
            'max_revives': 20,
            'super_incubator': 5,
            'xl_candy': 2,
            'elite_charged_tm': 1,
            'incense': 5,
            'lucky_egg': 5,
            'lure': 5
        },
        'tasks': ['Make 999 Excellent throws',
             'Catch a Legendary Pokemon in your next five Legendary Pokemon encounters',
             'Defeat a Team Go Rocket Leader three times using only Pokemon with 2,500 CP or less',
             'Reach Rank 10 in the Go Battle League'
        ]
    },

}

from pprint import pprint

pprint(level_guide[42])
{'rewards': {'incubator': 1,
             'max_potions': 20,
             'max_revives': 20,
             'nanab_berries': 20,
             'premium_pass': 1,
             'ultra_balls': 20,
             'xl_candy': 1},
 'tasks': ['Evolve Eevee into each of its unique evolutions',
           'Use items to evolve Pokemon 15 times',
           'Make 3 Excellent Throws',
           'Use 200 berries to help catch Pokemon'],
 'xp': 7000000}

Давайте посмотрим, сколько еще усилий мне потребуется, чтобы перейти на следующий уровень

import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns


sns.set_theme(style="darkgrid")
plt.ticklabel_format(style='plain')

xp_needed = {k:level_guide[k]['xp'] for k in level_guide}
df_xp = pd.DataFrame(xp_needed.items(), columns=['Level', 'XP'])

ax = sns.lineplot(data=df_xp, x="Level", y="XP")
ax.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))

ax.set_xlim(40, 51)

plt.show()

Что?! Это экспоненциальное увеличение числа нет. ХР нужно?!!

О, PoGo, ваши игровые дизайнеры и разработчики действительно знают, как удерживать игроков «привязанными» к приложению и покупать эти вечно инфляционные Pokecoins!

Столько жертв, чтобы удовлетворить мою детскую ностальгию по милым маленьким монстрам на моноблоке.

Какие сочные бинарные награды я получу за свои усилия?

pprint(level_guide[42]['rewards'])
{'incubator': 1,
 'max_potions': 20,
 'max_revives': 20,
 'nanab_berries': 20,
 'premium_pass': 1,
 'ultra_balls': 20,
 'xl_candy': 1}

Даже читать список наград больно, чтобы точно знать, сколько горшков, шаров и возрождений я получу после повышения уровня...

Давайте попробуем изобразить их на картинках. Сначала соберите список URL-адресов изображений и автоматизируйте загрузку.

import shutil
import requests

import imageio.v2 as imageio
import numpy as np
import PIL
from PIL import Image
from IPython.display import Image as JupyterImage


def download_image(img_url, save_to, thumbnail_size=(25,25)):
    response = requests.get(img_url, stream = True)
    response.raw.decode_content = True
    with open(save_to,'wb') as fout:
        shutil.copyfileobj(response.raw, fout)

    # Create thumbnail
    if thumbnail_size:
        image = Image.open(save_to)  
        image.thumbnail(thumbnail_size)
        image.save(save_to.rpartition('.')[0] + '.thumbnail.png')


img_urls = {'golden_razz_berries': "https://www.serebii.net/brilliantdiamondshiningpearl/berries/16.png",
 'max_potions': 'https://static.wikia.nocookie.net/pokemon/images/a/a2/Dream_Max_Potion_Sprite.png',
 'max_revives': 'https://static.wikia.nocookie.net/pokemon/images/4/45/Dream_Max_Revive_Sprite.png',
 'nanab_berries': 'https://static.wikia.nocookie.net/pokemon/images/f/f6/NanabBerry-GO.png',
 'razz_berries': "https://static.wikia.nocookie.net/pokemon/images/3/32/Dream_Razz_Berry_Sprite.png",
 'silver_pinap_berries': 'https://pokemongohub.net/wp-content/uploads/2018/08/Item_0707.png',
 'pinap_berries': 'https://pokemongohub.net/wp-content/uploads/2018/03/Item_0705.png',
 'ultra_balls': 'https://static.wikia.nocookie.net/pokemon/images/f/f1/UltraBallArt.png'}


for i, url in img_urls.items():
    download_image(url, f'{i}.png')

А, я могу использовать точечный график и add_artist, чтобы представить награды.

Из https://stackoverflow.com/questions/22566284/ matplotlib-как-строить-изображения-вместо-точек

def fetch_num_items(level_guide_l, x):
    for r in level_guide_l['rewards']:
        if r.endswith(x):
            return level_guide_l['rewards'][r]
    return 0

ball_pots_revs = [{'levels': l, 
  'potions': fetch_num_items(level_guide[l], '_potions'),
  'revives': fetch_num_items(level_guide[l], '_revives'),
  'balls': fetch_num_items(level_guide[l], '_balls'),
  'berries': fetch_num_items(level_guide[l], '_berries'),
  'balls_img': next(r for r in level_guide[l]['rewards'] 
                      if r.endswith('_balls')) + '.thumbnail.png',
  'potions_img': next(r for r in level_guide[l]['rewards'] 
                      if r.endswith('_potions')) + '.thumbnail.png',
  'revives_img': next(r for r in level_guide[l]['rewards'] 
                      if r.endswith('_revives')) + '.thumbnail.png',
 }  for l in level_guide
]

df_bpr = pd.DataFrame.from_dict(ball_pots_revs)
df_bpr

И сюжет…

import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

def getImage(path, zoom=1):
    return OffsetImage(plt.imread(path), zoom=zoom)

# Substitute with `df_bpr['potions_img']` or `df_bpr['revives_img']`
paths = df_bpr['balls_img']

x = df_bpr['levels'] 
y = df_bpr['balls'] # Substitute with `df_bpr['potions']` or `df_bpr['revives']`

fig, ax = plt.subplots()
ax.scatter(x, y) 

for x0, y0, path in zip(x, y,paths):
    ab = AnnotationBbox(getImage(path), (x0, y0), frameon=False)
    ax.add_artist(ab)

п

Да, хорошо, теперь займись зельями.

И оживает!

Что?! Я получаю только 20 максимальных возрождений за каждый уровень

Интересно, как разработчики игры решают, сколько наградных предметов давать за уровни. Может быть, они делали то же, что и мой учитель: оценивал наши работы, держал сочинения учеников, подходил к лестнице, бросал их вниз по лестнице, ближайший получал пятерку, самый дальний — пятерку.

Разработчики игры, должно быть, сделали то же самое с наградными предметами, и все плюшевые игрушки с максимальным оживлением падают с нижней части лестницы.

Если подумать, почему Pokemon Company не выпускает плюшевых игрушек для покемонов?

Я хотел бы смешать кучу разных плюшевых ягод и положить их в холодильник всякий раз, когда у нас закончатся фрукты, прежде чем я пойду в магазин, чтобы пополнить их.

Думаю, я мог бы сгенерировать их с помощью «не-стабильной диффузии< /em>» на обнимает лицо пока…

Читать сюжеты по отдельности утомительно...

Разве вы не можете собрать все предметы вместе?

paths = list(df_bpr['revives_img']) + list(df_bpr['potions_img']) + list(df_bpr['balls_img'])

x = list(df_bpr['levels']) + list(df_bpr['levels']) + list(df_bpr['levels'])
y = list(df_bpr['revives']) + list(df_bpr['potions']) + list(df_bpr['balls'])

fig, ax = plt.subplots()
ax.scatter(x, y) 

for x0, y0, path in zip(x, y,paths):
    ab = AnnotationBbox(getImage(path), (x0, y0), frameon=False)
    ax.add_artist(ab)

Выглядит лучше! Ммм, что-то не то...

Привет! (Подождите!) Изображения накладывались друг на друга, когда они находились в одной точке?!

В: Нельзя ли попробовать просто сгруппировать их, если они попадают в одну точку?!

О: Наверное, да, но вам действительно нужна "красивая" инфографика, чтобы знать, стоит ли вам прокачиваться до 50-го уровня?

Давайте попробуем объединить несколько изображений и сгруппировать их вместе

От https://stackoverflow.com/questions/30227466/combine-several- изображения-горизонтально-с-питоном

def combine_images(image_filenames, output_filename, pilmode='RGBA', how='v'):
    imgs    = [Image.fromarray(imageio.imread(i, pilmode=pilmode))
               for i in image_filenames]
    max_shape = sorted( [(np.sum(i.size), i.size) for i in imgs])[-1][-1]
    # Vertical
    if how[0].lower()=='v':
        imgs_comb = np.vstack([i.resize(max_shape) for i in imgs])
    # Horizontal
    elif how[0].lower()=='h':
        imgs_comb = np.hstack([i.resize(max_shape) for i in imgs])
    # Square
    elif how[0].lower()=='s':
        if len(image_filenames) % 2 != 0: # If odd, add a blank image.
            Image.new('RGBA', max_shape).save('blank.png')
            image_filenames += ['blank.png']
        combine_images(image_filenames[:len(image_filenames)//2], 'part1.png', how='h')
        combine_images(image_filenames[len(image_filenames)//2:], 'part2.png', how='h')
        imgs = [Image.fromarray(imageio.imread('part1.png', pilmode=pilmode)),
                Image.fromarray(imageio.imread('part2.png', pilmode=pilmode))]
        scale = len(image_filenames[:len(image_filenames)//2])
        max_shape =(max_shape[0]*scale, max_shape[1]*1)
        imgs_comb = np.vstack([i.resize(max_shape) for i in imgs])
    imgs_comb = Image.fromarray(imgs_comb)
    imgs_comb.save(output_filename)

Использование функции combine_images

list_im = ['max_revives.thumbnail.png', 'max_potions.thumbnail.png', 
           'ultra_balls.thumbnail.png', 'golden_razz_berries.thumbnail.png']
combine_images(list_im, output_filename='rewards-s.png', how='square')
display(JupyterImage(filename='rewards-s.png'))

Output of `combine_Images` function

Круто! Теперь снова сделайте графики.

Нам придется сгруппировать изображения по точкам (x,y) вместо того, чтобы хранить их в красивой таблице.

def fetch_num_items(level_guide_l, x):
    for r in level_guide_l['rewards']:
        if r.endswith(x):
            return level_guide_l['rewards'][r]
    return 0

ball_pots_revs_ber = [{'levels': l, 
  'potions': fetch_num_items(level_guide[l], '_potions'),
  'revives': fetch_num_items(level_guide[l], '_revives'),
  'balls': fetch_num_items(level_guide[l], '_balls'),
  'berries': fetch_num_items(level_guide[l], '_berries'),
 }  for l in level_guide
]

df_bprb = pd.DataFrame.from_dict(ball_pots_revs_ber)
from collections import defaultdict

data_points = defaultdict(list)

for idx, row in df_bprb.iterrows():
    x = row['levels']

    for i in row.index:
        if i != 'levels':
            y = row[i]
            if y == 0:
                continue
            data_points[(x,y)].append(
                next(r for r in level_guide[x]['rewards'] if r.endswith(i)) + '.thumbnail.png'
            )

print(data_points)

[выход]:

defaultdict(list,
            {(41, 20): ['max_potions.thumbnail.png',
              'max_revives.thumbnail.png',
              'ultra_balls.thumbnail.png',
              'razz_berries.thumbnail.png'],
             (42, 20): ['max_potions.thumbnail.png',
              'max_revives.thumbnail.png',
              'ultra_balls.thumbnail.png',
              'nanab_berries.thumbnail.png'],
             ...,
             (50, 50): ['max_potions.thumbnail.png',
              'ultra_balls.thumbnail.png'],
             (50, 20): ['max_revives.thumbnail.png']})

Теперь у нас есть изображения, которые мы хотим объединить для каждой точки рассеивания

data_points_imgs = {}
for k, v in data_points.items():
    fname = f"{'-'.join(map(str, k))}.png"
    if len(v) in [1,2]:
        combine_images(v, output_filename=fname, how='horizontal')
    else:
        combine_images(v, output_filename=fname, how='square')
    data_points_imgs[k] = fname

Иди, иди, иди. Сюжет!

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

x, y = zip(*data_points_imgs)

fig, ax = plt.subplots()
ax.scatter(x, y, s=0.01)
plt.xlabel('Level')
plt.ylabel('Rewards')
plt.xlim([40, 51])

ppp = data_points_imgs.values()

for x0, y0, path in zip(x, y,ppp):
    ab = AnnotationBbox(
        OffsetImage(plt.imread(path), zoom=1),
        (x0, y0), frameon=False)
    ax.add_artist(ab)

Теперь вы видите экспоненциальный рост и награды, что вы будете делать?

https://youtu.be/MpaHR-V_R-o?embedable=true

:::информация Также опубликовано здесь.

:::


Оригинал