pg06

テーマ Swift Playgrounds でプログラム学習

参考: https://t.co/dar9BzdySC ブロックプログラミングでパズルを解くGoogle Doodle

準備:

iPad を iOS12 にアップデートして、Swift Playgrouds をapp store からダウンロードしておく

2018.10.29 iOS 12.0.1 の iPad にて Swift Playgrounds 4.1 の教材がダウンロードできない不具合を確認しました。

iCloud との連携を OFF にすると教材をダウンロードできたので、しばらくはこの方法で対応してください。

関連資料:

動画で解説 【日本語解説】Swift PlayGrounds - Learn to Code 1 ※Swift Playgroudsの英語版の紹介記事

Swift Playgroundsの使い方・日本語訳のブログ Swift Playgrounds JP

Swift Playgroundsの解説連載記事 Swift Playgroundsで学ぶiOSプログラミング ― 第10回 iPad版Swift Playgroundsはダウンロードしないと損

※4ページ目に、「最後は白紙から完全オリジナルに挑戦」の解説有り

Swift Playgroundsの学習教材の作成方法 新プログラミング学習アプリ「Swift Playgrounds」をはじめよう

Swift Playgroundsで学ぶiOSプログラミング

コンピュータ系書籍・雑誌の出版社AsciiのWebサイトの連載記事。

連載の後の方には CoreML を利用したAI(人工知能・機械学習)プログラムやAR(拡張現実)プログラムも掲載。

iPadでSwift Playgroundsを利用する記事のほか、Mac から Xcodeを利用してアプリを開発する記事もあり。

演習内容:

課題1

・NBU-WiFiに接続する。(教材をネットからダウンロードするため)

・Swift Playgrounds を起動する。

・☆(Featured) コードを学ぼう から、

コードを学ぼう1 Swiftの基本(Learn to Code 1 Fundamentals of Swift)」

を開く(入手 GET :ダウンロードする)

・コードを学ぼう1(Learn to Code 1) を開いて取り組む。

予定時間 30分。時間になったら、次の課題2の説明をはじめます。

授業中の目標: コマンド Commands編 の最後の問題まで進む。

※30分では、この画面の例の様に、 関数 Functions編の最後の課題までたどり着かないと予想。

※時間が足りない部分は宿題とします。

※コードを学ぼう1を全て済ませることを推奨します。 途中で止めてもかまいませんが、なるべく進めてください。

※取り組んだ問題のうち、一番最後の問題のスクリーンショットを撮って、来週までに課題として提出する。

※ヒント: 最後の問題の回答の一部がこの画像に表示されている。

※ヒント: 最後の問題の回答の一部がこの画像に表示されている。

ヒント:

・コードを実行する(Run My Code)

・Byte バイト キャラクターの名前 キャラクターをタップするとモデルをチェンジできる

・画面内の全ての宝石を回収し、スイッチを指示されたとおり(全てON)の状態にできたらクリア

・歯車アイコン → Reset Page で、問題を初期化(元の状態に戻す)

・時計アイコン → バイトのアニメーションスピード(プログラムの実行速度)の調整

Commands コマンド編

Adding a New Command 新しいコマンドを加える

moveForward() ムーブフォワード 前進

turnLeft() ターンレフト その場で左に向いて向きを変える

collectGem() コレクトジェム 宝石を集める。 宝石のあるマスに既にいる時だけ、宝石を取る。

Toggling a Switch スイッチを切り替える

toggleSwitch() トグルスイッチ スイッチの増すにいる場合、 OFFのスイッチ→ONに ONのスイッチ→OFFに 切り替える。

※スイッチを2回切り替えると元の状態に戻ります。

PortalPractice ワープポータルの練習

パズル要素。ポータルのマスにはいると、同じ色のポータルにワープ移動する。そのとき、向きは変わらない。

Finding and Fixing Bugs バグを見つけて修正する

プログラムは既に書き込まれている。

まず実行してみる。

バイトの動きを観察して、問題がクリアされるように、コードを直す。

Bug Squash Practice

同上

Toggling a Switch スイッチ切り替え

練習用のコマンドが多目の問題

The Shortest Route 最短距離

Funtions 関数編

Composing a New Behavior 新しい行動を構成する

右を向くコマンドは無い。 → turnLeft() を3回で右に向かせる

Creating a New Function ファンクションを作成する。ファンクション:機能または関数

Collect, Toggle Repeat 集めて、切り替えて、繰り返し

集めて、切り替えて、繰り返し + 向きを変える までをファンクションとして定義

ファンクションを4回呼び出す

Across the Board

ヒント: バイトは壁を乗り越えられない。崖からも落ちない。

ファンクションを2つ作成する

Nesting Patterns

ファンクションから、別のファンクションを呼びだす

Slotted Stairways

練習問題

Treasure Hunt

練習問題。 ヒント ↑の画像参照

課題2

メニュー画面に戻ってから

すべてを見る → テンプレート 中から以下の3つに取り組む

図形 Shapes

解説:

let circle = Circle()

Circle()は標準の半径(5)と色で画面中央に円を作成するコマンド

let circle = で円に名前を circle と付けておく

※名前を重複して付けることはできない

図形につけた名前の利用方法:

circle. radius 円の半径

circle. color 円の色

circle. draggable = true 円はドラッグ可能 true で yes / false で no

対話 Answers

show("メッセージ文字列")

メッセージを画面に表示するコマンド。

表示するメッセージを " "で囲んで文字列データにする。

show は ( ) の中に置かれたデータを表示する。(コマンドに渡すデータを引数という)

ask("メッセージ文字列")

画面にメッセージ入力ボックスを表示する。

入力が完了するまで、プログラムをブロック(一時停止)する。

文字を入力して画面の Submit をタップすると、入力が完了し次の処理に進む。

let x = ask("メッセージ文字列") 入力された文字列に x という名前をつける

"Apple" + x 文字列の後ろに x の文字列を結合する。

x が "Pen" なら "Apple" + x の計算結果は "ApplePen"

※ 変数名について:

プログラム言語によっては、変数名の付け方は規則で制限される。

例)

・半角のアルファベット英数字と ‗ (アンダースコア)を使用できる

・先頭の文字は数字は使えない

・if や for などの予約語は使えない

Swiftの変数名で利用可能な文字について https://utano.jp/entry/2014/10/swift_language_reference_identifiers/

グラフ作成 Graphing

LinePlot() はグラフを作成するコマンド

縦軸・横軸名も自動的に作成される

() の中で、グラフデータの作成方法を指示できる。

yData: 数値,・・・は名前付き引数と呼ばれるもので、ここではY軸の値を並べてグラフを作成している。

function: 関数オブジェクト を利用すると、データを与える代わりに、グラフの式でグラフを作成できる。関数オブジェクトは funcで定義した名前で指定する。関数の引数は不要。

例) function: f1(x) はダメ function: f1 はOK

return x*x xの2乗を計算して f1(x) の値とする。return は Swiftの予約語。

※ 関数定義のプログラムの入力方法 func キーワードを入力後、関数名を記入、キーワード func をタップして 引数と型の入力 や 戻り値の型の入力を選択

課題3

メニュー画面に戻ってから

すべてを見る → チャレンジ から新しい課題を作成。

例) スパイラル Spirals の2ページ目

円の半径(軌道の円、動いている円)の値を修正してみる。1.0や2.0などキリの良い数字のほか、1.1や5.1など整数から少しずれた数や、5と7などお互いに素な関係の数を指定するとよい。

例) ブロック崩し Brick Breaker の3ページ目

if 分による処理の分岐

if row.isEven 行が偶数番目であることをチェック

下から数えて偶数番目(0,2,4,6・・・)の行のブロックは

if column.isEven 列が偶数番目であることをチェック

さらに分岐処理

左から数えて偶数番目の列 は 青色

そうでなければ 緑色

そうでない場合

下から数えて奇数番目(1,3,5,・・・)の行のブロックは

ブロックの色は 赤色

brick.strength = 1 でブロックの耐久力(壊れるまでのヒット回数)を1回に設定している。

課題提出

WebClassの第6回課題 に以下の3つのスクリーンショットをアップロードしてください。

1.コードを学ぼう1 Learn to Code 1 の達成状況

・この画像 の様に、クリアした課題が分かるようにスクリーンショットをとる

・画面内に、作成したコード(一部でOK)が表示されるようにスクロールしておく(工夫した部分を表示)

2.テンプレート( Answers か Graphing か Shapes )からPlaygroundを作成する。

・提出用のPlayground を1つ選び(一番工夫したもの)、スクリーンショットをとる

・条件: 画面内に、作成したコードと実行画面が写っていること。

3.チャレンジ課題

Swift Playgrounds のメニューから チャレンジ 課題を 1つ 選んで取り組む。

できたところまででOK

例)

・Spirals の2ページ目サイクロイド を描くプログラム。

trackRadius(軌道、定円の半径)と wheelRadius(車輪、動円の半径) の数値を調整して、さまざまな図形の描画を試す。

実行画面(複雑化の方向に工夫した図形)とプログラムをスクリーンショットで提出。

・Brick Breaker の3ページ目。ブロック崩しのプログラム。

ブロックの色、配置などを変えてみる。

・その他、Blink の白紙状態から全て作成、2.で提出していないテンプレートをチャレンジ課題として作成、など。

講義メモ

プログラム言語 Swift のコードについて

空行の扱い

関数 関数定義 関数名 引数

関数呼び出し

変数 変数名

変数の型

Double 浮動小数点数

オブジェクトの型 Color Shadow

文字列 "mesage"

文字列結合の演算子 +

オブジェクト

プロパティ radius color draggable

メソッド

変数やプロパティへの 値の代入

代入演算子 =

予約語

func

let