Code Monkey home page Code Monkey logo

gunpey's Introduction

Gunpey

概要

つなげて消すのがグンペイだ! で有名なGunpey をJava のSwing を用いて再現してみました。 上下にパネルを入れ替えてラインを左から右につなげてライン消します。 パネルが最上部より出るか時間切れになるかでゲームオーバーです。 ゲームオーバーまでのスコアを競ってください。 一度に消すパネルの量が多ければ多いほど点数が高くなります。 詳細は参考のセクションをご参照ください。

Playing Image

プレイ方法

Java のインストール

こちらをご参照ください。 端的にいえばここからダウンロードできます。

Ubuntu などapt を使用できる場合にはターミナルでインストールすると良いでしょう。

$ sudo apt update
$ sudo apt install default-jdk -y

実行

Gunpey.jar をダブルクリック、もしくはターミナルで

$ java -jar Gunpey.jar

とすることで実行できます。

プログラムの改変とコンパイル

コンパイル方法

コンパイルするためにはJava の種類をjre ではなくjdk でインストールしてください。 お好きなエディタで編集してしてから以下で実行。

$ javac -encoding UTF-8 *.java
$ java Gunpey

jar ファイルを作成したい場合には

$ jar cfe Gunpey.jar Gunpey *.class LICENSE

音源の追加

sounds ディレクトリを作成して以下のファイルを追加してください。

  • bgm.mid : ゲームBGM
  • swap.wav : パネル入れ替え時の音
  • connect.wav : ライン結合時の音
  • vanish.wav : ライン消去時の音
  • panelup.wav : パネルせり上がり時の音

ゲームBGM はマルチプラットフォームでテストできておりません。 wav に関しては魔王魂様の効果音 を使わせていただきテストしました。 .gitignore で設定してGithub 上にはアップロードを控えさせていただいております。二次配布可能な音源などありましたら教えていただけますと幸いです。

プログラムの中身について

クラスや変数のイメージは下図の通りです。

Class Structure

時間の管理

タイマを管理するクラス(TimeFlag.java)を作って大量生産しました。 設定時間が経過するとTimeFlag のprivate変数であるflagがtrueになります。

  • gameTimer : ゲーム自体の制限時間のタイマ
  • vanishTimer : パネルがつながれてから消えるまでのタイマ
  • swapTimer : パネルの入れ替え時間のタイマ
  • panelupTimer : 新しい列が出るまでの時間のタイマ

パネル集合の種類と表示の仕方

以下の3種類をパネルの配列として用意しました。

  • normalPanel : 通常のパネル
  • vanishPanel : 消滅中のパネル
  • floatingPanel : 消滅中のパネルの上にあるパネル

normalPanel を緑色で表示、vanishPanel を黄色で表示、floatingPanel は緑色で位置をずらして表示します。

消える判定のためのフラグ

ラインがつながっているかどうかを判定するために、

  • panelFlag : パネルの状態
  • gridFlag : パネルの頂点の状態

を用意して再帰関数で処理しています。 左端から右へ伝搬させる処理と右端から左へ伝搬させる処理を両方行い、折り返して接続されているようなラインに対しても正確に判定します。

スコアの管理

RankingData クラスを作成して、ranking/score.txt を読み書きしています。 ゲームオーバーになると、そのゲームでのスコアを追加、降順にソートされて格納し直します。ハイスコアを取り出したい場合にはソート済みの先頭のスコアを取り出してくる仕組みです。

既知の課題

プログラムが複雑になりそうでしたので以下を放置してます。

  • Help のURL リンクの対応。
  • 音出力にApplet を用いている(現在は非推奨)。

参考

ライセンス等

ソースコードはMIT License としました。 画像はPixabay で検索したものを使用させていただいております。 アイコンは公式を模倣した私の自作です。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.