JavaFXかんたん風船アクションを作ろうPart5【最終回】
〜ゲームの仕上げ〜
〜画面遷移〜
〜障害物に関する処理〜
〜プレイヤー(風船)の操作〜
〜プログラムの骨格〜
【シリーズ】JavaFXでかんたん風船アクションゲームを作るPart3【最終回】
前回Part タイトル画面の作成 前回までで、ゲームの基本が完成しました。 ここからはゲームの仕上げに入っていきます。 そこでまず必要なのが「タイトル画面」です。 プログラムを実行した時に、まず初めにタイトル画面が出てきて、そこで「はじめる」を選択するとゲームが開始する。 ゲームオーバーしたらスコアの結果が表示されて、何かキーを押すとタイトル画面に戻る。 今回はタイトル画面はもちろん、こういった画面遷移処理のやり方も一緒に紹介していきます。 まずはタイトル画面のイメージ(構想)です。 もちろんまだ足りない部分はありますが、おおまかにはこれを目指していきます。 タイトル画面を表示する [crayon-5c2891956d967220303511/] まず、「enum」というキーワードが新たに出てきました。 この「enum」というのは、列挙型を定義する際にしようします。 今回のように「Title」「Game」「Result」と、3つの画面の種類を「列挙」しています。 絶対に「enum」を使わないといけない理由はないのですが、「enum」にした方が見やすいというのは言えると思います。 それから文章の記述量も少ないので楽です。 [crayon-5c2891956d975503371822/] 確かに個人差はあると思いますが、私は「enum」の方が見やすいです。 それから「初心者」の方はこれを機に「enum」を学べると思いますので、「enum」の使用をおすすめします。 では、「enum」の使い方ですが、「enum」で列挙型を定義したら「列挙型の変数」を作成します。 [crayon-5c2891956d978693837293/] 列挙「型」ですので、列挙型の変数が作れます。 そしてこの変数の使い方ですが、若干間違えやすいポイントがありますので、しっかり確認していきます。 [crayon-5c2891956d97a317773734/] switch文の中のcase文で「Screen.」と書いてしまいがちですが、case文では「Screen.」は必要ないので注意しましょう。 「enum」の解説はこれで以上です。 その上でプログラムを見てみましょう。
【シリーズ】JavaFXでかんたん風船アクションゲームを作るPart2
前回のPart 障害物の処理 前回まででプレイヤーの基本操作が完了しました。 今回は障害物の処理を書いていきます。 Obstacleクラスを作る 「Obstacle.java」というファイルを作り、そこに「Obstacle」クラスを定義していきます。 ちなみに「Obstacle」は「障害物」の意味で、今回作る障害物は矩形です。 では「Obstacle」の持つ基本情報をまとめてみます。 では、実際に実装をしていきます。 [crayon-5c289199391b2578437184/] Obstacleクラスの関数を定義する 次は、障害物を生成し、描画するところまで実装していきます。 障害物の生成に関しては、今回は簡略化し、まず先に「Obstacle」クラスが機能するかを確かめていきます。 [crayon-5c289199391bc495347550/] [crayon-5c289199391bf516775319/] 結果: 赤い矩形が描画されていたら成功です。 障害物にランダムな値を設定する これで「Obstacle」関数が機能したわけなので、障害物にランダムな値を設定していきます。 さらに、障害物の生成にも工夫を加えていきたいと思います。 まずランダムな値ですが、障害物がどこから出てくるのか(Y座標)、障害物の形はどうなのか(幅・高さ)、障害物の色は何色か、障害物の速度(X方向の速度)はいくらか。 これらに関してはランダムな値を設定することにします。 ゲーム性が増しますからね! [crayon-5c289199391c4926673412/] Y座標や幅・高さなどの式が少し複雑に見えるかもしれませんが、以下の画像を参考に好みで調整してみてください。 色を決定するには、「赤・緑・青」の成分の値をそれぞれ設定する必要があります。 ちなみに、色の合成は光の3原色ですのでご注意を。 そして「move」関数内での更新処理ですが、「x -= vx」となっています。
【シリーズ】JavaFXでかんたん風船アクションゲームを作るPart1
今回は、シリーズ「JavaFXでかんたん風船アクションゲームを作る」の第1回目です。 このシリーズでどういったゲームを目指しているかは、こちらの動画を是非ご覧になってください!! 1000点は意外と厳しい感じです。 私が下手なだけかもしれませんが・・・。 プログラムの骨格を作る ウィンドウを表示する [crayon-5c2891998d8f2877026148/] 結果: ダーク・タコイズ色のウィンドウが出てきました。 ダーク・タコイズにした理由は、空の色に似ているからというだけなので、色はご自身の好みでどうぞ。 さてウィンドウの作成ですが、「JavaFX」では「Stage」クラスというのを用います。 この「Stage」がウィンドウのことで、その上に「Scene」を乗せます。 「Scene」にはボタンやラベル、その他様々なノードを乗せることができ、 以下で説明する「Canvas」ももちろん乗せることができます。 「Stage」にその「Scene」を乗せるには「setScene」関数を用います。 この関数の引数は「Scene」型なので、作成した「Scene」を代入しましょう。 最後にウィンドウの表示ですが、これは「show」関数を呼び出すだけです。 行数があまりかからないのでいいですね。 Canvasをセットする 次は「Canvas」をセットします。 この「Canvas」に風船(プレイヤー)や障害物などを描画していきます。 [crayon-5c2891998d8fd057585594/] 結果に変化はありませんが、これで「Canvas」をセットできました。 「Canvas」をインスタンス化するところですが、引数は「Canvas」の幅・高さです。 今回はウィンドウ目一杯を「Canvas」にしたいのでウィンドウサイズと同じにします。 そして「GraphicsContext」を取得するところですが、この「GraphicsContext」というのは「Canvas」に様々なものを描画する際に役立ちます。というより、これを使わなければ描画はできません。 そしたら最後に、その「GraphicsContext」を使ってなにかを描画してみましょう。 円と矩形を描画する
【シリーズ】JavaFXで電卓を作ろう!!Part2【最終回】
前のPart 数字を電卓に表示させる 全てのボタンをリンクさせる 前回ボタンをリンクさせる方法を紹介しました。 なので今回、全てのボタンをリンクさせていきます。 [crayon-5c289199e78a7580038441/] このように全ての変数を宣言しました。 あとは「main.fxml」に、変数と「onClick」関数をリンクをさせていきます。 ここからはなかなかしんどい作業ですが、時間がない人はこちらをどうぞ。 (リンク作業が完了しているファイル) ボタンによる操作を記述する ここからは「onClick」関数を編集し、ボタンを押した時に数字が表示されるようにしていきます。 「1」ボタンが押されたら「1」を表示する。 そのあとに「3」ボタンが押されたら、「13」と表示する。 こういったプログラムを組んでいきます。 そのためには、何のボタンが押されたのかを知る必要があります。 そこで「onClick」関数の引数に注目です。 「onClick」関数の引数は「ActionEvent」型です。 そう、つまりこの「ActionEvent」クラスの関数を使えばどのボタンが押されたのかを知ることができるんです。 [crayon-5c289199e78b1736698587/] 「getSource」関数です。この関数を使えばどのボタンが押されたのかを知ることができます。 「getSource」関数でボタンの情報を取得し、「equals」関数で判別を行います。 このプログラムを実行したときに、 [crayon-5c289199e78b3373338232/] このように表示されれば成功です。 これを利用して数字を「TextField」に表示するプログラムを書いていきます。 [crayon-5c289199e78b4219896819/] 「TextField」に表示する文字列を保存するための変数「str」の語尾に数字を入れていきます。 こうすることでボタンによる数字の入力を実現することができます。 あとはこれを「0〜9」まで書いていきましょう。 [crayon-5c289199e78b6004089304/] 電卓で計算をする
今回からシリーズ「JavaFXで電卓を作ろう!!」をやっていきます。 JavaFXによる電卓の作り方を知れば、JavaFX自体もよく知ることができます。 JavaFX Scene Builder 2.0を導入しよう! JavaFXでレイアウトを作る上において、JavaFX Scene Builder 2.0は絶対に必要です。 以下のURLからダウンロードしてください。 バージョンは2.0なので、間違えないようにしてください! 上の画像をよくみて、間違えないようにしてください。 ダウンロードできたら、インストールしてください。 インストールが完了したらJavaFX Scene Builder 2.0を開きましょう! レイアウトの作成 これが完成図です。 これを目指して作っていきます。 AnchorPaneを用意する まず「AnchorPane」を用意します。 これは、電卓のボタンやテキストフィールド(答えを表示する場所)を貼り付けるための土台です。 このように、「AnchorPane」をドラッグして貼り付けてください。 土台ができたらボタンの貼り付けに移ります。 ボタンを貼り付ける ボタンは「Controls」にあります。 このボタンも、先ほどと同様にドラッグして貼り付けます。 そしたら、「Button」という文字が表示されている状態なので、「1」や「2」などの数字に変えていきましょう。 それから、ボタンのサイズも変更していきましょう。 ボタンの文字を変更するには、ボタンをダブルクリックして、直に書き込むやりかたと、「Properties」の「Text」欄を変更するやりかたの二つがあります。 まずはダブルクリックのやり方です。 ダブルクリックすると、文字が編集可能になります。 次に、「Properties」からの変更です。 矢印で指した場所から変更が可能です。 ちなみに、「Properties」からフォントや文字の大きさも変えられるので覚えておきましょう。 ボタンのサイズを変更する ボタンのサイズ変更は直感的に出来ます。
JavaFXで「Webブラウザ」を作っていきます! 「Webブラウザ」でも、JavaFXなら特別な知識はいらず、簡単に作れてしまいます。 まずは完成品を紹介します。 「戻る」「進む」ボタンに、「URL指定欄」、「リロード」ボタン、そしてページを表示する領域があります。 これから、この完成品を目指してプログラムを書いていきます。 WebViewを表示する JavaFXでは、「WebView」というクラスが用意されているので、まずは「Stage」にこれを貼り付けていきます。 [crayon-5c289197a669c754814945/] これで「WebView」を貼り付けることができましたが、実行してみると真っ白な画面が出てくるだけです。 これは、どのページを表示するかが指定されていないのが原因なので、ページのURLを指定してあげる必要があります。 そういった処理をするには、「WebEngine」というクラスを用います。 WebEngineでページを指定する [crayon-5c289197a66a5775467888/] 「WebEngine」のインスタンスを取得するには、先ほど作成した「WebView」のインスタンスから、「getEngine」という関数を使って取得し、ページの読み込みは「WebEngine」クラスの「load」関数を使い、引数にURLを指定します。 さぁそして、実行した結果はどうでしょうか。Googleの検索ページが表示されて、既にらしくなってきましたよね。 URLをブラウザから指定する 「WebEngine」クラスの「load」関数にURLを指定するだけでWebページが表示されました。 ということは、テキスト領域を用意して、入力された値を「load」関数の引数にすれば、ブラウザからURLを指定することが可能になりそうです。 というわけで、「TextField」クラスを使って実現してみます。 [crayon-5c289197a66a8844931298/] まずは上のバーを設置し、テキスト領域を貼り付けます。 そして「WebView」の位置も少し下げました。 これでテキスト領域を設置は完了しました。
1.普通の画像表示 画像を表示するには、「Image」クラスで画像を読み込み、「ImageView」クラスで表示をします。 今回使用する画像はこちらです。 フリー画像出典ですので、ご自由にお使いください! [crayon-5c2891967f031703941818/] 実行結果: しっかり画像が表示されていたら成功です。 2.切り取った画像を表示 画像を表示する際は「Image」クラスを使って表示しなくてはいけません。 しかし、「Image」クラスでは画像の切り取り作業はできないので、今回は「BufferedImage」クラスの機能を使って、画像を切り取っていきます。 そして出来上がった「BufferedImage」は、「SwingFXUtils」クラスの「toFXImage」関数を使って「Image」クラスに変換します。 [crayon-5c2891967f03c033571480/] 結果: 切り取られた画像が表示されていれば成功です。
【入門シリーズ】JavaゲームプログラミングPart16〜イベントの追加〜
前回 前回「コントロール」というものを追加し、「ボタン」や「ラベル」、「テキスト領域」を表示させました。 しかしこれらにはまだ「機能」が備わっていません。 前回作った「ボタン」を押した時に、なにか起こりましたか? 起こりませんでしたよね。 なので今回は、「コントロール」をいじったら何か起こるように「イベント」というものを追加していきたいと思います。 ボタンにイベントを追加する では、「ボタン」を押したらコンソールに「押されました!」と表示させてみます。 [crayon-5c29e33e631d8481129391/] イベントを追加するには、「setOnMouseClicked」関数を用います。 もちろん「マウスイベント」に限らず、「キーイベント」や「マウスドラッグイベント」などもあり、それぞれ「setOnKeyPressed」関数や、「setOnMouseDragged」関数などがあります。 そして引数になにやら見慣れない記述がありますね。 これは「ラムダ式」というものなのですが、今はこれを知る必要はありません。 ラベルにイベントを追加する 対象が「ラベル」になってもやることは変わりませんが、今度は押されたら「ラベル」の文字列を変更してみたいと思います。 [crayon-5c29e33e631e5416846885/] 押すと「Hello!!」が「Clicked!!」に変わりました。 こういった使い方もできるので、イベントの追加だけでかなり幅が広がったはずです。 次に「テキスト領域」と「ボタン」を使った、イベントの応用を紹介します。 応用 イベントを追加する対象はボタンです。 [crayon-5c29e33e631eb276015474/] 結果: ボタンを押すと、テキスト領域に書かれた文字をすべて「大文字」に変換してくれます。 他にも色々なことができるので、イベント処理を自分なりにカスタマイズしてみると面白いと思います! 次回→12月30日
【入門シリーズ】JavaゲームプログラミングPart15〜コントロールの追加〜
前回 前回までで、図形や画像を描画してきましたが、今回はJavaFXの「コントロール」という機能を使って、「ボタン」や「ラベル」を追加していきます。 ボタンの追加 まずはボタンを追加してみたいと思います。 [crayon-5c273ffc8323a932162293/] 「ボタン」は「Button」クラスというその名の通りのクラスがあるので、これを使います。 そして、X・Y座様は「setLayoutX・Y」関数を使って設定することができます。 ラベル(文字列)の追加 JavaFXでは「ラベル」を用いて文字列を表示することが出来ます。 X・Y座標の設定は「ボタン」と同様で、「setLayout」関数を使います。 [crayon-5c273ffc83247557191804/] 実行すると、小さく「Hello!!」と表示されます。 これだとかなり見辛いので、フォント・フォントサイズ・色を指定します。 フォントの設定等は「Font」クラスを使って行います。 [crayon-5c273ffc8324b231739345/] 「Font」クラスのコンストラクタには「フォント名」と「フォントサイズ」が入ります。 ちなみに「フォントサイズ」は「double」型という型なので、小数を入れることもできます。 そして色は「Label」クラスの「setTextFill」関数で設定することができます。 今回は「Arial Black」というフォントを使用しましたが、お好きなフォントがあればそれを使っても構いません。 フォントの種類がよくわからない方は、以下の表をみて、どんなフォントがあるのか確認してみてください。 もちろんこれだけではないのですが、書ききれないので5つだけ紹介しました。 テキスト領域 今度は「TextArea」というクラスを使って、「テキスト領域」を作っていきます。 プログラムの流れは今までと同じです。 [crayon-5c273ffc8324f681303013/]
【入門シリーズ】JavaゲームプログラミングPart14〜画像を描画〜
前回 前回図形を描画しましたが、今回は「画像」を描画していきます。 そしてそのために使う画像は「lena.jpg」です。 画像を描画する 画像を読み込むには、「Image」クラスをインスタンス化します。 「Image」クラスのコンストラクタの引数には、「ファイル名(正確にはファイルの相対パス)」が入ります。 そして描画は、図形描画でも使った「GraphicsContext」クラスの、「drawImage」関数を使います。 引数には「Image」型のオブジェクトと、X・Y座標です。 ちなみにX・Y座標は画像の左上座標です。 [crayon-5c249cdf5e461933840505/] 結果: たったこれだけなので、非常に簡単です。 切り取り画像の表示 次は、画像の1部分だけを描画してみたいと思います。 画像を切り取るには、「BufferedImage」クラスの「getSubimage」関数を使います。 少しややこしいプログラムになるので、まずはプログラムからさっと紹介します。 [crayon-5c249cdf5e469017194250/] まず、BufferedImageに読み込んだ画像の情報が入ります。 入れ方は、「ImageIO」クラスの「read」関数を使い、引数に「File」型を入れます。 今回は「File」クラスのコンストラクタの引数に「lena.jpg」と書きました。 次に、「BufferedImage」クラスの「getSubimage」関数で切り取り画像を生成し、「buffer」に代入します。 「getSubimage」の引数には「X・Y座標」と「幅・高さ」が入ります。 次に、「BufferedImage」を「Image」型に変換します。 ちなみになぜか変換が必要かというと、「drawImage」関数の1つめの引数が「Image」型だからです。 もし「BufferedImage」型の「buffer」を入れてしまうと、「型違い」が起きてエラーになってしまい、描画ができません。
【入門シリーズ】JavaゲームプログラミングPart13〜図形の描画〜
前回 JavaFXには様々な機能があります。 その中でも今回は、図形の描画を行なっていきたいと思います。 準備(Canvasの追加) まずは「Canvas」というものを「Scene」に追加します。 図形の描画は「Scene」にするのではなく、この「Canvas」で行います。 [crayon-5c249cdee0d16865360734/] これで「Canvas」を追加することができました。 これに、「GraphicsContext」を使って色々な図形を描画していきます。 色々な図形を描画 矩形 矩形は、四角形のことです。 矩形を描画するには、「GraphicsContext」クラスの「fillRect」という関数を使います。 [crayon-5c249cdee0d20621344505/] 結果: 三角形 三角形を描画する関数はないので、「fillPolygon」という多角形を描画する関数を使います。 「fillPolygon」関数の1個目の引数は「X座標の配列」、2個目は「Y座標の配列」、3個目に「頂点の数」を入れます。 [crayon-5c249cdee0d23947493046/] 結果: 正三角形 あまり重要ではないのですが、一応「正三角形」を作るための座標設定を紹介します。 [crayon-5c249cdee0d26499295493/] 結果: 円 円を描画するには、「fillArc」関数を用います。 「fillArc」関数の引数は、「X・Y座標」と「幅・高さ」と「開始角度・終止角度」と「円の種類」が入ります。 [crayon-5c249cdee0d2e828565164/] 結果: 開始角度は「0」で、終止角度は「360」にしました。 普通に円が描きたい場合は これでOKです。 では、試しに開始角度を「0」、終止角度を「270」にしてみます。 結果: このように、「1/4」が欠けました。 このことから、開始角度と終止角度の関係はこうなっていると言えます。 円(簡単なやり方)
【入門シリーズ】JavaゲームプログラミングPart12〜JavaFXを始める〜
前回 Part12から「JavaFX」というものを使っていきます。 今まではコマンド上で操作ができる「CUI(Character User Interface)」を使っていきましたが、「JavaFX」では「GUI(Graphic User Interface)」を使うことができます。 つまり、自分でウィンドウを作ったり、画像を表示したりできるということです。 そうすればゲームの幅は一気に広がります! というわけで、実際に「JavaFX」のプログラムを書いていきます。 ちなみに、Java11より前バージョンの方は、新しくダウンロードするものは一切ありません。 ただ、Java11をお使いの方は「JFX」が必要になるのでダウンロードする必要があります。 詳しくはこちらの記事をご覧ください。 ウィンドウを表示するプログラム(基本プログラム) まずは意味などを考えず、ウィンドウを表示するプログラムを書いて「GUI」を実感してみましょう。 [crayon-5c234b48f0f75960856193/] 少し長いですが、1字1句間違えないように入力てください。 そしたらコンパイルして実行します。 Java11より前のバージョンの方は以前と同じやり方ですが、 Java11をお使いの方は「オプション」を指定しないといけないので、詳しいことは先ほどの記事をご覧ください。 そうするとこのように白いウィンドウが現れます。 ウィンドウの位置・大きさ・色を変える 位置を設定 まずはウィンドウの位置を変えてみます。 [crayon-5c234b48f0f7e364726850/] 位置は「setX」関数と「setY」 関数で、それぞれX座標・Y座標を設定することができます。 大きさを設定 大きさは、「Scene」というものの大きさを設定して、それを「Stage」に反映させるやり方をとります。 [crayon-5c234b48f0f81286964144/] 少しプログラムが煩雑になってきました。 これを実行すると「幅:640、高さ:480」のウィンドウが表示されます。 色を設定
【シリーズ】JavaFXでかんたん「Webブラウザを作る」【全回リンク集】
全部で3回 「第1回目」 「第2回目」 「第3回目」
前回 CSSで装飾する JavaFXはCSSで装飾をすることが出来ます。 まずはCSSファイルを作ってしまいます。 今回は「form.css」としました。 [crayon-5c21f9c20f6f2570208365/] このように記述しました。 本来のCSSと少し記述内容が異なるのが特徴です。 JavaFXで用いるCSSでは、属性に「-fx」 を記述します。 それではこの「button」を、実際の「Button」に反映させていきます。 [crayon-5c21f9c20f6fa776290476/] 詳細はこの記事をご覧ください。 ではこの調子で装飾を増やしていきます。 [crayon-5c21f9c20f6fe012939135/] あらたに「pane」を作成しました。 上のバーが真っ白ではなんとなくダサいですからね。 もちろん私の勝手ですけど。。 で、「pane」を作ったので、プログラムの「AnchorPane」にもしっかりCSSの内容を反映させましょう。 [crayon-5c21f9c20f701576809761/] 次に、リロードボタンの「再」の字をなんとかしましょう。 「再 」ではどうしても見栄えが良くないので、画像に置き換えます。 今回使う画像は「icon.png」です。 [crayon-5c21f9c20f703789605358/] 新たに「buttonReload」を 作成しました。 「-fx-background-image」の後に、「url」関数を呼び出して、「icon.png」を読み込みます。 この時、「icon.png」はCSSファイルが置いてあるフォルダからの相対パスであることに注意してください。 そしたら、プログラムも変えていきます。 [crayon-5c21f9c20f705335064664/] これで画像に置き換えることができました。
【入門シリーズ】JavaゲームプログラミングPart11〜配列〜
前回 前回までのプログラムは、みやすくすると言いながらも、結果的に文章量が多くなってしまい、逆に見づらくなりました。 原因は2つあります。 1つはコンストラクタの使い方。 そして2つ目は、配列を使っていないことです。 まずは1つ目の方から解決していきます。 コンストラクタで初期化をする 前回まではこのように書いていました。 [crayon-5c21f9c503168418069886/] インスタンスの代入は仕方ないにしても、変数に値を入れる作業は全部で6行と、かなり無駄な気がします。 かといって変数に値を入れないのは解決策にはなりません。 そこで、コンストラクタの使い方に注目です。 前回はコンストラクタを宣言しませんでしたが、今回は宣言します。 そしてある文章を書き加えます。 [crayon-5c21f9c503172384947441/] 新たに書き足された「Goods()」は、コンストラクタです。 今まで関数を宣言する際は「型名」を記述しました。 「void」がそれに当たります。 しかしコンストラクタは「void」を記述していません。 これがコンストラクタの宣言の仕方なので覚えときましょう。 そしてコンストラクタに引数が2つあります。 「name」と「price」です。 この名前は任意なのですが、変数はわかりやすい名前が良いので「name」と「price」にしました。 さてコンストラクタの中身を見てください。 「this」というキーワードが登場しました。 この「this」は文字通り自分を指します。 この場合の自分とは、「Goods」クラスのことで、「this」は「Goods」クラスのインスタンスなんです。 そしてこの場合の使用用途は、引数の「name」「price」と、Goodsクラス内で宣言された「name」「price」の区別です。 これがなかったらどっちがどっちかわかりませんよね。 その上でもう一度コンストラクタの中身を見てみます。
前回 前回の問題点 前回戻るボタンを作成し、動きまで付け加えましたが問題点が見つかりました。 その問題点は、「正しく戻れていない」ということです。 では仮に、以下のようにサイトを巡ったとします。 google.com → oracle.com → youtube.com ・・・1 そして戻るボタンを押すとどうなるかといいますと、 google.com → oracle.com → youtube.com → oracle.com ・・・2 こうなります。 実はこのならび、「getEntries」関数で得られるリストの中身なんです。 今まではこれを利用して「最後から2番目」のページに戻るようにしてましたが、「2」になった後に戻るボタンを押して「最後から2番目」のページに戻るとどうなるでしょうか。 実はまた「youtube.com」に戻ってしまいます。 これではいつまでたっても「google.com」に戻れません。 では何が原因でしょうか。 それは、戻るボタンを押した時に「oracle.com」がリストにまた追加されていることです。 ですので、戻るボタンを押した時はリストに追加されないようにする必要があります。 しかし、「getEntries」関数でアクセスできる「ObservableList」型のリストを操作するのは少し面倒になります。 そこで、「ArrayList」を用いてURLのリストを作成し、その上で、戻るボタンを押した時だけリストに追加されないようにします。 ArrayListでURLを管理する [crayon-5c21f9c547994653736660/] 「WebEngine」の読み込みの進捗を知るには、「getLoadWorker」関数で「Worker」型のオブジェクトを取得し、「stateProperty」関数で現在の状態を表す「ReadOnlyObjectProperty」を取得し、イベントリスナーを追加します。 重要なのが、このイベントリスナーを追加できるということで、これはJavaFXの特徴なので知っておくと便利です。  
【入門シリーズ】JavaゲームプログラミングPart10〜クラス〜
前回 前回、道具の値段と名前の変数を作り、switch文を用いたわかりやすいプログラムを書きました。 今回は「クラス」というものを使って、よりわかりやすいプログラムを作っていきます。 道具クラスを作る まず、買う道具には「名前」と「値段」の情報がありました。 これらを1つのクラスとしてまとめます。 クラスの意味はひとまず置いておき、プログラムを示します。 [crayon-5c20a829bb332074004778/] このようなプログラムをファイルの先頭に記述しました。 まず、クラスを作る際は「class」キーワードを使用します。 そして、「class」の後にクラスの名前を記述します。 今回は道具のクラスを作るので、「Goods」という名前にしました。 そしてクラスの中身に道具の「名前」と「値段」の情報を入れるための「変数」を宣言しました。 それでは実際にこの「Goods」クラスを使ってみましょう。 クラスのインスタンス化する まずは「Goods」型の変数を宣言します。 この意味は後で説明します。 [crayon-5c20a829bb33f855598035/] 変数名がかぶるので、3つの変数をコメントアウトしました。 コメントアウトすることで、コメントとして認識されるので、プログラムに影響を及ぼさなくなります。 さて、今まで変数宣言をする際は、「int」と「String」しか使ってきませんでした。 しかし見てください。「Goods」がそのまま使用されています。 実は変数を宣言する際は、「変数の型」というものを明記します。 なので「int」で宣言された変数は「int型」、「String」で宣言された変数は「String型」と言います。 なので、この場合も同様に「Goods型」と言います。 ある変数の型で宣言された変数には、特定の値を代入することしかできません。 例えば「int型」なら「0」や「100」、「-2000」といった整数。 「String型」なら「"Hello"」や「"こんにちは"」といった文字列。
今回から、JavaFXで「Webブラウザ」を作っていきます! 「Webブラウザ」でも、JavaFXなら特別な知識はいらず、簡単に作れてしまいます。 まずは完成品を紹介します。 「戻る」「進む」ボタンに、「URL指定欄」、「リロード」ボタン、そしてページを表示する領域があります。 これから、この完成品を目指してプログラムを書いていきます。 WebViewを表示する JavaFXでは、「WebView」というクラスが用意されているので、まずは「Stage」にこれを貼り付けていきます。 [crayon-5c20a82a1f40f313084954/] これで「WebView」を貼り付けることができましたが、実行してみると真っ白な画面が出てくるだけです。 これは、どのページを表示するかが指定されていないのが原因なので、ページのURLを指定してあげる必要があります。 そういった処理をするには、「WebEngine」というクラスを用います。 WebEngineでページを指定する [crayon-5c20a82a1f41d501754987/] 「WebEngine」のインスタンスを取得するには、先ほど作成した「WebView」のインスタンスから、「getEngine」という関数を使って取得し、ページの読み込みは「WebEngine」クラスの「load」関数を使い、引数にURLを指定します。 さぁそして、実行した結果はどうでしょうか。Googleの検索ページが表示されて、既にらしくなってきましたよね。 URLをブラウザから指定する 「WebEngine」クラスの「load」関数にURLを指定するだけでWebページが表示されました。 ということは、テキスト領域を用意して、入力された値を「load」関数の引数にすれば、ブラウザからURLを指定することが可能になりそうです。 というわけで、「TextField」クラスを使って実現してみます。 [crayon-5c20a82a1f423703465757/] まずは上のバーを設置し、テキスト領域を貼り付けます。 そして「WebView」の位置も少し下げました。
【入門シリーズ】JavaゲームプログラミングPart9〜switch文〜
前回 前置き 前回までのプログラムで得られる結果をまず示します。 [crayon-5c1f56a1cb4e9279061095/] 「20000円」の防弾チョッキを2回買おうとしています。 1回目はちゃんと買うことができましたが、2回目は所持金が足りず買えませんでした。 ただ、買えなかった時になにもメッセージがないのは不親切ですよね。 なので「所持金が足りない!!」とメッセージを表示するようにします。 [crayon-5c1f56a1cb4f3185625826/] これだけでもかなり煩雑になりました。 このままだと可読性(読みやすさ)に欠けてしまうので、直す必要があります。 今回は煩雑なプログラムを直すために、「switch」文を使ってみたいと思います。 switch文で見やすくする [crayon-5c1f56a1cb4f9305208037/] これが 「switch」文です。 「switch」文の「()」の中身に、比較したい変数を入れます。 今回は「key」変数の値ごとに処理内容を分けたいので、「key」変数を入れます。 そして「case」の後に、「もしkey変数が〜だったら」の「〜」を入れて、「case」文の最後に「break;」と記述します。 「switch」文はとても使いやすく、見やすいので便利です。 とは言っても、実際まだ見やすいとは言えませんよね。 確かに長ったらしい条件文(if文)を書かずに済みましたが、まだ見づらいです。 なにが見づらくしているかというと、同じ処理の繰り返しをしているところです。 「case」文の中身で、「所持金が足りない!!」という言葉を何度も使っていますよね。 これは無駄なので、できれば書くのは1回だけにしたいです。 それから、「money」変数と道具の値段を比較して、買ったあとに「money」変数から道具の値段を引くという処理を3回も書いています。 「〜(道具の名前)を買った!」と表示する処理も3回書いてますよね。 なのでこれらを1回だけ書くように工夫してみます。
【入門シリーズ】JavaゲームプログラミングPart8〜while文〜
前回 前回の続きになります。 お金を減らす 前回キー入力処理を使って選択肢から買いたいものを選びました。 しかし、まだお金の処理が実装されていないので、実装します。 [crayon-5c1cb38e0c3f5876499777/] 盾と薬草と防弾チョッキの値段を変数にしました。 そして、「buyHerb」関数は使わないので、これは消しました。 結果 [crayon-5c1cb38e0c401937709396/] しかし、結果をみても実際にお金が減っているかどうかがわかりません。 なので、買い物をしたらもう1回ステータス表示を行う必要があります。 そして、ゲームなのに1回の買い物で終了しているのもおかしいです。 なので、ステータス表示と同時に、選択肢ももう1回表示してあげます。 while文 そこで「while」文というのを使います。 [crayon-5c1cb38e0c405500930364/] while文の中身には、ループしたい処理を記述します。そして本来は、while文の「()」の中身に条件式を書くのですが、今回は無限にループをさせたいので、単純に「true」とだけ書きました。 このやり方は無限ループを作る際に用いられるやり方なので、知っておくと便利です。 *注意 無限ループを終了するには「Ctrl+C」を押してください。「+」は同時押しの意味です。 もしくは、「コマンドプロンプト」または「ターミナル」を強制終了してください。 結果 [crayon-5c1cb38e0c409213293710/] 問題点 気づいた方もいるかもしれませんが、選択肢を選んでエンターを押した時に、何故か2回もステータス表示と選択肢表示が行われます。 原因はエンターキーです。 実はキー入力の際に、「2」と「エンター」の2つのキーを押しているんです。 なので、その分のループも回されて、2回も表示が行われたということです。 ということで、「エンター」を押した時はステータス表示をしないように、「if」文を書きます。 [crayon-5c1cb38e0c413478321781/]
【入門シリーズ】JavaゲームプログラミングPart7〜キー入力〜
前回 おさらいとしてまずは、前回までのプログラムで得られる結果を表示したいと思います。 [crayon-5c1b6209bdb41074156087/] リンのステータス表示と、リンの買い物(5回)を表示するようになっています。 ただ、これだとリンが買い物するものを選べません。 こちらは盾を買いたいのに、勝手に5個も薬草を買われたら、ゲームとしておかしいですよね。 ということで、こちらが買いたいものを選択できる仕組みを作っていきます。 選択肢の表示 では選択肢を表示してみます。 [crayon-5c1b6209bdb4b650918393/] 今から買いたいものを選択する仕組みを作るので、薬草を5個買うプログラムはコメントアウトしました。 今不要なプログラムを実行させない時に、このようなコメント化することをコメントアウトと言います。 結果 [crayon-5c1b6209bdb4e557673306/] これでキー入力をして、買うものを選択できるようにすればいい感じですね。 キー入力 キー入力をするには、「System.in.read」を記述します。 まずはプログラムを見てみましょう。 [crayon-5c1b6209bdb50511322496/] このように使用します。 そして下の「if」文ですが、これは「もしkey変数の値が 1 という文字だったら」という意味です。 文字列を表す際に、「"(ダブルクウォーテーション)」を使ったと思いますが、このように文字を表す場合は「'(シングルクウォーテーション)」を用います。 さて、この状態でコンパイルするとこうなります。 [crayon-5c1b6209bdb56857679358/] 「IOException」というエラーが出ます。 これを解決するには、「throws」キーワードを用います。 [crayon-5c1b6209bdb5a385148173/] このように記述することで、エラーは無くなります。 では実行してみます。 結果 [crayon-5c1b6209bdb5c519035074/] 盾を変えたら成功です。
【入門シリーズ】JavaゲームプログラミングPart6〜コメント〜
前回 前回関数の使い方を紹介しました。 なので、関数を使ってプログラムを少し見やすくしていきましょう。 プログラムを見やすくする [crayon-5c18bead970f5835267706/] これが前回のプログラムですが、マーカーが示すように、2つの処理に分けられるかと思います。 なので、「main」関数に書かずに別の関数に記述して、その関数を「main」で呼ぶようにします。 [crayon-5c18bead970fd802610433/] 今回は「showStatus」関数と「buyHerb」 関数に分けました。 これなら「main」関数で何をやっているのかが、検討つきやすくなりましたよね。 ただ、このままコンパイルしてもエラーになってしまいます。 それは何故かというと、「money」変数や「herb」変数は「main」関数で宣言されているので、「main」関数の中でしか使うことができないんです。 その解決法として、これらの変数をグローバル化するという方法があります。 グローバル変数 ではグローバル化してみます。 [crayon-5c18bead97100296582137/] これがグローバル化です。 つまり、「main」関数も「showStatus」関数も「buyHerb」関数も、すべての関数が変数を共有できる状態にするのがグローバル化です。 こういった変数はグローバル変数と言います。 その逆がローカル変数です。 コメントをつける 最後に、コメントをつけてみましょう。 今、複数の変数や関数を宣言・定義していますが、それらが何を示すのかがわかる必要があります。 特に、プログラムの規模が大きくなるにつれてその必要性は増します。 その時のために、コメントというのをつける必要があります。 [crayon-5c18bead97103215135530/] これがコメントです。 コメントは、「//」 の後に記述します。 「//」の後に書かれた処理は、プログラムだと認識されません。 自分の好きなコメントが書けます。
JavaFXでCSSを用いる時の「書き方」と「サンプル」を紹介
JavaFXでは、「CSS」ファイルを用いた装飾が可能です。 画像で例を示したいと思います。 Buttonの例 Labelの例 デフォルトの状態より、かなり印象が違うと思います。 今回は画像例の「Button」と「Label」を作りながら「CSS」の使い方を紹介します。 ソースコード まずはデフォルトの状態で、「Button」と「Label」を表示させます。 [crayon-5c176d1c18085332046949/] 結果 これがデフォルトの状態です。 では、「CSS」ファイルを作成していきます。 今回は「test.css」というファイル名にしました。 CSSを編集 [crayon-5c176d1c1808e556545398/] このような中身にしました。 中身の意味は以下の表を参考にしてください。 次に、このCSSファイルを読み込みます。 CSSを読み込む [crayon-5c176d1c18090418403262/] 「getShtylesheets」関数は「ObservableList」型を返します。 そして、先ほど作成した「CSS」ファイルを、リストに追加します。 各コンポーネント(ButtonやLabelなど)では、「getStyleClass」関数を呼び出して、自身を装飾するクラス(HTMLでいうclass属性の意味)を追加します。 これで読み込みが完了します。 では結果を表示してみましょう。 しっかり装飾されていれば成功です。
【入門シリーズ】JavaゲームプログラミングPart5〜関数〜
前回 前置き まず、前回のプログラム(ソースとも言います)を見てみましょう。 [crayon-5c161b72e71f0932818183/] このソースを見ると、やっていることは単純なのですが若干見辛い気がします。 では何が見づらくしているのでしょうか。 やはり「System.out.println」がどうしても長いですし、見辛い原因になりますよね。 どうにか別の単語で置き換えたいものです。 例えば「println」だけとか、「out」(出力という意味)とか、「put」(置くという意味)など。 でも実は置き換えることができるんです。 それを実現してくれるのが、今回のメインテーマである「関数」なんです。 関数を使って書き換える では、書き換える前に、関数を作ってみたいと思います。 [crayon-5c161b72e71f8556498904/] これが関数の書き方です。 まず、「static」と「void」というキーワードですが、この意味についてはひとまず置いておきましょう。 気にしたら負け的なあれです。 そして「void」と書いたあとに、任意の関数名を記述します。 今回は「out」にしました。 そして「()」カッコを二つ書いて、その中に「引数」というものを入れます。 今回「引数」として入れたのは「String」です。 つまり文字列ですね。 最後に、関数の中に処理内容を書きます。 そこで見て欲しいのが、「引数」の「str」が処理内容で使われていますよね。 「これがなんなのか」というのを頭に置きながら次に進んでください。 関数で書き換える では書き換えていきます。 ただ、書き換える箇所が多いので、まずは1個だけ。 書き換えるとこうなります。 [crayon-5c161b72e71fe226192494/] どうでしょうか。 かなり文字数が省けましたよね。 「System.out.println」から「out」です。 さて、なぜこれで上手くいくのでしょう。 それはさっき頭に置いておいたことがヒントになります。
【入門シリーズ】JavaゲームプログラミングPart4〜繰り返し〜
前回 前回までで、防弾チョッキの買い物処理を「条件分岐」を使って書き換えました。 これによって所持金の計算をプログラムが自動でやってくれるようになりました。 今回は防弾チョッキではなく、「薬草」を買ってみたいと思います。 薬草を3個買う 薬草を買うといっても、1個だけでは物足りません。常に複数個は持っておきたいアイテムですからね。 ということで、前回書いた処理を、とりあえず3回書いて実行しましょう。 [crayon-5c14c9b4d8552011331298/] 一気にプログラムが見づらくなってしまいましたが、実行結果はこうなります。 [crayon-5c14c9b4d855a371163773/] 「4000円」の薬草を3個買って、所持金「25000円」から「13000円」に減っています。 なので実行結果としては成功です。 ただ、今薬草を3個書いましたが、これを10個20個買うとなった時にまた10個も20個もプログラムを書くのでしょうか。 恐ろしく見辛いプログラムになってしまうのは目に見えています。 ではどうすればいいでしょうか。 そこで登場するのが「繰り返し処理」です。 繰り返し処理 繰り返し処理を行うには、「for」文というのを用います。 [crayon-5c14c9b4d855d612880570/] 少し言葉が難しいのでわかりづらいと思いますが、実際のプログラムを見てみましょう。 [crayon-5c14c9b4d855f641435748/] まず、「初期化式」のところに、「int i = 0」と記述します。 これはつまり、変数を定義しているということです。 そして、この変数「i」は、「for」文の中で宣言と定義がされているので、「for」文内でしか使われません。 そして条件式に、「if」文でも使うような条件文が出てきました。 これは「もし変数 i が3未満なら」という条件です。 そして更新式に、「i++」と書きましたが、これは「変数 i に 1 を足す」という意味です。 つまり、「for」文の中身が実行される度に変数「i」は加算されていき、
【入門シリーズ】JavaゲームプログラミングPart3〜条件分岐〜
前回 さて、前回「変数」の使い方を学びました。 これにより「リン」の所持金の処理が楽になりましたよね。 ただ、「リン」の所持金はたったの「5000円」。高い武具だと買えない可能性があります。 今回はそういった処理を行ってみたいと思います。 リンが高い買い物をしようとした時 例えば「リン」がアメリカ製の高い防弾チョッキを買おうとした時、所持金「5000円」では絶対に買えないですよね。 ですから防弾チョッキを買う時のプログラムはこうするべきです。 [crayon-5c13782a1e864809383251/] 所持金が減らない代わりに、「19800円」の防弾チョッキは買えませんでした。 ところが、これを見かねた「リン」の母が 「20000円」をくれました。 となると、「リン」の所持金は「25000円」になりますよね。 なので「money」変数の値を買えてみましょう。 [crayon-5c13782a1e86c454402558/] ところがどうでしょう。このプログラムを実行すると以下のようになります。 結果 [crayon-5c13782a1e871866307196/] 「リン」は「25000円」も持っているのに、「19800円」の防弾チョッキが買えないことになっています。 これはおかしいですよね。 そこで今回のメインテーマ、「条件分岐」です。 条件分岐を使う 「条件分岐」を使うには、「if」というキーワードを使います。 [crayon-5c13782a1e873624458809/] では、これを使ってプログラムを書き換えて見ます。 [crayon-5c13782a1e875982051304/] 「もし所持金が防弾チョッキの値段より低かったら」という条件式です。 この条件式に登場する「不等号記号」は、数学の「不等号記号」と全く同じ意味を持ちます。 この条件分岐のおかげで、おかしな文は表示されなくなりましたが、「リン」が防弾チョッキを買うという文はありません。 なので「もし所持金が防弾チョッキの値段以上だったら」という条件式を書いて、防弾チョッキを買う処理も追加してみましょう。 [crayon
ウィンドウ作成 Swingの場合 [crayon-5c13782a59259895469511/] FXの場合 [crayon-5c13782a59261658890724/] FXの「Stage」が、Swingでいうところの「JFrame」になっています。 背景色変更 Swingの場合 [crayon-5c13782a59263823020639/] FXの場合 [crayon-5c13782a59268989993309/] JavaFXでは、色を設定する時に「Fill」という単語をよく使うので、Swingになれていると突っかかりやすい部分です。 また、Swingの「Color」クラスとFXの「Color」クラスは異なるので、インポートするパッケージには注意しましょう。 キー操作 Swingの場合 [crayon-5c13782a5926a565698729/] FXの場合 [crayon-5c13782a5926b331924937/] Swingの「KeyEvent」クラスとFXの「KeyEvent」クラスは異なるのでインポートするパッケージには注意です。 また、Swingの「KeyEvent」クラスは「getKeyCode()」ですが、FXの場合は「getCode()」で、戻ってくる型も違います。 「getKeyCode()」は「int」ですが、「getCode()」は「KeyCode」です。ちなみに「KeyCode」は「enum」です。 マウス処理 Swingの場合 [crayon-5c13782a5926e456854404/] FXの場合 [crayon-5c13782a5926f722575355/] Swingの場合は、マウスの座標が「int」で返ってきますが、FXは「double」で返ってきます。 また、Swingの「MouseEvent」とFXの「MouseEvent」は異なるので、インポートするパッケージには注意です。
【入門シリーズ】JavaゲームプログラミングPart2〜変数〜
前回 さて、前回「はろー!ワールド!」と表示させるプログラムを作りましたが、「はろー!ワールド!」と表示するだけではゲームプログラミングのかけらもありません。 なのでせめて別の文字列を表示してみましょう。 ゲームらしくする [crayon-5c10d4d2df58f707069316/] プレイヤー「リン」の所持金とプレイ時間を表示するプログラムです。 これで少しゲームらしくなった気がします。 実際に実行するとこうなります。 [crayon-5c10d4d2df59a128204421/] では、このプレイヤー「リン」に買い物をさせてみましょう。 [crayon-5c10d4d2df59d454909263/] 結果 [crayon-5c10d4d2df5a0394191280/] リンは金属バット(100円)を購入し、所持金が「500円」から「400円」に減りました。 しかしよく考えてみると、リンの所持金「500円」というのは安すぎる気がします。小学生のお小遣いで冒険させるのは少し酷です。 なので所持金を増やしてあげましょう。 [crayon-5c10d4d2df5a3483238022/] 結果 [crayon-5c10d4d2df5a5710325924/] 「5000 円」ならなんとかいけそうですね!(それでも少ない気がしますが) ただ、ここで少し不可解な点が出てきました。 所持金「5000円」のはずが、「100円」の金属バットを買っただけで残額「400円」になっています。 ということは、該当の文も修正してあげる必要があります。 [crayon-5c10d4d2df5a9110857454/] 結果 [crayon-5c10d4d2df5ab084875249/] これで正しい所持金表示になりました。 ただ面倒くさいですよね。 これから「リン」は冒険をするにあたって、たくさんの買い物をするわけですが、その際に一々文章をあれこれ訂正していてはまともにプログラムが組めません。 そこで今回のメインテーマである「変数」を使います。
JavaFXをOpenJDK 11で動かしたい!!そのやり方とは・・
Java 11から有償化されるということで、OracleJDK 11ではなく、OpenJDK 11を使うという方は非常に多いかと思われます。 そして今までJavaFXを使われてきた方は、Java 11からJavaFXがなくなると聞いて「えっ!?」と思われたかもしれません。 そうなんです。実はJava 11の中にJavaFXという機能は無くて、代わりにJFXというのが用意されています。 もっと具体的に言えば、今までのJavaFXの機能をJFXに移したということですね。 なので、Java 11で書いたプログラムでJavaFXを使うには、JFXの中にある「モジュール」というのを指定して、コンパイルと実行を行わなければいけません。なので今回は、その「モジュール」の指定のやり方について説明したいと思います。 javafx-sdk-11.0.1をディレクトリ内に置く まずは「javafx-sdk-11.0.1」フォルダを、自身が作成したJavaファイルがあるフォルダ内に置きます。 ちなみに、「javafx-sdk-11.0.1」は、JFXのバージョンによって異なる可能性があるので、フォルダ名が必ず一致することはありませんのでご注意ください。 そして今回使用するテストプログラムはこちらです。 [crayon-5c0e316a55097420887168/] ウィンドウを表示するプログラムです。もちろん、ご自身であらかじめ作ってある場合は、そちらを使っても構いません。 コンパイルと実行をする ではコンパイルをしていきます。 まず、いつもの通りにコンパイルをしてみます。 [crayon-5c0e316a550a2539603079/] なにやらたくさんのエラーが出てきました。 これらのエラーの中で、もっとも注目してほしいのが、 「Main.java:1: エラー: パッケージjavafx.applicationは存在しません」というエラーです。 つまり冒頭で述べた通り、JavaFXのプログラムはJFXの移されたので、そのままのやり方だと「javafx.application」というパッケージは見つからないのです。 なので、「モジュール」というのを指定しなければありません。ちなみにモジュールというのは、Java 9から導入された機能です。
JavaでCSVを読み込むためのソースコードを作りましたので、コピペして確認してみてください。 今回使用する「CSV」データは、「test.csv」です。 [crayon-5c0b8e5774716879712389/] ソースコードの流れ InputStreamReaderのオブジェクトを作る 「FileInputStream」クラスでも読み込みは可能なのですが、今回はエンコーディングも指定できたら便利なので「InputStreamReader」を使うことにしました。 変数宣言 今回は「ArrayList」を使って、読み込んだ値を保存していきます。 ただ「InputStreamReader」の「read」関数は、「int」型返すことに加えて一文字ずつの読み込みとなるので、一時保存用の変数を作っ てあとでそれを「String」型に変換するというやり方にします。 最後に、ファイルの終わりに達したら「eof」変数を「TRUE」にして、読み込みを終了します。 読み込みループ 一時変数用の変数「put」と「putc」に、一文字ずつ保存していきます。 「CSV」はデータがカンマと改行で区切られているため、もし「,」と「改行」が代入されたら「for」ループを抜け、代入された「,」と「改行」は「null(空)」にします。 そしたら読み込んだデータを「String」に変換するので「String」クラスの「valueOf」関数を使って「char配列」から「String」に変換 します。 ちなみに「int配列」から「String」への変換はできません。 最後に、もしファイルの終わりに達したら「eof」を「TRUE」にし、読み込みを終了するのですが、ファイルの終わり達する前に一時保存されているデータがあるかもしれないのですぐに抜けることはせず、「eof」を「TRUE」にする処理だけ行います。 そして、実際に「list」にデータを保存してから「eof」が「TRUE」であるかどうかの判定を行った上で読み込みを終了させます。
【Java】コンソールに入力された「値」や「文字列」を読み込む方法【4パターン】
コマンドプロンプト、もしくはターミナル上で入力された値や文字列を読み込む方法を「4パターン」紹介します。 通常の読み込み(キー配列番号の読み込み) [crayon-5c07995179835232814382/] 結果: [crayon-5c0799517983c692547291/] あくまでも、押されたキーの情報が読み込まれるので、「0」キーは「48」となります。 こういった数字は「ASCIIコード」と言います。 数字の読み込み(1桁) [crayon-5c0799517983e078885056/] 結果: [crayon-5c07995179840085634655/] 一度受け取った「ASCIIコード」を、「String」型に変換することで「0」キーが「0」になります。 文字列の読み込み [crayon-5c07995179842821566651/] 結果: [crayon-5c07995179844433877681/] 文字列を読み込む場合は、改行までの全ての文字を読み込む必要があるので、「for」ループで読み込みます。 今回は64文字までに設定していますが、本来はよくないやり方ですので注意を。 「ArrayList」を使ってメモリを喰わない方法をとるのがベストですが、今回はわかりやすい方が良いと思ったので。 ただ、このプログラムでは日本語が読み取れません。「こんにちは」と入力しても文字化けしてしまいます。 それは「エンコーディング」の設定がなされていないからです。 なので日本語も読み取れるやり方も紹介します。 文字列の読み込み(日本語も読み込む) [crayon-5c07995179846296000916/] 結果: [crayon-5c07995179848770881180/] 「InputStream」クラスでは、「エンコーディング」を設定できないので、「InputStreamReader」クラスを使用します。 もちろん「read」関数も、「InputStreamReader」クラスの「read」関数を使用します。
【Java】Listを使った時の「UnsupportedOperationException」の原因と解決法
Listを使った時の「UnsupportedOperationException」の原因と解決法を紹介します。 まずは「UnsupportedOperationException」が出るプログラムの例を示します。 [crayon-5c079951acd34797360213/] このプログラムを実行すると、 [crayon-5c079951acd3e109977603/] このように出力されます。 原因 原因は、「インターフェース」の関数を呼び出したことです。 実は「List」クラスは「インターフェース」として定義されていて、「List」クラス内の関数は宣言だけで、定義はされていません。 なので「インターフェース」の関数は呼び出すことはできません。 これは「インターフェース」の仕様なので、覚えておきましょう。 解決 原因は「インターフェース」の関数を呼び出したことにありました。 なので、「インターフェース」ではない所から呼び出します。 [crayon-5c079951acd43880184121/] 「list」変数に、「ArrayList」クラスのオブジェクトを代入します。 そうすることで「list」変数が「実体化」 するので、「ArrayList」クラスで定義された「add」関数が呼び出せるようになります。 逆に、もし「実体化」されていないと、「add」関数が定義されているという保証がないことになります。 インターフェース型の変数を使用する場合は、「実体化」されているかどうかに注意を払って使うと、エラーが防げると思います。
Javaで作ったターミナルSTGを紹介!!【コマンドプロンプトでも動きます】
今回、ターミナル上(コマンドプロンプト上でも)でプレイできるSTGを作りましたので、紹介していきたいと思います! 少しカクカクしてしまうのはご愛嬌。 ルール ・プレイヤーの移動は「↑」「→」「↓」「←」キーで行います。 ・弾丸の発射は「Z」キーで行います。 ・プレイヤーが敵に当たるか、HPが0を下回ったらゲームオーバーです。 ・HPの増減は、プレイヤーが敵を倒したら「+10」で、敵が倒されずに下まで降りてきたら「ー8」になります。 ・スコアは時間経過とともに増えていきます。 ・プレイヤーはなるべく長く生き残って、スコアを増やしていきます。 プレイされたい方は是非こちらのファイルをダウンロードしてください! [crayon-5c0799539c45f009303909/] このコマンドを実行するとプレイができます。 何点取れたかを是非コメントで知らせてください!
「ブログリーダー」を活用して、ITechProgramさんをフォローしませんか?
指定した記事をブログ村の中で非表示にしたり、削除したりできます。非表示の場合は、再度表示に戻せます。
画像が取得されていないときは、ブログ側にOGP(メタタグ)の設置が必要になる場合があります。