記録

色々なことを書きます。連絡はツイッターによろしくお願いします。

【C94】コミケ初参加の反省点

2018年夏、コミックマーケット94に参加した。

コミケに参加するのは今回が初めて。準備不足を痛感したので、次回以降のコミケに参加するときの為に、実際に参加してわかったことをここに記録する。

 

 

今回の持ち物

  • ショルダーバッグ
  • トートバッグ
  • スマホ
  • 財布(1万円札×1、1000札×約30、100円×約20、コミケ以外で使う分含む)
  • 往復分以上チャージしたマナカ
  • スマホ用充電器
  • タオル
  • 汗拭きシート
  • お菓子(ウエハース、ラムネ)
  • ポカリスエット500ml×2(1日分)
  • タブレット

 

反省点

効率よく動くために

  • 効率よく移動するために地図が必要。行くところはメモしておく。
  • 素早い会計のためにウエストポーチ、すぐ開けられる財布を用意する。
  • 100円玉だけでなく500円玉にも両替して置くべきだった。

 

待機列

  • 10時までずっと座りっぱなしなので、並ぶなら折りたたみ椅子が欲しい。
  • スマホを会場内で充電しなくても良いように、暇つぶしになるものを用意したい。
  • 今回は夏だったので、日差し対策に帽子や日焼け止め、暑さ対策に凍らせた飲み物があるとよかった。
  • 1日目はうちわを貰えなかったので、用意しておきたい。
  • あっても損はないが、軽食は3日とも食べなかった。

 

その他

  • カタログは一応無くても良いけど欲しい。
  • 予想以上に色々なものを買ったので、3日で3万じゃ足りない。
  • 汗を掻くので、着替えが多めに必要。カプセルホテルに洗濯機があって良かった…
  • 戦利品を持って帰る手段があるか確認しなければならない。重たい荷物を運ぶためキャリーケースを持っていきたい。家に帰るまでがコミケ
  • 今回はギリギリセーフだったが、雨対策をしなければならない。

 

ゴールドになりました

🌸ゴールド昇格🌸

7/16 ゴールドⅤに到達

シルバーⅢに到達してから約1か月だった

サポートメインでほぼソナだけ、勝率は60%ちょいくらい

昇格戦は運よく全て1回で抜けたけど、シルバーⅠで勝率が落ちてきたのでゴールドを駆け上がるのは無理そう

f:id:netyo715:20180717231321p:plain

シルバー3に昇格した

 こつこつソロキュー回してたらシルバー3に昇格。ランクは今シーズンから初めて、最初振り分けられたのがシルバー3で、すぐ連敗して一度シルバー5まで落ちた。シルバー4で停滞していたが、ソナを使い始めたら勝率が上がった。

 ランクでのソナの勝率は6割を超えているので、やっと自分に合うチャンピオンを見つけたなという感じ。長射程かつ高威力のQと強化AAで火力が出るので、サポートだがそこそこわかりやすい活躍が出来て楽しい。ULT→Q+AA+イグナイトでADCをソロキルすることもある。BANもピックも滅多にされないし、サポートとというポジションはほぼ確実に選ばせてくれるのでそういう意味でも気が楽。

 最近は慎重なプレーを心掛けていて、局所的に上手いプレーをするより、全体的にミスをしないということを意識している。このままゴールドまで駆け上がりたい。

f:id:netyo715:20180617011537p:plain

ラックスにバフきてほしい

 

 

Discordのチーム分けbotを作る④

前: Discordのbotを作る(3) - 記録

 

完成

とりあえず最低限の機能を付けて完成。

出来ることは、

  • 希望ポジションを登録する
  • ランダムにチーム分けをする
  • リストを見る
  • リストを空にする
  • 操作方法を見る

の5つ。

「1人ずつリストから消去する」「複数のポジションを指定する」等、まだまだあると便利な機能は考えられるが、ほかに作りたいものもあるのでこれで終わりとする。

もし改良するのなら、クラスを利用したり、ファイルを操作してデータを保存できるようにしたい。

 

def teamallocation(rlist,l):
import discord
import random
import re
client = discord.Client()

p_list =[[],[],[],[],[],[]]
n_list =[]
name = ''

cmd_list =['!ad','!12','!list','!clear','!help']
position =['top','mid','adc','sup','jg','fill']

 
@client.event
async def on_ready():
    print('Logged in as')
    print('BOT-NAME :', client.user.name)
    print('BOT-ID   :', client.user.id)
    print('------')


@client.event
async def on_message(message):
    if client.user == message.author:
        return

    global p_list
    global n_list
    global name

    cmd_1 = command(message.content)
    cmd_2 = command(message.content,1)
    cmd_3 = command(message.content,2)

    name = username(message.author)
    l_name = lolname(cmd_3)


    if cmd_1 == cmd_list[0]:#!ad
        if l_name in n_list:
            comment = l_name+'は既に登録されています'
        else:
            try:
                p = position.index(cmd_2)
            except ValueError:
                p = 5
            n_list +=[l_name]
            p_list[p] +=[l_name]
            comment = l_name+'の希望ポジションは'+position[p]+'です'


    elif cmd_1 == cmd_list[1]:#12
        if len(n_list) <=1:
            comment = '2人以上登録してください'
        else:
            n = teamlen(n_list)
            a_list = teamshuffle(p_list)
            comment = teamallocation(a_list,n)
    
    elif cmd_1 == cmd_list[2]:#list
        comment = sendlist(position,p_list)
    
    elif cmd_1 == cmd_list[3]:#clear
        if len(n_list) !=0:
            p_list =[[],[],[],[],[],[]]
            n_list =[]
            comment ='リストを空にしました'
        else:
            comment ='リストは空です'
    
    elif cmd_1 == cmd_list[4]:#help
        comment ='---------------------------------------------\n\
操作方法\n\
\n\
!ad (ポジション) (登録する名前) ※()内は省略可\n\
登録\n\
\n\
!12\n\
チーム分け\n\
\n\
!list\n\
リストを表示\n\
\n\
!clear\n\
リストを空にする\n\
---------------------------------------------'

    else:
        return


    await client.send_message(message.channel,comment)

#空白で区切られたメッセージのn番目を取り出す
def command(message,n =0):
    try:
        return message.split(' ')[n]
    except IndexError:
        return ''

#ユーザー名の後ろの#xxxxを消す
def username(user):
    s_user = str(user)
    return re.split('#',s_user)[0]

#リストに登録する名前
def lolname(user):
    if user != '':
        return user
    else:
        return name

#チーム数
def teamlen(men_list):
    n =(len(men_list)+4)//5
    if n >=2:
        return n
    else:
        return 2
        
#リストをシャッフルする
def teamshuffle(plist):
    random.shuffle(plist)
    result =[]
    for i in plist[5]:
        plist += [i]
    plist[5] =[]
    for x in plist:
        if type(x) == list:
            for user in x:
                result +=[user]
        else:
            result +=[x]
    return result

#チームを分ける
def teamallocation(rlist,l):
    result =[[]for i in range(l)]
    n =0
    for x in rlist:
        result[n] += [x]
        if n +1 == l:
            n =0
        else:
            n +=1
    
    bunsyou =''
    m =1
    for y in result:
        bunsyou +='チーム'+str(m)+'\n'
        for z in y:
            bunsyou +='['+ z +']'
        bunsyou +='\n\n'
        m +=1
    return bunsyou

#リストを表示
def sendlist(position,list):
    bunsyou =''
    for (x,y) in zip(position,p_list):
        if len(y) >=1:
            bunsyou += x +'\n'
            for z in y:
                bunsyou +='['+ z +']'
            bunsyou +='\n\n'
    return bunsyou



client.run('ここにトークンを入れる')

終わり

 

追記

1回目のシャッフルで選択したポジションが入れ替わる不具合があった

Discordのチーム分けbotを作る③

前: Discordのbotを作る(2) - 記録

 

チーム分け

"!12"でチーム分けをする。

コマンド名が12なのは、今までのチーム分けが、一斉に1か2をテキストチャンネルに送信する、という方法だったから。

 

チーム分けに必要な情報は、

  • 参加者のリスト
  • チーム数
  • チーム毎の人数の上限

の3つ。

ランダムにチーム分けをするということは、

誰でも良い=勝敗をそれほど意識しない=ノーマル戦

ということなので、とりあえずは上限5人で、チーム数最小限で固定とする。

 

チーム数が最小限になるようにするが、1チームで収まっても2チーム作るようにする。

def teamlen(men_list):
    n =(len(men_list)+4)//5
    if n >=2:
        return n
    else:
        return 2

 

チーム数が決まったらチーム分けをする。

振り分け方は、シャッフルしたリストを、1番目の人は1に、2番目の人は2に、3番目の人は1に…というように、順番に分けていくという方法。

トランプを配るときと同じというとわかりやすいか。

この方法なら、シャッフルするときに希望ポジション毎に固めておけば、振り分けたときに別のチームになる。

 

シャッフルする。

def teamshuffle(plist):
    random.shuffle(plist)
    result =[]
    for x in plist:
        if type(x) == list:
            for user in x:
                result +=[user]
        else:
            result +=[x]
    return result

 

振り分けて文章にする。

def teamallocation(rlist,l):
    result =[[]for i in range(l)]
    n =0
    for x in rlist:
        result[n] += [x]
        if n +1 == l:
            n =0
        else:
            n +=1
    
    bunsyou =''
    m =1
    for y in result:
        bunsyou +='チーム'+str(m)+'\n'
        for z in y:
            bunsyou +='['+ z ']'
        bunsyou +='\n\n'
        m +=1
    return bunsyou

 

これで動かせるが、リストから削除したりする機能も必要。

かなり変数名が適当になってきた。

 

次:Discordのbotを作る(4) - 記録

Discordのチーム分けbotを作る②

前: Discordのbotを作る(1) - 記録

 

チーム振り分けまでの流れ

  1. discord上で一人ずつ登録する。希望ポジションがあればコールする。
  2. 登録した人のリストをシャッフルし、振り分ける。

 

リストに登録するコマンド

"!ad (ポジション) (名前)"でリストに登録する。

()内は、省略すると"fill"(どこでも)、"送信者の名前"になるようにする。

まず、前回作った関数をちょっと書き換える。

def command(message,n=0):
try:
return message.split(' ')[n]
except IndexError:
return ''

cmd_1 = command(message.content)
cmd_2 = command(message.content,1)
cmd_3 = command(message.content,2)

これでdiscordで入力したコマンドを簡単に扱える。

 

 "!ad"と入力したときの処理はこうした。

if cmd_1 == cmd_list[0]:#!ad
    if l_name in n_list:
        comment = l_name+'は既に登録されています'
    else:
        try:
            p = position.index(cmd_2)
        except ValueError:
            p = 5
        n_list +=[l_name]
        if p !=5:
            p_list[p] +=[l_name]
        else:
        p_list +=[l_name]
        comment = l_name+'の希望ポジションは'+position[p]+'です'

n_listは名前のリスト、p_listも名前のリストだが、リストの中にポジション毎にリストがある。ただし、fillのリストは無い。

p_list =[[],[],[],[],[]]

l_nameは、送信者の名前で、ポジションの次に名前が入力されていたらそれになる。

まずはn_listに名前が無いか確認する。

無ければポジションが指定されているか調べる。

position =['top','mid','adc','sup','jg','fill']

このリストのどれかに当てはまればpにインデクスを代入し、当てはまらないのならfillと同じ5を代入する。

次に、n_listとp_listに名前を追加する。

ポジションを指定してればリストの中のリストに追加するが、fillならp_listに直接追加する。

これは、同じポジションの人をまとめた状態でシャッフルするため。

この処理が終わると、

await client.send_message(message.channel,comment)

でdiscordに結果を送信する。

 

次: Discordのbotを作る(3) - 記録

Discordのチーム分けbotを作る①(未完成)

PythonでDiscordのbotを作る

6人以上でlolをするときにチーム分けをするための、discord上で動くbotを作る。

とりあえず作りたい機能は、

  • ランダムに分ける
  • 希望ポジションを考慮して分ける

の2つ。

botを作るのに最低限必要な知識は、調べたらすぐ出てきたので書きません。

 

コマンド入力

よくあるbotと同じように、"!○○○"といった感じでコマンドを入力して動かしたい。

とりあえず思いついたのは、メッセージがコマンドと一致すると動くというもの。

if message.content ==('!○○○')

 

しかし、これでは'!○○○ ●'みたいな、空白で区切って値を入力するコマンドを追加するときに困るので、

split関数でメッセージを分割し、1番目が一致すると動くようにする。

def command(message):
return message.split(' ')[0]
cmd = command(message.content)
if cmd ==('!○○○')

これでコマンド+αの情報を扱えるはず。

 

次: Discordのbotを作る(2) - 記録