初心者でもプログラムを書けるようになるための「プログラムを書く手順」とは?
「プログラムの書き方や考え方を学んだのにプログラムを書けない」という人も多く、「書き方は知っているのに作り方がわからない」という悩みを抱えている人も多いのではないでしょうか。
プログラムを自分で考えて書けるようになるためには、書き方以外にも「作り方の手順」を知っておく必要があります。
これから、どのようにプログラムの作り方を考えていけばいいのか、手順をご説明していきたいと思います。
「どのようなプログラム」を作るのかをリスト化する
初心者がプログラムを書く際に失敗してしまう理由として、「いきなりプログラム」を書き始める。」ことがあります。
一番初めにやるべきことは、「プログラムを書き始めること」では無くて、「何をするのかをリスト化すること」です。
例えば、「サイコロの大小を元に勝ち負けを決めるようなゲーム」を想定すると、必要な機能が何なのかを考えながらリストにしていきます。
リスト1
- サイコロを振ることができる
- サイコロの出た目の大小で勝負ができる
- ゲームに勝つと20ポイントを受け取る
- ゲームに負けると10ポイントを失う
しかし、まだプログラムを書くにはリストの内容が足りていません。
この段階でプログラムを書こうとしてしまって、途中でどのように書けばいいのかわからなくなって失敗しまうことも多いのです。
他に必要な項目を追記していくと、
リスト2
- サイコロを振ることができる。
- サイコロを2つ用意し、1〜6の出目が取得できる。
- サイコロの出た目の大小で勝負ができる。
- サイコロの出た目が大きい方が勝ち、小さい方が負け
- ゲーム開始時には100ポイントを持っている
- ゲームに勝つと20ポイントを受け取る
- ゲームに負けると10ポイントを失う
- 残りポイントが10ポイント未満の場合はゲームができない。
となりますが、さらに具体的にプログラムを書けるようにしていきたいと思います。
リスト3
- サイコロを振ることができる。
- サイコロを2つ用意し、1〜6の出目が取得できる。
→サイコロの出目を管理する変数を2つ用意し、ランダム関数を使って、1〜6の値を取得する。 - サイコロの出た目の大小で勝負ができる。
→if文を使ってサイコロの出目の大小を判定する。 - サイコロの出た目が大きい方が勝ち、小さい方が負け
- ゲーム開始時には100ポイントを持っている
→ポイントを管理する変数を用意し、初期値に100を代入する。 - ゲームに勝つと20ポイントを受け取る
→ポイント変数の値を20増加。 - ゲームに負けると10ポイントを失う
→ポイント変数の値を10減少 - 残りポイントが10ポイント未満の場合はゲームができない。
→ゲーム開始前にif文を使ってゲームができるポイントを保持しているかを確認
「リスト3」では、具体的に「どのようにプログラムを書いていくのか?」を追加しています。
ここまで内容を具体的に定めることで、やっとプログラムを書くことができます。
このように「リストが具体的に定まらなければプログラムは書けない」ということになります。
ここでいう「リスト」というのは、専門的に言うと「要件」と呼ばれたりすることもあります。
どんなことでもそうですが、「なんの計画も無く」始めるとほとんどのケースで失敗してしまいます。
「リストを作る」ことは「プログラミングの計画を立てること」ですので、計画を立てて「失敗しないプログラミング」を行えるようになっていきましょう。
それでは、具体的にプログラムを書いていく段階を見ていきましょう。
プログラムの書き方
プログラミングを書く際の慣習として、まず「プログラムに必要な変数」をまとめて、一番初めに書いていき、初期値を設定していきます。
今回のプログラムでは、
- 「サイコロ1(あなた)の出目」の変数
- 「サイコロ2(コンピュータ)の出目」の変数
- 「保有ポイント数」の変数
の3つが必要になります。
ここでは、「Javascript」と呼ばれる、ブラウザ上で動くプログラム言語を利用していきたいと思います。
まず、変数を3つ用意し、初期化していきます。
var dice_user = 0; //ユーザーのサイコロの出目 var dice_cpu = 0; //コンピュータのサイコロの出目 var point = 100; //ゲーム開始時の保有ポイント
次に考えるのは「どのような順序で処理を行っていくのか?」ですが、プログラムの中にコメントとして処理の内容を書いていきます。
var dice_user = 0; //ユーザーのサイコロの出目 var dice_cpu = 0; //コンピュータのサイコロの出目 var point = 100; //ゲーム開始時の保有ポイント //保有ポイント数が10ポイント以上あるか? //10ポイント以上ある場合 //ユーザーのサイコロの出目を取得 //コンピューターのサイコロの出目を取得 //ユーザーが勝っている場合 //ポイントを20増やす //ユーザーが負けている場合 //ポイントを10減らす //サイコロの出目が同じ場合 //ポイントは変化なし //10ポイントに満たない場合 //エラーメッセージを表示
見た目のわかりやすさのために、条件がある場合は、右にインデント(字下げ)を入れながら「処理の順序」を考えつつコメントを付加していきます。
一通り処理の流れが書けたら、if文などの制御構文にコメントの内容を置き換えていきます。
var dice_user = 0; //ユーザーのサイコロの出目 var dice_cpu = 0; //コンピュータのサイコロの出目 var point = 100; //ゲーム開始時の保有ポイント if(保有ポイント数が10ポイント以上あるか?){} //10ポイント以上ある場合 //ユーザーのサイコロの出目を取得 //コンピューターのサイコロの出目を取得 if(ユーザーが勝っている場合){ //ポイントを20増やす } else if (ユーザーが負けている場合) { //ポイントを10減らす } else { //ポイントは変化なし } } else { //10ポイントに満たない場合 //エラーメッセージを表示 }
ここまで完成すれば、後はそれぞれのコメント部分をプログラム化していくだけで、プログラムを作成していくことができます。
サイコロの出目は、どのような値かわからないため、乱数(ランダム値)を利用して取得をしていきます。
方法がわからない場合は、インターネットや書籍等を利用して調べていきましょう。
例えば、Google・Yahooなどの検索サイトで、「Javascript 乱数」などのキーワードで検索すると、下記のようなWEBサイトを見つけることができます。
上記サイトの内容を元にサイコロの出目を取得する方法は下記のようになります。
var dice_user = 0; //ユーザーのサイコロの出目 var dice_cpu = 0; //コンピュータのサイコロの出目 var point = 100; //ゲーム開始時の保有ポイント var min = 1; //サイコロの出目の最小値 var max = 6; //サイコロの出目の最大値 if( point >= 10 ){ //10ポイント以上ある場合 //ユーザーのサイコロの出目を取得 var dice_user = Math.floor( Math.random() * (max + 1 - min) ) + min ; //コンピューターのサイコロの出目を取得 var dice_cpu = Math.floor( Math.random() * (max + 1 - min) ) + min ; document.write(ユーザーのサイコロの出目:" + dice_user); document.write(コンピューターのサイコロの出目:" + dice_cpu); if(ユーザーが勝っている場合){ //ポイントを20増やす } else if (ユーザーが負けている場合) { //ポイントを10減らす } else { //ポイントは変化なし } } else { //10ポイントに満たない場合 //エラーメッセージを表示 }
次に勝ち負けの判定を行う分岐処理を追加していきます。
var dice_user = 0; //ユーザーのサイコロの出目 var dice_cpu = 0; //コンピュータのサイコロの出目 var point = 100; //ゲーム開始時の保有ポイント var min = 1; //サイコロの出目の最小値 var max = 6; //サイコロの出目の最大値 if( point >= 10 ){ //10ポイント以上ある場合 //ユーザーのサイコロの出目を取得 var dice_user = Math.floor( Math.random() * (max + 1 - min) ) + min ; //コンピューターのサイコロの出目を取得 var dice_cpu = Math.floor( Math.random() * (max + 1 - min) ) + min ; document.write("あなたのサイコロの出目:" + dice_user); document.write("コンピューターのサイコロの出目:" + dice_cpu); if( dice_user > dice_cpu ){ point += 20; document.write("あなたが勝ちました。現在の保有ポイントは、" + point + "です。"); } else if ( dice_user < dice_cpu ) { point -= 10; document.write("コンピューターが勝ちました。現在の保有ポイントは、" + point + "です。"); } else { document.write("引き分けです。現在の保有ポイントは、" + point + "ポイントです。"); } } else { //10ポイントに満たない場合 document.write("保有ポイントが少ないためゲームを開始できません。"); }
これで一通りのプログラムが完成しました。
このような流れで一つずつ手順を追ってプログラムを書いていくことで、プログラムの流れを整理しながら、プログラムを作れるようになっていきましょう。
これまでに作成したプログラムの表示部分を整えると、次のようなプログラムになります。
ページを更新するたびにプログラムが実行され、表示結果がどんどん変化していくのがわかりますね。
慣れてくると、自分の頭の中での処理の流れを考えてプログラムを書いていくことができるようになりますが、プログラムを学び始めて、「どうやってプログラムを書いていいのかわからない」という人は、今回ご説明した内容を参考にしながらプログラムの作り方を身につけていきましょう。