【Scratch】ジャンプの作り方
アクションゲームのジャンプの作り方をしょうかいします。
ジャンプの作り方
まずはジャンプさせたいキャラクターを用意します。
ジャンプするためにじめんをつくります。
へんすうをつくります。今回はyにしました。
ジャンプはyざひょうのへんかでできるものなので、「yざひょうを10ずつかえる」を出します。
さっき出した「yざひょうを10ずつかえる」の中にへんすうyを入れます。
「はたがおされたとき」と「ずっと」をだして組み合わせましょう。
まだ、はたをおしてもへんかがありません。
次にへんすうyを-1ずつかえるを下に入れてみましょう。
今、はたをおすと、下におちていきます。
「もし〜なら」と「いろにふれた」をだして、じめんのいろにふれたならをつくります。
その中に「へんすうyを0にする」を入れます。
ずっとの一番下に入れます。
また、はたがおされたときのすぐ下に「へんすうyを0にする」を入れます。
キャラクターを上にもどしてまたはたをおすと、じめんの上にのります。
ここでスペースキーをおしてジャンプをする仕組みをつくります。
「もし〜なら」を作って、中に「スペースキーがおされた」をつくります。
その中に「へんすうyを0にする」を入れます。
かずを15や16にします。
今作った、もし〜ならをずっとの中の「もし〜いろにふれたなら」の中に入れます。
これでスペースキーをおせばジャンプができます。
これがジャンプの作り方です。
【超入門】自然言語処理でネガポジ判定してみよう!
「自然言語処理」という言葉を聞いて、皆さんはどのようなイメージを持たれるでしょうか?機械学習を学んだことがない場合、「聞いたことはあるがどのようなものなのかはわかっていない」、「なんとなく難しそう」等のイメージを持たれる方が多いのではないかと思います。今回は自然言語処理が実際にどのように使われているかというところから、自然言語処理を用いてテキストのネガティブ・ポジティブ度を数値化するところまでをまとめていきたいと思います。コードはpythonで書いていきます。
自然言語処理をなんとなく理解しよう
そもそも自然言語処理とは?
そもそも自然言語処理とはどのようなものなのでしょうか。
Wikipediaには
「自然言語処理(しぜんげんごしょり、英語: natural language processing、略称:NLP)は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術であり、人工知能と言語学の一分野である。」
とあります。しかし、「自然言語をコンピュータに処理させる」と言われてもなかなかピンとこないと思います。ここで言われている処理というのは、テキストデータを単語単位に分割したり、大量のテキストデータを学習して単語同士の関係を推測したりすることです。今回行っていくネガポジ判定では、ネガティブなワードとポジティブなワードの辞書を作り、判定するデータがどれだけ辞書にある単語を含んでいるかを調べて点数をつけていきます。このような処理をコンピュータに命令して処理させるのが自然言語処理です。
こんなところで使われている!
代表的なものにGoogle翻訳などの自動翻訳や、アレクサ、GoogleHome等のスマートスピーカー、TwitterやLINEのチャットボットなどが挙げられます。身近な業務への応用としては、お客様からの問い合わせの対応を自動化したり、受信したメールをカテゴリや目的別に自動で振り分けたりすることができます。
機械学習を使わないネガポジ判定で自然言語処理入門する!
工程を確認しよう!
自然言語処理がどのようなものなのか、ざっくりと理解できたところで早速自然言語処理に入門していきましょう。今回はテキストのネガティブ・ポジティブの判定をしていきます。これは自然言語処理の世界では「感情分析」という分野に入ります。一般的に自然言語処理は機械学習を用いて行いますが、今回は超入門編ということで機械学習はせずに基本的な処理のみで行っていきます。
これから行う工程をまとめると、
- ① ネガティブ、ポジティブなワードの単語辞書を作る
- ② 評価する対象になるデータを用意する
- ③ 評価対象のデータを処理し、評価する
という流れになります。
判定に使う辞書を作ろう!
今回は東北大学 乾・岡崎研究室が公開している「日本語評価極性辞書(用言編)」と「日本語評価極性辞書(名詞編)」を使います。ネガティブなワードは「n」、ポジティブなワードは「p」、ニュートラルなワードは「e」で表現していきます。
「日本語評価極性辞書(用言編)」, 「日本語評価極性辞書(名詞編)」
この辞書を判定に使うために整形していきます。例えば名詞の方を見ると、各ワードに活用形や説明が書かれています。今回は「悲しい,n」、「楽しい,p」のような形の辞書を作っていきたいのでこれらはカットします。
用言の方は「n,疲れる」の他に「n,疲れ,が,ある」という内容も含まれてしまっています。これはどう処理すべきか悩ましいところですが、今回は評価するテキストがどれだけ辞書にある単語を含んでいるのかを調べたいので、助詞や助動詞の部分はカットして「n, 疲れ」というように整形します。このように整形していくと「n,可哀相,だ」と「n,可哀相,です」がどちらも「n, 可哀相」になってしまうので、名詞の辞書と結合した後に重複している単語を削除します。これで辞書は完成です!
評価するデータを用意しよう!
次に評価するデータを用意します。今回のような練習目的の場合はオープンソースのテキストや、Twitterから取得したツイートなどを利用するのがおすすめです。今回は自分で適当なテキストを用意し、以下のような配列にしておきます。
texts= ["今日は楽しくて良い一日だった。ランチに行ったお店がとても美味しかった。", "今日は天気が悪くて大変だった。とても疲れた。", "今日は天気が悪かったから、家で読書をした。こういう日も悪くない。"]
評価してみよう!
ではいよいよテキストを評価していきます。評価方法はいたってシンプルで、評価するテキストを単語単位に分割し、単語の原型を取得します。さらに助動詞と助詞を除いて動詞・名詞・形容詞のみを残します。残った単語が辞書に含まれているかを調べて、ネガティブな単語の場合-1点、ポジティブな単語の場合+1点、ニュートラルな単語の場合0点で点数を計算します。このようにテキストを単語が意味を持つ最小の単位に分解して解析することを「形態素解析」と言います。形態素解析を行う際に非常によく使われるのがMeCabという形態素解析エンジンです。自然言語処理の世界では知らない人はいないと言っても過言ではないくらいメジャーなツールで、今回もMeCabを使ってテキストを分解していきます。
では先ほど用意した評価用データをMeCabを使って単語単位に分解してみます。
import MeCab
#MeCab準備
tagger = MeCab.Tagger()
#用意した評価用テキスト
texts= ["今日は楽しくて良い一日だった。ランチに行ったお店がとても美味しかった。", "今日は天気が悪くて大変だった。とても疲れた。", "今日は天気が悪かったから、家で読書をした。こういう日も悪くない。"]
#ループで1つずつ処理
for text in texts:
# MeCabのTaggerオブジェクト
mecab_result = tagger.parse(text)
print(mecab_result)
print("-------------------------------------------------------------------------------------------------------")
ここでは文章を単語単位に分割する際に便利なTaggerオブジェクトを使っています。以下の画像がひとつめの評価用テキストの実行結果です。
ここから単語の原型と品詞を取得し、先ほど説明した評価方法に従って点数をつけていきます。
import pickle
import MeCab
# 辞書読み込む
word_dic = pickle.load(open("word_dic.pickle", "rb"))
#MeCab準備
tagger = MeCab.Tagger()
#ファイル読み込む
texts= ["今日は楽しくて良い一日だった。ランチに行ったお店がとても美味しかった。", "今日は天気が悪くて大変だった。とても疲れた。", "今日は天気が悪かったから、家で読書をした。こういう日も悪くない。"]
for text in texts:
print("評価するテキスト:", text)
point = 0
# MeCab
s = tagger.parse(text)
# スペースで分割して品詞側を取得
for line in s.split("n"):
# EOSだったらループを抜ける
if line == "EOS": break
# さらにカンマで分割
params = line.split("t")[1].split(",")
# 品詞を取得
hinshi = params[0]
# 単語の原型を取得
word = params[6]
if not (hinshi in ['名詞', '動詞', '形容詞']): continue
# 取得した単語の原型が辞書に含まれているか調べて点数をつける
if word in word_dic:
negaposi = word_dic[word]
if negaposi == 'n':
point -= 1
elif negaposi == 'p':
point += 1
else:
point += 0
print(word, negaposi)
print("score:", point)
print("形態素解析結果")
print(s)
print("---------------------------------------------------------------------------------------------------------")
ひとつめのテキストの結果がこちら。
scoreが2なのでポジティブな文章だと評価されていると言えます。
ふたつめのテキストの結果がこちら。
scoreが-3なのでネガティブな文章だと判定されていると言えます。
しかし問題なのが3つめのテキストです。文章自体のニュアンスはポジティブに近いにも関わらず、「悪い」というワードが多いためにscoreが-2になってしまっています。
このような少し複雑な表現がされているテキストは機械学習で大量のテキストデータを学習して性能の良いモデルを作ったり、助動詞まで加味して評価する必要があります。
まとめ
いかがでしたでしょうか。自然言語処理は難しいもののようなイメージを持たれがちですが、実は今回のような基本的な作業だけでも感情分析ができます。
これを機に自然言語処理の世界に少しでも興味を持っていただけると嬉しいです。
【Scratch】xざひょうを10ずつかえると10ほうごかすのちがい
xざひょうを10ずつかえると10ほうごかすのちがいについてしょうかいします。
xざひょうを10ずつかえると10ほうごかすのちがい
この2つのちがいは…
xざひょうを10ずつかえるは、むきとどれだけ進むかが決まっている。
と
10ほうごかすはどれだけ進むかが決まっている。
です。
じっさいに見てみましょう。
ねこに「xざひょうを10ずつかえる」を入れると
かならず右にうごきます。
ねこに「10ほうごかす」を入れると
今は右にうごきます。
ここでねこのむきをかえてみましょう。
むきを45どにしてみました。
まずは「xざひょうを10ずつかえる」をスタート。わかりやすく100ずつかえるにしました。
右にうごきました。
10ほうごかすにすると、
ねこのむいている方へすすむ。
これがxざひょうを10ずつかえると10ほうごかすのちがいです。
ではカンタンなゲームを作ってみましょう。
マウスでおいかけっこゲームです。
マウスでおいかけっこゲーム
マウスのポインターが自分で猫から逃げるゲームを作ります。
まずねこをよういします。
はたがおされたらキャラクターがまんなかにくるようにします。
「イベント」から「はたがおされたとき」と「うごき」から「xざひょうを0、yざひょうを0にする」をつけます。
今はたをおすとねこがまんなかに来てくれます。
次に「せいぎょ」から「ずっと」と「うごき」から「マウスポインターへむける」と、こんかいでてきた「10ほうごかす」をだします。
ずっとのなかに今出したブロックをいれます。
今はたをおすとねこがマウスポインターをおいかけます。
マウスポインターにねこがさわったら、すべてをとめるようにします。
「せいぎょ」から「もし〜なら」と「すべてをとめる」、「しらべる」から「マウスポインターにふれた」をだします。
もしマウスポインターにふれたならすべてをとめたいので
「もし〜なら」のあいだに「マウスポインターにふれた」をいれて、「すべてをとめる」はさみます。
そして、ずっとのあいだにはさみます。
これで完成しました。
はたをおすとマウスポインターをおって、ねこがおってきます。
非エンジニアでも知らないとヤバイGit Part3
はじめに
今回は競合の解決について説明する。
前回までの記事はこちら
非エンジニアでも知らないとヤバイGit Part1
非エンジニアでも知らないとヤバイGit Part2
競合の発生
リモートリポジトリとローカルリポジトリで同じ箇所を変更していた場合に競合が発生する。
このような場合はどちらの変更を採用するかを自動的に判断することができないためにエラーが発生する。
競合を作る
同じリモートリポジトリを共有している2人のユーザー、User1とUser2を用意する。
まずはUser1でindex.phpにコードを追加する。
Gitを簡単に使用できるGUI、SourceTreeでコミット・プッシュを行う。(コミットメッセージ:おはようございます。を追加)
次に、User1が追加したものと異なるコードを、User2で同じ箇所に追加する。
準備ができたのでターミナルからGitの操作をする。
まず、変更したファイルをステージングに追加する。
[sql]
git add (ファイル名)
git add index.php
[/sql]
次にコミットメッセージを入力してコミットする。
[sql]
git commit -m ‘コミットメッセージ’
git commit -m ‘Good Morning!を追加’
[/sql]
この状態でプッシュするとこのようなエラーが発生する。
[sql]git push[/sql]
[sql]
To https://bitbucket.org/username/test.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to ‘https://username@bitbucket.org/username/test.git’
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
[/sql]
これで競合が発生した。
競合の解決
他のユーザーがプッシュしたものがあると書かれているので、まずはプルする。
[sql]git pull[/sql]
[sql]
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://bitbucket.org/username/test
4754cf1..f75253f master -> origin/master
Auto-merging index.php
CONFLICT (content): Merge conflict in index.php
Automatic merge failed; fix conflicts and then commit the result.
[/sql]
index.phpで競合が発生してると書かれている。
エディターで競合しているファイルを開くと競合箇所が表示されている。
今回はUser2の変更内容で競合を解決する。
ピンク色のUse meボタンを押して、競合を解決し再び対象のファイルをステージングに追加し、コミットメッセージに競合解決したことがわかるようにメッセージを入力し、プッシュする。
[sql]
git add index.php
git commit -m ‘競合を解決’
git push
[/sql]
User1のSourceTreeでプルをして変更を確認。
User1のローカルリポジトリのindex.php
最後に
今回は競合について説明した。
次回はSourceTreeについて説明する。
非エンジニアでも知らないとヤバイGit Part2
はじめに
前回は、Gitの基本的な機能、リモートリポジトリ・ローカルリポジトリ、コミットについて説明した。
今回は、 Gitの機能の1つであるクローン、Push、Pullについて説明する。
クローンとは
共同で開発を進める際に作業を分担することがよくある。必ずしも同じタイミングで全員が作業に参加する訳ではないので、工程によって作業のスタートがずれることがある。
後から作業に参加する開発者は、どのような意図・状況で現在の状態になっているのか把握できなくなる。
しかし、このような問題はGitのクローン機能を使用すれば解決できる。
クローンは、すでに変更履歴が存在するリモートリポジトリ複製し、自分のマシンにローカルリポジトリを作成する操作。
リモートリポジトリの内容をまるごと自分の手元のマシンにダウンロードできる。
ただソースコードをダウンロードするのではなく、変更履歴も複製されるので、過去の履歴を参照して状況を把握しやすくなる。
Pushとは
前回も説明したが、Gitでは複数の開発者が共有しているリモートリポジトリを使って、各自のマシンにダウンロードされているローカルリポジトリの変更履歴を共有することでバージョン管理をしている。
Pushは各自のマシンのローカルリポジトリの変更履歴を、複数の開発者が共有しているリモートリポジトリにアップロードする操作のこと。
Pushを行うとPushしたローカルリポジトリとリモートリポジトリの変更履歴が同じ状態になる。
Pullとは
Pushを行っただけの段階では、Pushした開発者以外はリモートリポジトリと自分のマシンのローカルリポジトリは同じ状態ではない。
リモートリポジトリ自分のマシンのローカルリポジトリの状態を一致させるには、Pullという操作を行う。
Pullは、Pushの反対で変更履歴をダウンロードして自分のマシンのローカルリポジトリを、最新のリモートリポジトリの状態に更新する。
最後にPullした後に、他の開発者と同じファイルを作業していて他の開発者が先にPushして、その後自分がPushを行う場合は自分のPushは拒否される。
このように作業ファイルが衝突した場合は、他の履歴での変更を取り込む(マージ)までは自分のPushは拒否される。
これは、そのままPushできてしまうと先にPushした開発者の変更履歴が上書きされて消えてしまうからだ。
最後に
今回は、クローン、Push、Pullについて説明した。
次回は、マージについて詳しく説明する。
非エンジニアでも知らないとヤバイGit Part1
そもそもGitとは
Gitは分散型のバージョン管理システム。
分散型とは、リポジトリと言われる開発過程が保存されているデータベースが自分やチームのマシン(パソコン)に入っているタイプ。
バージョン管理システムは、コードなどの開発過程を記録しながら開発を行うためのシステム。
リポジトリとは
Gitではリポジトリを使ってソースコードなどの変更の履歴を管理する。
リポジトリは、ソースコードなどの変更の履歴を記録するデータベース。
ローカルリポジトリとリモートリポジトリ
Gitでは、自分のコンピュータ内にあるリポジトリをローカルリポジトリ、自分のコンピュータ外にあり、複数人で共有することが可能なリモートリポジトリがある。
ローカルリポジトリがあることで、開発者はそれぞれオフラインの環境でも作業が可能になる。
Gitの基本的な機能
リモートリポジトリでの開発環境の共有は3段階で行われる。
1.ワークツリーというバージョン管理の対象になっているファイルやフォルダ(ディレクトリ)の中で変更があったものを、ステージングエリア(変更があるファイルやフォルダのリスト)に追加する(ステージング)
2.ステージングエリアの変更があったファイルやフォルダをローカルリポジトリに登録(コミット)
3.ローカルリポジトリに登録された情報をリモートリポジトリに追加(プッシュ)
ステージング、コミット、プッシュの3つの工程でバージョン管理を行う。
変更の記録を行うコミット
コミットを行うとリポジトリ内で、前回コミットした時の状態と現在の状態の差分を記録したコミット(リビジョン)と呼ばれるものが作成される。
ここでできたコミット(リビジョン)は、時系列順につながった状態でリポジトリに格納される。
コミットをたどることで、過去の変更履歴・内容を知ることが出来る。
コミットメッセージ
コミットを行う際には必ずコミットメッセージを要求される。
コミットメッセージには、その時の変更内容・理由を記入する。
内容の違う複数のファイルを一度にコミットするとのちにコミットをたどり変更した箇所を探す際に見つかりづらく確認しづらいので、内容ごとに項目を分けてコミットする。
最後に
今回はGitの概要とコミットまで紹介した。
次回はプッシュについて紹介する。
Scratchでメッセージを使おう
メッセージって何?
メッセージは『メッセージを送る』というブロックを使い同じタイミングで他のことをしたいときに使います。
たとえば下のようなスプライトを作ってみましょう。
このように2つのことを同時にすることができます。
Scratchだと、『1秒待つ』、『〇〇と2秒いう』、『おわるまで〇〇のおとをならす』というブロックを使うとスクリプトの動きを止めてしまいます。
しかし、メッセージの機能を使うと2つのことを同時にしてくれるので動きを止めなくても動いてくれます。
Scratchには、他の動きを止めて動作するブロックが何個もあるので、動きを止めたくない時はメッセージを使いましょう。
メッセージを使ったよくある失敗
日頃生徒たちから、『メッセージ』を使ってうまく動かないというケースがあります。
まずは、下のようにスクリプトを作ってみましょう。
一回だけスペースキーを押すとちゃんと「にゃー」と鳴きますが、、、
スペースキーを押しっぱなしにしてみましょう。
「にゃにゃにゃにゃにゃ」とちゃんと動作してくれません。
これは、『ずっと』の中に入っているので、押されている間ずっと『メッセージ』を送り続けてしまいます。
『メッセージをうけとったとき』は『ずっと』受け取り続けてしまうのでこのような結果になってしまいます。
この場合は何かしら止める動作が必要です。
『1秒待つ』、『〇〇と2秒いう』などを入れて一旦送るのを止めてしまう方法や、『このスクリプトを止める』などを使って完全に止めてしまうのも方法の1つです。
メッセージの機能はとても便利ですが、使い方を間違えてしまうと、扱いにくくなってしまいます。
『ずっと』の中に『メッセージを送る』を入れる時はそこのところを気をつければうまく使うことができます。
皆さんも、どんどん『メッセージ』を使ってみましょう。
もっと勉強したい方へ
独学で学んでいると、つまずいてしまったときに解決ができなかったり、自分の作りたいものが作れなかったりします。
困ったときには、プログラマーの力が必要となります。
この内容は弊社が運営している、プログラミング教室TETRA UPで授業を受けることができます。
無料体験授業も随時行なっておりますので、ご応募お待ちしております。
【Scratch】クローンを使おう
クローンってなに?
Scratchを始めたばかりの人は思うように使えずにゲームが作れなかったりしているかと思います。
しかし、『クローン』をうまく使うことによって、作れるゲームの幅がぐーんと伸びます。
クローンはスプライトをゲーム中にそのまま複製できるというものです。
つまり、スプライト自体の分身を作ってあげるための機能です。
クローンを使って弾を作ろう
最初に『新しいスプライト』から『Boal』というものを入れてみましょう。
こちらが今回の弾になります。
入れたら今度は
と『Boal』にスクリプトを作ってみましょう。
なぜ入れるかの解説は以下の通りです。
『イベント』→『旗がクリックされた時』
スタートの時動かすため。
『制御』→『ずっと』
ずっとを入れないと、押された判定がされないため。よく忘れる人もいるので注意。
『見た目』→『隠す』
弾が最初から出ているとおかしいので隠す
『制御』→『もし〇なら』
『調べる』→『スペースキーが押された時』
スペースキーが押されている時の判定をするため
『制御』→『自分自身のクローンを作る』
スペースキーが押された判定がされたら『Boal』のクローンを作る
『演算』→『〇ではない』
『制御』→『〇まで待つ』
『調べる』→『スペースキーが押された時』
スペースキーを押しっぱなしにするとクローンが出続けてしまうので入れましょう。
入れないと古いパソコンだと重くなったり、最悪フリーズする時があります。
どうしても押しっぱなしで出したい場合は代わりに『1秒待つ』を入れてあげましょう。
これで、弾を出す準備は完了です。
しかし、これだけではまだ弾は動いてくれません。
クローンを作ったら、クローンに動かすためのプログラミングをしてあげないといけません。
では下のようにスクリプトを作ってみましょう。
これで旗のマークをクリックすれば弾がネコから弾が出るようになったかと思います。
『制御』→『クローンされた時』
クローンの命令するために使います。
『見た目』→『表示する』
さっき『隠す』を入れているので出すためには『表示する』を入れないと出てきません。
『動き』→『スプライト1へ行く』
ネコから弾を出したいのでネコのところへ行くようにする。
『制御』→『〇まで繰り返す』
『調べる』→『端に触れた』
端に触れるまで繰り返すため
『動き』→『10歩動かす』
動かすために入れています、『繰り返す』の中に入れることで繰り返されます。数字を変えると速さが変わります。
出したい方向が決まっているなら『x座標を10ずつ変える』でも同じ動きをします。
『制御』→『このクローンを削除する』
クローンを削除するために使います。クローンは残っていると動きが重くなる原因になるので、
役割の終わったクローンは『隠す』ではなく、『削除』してあげましょう。
始めたばかりの人がよくこれで失敗します。
これで弾は完成しました。
どうでしょうか?これだけでも色々なゲームの幅が増えたかと思います。
この内容は弊社が運営している、プログラミング教室TETRA UPでも授業を受けることができます。
無料体験授業も随時行なっておりますので、ご応募お待ちしております。
Warning: include(/var/www/html/tetraup.com/knocknote.jp/tmpl/aside.html): failed to open stream: No such file or directory in /var/www/html/tetraup.com/news_topics/wp-content/themes/news/archive.php on line 24
Warning: include(): Failed opening '/var/www/html/tetraup.com/knocknote.jp/tmpl/aside.html' for inclusion (include_path='.:/usr/share/pear7:/usr/share/php') in /var/www/html/tetraup.com/news_topics/wp-content/themes/news/archive.php on line 24