Discuss Scratch

takkun0530
Scratcher
100+ posts

オンラインゲーム

このTopicについて
ここは、オンラインゲームのことについて話し合ったり、オンラインゲームを1から作ったりすることです。
注意
  • オンラインゲームについての質問は、質問コーナー3を使用してください。
その他
100%ペンの3Dオンラインゲーム開発機構も見てください。

Last edited by takkun0530 (Oct. 8, 2019 11:03:15)

sypu
Scratcher
500+ posts

オンラインゲーム

さくじょ

Last edited by sypu (May 26, 2020 03:04:04)

ARATAKU
Scratcher
500+ posts

オンラインゲーム

クラウドショックで、オンラインゲームを作る気力が失せている今日この頃()

つかれた。もう聞き飽きたよ
ARATAKU
Scratcher
500+ posts

オンラインゲーム

オンラインゲームって、1から作るとすごいめんどくさいけど、基本さえ作っとけば、割と簡単だから、
このとぴっくで基本となる部分だけを作って、バックパックで誰でも使えるようにしませんかっていう
提案をしに来ました

つかれた。もう聞き飽きたよ
ARATAKU
Scratcher
500+ posts

オンラインゲーム

yeah.
割とこう言うのっていろんな人が作ってるから今更感がなくもないけど、他の人のより使いやすくするってことで・・・

Last edited by ARATAKU (Oct. 8, 2019 07:58:20)


つかれた。もう聞き飽きたよ
sypu
Scratcher
500+ posts

オンラインゲーム

削除

Last edited by sypu (May 26, 2020 03:03:51)

gagagagagagagaqqww
Scratcher
1000+ posts

オンラインゲーム

sypu wrote:

オンラインゲームのこととは、具体的にどのようなことでしょうか?
オンラインゲームのことはオンラインゲームのことでしょう。それ以上の説明はありますか?

https://scratch.mit.edu/projects/325272224/
まだあきらめてない。
daikonnbatake
Scratcher
100+ posts

オンラインゲーム

クラウド変数について2年間研究してきた人間としてこのトピックに貢献したいと思います。
オンラインゲームを作るまえに、「データを通信する」と言うことがどう言うことであるかを考える必要があります。

通信とはすなわち手紙の交換と同等の行為です。

たとえば、AさんとBさんが文通をしたいとします。
手紙を特定の個人に届ける為には必ず「住所や氏名」が必要となります。
なぜこれが必要かと言うと、Aさんが郵便局の人に「Bさんに届けてください」と言って住所の書かれていない手紙を出したとしましょう。
現実ではそもそも郵便局の人に受け取ってもらえないですが、ここでは郵便局の人が融通を利かせてBさんになんとか届けようと努力したと仮定します。そして、その町にBさんと同姓同名のB’さんもいたとします。すると、郵便局の人は50%の確率でB’さんに手紙を届けてしまうことになります。

このようなことを避ける為に、この世に一つしかない「住所」が必要なのです。住所があれば、名前を書かなくてもその場所に手紙を届けることができます。

通信の世界でも同じことが言えます。あっちこっちにデータがばら撒かれると困るので「住所」が必要です。
これが一般的に「IPアドレス」と呼ばれるものです。

Scratchでクラウド変数を使った通信にも「アドレス(住所のこと)」を使うことでうまく通信することができます。

通信の基礎はこんなもんです。
正直、説明が非常に難しいのでこれ以上はあまり語れませんが、しっかりとまとめたものをその内書こうとは思っています。

また、オンラインゲームの通信部分として、私が作った通信ライブラリ「Network Kit 2.0」(私の署名のやつです)をぜひ使ってみてください。
このライブラリを使用すれば、大量の文字列データでも最適化して数回に分けて通信を行うため、通信に関しては全く気に留めることなくゲームを作れるかと思います。

しかし、Scratchのクラウド変数の性質上どうしても1秒間に10回以上の通信が不可能なので、ターン制のゲームに止まるかと思われます。
工夫を凝らせばもっと様々なことができると思います。実際、私はこの通信方式を用いてscratch上でサーバーベースのネットワークを構築し、200000人x10240文字分のデータを保存する技術を確立しています。(現在は公開していませんが、SDTokyo2019で発表したのでその動画がYoutubeに上がっています)

私に力添えできることであれば私の都合に合わせる形となってしまいますが出来る限り協力したいと思います。

祝、Network Kit 4 リリース!
Network Kit 4とは、Scratchにおける次世代の通信ライブラリです!!
アドレス指定による相互通信機能を提供します!

・文字列の送受信が可能(大文字小文字区別 / 半角記号対応)
・長さ無制限で通信可能(パケット分割機能)
・99999台同時通信可能(混線回避機能)
ARATAKU
Scratcher
500+ posts

オンラインゲーム

ターンせいで無くても、滅茶苦茶頑張れば対戦アクションも行けます
ただ、本気で頑張らないと無理。
ただ、もし、数人集まって議論できる場所があったなら出来るかも・・・って、そんな場所あるわけ無いよね~(すっとぼけ)

Last edited by ARATAKU (Oct. 16, 2019 12:36:07)


つかれた。もう聞き飽きたよ
daikonnbatake
Scratcher
100+ posts

オンラインゲーム

ARATAKU wrote:

ターンせいで無くても、滅茶苦茶頑張れば対戦アクションも行けます
ただ、本気で頑張らないと無理。
ただ、もし、数人集まって議論できる場所があったなら出来るかも・・・って、そんな場所あるわけ無いよね~(すっとぼけ)
残念ながら、現環境では1秒間に10回の更新が限度となります。よってリアルタイム性のあるゲームはおそらく不可能です。
昔あった手法では1秒のラグが生じますが、1秒分のプレイヤーの座標情報などを記録したものを1秒に1回送信するという方法でアクションゲームを作っている方がいました。しかし、現在では256文字の制限があるのでかなり厳しい方法です。

Last edited by daikonnbatake (Oct. 17, 2019 01:26:57)


祝、Network Kit 4 リリース!
Network Kit 4とは、Scratchにおける次世代の通信ライブラリです!!
アドレス指定による相互通信機能を提供します!

・文字列の送受信が可能(大文字小文字区別 / 半角記号対応)
・長さ無制限で通信可能(パケット分割機能)
・99999台同時通信可能(混線回避機能)
ARATAKU
Scratcher
500+ posts

オンラインゲーム

間の動きを補完するとか、
押したキーのみ送信するとか、
圧縮して送信するとか、
めっちゃ頑張れば出来ない物でもないです。

つかれた。もう聞き飽きたよ
tan-10
Scratcher
100+ posts

オンラインゲーム

ARATAKU wrote:

ただ、もし、数人集まって議論できる場所があったなら出来るかも・・・って、そんな場所あるわけ無いよね~(すっとぼけ)
もうこうなったらScratchDayとかで公開議論するしかないんじゃ?(←それは無理がありすぎる)
でもdaikonnbatakeさんは実際にクラウド変数の活用法についてSDで発表しているわけだし、出来ないことはないかも。
ARATAKU
Scratcher
500+ posts

オンラインゲーム

ここがあるじゃないですか。このディスカッションフォーラムが。

まぁ、出来ることなら実際に現実で話したほうが、色々便利だし、何しろ楽しいだろうになぁとは思います。

Last edited by ARATAKU (Oct. 17, 2019 15:13:17)


つかれた。もう聞き飽きたよ
tan-10
Scratcher
100+ posts

オンラインゲーム

実際にみんなで話し合って、ひとつのプロジェクトを作り上げると思うと、とても面白くなりそうでつい投稿しました。
でもまずはこのディスカッションフォーラムですね。

クラウド変数をあまり使ったことはありませんが、オンラインゲームは一度作ってみたいものです。
話し合いには貢献できないかもしれませんが、時々トピックを覗かせていただきます。
kekelolo
Scratcher
500+ posts

オンラインゲーム

griffpatchさんのslither.ioがすごく参考になりますね。

https://scratch.mit.edu/projects/622199171 ←New Project
<0posts[#e5a9c6]  [#e5a9c6]  [#e5a9c6]  [#e5a9c6]  [#e5a9c6]  [#e5a9c6] [#e9ecc4] [#e9ecc4] [#e9ecc4] [#e9ecc4]1000posts >
korokoro19
Scratcher
100+ posts

オンラインゲーム

kekelolo wrote:

griffpatchさんのslither.ioがすごく参考になりますね。
(同じく)Bomberman v1.0も参考になりますね。ボムの爆風や、自分の位置とかがとても細かいです…

気がついたら高校生になってました
bsahd
Scratcher
100+ posts

オンラインゲーム

オンラインゲームを作るときに使えます

Last edited by bsahd (May 26, 2020 23:11:01)


これは署名と呼ばれるもので、各投稿に自動的に入力されます。
2023/12/19 512(2⁹)プロジェクト達成! シンプルで楽しい射的クリッカー
お礼、感謝などはプロフィールコメントへお願いします。
「これは署名と言っていちいち手動で書いていません」はs-t-p氏発案です
kfmbs599
Scratcher
19 posts

オンラインゲーム

@tan-10さんの意見同感!               
終わるまで [ 同感] の音を鳴らす[同感] と言う
yuzupon1133-sub
Scratcher
1000+ posts

オンラインゲーム

【この投稿は約7分で読めます】

オンラインの仕組み・・・オンラインゲームを作りたいがクローズされたのでこちらに投稿します。

まず一番わかりやすいオンラインゲームの作り方を一から説明している動画があります。
https://youtu.be/-KoHaz7ZPvo
まずはこれを見てみましょう。

オンラインゲームを作るにあたって必要不可欠なのが「データ」です。
これがないと通信ができません。まずはクラウド変数を使って、自分のプレイヤーのx座標、y座標を送るプログラムを作ってみましょう。
まずは「送信側」と「受信側」のプログラムの違いについて説明します。
「送信側」は自分のいる位置(x座標、y座標)をクラウド変数に「書き込む」プログラムです。一方
「受信側」はその書き込まれたクラウド変数を「読み込んで」「データを解析」するプログラムです。
ではなぜ「解析」しなければならないのか?クラウド変数は「256桁までの数字」しか書き込めないからです。
つまり、x座標とy座標を1つにまとめないといけません。(xとy座標を別々の変数にすることもできますが、ためにならないため割愛します。)
座標についておさらいしましょう。スクラッチではx座標は-240~240、y座標は-180~180まであります。
1つにまとめるためにはどこまでがx座標のデータなのか、どこからがy座標のデータなのかをはっきりさせないといけません。
試しに
((x座標) と (y座標)) と言う
について考えてみましょう。
まずは
x座標を (0) 、y座標を (0) にする
と設定して、さっきのコードを実行してみましょう。
「00」と返ってきました。では、
x座標を (50) 、y座標を (100) にする
と設定して、さっきのコードを実行してみましょう。
「50100」と返ってきました。
ここで疑問に思います。
「座標が変わるごとに桁(文字数)が変わって、どこまでがx座標、どこからがy座標かわからない!」
大丈夫です。これは正常な考えです。ではどうすればいいのか?
“桁揃え”をします。
まず桁揃えってなんや?ズバリ、
・座標が変わっても文字数が必ず一定で返ってくる!=解析できる!
というとてつもなく便利な仕組みです。
こちらがコードになります。
((((000) と (x座標)) の ((x座標) の長さ) 番目の文字 ::operators) と ((((000) と (x座標)) の (((x座標) の長さ) + (1)) 番目の文字 ::operators) と ((((000) と (x座標)) の (((x座標) の長さ) + (2)) 番目の文字 ::operators) と (((000) と (x座標)) の (((x座標) の長さ) + (3)) 番目の文字 ::operators))))
というのは冗談で、こちらを使います。
定義 桁揃え (文字) (桁)
[tmp v] を (文字) にする
((桁) - ((文字) の長さ)) 回繰り返す
[tmp v] を ((0) と (tmp)) にする
end
(定義についてはこちらをご覧ください。)
使い方は簡単です。例えば
桁揃え (x座標) (4) ::custom
このようにすると、変数(tmp)が
x座標が-240の場合→-240
-50の場合→0-50
0の場合→0000
50の場合→0050
240の場合→0240
と、必ず4桁で出力されます。便利すぎる。
さっきの検証に戻りましょう。今度はこのようにコードを組んでください。
桁揃え (x座標) (4) ::custom
[tmp2 v] を (tmp) にする
桁揃え (y座標) (4) ::custom
((tmp2) と (tmp)) と言う
コードが組めたら座標を設定しましょう。
x座標を (0) 、y座標を (0) にする
と設定して、さっきのコードを実行してみましょう。
「00000000」と返ってきました。では、
x座標を (-240) 、y座標を (-10) にする
と設定して、さっきのコードを実行してみましょう。
「-2400-10」と返ってきました。
無事桁揃えができて必ず8桁になりますね。素晴らしい。
でもちょっと待ってください。クラウド変数のルールは「256桁までの数字」しか書き込めません。となると「-」が邪魔でクラウド変数に書き込めません。「-」を排除するにはどうすればいいのか。ズバリ、
“数字の自然数化”をします。
え、どうやったら負の数が正の数になるんと思っているかもしれないですが、簡単です。その数に更に数字を「足す」だけです。
座標について考えてみると、x座標は-240~240、y座標は-180~180までしかありません。
つまり一番最大の数「240」を足せばどんな数でも自然数になります。
例えば、
-240+240は0、
-100+240は140、
0+240は240、
100+240は340、
240+240は480になり、かならず自然数になることが見て取れます。そしてなにより、自然数化によって最大3桁になることです。1桁少なくすることができます。
検証に戻ります。コードを次のように書き換えます。(4を3にするのを忘れずに)
桁揃え ((x座標) + (240)) (3) ::custom
[tmp2 v] を (tmp) にする
桁揃え ((y座標) + (240)) (3) ::custom
((tmp2) と (tmp)) と言う
コードが組めたら座標を設定しましょう。
x座標を (0) 、y座標を (0) にする
と設定して、さっきのコードを実行してみましょう。
「240240」と返ってきました。では、
x座標を (-100) 、y座標を (100) にする
と設定して、さっきのコードを実行してみましょう。
「140340」と返ってきました。
あの邪魔な「-」がなくなったので、いよいよクラウド変数に書き込むことが可能になります。
「送信側」のプログラムを作る・・・前に、重要なことが2点あります。
一つ目は、送信と受信の区別をつけないといけない。
二つ目は、クラウド変数は1秒間に10回までしか書き込めない(更新できない)という暗黙のレート制限がある。
順を追って説明します。まず一つ目。
これどういうことかというと、そのプロジェクトに2人いたとします。どちらも「送信側」のプログラムを実行してしまうと、1人目がクラウド変数を更新→2人目がすぐ上書き されて1人目のデータが秒で消えてしまいます。
これを回避するにはプレイヤー番号を付ける必要がありますが、説明が億劫なので今回は別の方法にします。
「受信側」のプログラムは常に実行させ、「送信側」のプログラムは「a」キーを押すとを実行させるようにします。
言葉で説明するのもあれなので、コードをお見せします。また、スプライトは猫で、マウスで動かせるようにします。
@GreenFlag がクリックされたとき
ずっと
[x v] を (((☁ データ) の (1) 番目の文字 ::operators) と (((☁ データ) の (2) 番目の文字 ::operators) と ((☁ データ) の (3) 番目の文字 ::operators))) にする
[x v] を (-240) ずつ変える
[y v] を (((☁ データ) の (4) 番目の文字 ::operators) と (((☁ データ) の (5) 番目の文字 ::operators) と ((☁ データ) の (6) 番目の文字 ::operators))) にする
[y v] を (-240) ずつ変える
x座標を (x) 、y座標を (y) にする
end
[a v] キーが押されたとき
ずっと
桁揃え ((マウスのx座標) + (240)) (3) ::custom
[tmp2 v] を (tmp) にする
桁揃え ((マウスのy座標) + (240)) (3) ::custom
[☁ データ v] を ((tmp2) と (tmp)) にする
x座標を (マウスのx座標) 、y座標を (マウスのy座標) にする
(0.1) 秒待つ //レート回避
end
このように組めばもう完成です。実行してみましょう。(注: 自分で作ったプロジェクトは非共有でもクラウド変数は動作します。最高。)
ブラウザを2つ立ち上げて、同じプロジェクトを開きます。(いわゆる二窓ってやつ)
どちらも旗を押して、片方はaキーを押します。すると、片方しか猫を操作していないのにどちらの猫も同じ座標にいることが分かります。

これがオンラインの型番です。後はプレイヤー番号を付けたり、その他アクション(向きとかコスチュームとか)を付けることもできます。
でもこれだけは言いたいのが、「オンラインゲームの作り方を教えて」だけでは的確な答えが得られないことです。
どういう動作をするのか?例えば、オンラインプラットフォーマーとオンラインブロック崩し(?)は全くプログラムが違う。
一番いい方法は「テンプレを見て学習し、そこから改造する」ことです。
これができるようになればオンラインゲームを作ることなんて楽勝でしょう。
以上になりますが、ご不明な点などございましたらお申し付けください。

Last edited by yuzupon1133-sub (Dec. 12, 2021 17:44:10)


↑ここから下は署名です。

↑ここから下は署名です。

↑ここから下は署名です。
署名ってなんぞや!?その答えはここにあります。
てか自分のユーザー名ググッたらTwitter出てきて草
rolan2800
Scratcher
3 posts

オンラインゲーム

オンラインゲームの作り方教えて下さい

Powered by DjangoBB