海津キッズプログラミングスクール

コードアドベンチャー海津校 スクール生向け

※スクール生以外にはURLを公開しないでください。


★コートアドベンチャー プロモ(ロングバージョン)★
コードアドベンチャープロモ
宮城島  :既存のプログラミングは続けにくい性質がある。長くやらないと身に付かない。(0:25)
いぬたぬき:プログラミングは面白くないと続かない、想像力は育まれない。(0:44)
 (補足)私も同意見です。プログラム自体は数十時間勉強すれば習得可能です。 私もいくつかのプログラム言語を学びましたが、学習期間が短いものほど忘れています。 思考力についてはいうまでもありません。完璧な考え方はないので、常に考え続ける必要があります。

体験会前配信動画1
体験会前配信動画2
取り組んでいるコーチング動画(1例です)


目次

1.教室からのお知らせ

1-1.スケジュール

主にプロ検定のスケジュールです
6月はレベル1の検定料が無料になるそうです。
transferable_date

目次に戻る

1-2.振替可能日

transferable_date
定員を5名から5名にします。振替の時は最大で7名にします。
※コンスタントにレッスンをすることでスキルアップできますので、定期的に受講お願いします。

振替が必要な場合は、振替可能日からお選びください。 無断欠席などを除き、レッスンを消滅することはありません。

お願い(やり取りの簡易化)
良い例
 質問:○月○日(○曜日)の13:00から2授業できますか?
 回答:はい、できます(^^)
※曜日まで書いてもらえると助かります
悪い例
 質問:○月○日できますか?
 回答:はい、何時がいいですか?
 質問:午前中はできますか?
 回答:つづく・・・

◆1カ月のレッスンが4回に満たない場合
基本的には振替を行ってもらっていますが、 調整が難しい場合は、以下の料金とします。承知おき下さい。
2024年12月から改定します。2024/8/26追記
※手間がかかるのでご了承ください。
 0回参加の場合 ¥3,000 ( ¥3,000 + ¥0)
 1回参加の場合 ¥4,725 ( ¥3,000 + ¥1,725)
 2回参加の場合 ¥6,450 ( ¥3,000 + ¥3,450)
 3回参加の場合 ¥8,175 ( ¥3,000 + ¥5,175)
 ※アカウント費(¥2,300)+手数料(¥700)は発生します。


◆スクール都合でお休みした場合(事例:一度風邪で急遽お休みを頂いたことがあります)
振替をお願い致します。
通常の振替より融通が利きますので、ご連絡ください。 休みとする場合は、25%OFFと致します。

◆海津校では休会はありません。
やりたくなったら再開すれば良いと思っているので退会とします。 再開する場合は続きから行いますが、忘れている部分を思い出す必要があるので、 振り返り期間が必要になりますので、承知おきください。 ※再入会時には、新しいアカウントになります。

目次に戻る

1-3.教育版マイクラ

Mineccraft_Education_win

教育版マイクラのインストールは誰でもでき、10回無料で体験できる

こどもとIT 教育版マインクラフト徹底解説

①教育版の利用には、Microsoft 365のアカウントが必要

②安心・安全なマルチプレイをサポートする学習支援

③すぐに始められるプログラミング環境

④バリエーション豊富なワールドテンプレート

⑤教育版ならではのアイテム

目次に戻る

1-4.カリキュラム

-

マイクラコース

Curriculum2023_1stSheet

コードアドベンチャーカリキュラムです。 見た目の変更はありますが、内容の変更はありません。

中級・上級の途中にあるミニ講座の目安は、2~6回です。 オリジナルの創作については、開放日に実施してもらうこともできます。

ステージ4の後に行うミニ講座"家を作ろう"の参考動画は1-6.作品紹介

海津校オリジナル問題を2つ用意しました。
・ステージ7の後に、1~2回で終わる応用問題を用意しています。 授業では数を数えることに特化していますが、変数を使って計算できることを知ってほしいので用意しました。
 ステージ7応用問題動画
・ステージ15の後に、2~4回で終わる応用問題を用意しています。 今までは短いコースをクリアするだけで失敗してもすぐ直せましたが、大きなものを作る大変さを学ぶ場として用意しました。 計画を立てて進めることを学んでもらいます。
 ラストミッション動画
 ラストミッションの答え

★ラストミッションの答え
001  let snakeCount = 0
002  let snakeRunTime = 0
003  let TemValue = 0
004  let TotalRunTime = 0
005  let blockCountArray: number[] = []
006  
007  player.onChat("LetsGo", function () {
008    blockCountArray = [0, 0, 0, 0, 0, 0, 0]
009    agent.teleport(world(319, 119, 823), SOUTH)
010    loops.pause(1000)
011    TotalRunTime = gameplay.timeQuery(GAME_TIME)
012    agent.move(FORWARD, 2)
013    DownStair(1)
014    agent.move(FORWARD, 8)
015    agent.setItem(JACK_O_LANTERN, 1, 1)
016    while (true) {
017      if (agent.inspect(AgentInspection.Block, DOWN) == BLOCK_OF_BAMBOO) {
018        SetInArray(0)
019        agent.move(FORWARD, 1)
020      } else if (agent.inspect(AgentInspection.Block, DOWN) == GREEN_CONCRETE) {
021        SetInArray(1)
022        TemValue = blockCountArray[1] / 3
023        if (TemValue - Math.trunc(TemValue) == 0) {
024          agent.place(RIGHT)
025        }
026        UpStair(1)
027      } else if (agent.inspect(AgentInspection.Block, DOWN) == LIME_CONCRETE) {
028        SetInArray(2)
029        DownStair(1)
030      } else if (agent.inspect(AgentInspection.Block, DOWN) == LAPIS_LAZULI_BLOCK) {
031        SetInArray(3)
032        agent.turn(RIGHT_TURN)
033        agent.move(FORWARD, 1)
034      } else if (agent.inspect(AgentInspection.Block, DOWN) == REDSTONE_BLOCK) {
035        SetInArray(4)
036        agent.turn(LEFT_TURN)
037        agent.move(FORWARD, 1)
038      } else if (agent.inspect(AgentInspection.Block, DOWN) == DIAMOND_BLOCK) {
039        SetInArray(5)
040        snakeRunTime = gameplay.timeQuery(GAME_TIME)
041        SnakeRoad()
042        snakeRunTime = (gameplay.timeQuery(GAME_TIME) - snakeRunTime) / 20
043        gameplay.title(mobs.target(LOCAL_PLAYER), "スネーク道:" + snakeRunTime + "秒", "")
044      } else if (agent.inspect(AgentInspection.Block, DOWN) == GOLD_BLOCK) {
045        SetInArray(6)
046        break;
047      }
048    }
049  
050    TotalRunTime = (gameplay.timeQuery(GAME_TIME) - TotalRunTime) / 20
051    gameplay.title(mobs.target(LOCAL_PLAYER), "走行タイム:" + TotalRunTime + "秒", "")
052    player.say("竹ブロック  :" + blockCountArray[0] + "個")
053    player.say("緑ブロック  :" + blockCountArray[1] + "個")
054    player.say("黄緑ブロック :" + blockCountArray[2] + "個")
055    player.say("青ブロック  :" + blockCountArray[3] + "個")
056    player.say("赤ブロック  :" + blockCountArray[4] + "個")
057    player.say("ダイヤブロック:" + blockCountArray[5] + "個")
058    player.say("金ブロック  :" + blockCountArray[6] + "個")
059  })
060  
061  function UpStair(id: number) {
062    for (let index = 0; index < id; index++) {
063      agent.move(UP, 1)
064      agent.move(FORWARD, 1)
065    }
066  }
067  
068  function DownStair(id: number) {
069    for (let index = 0; index < id; index++) {
070      agent.move(FORWARD, 1)
071      agent.move(DOWN, 1)
072    }
073  }
074  
075  function SnakeRoad() {
076    agent.turn(RIGHT_TURN)
077    agent.move(FORWARD, 16)
078    agent.move(RIGHT, 2)
079    agent.turn(RIGHT_TURN)
080    SnakeRoad1()
081    agent.move(FORWARD, 7)
082    agent.move(LEFT, 3)
083    agent.turn(LEFT_TURN)
084    agent.turn(LEFT_TURN)
085    SnakeRoad2()
086    agent.move(FORWARD, 4)
087    agent.turn(LEFT_TURN)
088    SnakeRoad3()
089    agent.move(BACK, 2)
090    agent.move(LEFT, 17)
091  }
092  
093  function SnakeRoad1() {
094    for (let index = 0; index < 5; index++) {
095      agent.move(FORWARD, 7)
096      agent.move(LEFT, 2)
097      agent.move(BACK, 7)
098      agent.move(LEFT, 2)
099    }
100  }
101  
102  function SnakeRoad2() {
103    for (let index = 0; index < 2; index++) {
104      snakeCount = 2
105      for (let index = 0; index < 4; index++) {
106        agent.move(UP, snakeCount)
107        agent.move(FORWARD, snakeCount)
108        agent.move(DOWN, snakeCount)
109        agent.move(FORWARD, 2)
110        snakeCount += 1
111      }
112      agent.turn(LEFT_TURN)
113    }
114  }
115  
116  function SnakeRoad3() {
117    for (let snakeUpDownCount = 0; snakeUpDownCount <= 1; snakeUpDownCount++) {
118      DownStair(8)
119      agent.move(FORWARD, 4)
120      UpStair(8)
121      agent.turn(RIGHT_TURN)
122      if (snakeUpDownCount == 0) {
123        agent.move(FORWARD, 5)
124        agent.turn(RIGHT_TURN)
125      }
126    }
127  }
128  
129  function SetInArray(id: number) {
130    blockCountArray[id] += 1
131  }

目次に戻る

ゲーム開発コース

Curriculum2023_2ndSheet

2枚目はゲーム開発コースのカリキュラムです。
【体験者のご意見】いぬたぬきが2Dゲームの世界に!?
 "エクセルで分析"みたいな方が個人的にはかっこいいのですが、このテーマでは子供は続かない。。。  なので、ゲームをテーマとしているそうです。
     
  難易度はかなり高いです、一部の大学生を除き、こんなことできません。 小・中学生でここまでできるようになれば、すごいです。

★ここで作るゲームで遊ぶことができます。★
スマフォで遊んでみてください。(PCだとうまく表示されないので)
【ステージ16~18:アクションゲーム】  ここから遊べます◆
操作: ステージの先にある扉や宝箱を取ると、次のステージに行けます。 Aボタンでジャンプできます。(Bボタンは使いません) バネを踏むと、ハイジャンプが出来たりします。小さな敵は踏みつぶすことができます。
gameProject

【ステージ19~21:シューティングゲーム】  ここから遊べます◆
操作: 左側にいるのがプレイヤーです。右から出てくるのが敵になります。 Aボタンでミサイルを発射、敵を倒すとアイテムが出てくるのでBボタンでパワーアップします。
gameProject

ここからJavaScriptで作成します。
【ステージ25:アクションゲーム】  ここから遊べます◆
操作: 土管に当たらないようにペンギンを進めます。 Aボタンでジャンプできます。(Bボタンは使いません)
transferable_date

【ステージ26:スネークゲーム】  ここから遊べます◆
操作: 十字キーで操作します(Aボタン/Bボタンは使いません) リンゴを取ると成長し、壁や蛇の体に当たると、ゲームオーバーになります。
transferable_date

【ステージ27:マインスイーパー】  ここから遊べます◆
操作: Aボタンで開放、Bボタンでフラグを立てます。
transferable_date

【ステージ28で作るタレットゲーム】
 ここから遊べます◆
操作: Aボタンで砲台からミサイルを発射して、敵を倒します。 スコアが貯まると、Bボタンでレベルアップします。
transferable_date

目次に戻る

★JavaScript stage25_flyPenguinの答え
transferable_date
001  let character = sprites.create(assets.image`myImage0`, SpriteKind.Player) //キャラクターを表示する
002  character.setPosition(30, 30)  // キャラクターの位置を決める
003  character.ay = 250       // キャラクターを表示する
004  
005  scene.setBackgroundColor(6)   // 背景色を決める
006  info.setScore(0)
007  
008  controller.A.onEvent(ControllerButtonEvent.Pressed, function () { // Aボタンが押されたとき
009    character.vy = -130                      // キャラクター
010  })
011  
012  game.onUpdate(function () {  // ゲームが更新されたとき
013    if (character.y >= 120)  // キャラクターが落ちた時
014      game.over()      // ゲームオーバー
015  })
016  
017  game.onUpdateInterval(1500, function () {                  // 定期処理1500ms間隔
018    let sprite = sprites.create(assets.image`myImage`, SpriteKind.Enemy)  // 土管を表示する
019    sprite.x = 160            // 土管の開始位置を調節
020    sprite.y = randint(30, 90)      // 土管の高さをランダムにする
021    sprite.vx = -30            // 土管が右から左に向かって移動させる
022    info.player1.changeScoreBy(1)
023  })
024  
025  sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function () {  // PlayerとEnemyが重なったとき
026    game.over()    // ゲームオーバー
027  })

目次に戻る

★JavaScript stage26_snakegameの答え
transferable_date
001  let tilemapLevel = assets.tilemap`level0`  // ステージ(画像)を呼び出す
002  let tilemapWidth = tilemapLevel.width    // ステージ(画像)の幅を設定
003  let tilemapHeight = tilemapLevel.height   // ステージ(画像)の高さを設定
004  tiles.setCurrentTilemap(tilemapLevel)    // ステージ(画像)のを表示する
005  
006  let snakeHead = sprites.create(assets.image`snakeHeadLeft`, SpriteKind.Player)  // スネークの頭(左)呼び出す
007  let snakeHeadColume = tilemapWidth / 2   // 頭の位置を画像中央にする(幅)
008  let snakeHeadRow = tilemapHeight / 2    // 頭の位置を画像中央にする(高さ)
009  scene.cameraFollowSprite(snakeHead)     // カメラが頭を中心にする
010  let snakeHeadDirection = 0         // 頭の向きの初期値
011  
012  let snakeBodies:Sprite[]= []         // 体の配列
013  let snakeBodyLocation: tiles.Location[] = [] // 体の位置
014  
015  game.onUpdateInterval(100, function () {          // 定期処理100ms間隔
016    if (snakeHeadDirection == 0) {             // 頭の方向 = 左
017      snakeHeadColume -= 1                // 頭の位置を1つ左
018      snakeHead.setImage(assets.image`snakeHeadLeft`)   // 左向きの頭を表示
019    } else if (snakeHeadDirection == 1) {          // 頭の方向 = 下
020      snakeHeadRow += 1                  // 頭の位置を1つ下
021      snakeHead.setImage(assets.image`snakeHeadDown`)   // 下向きの頭を表示
022    } else if (snakeHeadDirection == 2) {          // 頭の方向 = 上
023      snakeHeadRow -= 1                  // 頭の位置を1つ上
024      snakeHead.setImage(assets.image`snakeHeadUp`)    // 上向きの頭を表示
025    } else if (snakeHeadDirection == 3) {          // 頭の方向 = 右
026      snakeHeadColume += 1                // 頭の位置を1つ右
027      snakeHead.setImage(assets.image`snakeHeadRight`)  // 右向きの頭を表示
028    }
029  
030    if (snakeHeadColume tilemapWidth - 1 || snakeHeadRow tilemapHeight - 1)  // 赤枠接触判定
031      game.over()  // ゲームオーバー
032    
033    for (let i = 0; i < snakeBodies.length; ++i) {         // スネークの体分ループ
034      let ri = (snakeBodies.length - 1) - i           // 最後の体が入っている場所から1つづ前の場所 ※length=5の時 4→3→2→1→0      
035      if (ri == 0)                        // 頭の入っている場所
036        snakeBodyLocation[0] = snakeHead.tilemapLocation()   // 頭の場所を設定
037      else                            // 体の入っている場所
038        snakeBodyLocation[ri] = snakeBodyLocation[ri - 1]   // 体の場所を設定
039    }
040    
041    for(let i = 0; i < snakeBodyLocation.length; ++i)                  // スネークの体分ループ
042      tiles.placeOnTile(snakeBodies[i], snakeBodyLocation[i])             // 体の先頭から順に表示する
043    
044    tiles.placeOnTile(snakeHead, tiles.getTileLocation(snakeHeadColume, snakeHeadRow))  // 頭を表示
045  })
046  
047  controller.left.onEvent(ControllerButtonEvent.Pressed, function () {  // 左ボタンが押された時
048    if (snakeHeadDirection == 3)  // 右向き時に左(=0)が押された
049      return           // 何もしない
050    snakeHeadDirection = 0     // 左向きにする
051  })
052  
053  controller.down.onEvent(ControllerButtonEvent.Pressed, function () {  // 下ボタンが押された時
054    if (snakeHeadDirection == 2)  // 上向き時に下(=1)が押された
055      return           // 何もしない
056    snakeHeadDirection = 1     // 下向きにする
057  })
058  
059  controller.up.onEvent(ControllerButtonEvent.Pressed, function () {   // 上ボタンが押された時
060    if (snakeHeadDirection == 1)  // 下向き時に上(=2)が押された
061      return           // 何もしない
062    snakeHeadDirection = 2     // 上向きにする
063  })
064  
065  controller.right.onEvent(ControllerButtonEvent.Pressed, function () {  // 右ボタンが押された時
066    if (snakeHeadDirection == 0)  // 左向き時に右(=3)が押された
067      return           // 何もしない
068    snakeHeadDirection = 3     // 右向きにする
069  })
070  
071  function placeFood() {       // 食べ物(リンゴ)を置く
072    tiles.setTileAt(tiles.getTileLocation(randint(1, tilemapWidth - 2), randint(1, tilemapHeight - 2)), assets.tile`apple`);  // リンゴを赤枠の内側に置く
073  }
074  
075  function extendBody() {        // 体を伸ばす
076    let snakeBody = sprites.create(assets.image`snakeBody`, SpriteKind.Enemy)  // 体と重なるとゲームオーバーにしたいので、体は敵と見なす
077    if (snakeHeadDirection == 0)                                // 左向きの時
078      tiles.placeOnTile(snakeBody, tiles.getTileLocation(snakeHeadColume + 1, snakeHeadRow)) // 左向きなので右側に体を表示する
079    else if (snakeHeadDirection == 1)                              // 下向きの時
080      tiles.placeOnTile(snakeBody, tiles.getTileLocation(snakeHeadColume, snakeHeadRow - 1)) // 下向きなので上側に体を表示する
081    else if (snakeHeadDirection == 2)                              // 上向きの時
082      tiles.placeOnTile(snakeBody, tiles.getTileLocation(snakeHeadColume, snakeHeadRow + 1)) // 上向きなので下側に体を表示する
083    else if (snakeHeadDirection == 3)                              // 右向きの時
084      tiles.placeOnTile(snakeBody, tiles.getTileLocation(snakeHeadColume - 1, snakeHeadRow)) // 右向きなので左側に体を表示する
085    snakeBodies.push(snakeBody)                                 // 体を設定する
086    snakeBodyLocation.push(snakeBody.tilemapLocation())                     // 体の位置情報を設定する
087  }
088  
089  scene.onOverlapTile(SpriteKind.Player, assets.tile`apple`, function (sprite: Sprite, location: tiles.Location) {  // 頭と食べ物が重なったとき
090    tiles.setTileAt(location, assets.tile`transparency16`)   // 取ったリンゴを消す
091    placeFood()                         // 食べ物(リンゴ)を置く
092    extendBody()                        // 体を伸ばす
093  })
094  
095  sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite: Sprite, otherSprite: Sprite) {  // 敵(=体 or 赤枠)、と重なったとき
096    game.over()  // ゲームオーバー
097  })
098  
099  placeFood()  // リンゴを置く

目次に戻る

★JavaScript stage27_Minesweeperの答え
transferable_date
001  let tilemapLevel = assets.tilemap`レベル`      // 空タイルを設定する
002  let tilemapWidth = tilemapLevel.width        // 空タイルの幅
003  let tilemapHeight = tilemapLevel.height       // 空タイルの高さ
004  scene.setTileMapLevel(assets.tilemap`レベル`)    // タイルを表示する
005  
006  let cursor = sprites.create(assets.image`cursor`)  // カーソルを表示する
007  let cursorColumn = 0  // カーソルの列位置
008  let cursorRow = 0    // カーソルの行位置
009  
010  function countNearMines(location: tiles.Location) {  // 周囲の爆弾の数を数える
011    let nearMines = 0  // 初期化
012  
013    for (let r = -1; r < 2; ++r)       // 左の行~右の行の間ループする
014      for (let c = -1; c < 2; ++c) {    // 上の行~下の行の間ループする
015        let tileLocation = tiles.getTileLocation(location.column + c, location.row + r)  // カーソルの位置を取得
016        let tile = tileLocation.getImage()                        // タイルの種類を取得する
017  
018        if (tile == assets.tile`unopenedWithMine`)                    // 爆弾タイルの時
019          nearMines += 1                                // 爆弾の数を数える
020        else if (tile == assets.tile`unopenedFlagWithMine`)                // 爆弾タイルフラグの時
021          nearMines += 1                                // 爆弾の数を数える
022      }
023  
024    return nearMines
025  }
026  
027  controller.left.onEvent(ControllerButtonEvent.Pressed, function () {  // 左が押されたとき
028    cursorColumn -= 1  // カーソルを左へ
029  })
030  
031  controller.right.onEvent(ControllerButtonEvent.Pressed, function () {  // 右が押されたとき
032    cursorColumn += 1  // カーソルを右へ
033  })
034  
035  controller.down.onEvent(ControllerButtonEvent.Pressed, function () {  // 下が押されたとき
036    cursorRow += 1    // カーソルを下へ
037  })
038  
039  controller.up.onEvent(ControllerButtonEvent.Pressed, function () {   // 上が押されたとき
040    cursorRow -= 1    // カーソルを上へ
041  })
042  
043  game.onUpdate(function () {      // ゲームが更新されたとき
044    cursorColumn = Math.clamp(0, tilemapWidth - 1, cursorColumn)      // カーソルの列範囲制限
045    cursorRow = Math.clamp(0, tilemapHeight - 1, cursorRow)         // カーソルの行範囲制限
046  
047    tiles.placeOnTile(cursor, tiles.getTileLocation(cursorColumn, cursorRow))  // カーソルの位置を取得
048  })
049  
050  function openTile(tileLocation: tiles.Location){   // タイルを開けた時
051    let tile = tileLocation.getImage()        // タイル情報を取得
052  
053    if (tile == assets.tile`unopened`) {              // 判定前のタイルのとき
054      let nearMines = countNearMines(tileLocation)        // 周囲の爆弾数を取得
055      let nearMinesTiles = [assets.tile`openedEmpty`, assets.tile`opened1`, assets.tile`opened2`, assets.tile`opened3`, assets.tile`opened4`, assets.tile`opened5`, assets.tile`opened6`, assets.tile`opened7`, assets.tile`opened8`]  // 数字画像を配列にセット
056      tiles.setTileAt(tileLocation, nearMinesTiles[nearMines])  // 何もないタイルを設定
057      if (nearMines == 0){            // 近くに爆弾がないとき
058        for (let r = -1; r < 2; ++r)      // 左の行~右の行の間ループする
059          for (let c = -1; c < 2; ++c)     // 上の行~下の行の間ループする
060            openTile(tiles.getTileLocation(tileLocation.column +c, tileLocation.row + r)) // 再帰
061      }
062    } else if (tile == assets.tile`unopenedWithMine`) {        // 爆弾タイルのとき
063      tiles.setTileAt(tileLocation, assets.tile`openedMine`)    // 爆弾タイルを設定
064      game.currentScene().render()                 // 表示を更新する
065      game.over()                          // ゲームオーバー
066    }
067  }
068  
069  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {  // Aボタンが押されたとき
070    openTile(cursor.tilemapLocation())   // タイルを開けた時
071  })
072  
073  controller.B.onEvent(ControllerButtonEvent.Pressed, function () {  // Bボタンが押されたとき
074    let tileLocation = cursor.tilemapLocation()    // タイルの位置を取得する
075    let tile = tileLocation.getImage()        // タイル情報を取得
076  
077    if (tile == assets.tile`unopened`)                   // タイルがunopenedの時
078      tiles.setTileAt(tileLocation, assets.tile`unopenedFlag`)      // タイルをunopenedFlagにする
079    else if (tile == assets.tile`unopenedFlag`)               // タイルがunopenedFlagの時
080      tiles.setTileAt(tileLocation, assets.tile`unopened`)        // タイルをunopenedにする
081    else if (tile == assets.tile`unopenedWithMine`)             // タイルがunopenedWithMineの時
082      tiles.setTileAt(tileLocation, assets.tile`unopenedFlagWithMine`)  // タイルをunopenedFlagWithMineにする
083    else if (tile == assets.tile`unopenedFlagWithMine`)           // タイルがunopenedFlagWithMineの時
084      tiles.setTileAt(tileLocation, assets.tile`unopenedWithMine`)    // タイルをunopenedWithMineにする
085  })
086  
087  game.onUpdate(function(){  // 更新する
088    if (tiles.getTilesByType(assets.tile`unopened`).length > 0)     //nopenedがあるときは終了する
089      return
090    if (tiles.getTilesByType(assets.tile`unopenedFlag`).length > 0)   // unopenedFlagがあるときは終了する
091      return
092    if (tiles.getTilesByType(assets.tile`unopenedWithMine`).length > 0) // unopenedWithMineがあるときは終了する
093      return
094    game.currentScene().render()  // 画面を更新する
095    game.over(true)         // ゲーム終了
096  })

目次に戻る

★JavaScript stage28_Turretの答え
transferable_date
001  let turret = sprites.create(assets.image`turret`)    // 武器画像を読み込む&表示
002  let shotSight = sprites.create(assets.image`shotSight`) // 弾を読み込む&表示
003  turret.setPosition(80, 112)   // 武器の位置を決める
004  shotSight.setPosition(80, 112) // 弾の位置を決める
005  
006  let turretDegrees = 90     // 武器の角度を決める
007  let fireInterval = 1500     // アイテム1 弾の速度を決める
008  let enemySpawnInterval = 2000  // アイテム2 敵の登場間隔を決める
009  let turretWobbleIntensity = 0  // アイテム3 弾に揺らぎを作る
010  let turretRotateBy = 90     // アイテム4 弾の発射角度
011  let upgradeItemIndex = 0    // アイテムの番号
012  
013  let upgradeItems: Sprite[] = []       // アップグレードアイテム
014  let upgradeItemIcons = [          // アップグレードアイコン登録
015    assets.image`fireRateUpgrade`,     // 火力
016    assets.image`enemySpawnRateUpgrade`,  // 敵出現
017    assets.image`wobbleUpgrade`,      //
018    assets.image`controlUpgrade`,      //
019  ]
020  
021  let upgradeItemPrices = [  // スコア閾値
022    5,   // 1つ目の閾値
023    10,   // 2つ目の閾値
024    15,   // 3つ目の閾値
025    30,   // 4つ目の閾値
026  ]
027  
028  info.setScore(0)  // スコアを作る
029  
030  function computeVector(degrees: number) {    // ベクトルを計算する
031    let radians = (degrees / 180) * Math.PI   // ラジアン
032    let vx = Math.cos(radians)         // X方向の位置を決める
033    let vy = -Math.sin(radians)         // Y方向の位置を決める
034    return { x: vx, y: vy }           // 戻り値
035  }
036  
037  loops.forever(function () {               // 常時更新する
038    if (controller.left.isPressed())          // 左ボタンが押された
039      turretDegrees += turretRotateBy         // 20度左になる :左90~180
040    if (controller.right.isPressed())          // 右ボタンが押された
041      turretDegrees -= turretRotateBy         // 20度右になる :右0~90
042    turretDegrees = Math.clamp(0, 180, turretDegrees)  // 範囲制限を設ける(0~180度)
043  
044    let v = computeVector(turretDegrees)        // 角度から位置を決める
045    let vx = v.x * 10.0                 // 位置から速度を決める
046    let vy = v.y * 10.0                 // 位置から速度を決める
047    shotSight.setPosition(turret.x + vx, turret.y + vy) // 狙う方向を決める
048  
049    loops.pause(60)   // 60ms停止する
050  })
051  
052  loops.forever(function () {       // 常時更新する
053    if (!controller.A.isPressed())    // Aボタン以外が押された
054      return
055    let v = computeVector(turretDegrees + randint(-turretWobbleIntensity, +turretWobbleIntensity)) // 角度から位置を決める
056    let vx = v.x * 60.0                                 // 位置から速度を決める
057    let vy = v.y * 60.0                                 // 位置から速度を決める
058    sprites.createProjectileFromSprite(assets.image`projectile`, turret, vx, vy)    // 弾を発射する
059  
060    loops.pause(fireInterval)      // 一定時間停止する
061  })
062  
063  loops.forever(function () {       // 常時更新する
064    let enemy = sprites.create(assets.image`enemy`, SpriteKind.Enemy)  // 敵画像を読み込む&表示
065    enemy.setPosition(randint(20, 140), 0)               // 敵の位置を決める(横はランダム、高さは固定)
066    enemy.vy = 20                            // 敵を下に移動する
067    enemy.setFlag(SpriteFlag.AutoDestroy, true)             // 敵が下に移動して見えなくなったら消す
068    loops.pause(enemySpawnInterval)    // 一定時間停止する
069  })
070  
071  sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function (sprite: Sprite, otherSprite: Sprite) {  //弾と敵が重なったとき
072    otherSprite.destroy()     // 敵を消す
073    info.changeScoreBy(15)    // スコアを15増やす
074  })
075  
076  controller.down.onEvent(ControllerButtonEvent.Pressed, function () { // 下ボタンが押されたとき
077    upgradeItemIndex += 1
078  })
079  
080  controller.up.onEvent(ControllerButtonEvent.Pressed, function () { // 上ボタンが押されたとき
081    upgradeItemIndex -= 1
082  })
083  
084  controller.B.onEvent(ControllerButtonEvent.Pressed, function () {  // Bボタンが押されたとき
085    let upgradeItemPrice = upgradeItemPrices[upgradeItemIndex]   // スコア閾値を代入
086    if (info.score() < upgradeItemPrice)              // スコアが足りていない
087      return                           // 何もしない
088  
089    if (upgradeItemIndex == 0)                    // アイテムが0番目の時
090      fireInterval -= 50                      // 弾の速度を50減らす
091    else if (upgradeItemIndex == 1)                  // アイテムが1番目の時
092      enemySpawnInterval -= 100                   // 敵の登場間隔を100減らす
093    else if (upgradeItemIndex == 2)                  // アイテムが2番目の時
094      turretWobbleIntensity += 1                  // 強度を15増やす
095    else if (upgradeItemIndex == 3)                  // アイテムが3番目の時
096      turretRotateBy -= 3                      // 角度を3増やす
097  
098    info.changeScoreBy(-upgradeItemPrice)              // アイテムを使うのでスコアを減らす
099    upgradeItemPrices[upgradeItemIndex] *= 1.2           // アイテムを使う際に必要なスコア閾値を上げる(何度を上げるため)
100  })
101  
102  sprites.onDestroyed(SpriteKind.Enemy, function (sprite) { // 敵が消滅したとき
103    if (sprite.y > 120)      // 敵の高さが120(画面外)になったら
104      info.changeScoreBy(-10)  // スコアを10減らす
105  })
106  
107  game.onUpdate(function () {   // ゲームが更新されたとき
108    if (info.score() <= -50)  // -50点になったら
109      game.over()       // ゲームオーバー
110  })
111  
112  function drawUpgradeItemPrice(icon: Image, price: number) {  // ピンクに変える
113    for (let y = 0; y < icon.height; ++y)      // 縦方向をピクセルづつずらす
114      for (let x = 0; x < icon.width; ++x) {   // 縦方向をピクセルづつずらす
115        if (icon.getPixel(x, y) != 12)     // 紫(=12)じゃないとき
116          continue              // 何もしない(ループを再開する)
117        icon.setPixel(x, y, 3)         // ピンク(=3)にする
118      }
119  }
120  
121  game.onUpdate(function () {   // ゲームが更新されたとき
122    upgradeItemIndex = Math.clamp(0, upgradeItems.length - 1, upgradeItemIndex) // アイコンの範囲指定
123    for (let i = 0; i < upgradeItems.length; ++i) {        // アイコン分ループ
124      let upgradeItemIcon = upgradeItemIcons[i].clone()     // アイコンを取得
125      if (i == upgradeItemIndex)                 // 今のアイテムの時
126        upgradeItemIcon.drawRect(0, 0, 12, 12, 7)       // 緑色の枠をつける
127      let upgradeItemPrice = upgradeItemPrices[i]        // 閾値を取得
128      if (info.score() >= upgradeItemPrice)           // スコアと閾値を比較する
129        drawUpgradeItemPrice(upgradeItemIcon, upgradeItemPrice)// ピンクに変える
130      upgradeItems[i].setImage(upgradeItemIcon)         // 描画する
131    }
132  })
133  
134  function initializeUpgradeItems() {                // 初期化
135    for (let i = 0; i < upgradeItemIcons.length; ++i) {      // アイコン分ループ
136      let upgradeItem = sprites.create(upgradeItemIcons[i])   // アイコンの読み出し
137      upgradeItem.setPosition(10, 10 + i * 16)          // 位置を決める
138      upgradeItems.push(upgradeItem)               // ゲーム中のは配列に登録
139    }
140  }
141  
142  initializeUpgradeItems()

目次に戻る

★JavaScript stage29_circuitの答え
transferable_date
001  let tilemapLevel = assets.tilemap`ステージa`
002  let tilemapWidth = tilemapLevel.width
003  let tilemapHeight = tilemapLevel.height
004  let level = 0
005  
006  let cursor = sprites.create(assets.image`cursor`)
007  let cursorColumn = 0
008  let cursorRow = 0
009  
010  
011  enum Direction {
012    Left,
013    Down,
014    Up,
015    Right,
016  }
017  
018  function getLocationInDirection(location: tiles.Location, direction: Direction) {
019    if (direction == Direction.Left)
020      return tiles.getTileLocation(location.column - 1, location.row)
021    if (direction == Direction.Down)
022      return tiles.getTileLocation(location.column, location.row + 1)
023    if (direction == Direction.Up)
024      return tiles.getTileLocation(location.column, location.row - 1)
025    if (direction == Direction.Right)
026      return tiles.getTileLocation(location.column + 1, location.row)
027    return null
028  }
029  
030  function getNeighboringLocations(location: tiles.Location) {
031    let neighboringLocations = []
032  
033    neighboringLocations.push(getLocationInDirection(location, Direction.Left))
034    neighboringLocations.push(getLocationInDirection(location, Direction.Down))
035    neighboringLocations.push(getLocationInDirection(location, Direction.Up))
036    neighboringLocations.push(getLocationInDirection(location, Direction.Right))
037  
038    return neighboringLocations
039  }
040  
041  function processNeighbors(location: tiles.Location, callback: (location: tiles.Location) => void) {
042    for (const neighboringLocation of getNeighboringLocations(location))
043      callback(neighboringLocation)
044  }
045  
046  let tileKind = {
047    wireOff: assets.tile`wireOff`,
048    wireOn: assets.tile`wireOn`,
049    lightOff: assets.tile`lightOff`,
050    lightOn: assets.tile`lightOn`,
051    switchOff: assets.tile`switchOff`,
052    switchOn: assets.tile`switchOn`,
053    logicNotGate: assets.tile`logicNotGate`,
054    logicAndGate: assets.tile`logicAndGate`,
055    logicOrGate: assets.tile`logicOrGate`,
056    logicXorGate: assets.tile`logicXorGate`,
057  }
058  
059  function initializeStage(level: number) {
060    let levels = [assets.tilemap`ステージa`, assets.tilemap`ステージb`, assets.tilemap`ステージc`, assets.tilemap`ステージd`, assets.tilemap`ステージe`, assets.tilemap`ステージf`]
061  
062    if (level >= levels.length)
063      game.over(true)
064    let tilemapLevel = levels[level]
065    let tilemapWidth = tilemapLevel.width
066    let tilemapHeight = tilemapLevel.height
067  
068    scene.setTileMapLevel(tilemapLevel)
069  
070    for (let r = 0; r < tilemapHeight - 1; ++r)
071      for (let c = 0; c < tilemapWidth - 1; ++c)
072        performLogicGate(tiles.getTileLocation(c, r))
073  }
074  
075  game.onUpdate(function () {
076    cursorColumn = Math.clamp(0, tilemapWidth - 1, cursorColumn)
077    cursorRow = Math.clamp(0, tilemapHeight - 1, cursorRow)
078  
079    tiles.placeOnTile(cursor, tiles.getTileLocation(cursorColumn, cursorRow))
080  })
081  
082  controller.left.onEvent(ControllerButtonEvent.Pressed, function () {
083    cursorColumn -= 1
084  })
085  
086  controller.down.onEvent(ControllerButtonEvent.Pressed, function () {
087    cursorRow += 1
088  })
089  
090  controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
091    cursorRow -= 1
092  })
093  
094  controller.right.onEvent(ControllerButtonEvent.Pressed, function () {
095    cursorColumn += 1
096  })
097  
098  function turnWireOn(location: tiles.Location) {
099    if (location.getImage() != tileKind.wireOff)
100      return
101    tiles.setTileAt(location, tileKind.wireOn)
102    processNeighbors(location, turnOn)
103    processNeighbors(location, performLogicGate)
104  }
105  
106  function turnWireOff(location: tiles.Location) {
107    if (location.getImage() != tileKind.wireOn)
108      return
109    tiles.setTileAt(location, tileKind.wireOff)
110    processNeighbors(location, turnOff)
111    processNeighbors(location, performLogicGate)
112  }
113  
114  function turnLightOn(location: tiles.Location) {
115    if (location.getImage() != tileKind.lightOff)
116      return
117    tiles.setTileAt(location, tileKind.lightOn)
118  }
119  
120  function turnLightOff(location: tiles.Location) {
121    if (location.getImage() != tileKind.lightOn)
122      return
123    tiles.setTileAt(location, tileKind.lightOff)
124  }
125  
126  function turnOn(location: tiles.Location) {
127    turnWireOn(location)
128    turnLightOn(location)
129  }
130  
131  function turnOff(location: tiles.Location) {
132    turnWireOff(location)
133    turnLightOff(location)
134  }
135  
136  function isOnAt(location: tiles.Location) {
137    let tile = location.getImage()
138  
139    if (tile == tileKind.switchOn)
140      return true
141    if (tile == tileKind.wireOn)
142      return true
143  
144    return false
145  }
146  
147  function performLogicNotGate(location: tiles.Location) {
148    if (location.getImage() != tileKind.logicNotGate)
149      return
150    let outputLocation = getLocationInDirection(location, Direction.Right)
151    if (isOnAt(getLocationInDirection(location, Direction.Left)))
152      turnOff(outputLocation)
153    else
154      turnOn(outputLocation)
155  }
156  
157  function performLogicAndGate(location: tiles.Location) {
158    if (location.getImage() != tileKind.logicAndGate)
159      return
160    let input1 = isOnAt(getLocationInDirection(location, Direction.Up))
161    let input2 = isOnAt(getLocationInDirection(location, Direction.Down))
162    let outputLocation = getLocationInDirection(location, Direction.Right)
163    if (input1 && input2)
164      turnOn(outputLocation)
165    else
166      turnOff(outputLocation)
167  }
168  
169  function performLogicOrGate(location: tiles.Location) {
170    if (location.getImage() != tileKind.logicOrGate)
171      return
172    let input1 = isOnAt(getLocationInDirection(location, Direction.Up))
173    let input2 = isOnAt(getLocationInDirection(location, Direction.Down))
174    let outputLocation = getLocationInDirection(location, Direction.Right)
175    if (input1 || input2)
176      turnOn(outputLocation)
177    else
178      turnOff(outputLocation)
179  }
180  
181  function performLogicXorGate(location: tiles.Location) {
182    if (location.getImage() != tileKind.logicXorGate)
183      return
184    let input1 = isOnAt(getLocationInDirection(location, Direction.Up))
185    let input2 = isOnAt(getLocationInDirection(location, Direction.Down))
186    let outputLocation = getLocationInDirection(location, Direction.Right)
187    if (input1 != input2)
188      turnOn(outputLocation)
189    else
190      turnOff(outputLocation)
191  }
192  
193  function performLogicGate(location: tiles.Location) {
194    performLogicNotGate(location)
195    performLogicAndGate(location)
196    performLogicOrGate(location)
197    performLogicXorGate(location)
198  }
199  
200  controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
201    let tileLocation = cursor.tilemapLocation()
202    let tile = tileLocation.getImage()
203  
204    if (tile == tileKind.switchOff) {
205      tiles.setTileAt(tileLocation, tileKind.switchOn)
206      processNeighbors(tileLocation, turnOn)
207    } else if (tile == tileKind.switchOn) {
208      tiles.setTileAt(tileLocation, tileKind.switchOff)
209      processNeighbors(tileLocation, turnOff)
210    }
211  })
212  
213  game.onUpdateInterval(1000, function () {
214    if (tiles.getTilesByType(tileKind.lightOff).length > 0)
215      return
216    level += 1
217    initializeStage(level)
218    pause(500)
219  })
220  
221  controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
222    tiles.setTileAt(cursor.tilemapLocation(), tileKind.lightOn)
223  })
224  
225  initializeStage(level)

目次に戻る

1-5.スクールで学ぶこと

6skill

[動画]コードアドベンチャーで身につく6つの力って何?
上記動画の補足
大人がプログラムを知る必要があるか?
 →必要です。(本部の考えは尊重していますが、この点は異なりました)

理由1:相手が何ができるかわからなければ、相手と会話することもできません。
理由2:今後、子供が何を学ぶべきなのか、親が判断できない。

古くからある習い事は周囲に経験者が何人かいて、なんとなく何ができて何ができないのか知っていると思います。 相手が何ができる/できないがわからなければ、会話すらできません。 情報の分野は多岐に渡っていて、既に細分化が行われておりそれぞれの分野に専門家がいます。 まずは、中学/高校の教科書を読んでみましょう。 (1-12.情報知識)


このスクールで学ぶことは、体験会でも説明させて頂いたように6つのスキルを学習します。
1.要素分析 :問題は様々な要素が絡み合っていることが多いので、要素毎に分けることが必要になります。
2.パターンの発見 :同じことを何度もやるのは大変なので、同じものを見つけ出すことが必要です。
3.抽象化 :シンプルで理解しやすい形で表現することは、かなり大切です。また、1番初めに思いついた方法が良い方法とは限りません、より良い方法を探し出すことが必要です。
4.アルゴリズム化 :何かを実現するとき実現方法は何パターンもあります。その中で一番よい方法を見つけます。
5.試行錯誤 :仮説を立てて検証することで、より深く考える力になります。
6.コーディング :プログラムを学ぶ中で、1~5の思考訓練をします。

最近AIの話題が多いのでコメントします。 現時点のAIは道具です。どんな道具でも使い方があるようにAIにもあります。 道具を使いこなせば良いと思います。 ただ、倫理的・社会的な議論によっては、単なる道具としての枠を超えていく可能性はあります。
私はスキーができません。どんなに優れた道具があってもスキーはできません。 まずは、初心者用の道具と指導者が必要です。 AIの指導者を見つけることは簡単ではないので、簡単なことからはじめて慣れていき、周りの人より少しできれば重宝されます。

ステージ1では、PCでのマイクラ操作とエージェントに指示を出すことを学びます。

 ステージ2~6の問題の一部を紹介します。
 ステージ7~9の問題の一部を紹介します。

 ステージ10~12の問題の一部とJavaScriptを紹介します。

ステージ13~15のJavaScriptを体験することで、 ビジュアルプログラムとテキストプログラムの関係をしることができるようになるため、 経験者と会話が成立するレベルになると思っています。(相手の知識にも寄ります)

1-7.授業参観

授業参観は基本的にいつでも可能です。 子供たちのエリアに入ることができますので、そばで見守ってあげてください。 子供たちのことを理解している親が近くで見ることが大事だと思います。
あと、子供が何を学んでいるかご自身の目で確かめてください。 子供自身は何を学ぶべきかの判断は付きません。今後の進路を決める時に知っておくと役に立つかもしれません。

時間の許す限り、少なくとも2~3カ月のペースで授業参観をしてください。 よく見に来る方とそうでない方では差を感じます。思考力や論理的思考は、日常生活の中で身に付くものであり、 子供が何を学んでいるのか理解し、子供の可能性を引き出してください。 どういったことができるか、その際に相談させてください。

目次に戻る

1-8.レッスンの進め方

rule1 rule2
rule3
目次に戻る

1-9.検定合格メッセージ

目次に戻る

1-10.トラブル発生時の授業

2024年8月に2度、サーバがダウンして授業にならないことが発生しました。
本スクールでは、いぬたぬきの授業と実践としているため、ネットワークの問題が致命的になっています。
サーバ管理は委託しているのですが、それでも今の時代このようなトラブルは発生します。
大金をかけている銀行でもシステムダウンが発生するものなので、発生することは必然です。

何らかのトラブルが発生した場合は、通常レッスンとは異なる問題を実施します。
授業なしでも進めれる問題(タイムアタック、宝探し、ドリル)を実施します。
※その時の進行度合いで、臨機応変に対応します。
※納得がいかない場合は"事前"に連絡お願いします。お金が発生することなので遠慮なく言ってください。
※タイピングは家でもできるので、優先しません。

目次に戻る

1-11.プログラミングの移り変わり

Programming-Transitions プログラミングの移り変わりを1枚にまとめて見ました。 プログラミング歴史を語ると何ページにもなるので、かなり省略しています。

これからは、AIの活用も必要になってきます。 様々な種類のAIサービスが出てきています。自分にあったサービスを見つけ、慣れるためにチャレンジすることが必要です。
どんなに便利なモノでも、慣れないと使えないので、触ってみて合わなければ変える必要が出てきています。

30年前は、スーパーマンが数名で製品を作っていました。 たくさん製品を作ることができませんでした。

15年前だと、役割分担が進んできてコミュニケーションが重要になってきました。 それと同時に、プログラミングを知らない人でも開発ができるように、補助ツールが進化しました。
現在では、モデル開発が盛んになって来て、アイデアを出す人がツールを使って具体的な形にしていく流れになって来ています。 そのためには、情報の知識・経験が必要になってきます。 最終的な製品にするためには本開発が必要です。補助ツールなので製品には耐えれない。

今後どのような変化が起きるかまではわかりませんが、 機械への指示書(プログラミング)は必要になってくるので、 プログラミングを知っている人は有利で、仕事の幅も広がると思います。
★娘とオープンキャンパスに行ってきました★
理系の学科や、経済学部のオープンキャンパスを見てきたのですが、2024年度から始まる大学共通テストで文系でも情報Ⅰを取り入れている学科は多いようです。

目次に戻る

1-12.情報知識

凡例:●必須、◎おすすめ

■パソコンの選び方 配信者:パソコン博士TAIKI
 パソコンの選び方!(30:48)  部品(メモリ、ストレージ、CPU、GPU)の紹介もあります

■小学生でもわかる半導体 配信者:パソコン博士TAIKI
 半導体(18:17) シリコン/ゲルマニウム?!

■考え方 配信者:サラタメさん
 考え方の1つ"嫌われる勇気"(15:22)  自分の課題? アルフレッド・アドラー

■考え方 配信者:イチケン
  プリント基板実装の舞台裏"(18:14) 

■【高校情報Ⅰ】 配信者:せかチャン
教科書に添って説明されています。高校レベルなので深くはないですが、わかりやすく説明してくれます
量が多いので、気合いを入れてから見てみてください。
 情報教育 

目次に戻る

1-14.ご家庭向けドリルのご紹介

drill_introduction

コードアドベンチャー家庭学習用ドリル請求フォーム


ご家庭でドリルを使用するためには、ご家庭で上記URLから申請して頂く必要があります。
※注意事項をよく読んでお進みください。

コードアドベンチャー推奨PCはこちら


家庭学習までの流れ
①請求フォームから申請する
 ※所属の教室名“CA海津校”を入力ください
②申請後送られてきたURLからダウンロードする
③教育版インストール
④教育版アカウント取得
⑤教育版マイクラにログイン

「他教室ではできるのに…」とならないために公開致します。

目次に戻る

1-15.アルファベット学習について

alphabet

楽しく学習するためにアルファベットの学習をおすすめします。 私がおすすめしている方法は、音で学習することです。

下記youtubeは穏やかに聴けるのでおすすめです。BGMとしてお使いください。

Phonics Song 2 (3分)

目次に戻る

1-16.コードアドベンチャーからの書籍紹介

Book

「ステージ1~ステージ5」くらいまでの問題集になっています。 コードアドベンチャーの世界を体験してもらうことができます。 海津校にも書籍がありますので、興味がありましたらお声かけください。

1-17.スキン作成

SkinCreat

タイピングゲームで登場するスキンを自分で作って応募することができます。 作ったスキンがタイピングゲームに登場するかも!!!

スキンを作って応募しよう!  応募はここから!
※募集テーマは応募フォームの中に書いてあります。
注意事項
 (1)アップ画像は2Dの「展開図」をアップください。
 (2)オリジナルスキンを応募してください。
 ※既存キャラクターを模した作品は採用できません。
  著作権に該当するため採用できません。

 スキン作成-紹介動画-

スキン作成ソフトURL
ソフトの使い方

現在、便利なツールが多いので、知識がなくても高度なことができるようになって来ています。 高度な知識を持っていても、ツールを操作できないと役に立たないこともあります。 このツールもやっていることは、色塗りですが、 パソコンを使って、便利な機能に触れることは体験になるので、何度か体験してみると良いと思います。

目次に戻る

1-18.お友達紹介キャンペーン

introduction

ご興味がある方に紹介してあげてください。 キャンペーン内容は1カ月半額とします。 ※入会が条件となります

目次に戻る

1-19.プログラミング検定

プログラミング検定を海津校で受験できます。内容はリーフレットを参照ください。
プロ検定のレベル1は小学生レベルだそうです、レベル2以降は中学生レベルとなります。
プロ検定のリーフレット
申し込み書(スクールにあります)
  日程は、1-1.スケジュールを参照ください

検定問題サンプルをお見せします。 まず、動画を見てどのような操作が行われているのか?画像がどのように動くのかを推測します。 次に選択肢の中から一致するものを選びます。わからない場合は再度動画を見ます。

検定問題サンプル  ビジュアル言語レベル1

検定問題サンプル  JavaScript言語レベル1


目次に戻る

1-20.英語教育(イングリッシュゲート)

eg
タイピングで英単語を楽しく学ぼう!
2025/4月から海津校で新しいカリキュラムがスタートします。その名もイングリッシュゲート「36構文と700単語、タイピング」コース!タイピングを通じて、英単語を楽しく学びます。
 イングリッシュゲート ホームページ 
 イングリッシュゲート youtube 

英単語は書いて覚えるもの?タイピングでも楽しく効果的に学べます!英語を学ぶのに一番大事なことは、どんな形であれ、好きになること。ちょっとでも「英語って楽しいかも」と感じてもらえれば、大成功です。 ゲームで英単語を覚えるものもあると思いますが、ほっといても続かないことあると思います。(私もそうでした)
小学校では、英語を好きになるようなカリキュラムになっていますが、中学生になって英語の壁があるようです。 このカリキュラムの目標は、中学校の英語授業は、小学校で学んだ内容を前提に進むことが多いため、中学生になると急な変化に戸惑うお子さまもいるようです。そこで、このカリキュラムを通じて、楽しみながら自然に英単語に触れ、中学校入学前に英語に対する苦手意識を少しでも減らすことが目標です。

◆料金とお試し期間
海津校では2025年4月からスタートします。通常料金は月額8000円です。

◆カリキュラムの内容
週1回の授業:動画視聴+マインクラフト+タイピングを行います。
自宅学習:タイピング練習を毎日5分から始めましょう。宿題ではなく習慣づけを目指します。
自宅でやりなさいと言っても続かないと思いますので、”ご飯を食べたら英語をする”、"お風呂の後に英語をする"。など促しをお願いします。

◆料金とお試し期間
海津校では2025年4月からスタートします。通常料金は月額8000円ですが、2025年4月〜8月の期間中はお試し価格として月額3000円でご提供いたします。

◆選べる学習強度
お子様に応じて調整していきましょう。
[A]しっかり学ぶモード :書きの単語テストをして90%正解 & ダイヤの剣をゲットできたら、次に進むコースです。
[B]学ぶモード :書きの単語テストをして75%正解 & ダイヤの剣をゲットできたら、次に進むコースです。
[C]ちょっぴり学ぶモード:書きの単語テストをして50%正解 & 金の剣をゲットできたら、次に進むコースです。
[D]楽しむモード :書きの単語テストはしますが合格ラインはもうけません、ただただ英単語に触れることを目指します。
不合格だった場合、次週練習してテストを実施します。
※〇〇の剣については、体験会で説明します。

◆選べる進行速度
週に20単語登場します、覚えれる数はお子様によって変わります。
[8]1週間で8単語:1ステージ(60単語)を7週間で進めます
[10]1週間で10単語:1ステージ(60単語)を6週間で進めます
[12]1週間で12単語:1ステージ(60単語)を5週間で進めます
[15]1週間で15単語:1ステージ(60単語)を4週間で進めます

◆不定期に面談します
学習ペースが最適か面談します相談しましょう(必須)。自分が知らない単語を覚えると考えてみてください。1コマで20単語登場する仕組みになっています。

目次に戻る

2.学習

2-1.ポイント表

悩みに悩みましたが、参加回数や練習した回数に応じて、ポイント(シール)を集めて、景品と交換できるようにしたいと思います。
 1. レッスン
 2. 予習/復習動画
 3. なぞとき
 4. 3Dパズル
 5. STEM教育
 6. 左右テスト
 7. アルファベットテスト
 8. 教室アルファベットタイピング
 9. 教室アルファベットタイピング
 10. 教室ローマ字タイピング
 11. 教室英単語132タイピング

(注)レッスン回数等は、さかのぼって算出します。

目次に戻る

2-3.なぞとき

nazotoki

謎解きは脳を活性化させ、エンターテイメントとして学習を楽しむことができる 有益なアクティビティだそうです。

本部が用意してくれている謎解きが、20問程度あります。 教室にもおいてあるので、もっていってください。
こちらに、問題と答えを用意しました。
問題と答え
※左の問題は英語が含まれていますが、お渡しするものはすべて日本語です。

目次に戻る

2-4.3Dパズル

3Dpuzzle

教室の玄関に100均一で売っているパズルを置きました。 自由に持って帰ってください。

個人的にコスパがいいと思っているので、子供たちと遊んでください。 家に置いてもらってもいいし、教室の玄関に飾ってもらってもいいです。
※私は、同じものをばらして子供とタイム競って遊びました。

目次に戻る

2-5.STEM教育

Apitor Robot x

◆21世紀型の新しい教育「STEM教育(ステム)」が世界各国で導入され始めているらしいです。
 ・Science(科学)
 ・Technoloogy(技術)
 ・Engineerring(工学)
 ・Mathematics(数学)

◆"Apitor Robot x"で遊ぶことで、STEMを学ぶことができるそうです。 Apitor Robot x
12種類のロボットの形状だけでなく、自由な発想力でロボットを作り出すことができます。

◆"Apitor Robot x"を貸し出します
 費用:300円 ※パーツ紛失対応用
 期間:3週間程度
 期間:何度でも
 対象者:ステージ5をクリア
   ※プログラミングで分岐を必要とするため
 お試し感覚:OK

組み立て図は、付属アプリで見るのをおすすめします。そのまま操作もできます。

※細かいパーツも多いので、床でやることをお勧めします。 子供には壊さないでね&無くさないでねと念押ししますが、 そういったこともあると思うのであまり気にしないでください。

◆プログラミングについて
これまでプログラミング学習ツールをいくつか比較してきましたが、他のプログラミング学習は便利な機能が多い反面、基本的なことが抜けているように感じています。  (これからの時代では、あまり気にする必要はないかもしれませんが)

 イメージ:ニンジンを半月切りにする
 〇コードアドベンチャー
  1.包丁を選ぶ、2.皮をむく、
  3.にんじんを縦半分に切る、
  4.横向きに切る、5.完成。
 〇"Apitor Robot x"
  1.機械に入れる、2.ボタンを押す、3.完成

目次に戻る

2-6.左右テスト

方向テストやり方
ご家庭で遊びながら、覚えてください。

目的:左右を理解する。
   自分基点と相手基点を理解する。
   方向と動作を区別する。

card2


エージェントを動かすときに、左右を使用します。 序盤は間違っていても反対にすれば、結果的に正解になります。 徐々に複雑なプログラムを書くので、左右を理解していないと、新しいことを覚えることが難しくなります。 日常生活の中で「右のモノを取って」「右に飛行機が飛んでるよ」などを取り入れて意識させることをお願いします。


問題は3種類あります(38枚)
 1. 自分から見た方向(18枚)
 2. 相手から見た方向(12枚)
 3. 自分の向きを変える(8枚)

card3 card4
目次に戻る

2-7.アルファベットテスト

テストは、ゆびを指すので、口で答えてくれたらOK alphabet

タッチタイピングのアルファベット動画でも練習できます。 タイピング&予習復習ページ

目次に戻る

2-8.タッチタイピング

◆本部提供のタイピングゲーム
 (Chrome/Edge対応)

TypingBuild

◆本部から楽しめるタイピングゲームがリリースされました。タイピングには少しだけ力を入れます。
教室ではレッスンを優先しますので、教室でタイピングがしたい場合は、〇〇分やりたいと宣言ください。
※私は「カリキュラムが進んでない」と言われるのが怖いので。。。

◆学習の流れ
 1. 本部タイピングゲームで慣れる!
 2. 教室練習動画で練習する。
 3. 本部タイピングゲームで競う!

 ※2と3は並行に進んでもよいです。
 ※慌てる必要はありません、強制だけはしないようにお願いします。

◆タイピングはこちら
タイピング&予習復習ページ
※お子さんにはこちらのURLを教えてください。

◆タイピング2種類用意してます。
どちらも家で練習できます。
 ①本部公開のタイピングゲーム
  目的: 楽しむ! 速度を極める!

  家庭用と教室用との違い。
  ・家庭用ではランキングが表示されない。
  ・家庭用ではコインがたまらない
   ※限られた予算で開発しているので、
    バグを見つけてもそっとしてください。

 ②教室からの練習動画(youtube)
  目的:音と一緒に単語を覚える

  3種類用意しています。
   1つ目 アルファベット
   2つ目 ひらがな50音
   3つ目 英単語132

   ※それぞれ十段階用意してます。
    再生速度が違うだけです。

※①は音が無いのと間違えても見直すことができないので、それを補うために②練習動画を用意しています。


◆大人向けですが、無料で模試が受けれてレベルがわかるサイトです。興味があれば試してみてください。
 文章が大人向けなので子供は難しいです
 タイピング技能検定(イータイピングマスター)
 ※教室と関係はありません。


目次に戻る

2-9.ポイント交換

prize ※最新版は教室に張ってありますので、そちらをご確認ください。

このリストにある景品は全てAmazonで購入できるものです。Amazonで販売されなくなったものは景品リストから削除します。 他サービスで購入することはしません。購入ルートが増えると正直大変なので、承知おきください。 できる限り期待に応えるつもりです、改善点があれば教えてください。
ほしいものがない場合ですが、シールを集めるだけでも良いです。 この一覧にないものを景品にすることはできますので、気軽に相談ください。 写真などを見せてもらえるとイメージが湧きやすいです。 イメージは親御さんで購入してもらい、それをこちらで購入させて頂きます。 領収書が必要になりますので、宛名は空欄もしくは、海津キッズプログラミングスクールにしてください。 領収書がない場合は引き取れません。 なんとなくですが、コンサートのチケットやゲームなどは渡したくないです。 金額ですが、5000円以下でお願いします。あまり高価なものは渡したくないので。

目次に戻る

3.こんなイベントがありました

3-1.2022年"マイハウス建築"のコンテスト:本部主催

house_building_contest

第一弾(3:18)
第二弾(2:23)
第三弾(5:28)
第四弾(5:22)

ステージ4の後に行うミニ講座で、"マイハウス建築"をテーマにマイクラの中で家を作ります。2022年に行われた作品の紹介動画です。応募数が予想より多く4回に分けて紹介されています。
レッスンでは2~4回行います、第三弾の1つ目の作品を見ていただくと、実際ここで行うことのイメージが湧きやすいと思います。

目次に戻る

3-2.英語ナゾトキアドベンチャー:本部主催

Event_English

 英語を学ぶ必要性を感じることを目的にしたイベントでした。

目次に戻る

3-3.ジャパンツアー2023年度:本部主催

JapanTours2023

プロモーション動画
プロモ動画①
プロモ動画②
海津校から6名参加して頂きました。低学年の子は少々難しかったようですが、みなさん楽しめたと思って頂けたようです。

目次に戻る

3-4.ジャパンツアー2024(プレミア試験実施):本部主催

申込フォーム:ジャパンツアー2024
JapanTour2024
 定員50家庭 先着、プレミア開催
 

①-1 英語×マイクラコース体験会
①-2 AIプログラミング体験会
②  ジャパンツアー2024(プレミア試験実施)
 
 会場:ウインクあいち
 7月28日(日曜日)
 
 10:30~11:30
  英語×マイクラコース体験会
  (定員8名 抽選)
 12:00~13:00
  AIプログラミング体験会  
  (定員8名 抽選)
 14:00~16:00
  ジャパンツアー2024    
  (定員50家庭 先着、プレミア開催)

4.災害対策

 保護者の皆様へ
  当塾の教育活動にご理解とご協力を賜り、誠にありがとうございます。
    
  万が一の災害に備え、安全を最優先に考えた災害対策マニュアルを作成いたしました。
  以下にその概要をご説明いたします。
    
  海津もしくは桑名市の広報に従い、避難を行います。
   1. 避難場所
    状況に応じ、以下の場所に避難します
     候補1:岐阜県 石津小学校(2.0km)
     候補2:三重県 多度中小学校(2.7km)
    
   2. 避難経路
    支流も多い地域なので、状況に応じて移動します。
    
   3. 緊急連絡先
    080-4537-6548
    
   4. 保護者への連絡
    災害発生時には、速やかに保護者様に連絡を取り、集合場所での引き渡しを行います。
    事前に集合場所をご確認いただきますようお願い申し上げます。
    
    できる限り、最速で引き渡しを行いたいと考えておりますが、
    連絡が取れないなど、不足な事態も起きますので承知おき下さい。
    
    引き渡しは私が知らない人が来る場合は、必ず連絡をください。
目次に戻る