Skip to main content
Advanced Search
Search Terms
Content Type

Exact Matches
Tag Searches
Date Options
Updated after
Updated before
Created after
Created before

Search Results

275 total results found

第6回 解けるようにパズルの問題を作りたい欲

夏休み特別企画 スライドパズル(コンソール版)を作ろうか

パズルの問題を作ろう ゲーム開始時に盤面を崩して、遊べる問題を作ってみよう! 1.数字をランダムに並べるだけではダメ 例えば、乱数を使って1~16を適当に並べれば、ランダムな盤面は作れそうです。 しかし、スライドパズルにはどう動かしても完成できない並びがあります。 そのため、数字を完全にランダムに並べる方法で出題すると無理ゲーになっちゃいます。 2.完成状態から崩せばよい 完成状態から始めて、 動かせるタイルを1枚動かす ↓ また動かせるタイルを1枚動かす ↓ これを何回も繰り返す という方法で盤面を崩...

第7回 あとできることって何?

夏休み特別企画 スライドパズル(コンソール版)を作ろうか

完成!そして自由制作へ C言語版スライドパズルの基本部分が完成したはず。 最後に全体の構成を確認して、自分だけの機能を追加してみよう! こうやって次々出来ることやれることを追加していくと、ゲーム作るって、終わりがないよね。 1.今回作った関数 作った関数と役割を確認してみよう。 InitBoard() PrintBoard() SearchTile() CanMoveTile() MoveTile() IsClear() ShuffleBoard() InitBoard() 盤面を初期化する Pri...

第1回 ゲームのシーケンス(画面遷移)を作る

夏休み特別企画 Guiでスライドパズル

第1回 ゲームループと画面の切り替えを作ろう 今回やること 今回から、コンソール版で作ったスライドパズルをDxLibのゲームへ作り替えていきます。 いきなりパズルの盤面を描くのではなく、まずはゲーム全体の流れを作ります。 今回のゲームでは、次の3つの画面を使います。 タイトル画面 プレイ画面 クリア画面 最初にこの3つを切り替えられるようにしておくと、このあと作るパズルの処理を「プレイ画面の中」へ順番に追加していけます。 1.ゲームの「状態」を作ろう 今、どの画面を表示しているのかを覚えておく必要がありま...

第2回 盤面を描画するまで

夏休み特別企画 Guiでスライドパズル

第2回 コンソール版の盤面をDxLibで表示しよう 今回やること 第1回では、 TITLE → PLAY → CLEAR → TITLE というゲーム全体の流れを作りました。 今回はPLAY画面へ、コンソール版で作ったスライドパズルの盤面を表示します。 パズルの仕組みを最初から作り直すのではありません。 コンソール版で作った、 盤面データ タイルを探す処理 動かせるか調べる処理 タイルを動かす処理 クリア判定 シャッフル は、そのまま利用します。 パズルの中身を作り直す必要はありません。 今回、DxLib用に...

第3回 マウスでタイルを動かす

夏休み特別企画 Guiでスライドパズル

第3回 マウスでタイルを動かそう 今回やること 前回は、コンソール版のBoardを使い、タイル画像で盤面をDxLibのウィンドウへ表示しました。 今回は、マウスでタイルを選んで動かせるようにします。 コンソール版では、 scanf() ↓ タイル番号 ↓ MoveTile() という流れでした。 DxLib版では、 マウスクリック ↓ クリックした場所のタイル番号 ↓ MoveTile() に変えます。 MoveTile()そのものは、コンソール版で作ったものをそのまま使います。 つまり今回は、...

第4回 クリア判定(はとても簡単)と問題生成(すでにある)

夏休み特別企画 Guiでスライドパズル

第4回 スライドパズルをゲームとして完成させよう 今回やること 前回までで、 盤面を描く マウスでタイルを選ぶ タイルを動かす ところまでできました。 ただし、ゲームを始めても盤面は完成状態のままです。 今回は、コンソール版ですでに作った、 ShuffleBoard() IsClear() をゲームの流れへつなぎます。 今回が終わると、 TITLE ↓ 問題を作る ↓ PLAY ↓ パズルを完成 ↓ CLEAR ↓ TITLE と、最初から最後まで遊べるスライドパズルになります。 ...

第5回 画面の調整(自分でかっこよくすればいいじゃん)

夏休み特別企画 Guiでスライドパズル

第5回 タイトル画面とクリア画面を仕上げよう 今回やること 前回までで、 TITLE ↓ PLAY ↓ CLEAR ↓ TITLE と、スライドパズルを最初から最後まで遊べるようになりました。 今回は新しいパズルの仕組みを増やすのではなく、 タイトル画面 プレイ画面 クリア画面 の見た目を仕上げます。 そのあと、ここまで作った関数を見直して、 どの関数が、どんな仕事を担当しているのか を整理します。 1.今の背景処理を見てみよう 第4回のゲームループでは、switchより前に次の処理がありま...

第6回 あとやれることある?

夏休み特別企画 Guiでスライドパズル

第6回 完成と自由制作 今回やること 前回までで、基本版のスライドパズルは完成しました。 今回は最初に、完成したプログラムが正しく動くことを確認します。 そのあと、自分で追加したい機能を1つ選んで、作品を仕上げてみよう! 自由制作でも、 何を追加する? ↓ どのデータが必要? ↓ どこで値を変える? ↓ どこで描く? ↓ 実行して確認 という順番で考えていきます。 1.ここまで作ったゲームの流れ 第1回では、最初にゲーム全体の入れ物を作りました。 そこへ少しずつスライドパズルの処...

第1回 倉庫お片付けゲーム(コスコマン)を作る

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第1回 倉庫お片付けゲーム(コスコマン)を作る これから、倉庫お片付けゲーム(コスコマン) を作ります。 コスコマンは、倉庫の中にある荷物を押して、決められたゴールへ片付けていくパズルゲームです。 今回はまだプログラムを書きません。まず、どんなゲームを作るのかを見ていきましょう。 1.どうして「コスコマン」? 名前の元になっているのは、倉庫型のお店として有名なCOSTCOです。 日本では「コストコ」と呼ばれていますが、英語での発音をカタカナへ無理やり近づけると「コスコ」に近く聞こえます。 そこで、倉庫の中で荷物...

第2回 文字でステージを表示しよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第2回 文字でステージを表示しよう 前回確認したコスコマンのステージを、今回はDxLibのウィンドウへ表示します。 目標は次の画面です。 ########## # # # . # # $ # # @ # # # ########## まだ@は動きません。まずは、数字で持っているステージを文字へ変えて描くところまで作ります。 1.まず、プログラム全体の流れを見よう ステージを表示するまでの大まかな流れは、次のようになります。 // ステージのデータと関数...

第3回 まずコスコマンを動かしてみよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第3回 まずコスコマンを動かしてみよう 前回は、Mapの数字を文字へ変えてステージを表示しました。 今回は、Mapの中にいるコスコマンを探して、まず実際に動かします。 ここでは、まだ壁や荷物の判定は作りません。 **「Mapを書き換えると、画面上の@も動いて見える」**ことを先に確認します。 今回の流れ Mapからコスコマンの位置を探す ↓ 押したキーから移動先を決める ↓ 元のマスを床へ戻す ↓ 移動先をコスコマンのマスにする ↓ Mapを描くと、@...

第4回 移動処理を整理しよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第4回 移動処理を整理しよう 前回は、WASDごとに移動先を直接計算しました。 W : nextPos.y = playerPos.y - 1; A : nextPos.x = playerPos.x - 1; S : nextPos.y = playerPos.y + 1; D : nextPos.x = playerPos.x + 1; 4つを見比べると、やっていることはどれも、 現在位置に「どちらへ1マス進むか」を足す という同じ処理です。 今回は、この重複を整理します。 今回の流れ W / A / ...

第5回 壁とゴールを判定しよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第5回 壁とゴールを判定しよう 前回までの移動は、移動先のマスを見ずにHUMANで上書きしていました。 そのため、壁も荷物もゴールも消せます。 📺 第動画で確認 移動するときは、次の順で考えます。 今回の流れ 現在位置 ↓ 移動先を計算 ↓ 移動先に何がある? ↓ 動ける/動けないを決める 1.指定した位置に何があるか調べよう Pointで位置を渡すと、そのマスの種類を返すGetObjectNum()を作ります。 OBJNAMEの値を再び OBJNAMEは、Mapの1マスに何が入ってい...

第6回 荷物を押そう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第6回 荷物を押そう 前回は、コスコマンが床とゴールの上を歩き、壁や荷物の前で止まる処理を作りました。 今回は、コスコマンの前にある荷物を1マス押せるようにします。 今回できるようになること この回を完成させると、次の動きができるようになります。 荷物の先が床なら、荷物を1マス押す 荷物の先がゴールなら、荷物をゴールへ押す 荷物の先が壁・別の荷物・Mapの外なら、何も動かさない コスコマンや荷物がゴールから移動しても、ゴールを消さない 荷物を押すときは、横に並んだ3マスを調べます。 コスコマン → 荷物 → 荷...

第7回 文字版コスコマンを完成させよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第7回 文字版コスコマンを完成させよう 前回までで、コスコマンは壁に止まり、ゴールを消さずに歩き、荷物を押せるようになりました。 今回は、文字版をゲームとして最後まで遊べるようにします。 今回できるようになること すべての荷物をゴールへ置くとクリアになる クリア後にENTERを押すと、次のステージへ進む Rを押すと、現在のステージを開始時の配置で読み込み直す 3つのステージを順番に遊べる 最後のステージをクリアすると、最初のステージを読み込む ゲーム中の処理は、次の順番で行います。 プレイ中 ↓ Rが...

第8回 文字を画像へ置き換えよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第8回 文字を画像へ置き換えよう 第1部では、文字だけでコスコマンを最後まで遊べるところまで作りました。 ここからの第2部では、ゲームのルールはそのまま使い、見た目・動き・音・画面遷移を追加してゲームらしく仕上げていきます。 第1部で完成したもの Map 移動 壁・ゴール判定 荷物押し クリア判定 複数ステージ リトライ ↓ ゲームのルールはそのまま使う ↓ 画像・動き・音・画面遷移を追加 表示方法が変わっても、ゲームのルールまで全部作り直す必要はありません。 第8回では、まず@...

第9回 コスコマンを滑らかに動かそう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第9回 コスコマンを滑らかに動かそう 第8回では、文字で描いていたステージを画像へ置き換えました。 ただし、Map上のコスコマンは1マスずつ移動するため、そのまま描くと画面でも一瞬で次のマスへ移動します。 今回は、ゲームのルールはそのままにして、描画位置だけを少しずつ動かします。 今回の流れ 移動する前の位置を覚える ↓ 今まで通りMoveObject()で1マス移動する ↓ 移動した方向と開始時刻を覚える ↓ 経過時間から0.0~1.0の進み具合を求める ...

第10回 荷物も滑らかに動かそう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第10回 荷物も滑らかに動かそう 第9回で、コスコマンは200msかけて1マス動くようになりました。 荷物を押したときは、コスコマンだけでなく荷物も同じ方向へ1マス動きます。 今回は、第9回で作った移動アニメーションをそのまま荷物にも使います。 今回の流れ MoveObject()を実行 ↓ 荷物を押した移動だった? ↓ YES 荷物はコスコマンの1マス先から動く ↓ 第9回のGetMoveDrawPos()で描く 新しい補間計算は作りません。 1.荷物を押したか...

第11回 効果音とBGMをつけよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第11回 効果音とBGMをつけよう 第10回までで、ゲームとしての動きは完成しました。 今回は、 歩く 荷物を押す ゴールへ押し込む クリアする といった出来事に合わせて効果音を鳴らし、ゲーム中はBGMを流します。 今回の流れ サウンドファイルを読み込む ↓ MoveResultに合わせて効果音を選ぶ ↓ 移動時に効果音を鳴らす ↓ クリア時にクリア音を鳴らす ↓ ゲーム中はBGMをループ再生する 1.移動結果を音にも使おう 第10回では、Mo...

第12回 TITLE・PLAY・CLEARで仕上げよう

夏休み特別企画 CostcoMan(倉庫番ゲーム)を作ろう

第12回 TITLE・PLAY・CLEARで仕上げよう ここまでで、 ステージのルール 画像表示 滑らかな移動 効果音 BGM まで完成しました。 最後は、ゲーム全体を TITLE PLAY CLEAR の3つの状態に分けて仕上げます。 今回の流れ TITLE ↓ ENTER PLAY ↓ クリア CLEAR ↓ ENTER 次のPLAY または TITLE 1.今のゲーム状態を表そう 今どの画面なのかを、GameStateという列挙型で表します。 enum GameState { ...