テトリスは世界中で人気のゲームであり、初期から現在に至るまでパソコン、携帯電話、携帯ゲーム機で親しまれており、シンプルなゲームルールのシンプルな古典的なゲームですが、面白さに欠けることはありません。学びやすく、応用可能であり、範囲は広く、よく知られています。テトリス ゲームのシンプルな基本ルールは、小さな正方形で構成された 7 種類の通常のグラフィックが画面から次々と落ちてきて、落ちたときに完全な横棒を作るように移動して消え、得点を獲得してゲームが終了するというものです。レベルが上がり、グラフィックが画面上部まで溜まるとゲーム終了となります。
テトリスはもともと、1984 年にロシアのアレクセイ パジトノフによって開発されたカジュアル ゲームでした。かつては比類のない商業的価値を生み出し、一世代のカジュアル ゲームの開発と産業チェーンに影響を与えました。情報化時代と科学技術の発展と変化に伴い、コンピューターはあらゆる人々の生活に普及しており、忙しい仕事生活の中で、この種のカジュアルなゲームは人々にリラックスをもたらします。
この論文は、古典的な伝統的なテトリスの実装の基本的なアイデアといくつかの基本的なゲーム ルールを詳細に説明および分析し、これに基づいてテトリスの革新的かつ創造的なモデルをさらに開発し、古典的なゲームに基づいた付随ゲームを開発します。レベルが上がると難易度が上がり、ブロックの色の変化を制御できるモジュールが独創的に開発され、ゲームサウンドや音楽モジュールが追加されます。この文書では、上記の機能の具体的な実装プロセス、詳細な説明、およびいくつかのソース コードを提供します。
本稿では、テトリスゲームの開発と開発の歴史、このゲームを開発する意義、開発環境、ソフトウェア工学に基づいたソフトウェア開発とJavaプログラミングの関連知識、プログラムの要件分析、概要設計、詳細設計と実装、デバッグ 一連の動作を説明します。
このプログラム設計は Microsoft Windows 7 システムに基づいており、開発言語として Java を使用し、ゲーム設計と実装は Eclipse 開発プラットフォーム上で行われます。
キーワード: ゲーム デザイン、テトリス、ソフトウェア エンジニアリング、Java、Eclipse。
目次
Java ベースのテトリス ゲームの設計と実装................................... I
まとめ................................................. ..................... 私
Java ゲーム「テトリス」の設計と実装に基づいて...................................... II
抽象的な................................................. ......................Ⅱ
1.2 開発技術の概要................................................................................ …………2
1.3.1 国内外の研究状況................................................................................ ....2
1.3.2 文献レビュー................................................................................ …………3
2.4 システムプラットフォーム環境: ................................................................ ……………………6
2.4.1 ハードウェア プラットフォーム:................................................................ ………………6
2.4.2 ソフトウェア プラットフォーム:................................................................ ………………6
3.1 実現可能性分析................................................................... 。 ........... 7
3.2.2 非機能要件.................................................................................. ...9
3.2.3 インターフェース制御................................................................ …………9
4 システムの概要設計 ................................................................................... ……11
4.1 システムの機能設計................................................................................ …………11
5.2.1 背景キャンバスモジュールの設計................................................................ ……16
5.2.2 ブロックモジュール設計のプレビュー................................................................ ......19
5.3.1 メニューバーモジュールの設計................................................................ ..... .. 25
5.3.2 コントロールパネルのボタンデザイン................................................................ ……26
6.1.1 テストの原則................................................................ …………29
6.1.2 試験方法................................................................ …………30
結論は................................................ ................................. 36
テトリスの心理学................................................................... 40
テトリスの心理的効果................................................................................. 43
1はじめに
はじめにでは、プログラム開発の背景、開発の意義、必要な開発技術、国内外のテトリスゲームの研究状況などを簡単に説明します。
1.1プログラム開発の背景と意義
テトリス ゲームは、世界中で人気のある不朽のゲームであり、コンピュータ、携帯電話、TV ゲーム機、携帯ゲーム機などの一連の製品でプレイできるカジュアル ゲームです。これは、あらゆるゲームにとって比類のない感覚と数え切れないほどの商業的価値をもたらし、ゲームとソフトウェア開発の歴史において重要な出来事です。
1984 年 6 月のある日、ロシアのモスクワの数学者アレックス パジトノフは、勤務先のモスクワ科学コンピュータ センターでジグソーパズルをプレイした後、突然このゲームをデザインするインスピレーションを得ました。当初、彼はエレクトロニカ 60 でのみ開発していました (テトリスは、ヴァディム ゲラシモフを介して PC に移植され、モスクワのコンピューター コミュニティに広く普及しました。いつも。テトリスのシンプルな基本ゲームルールは、小さな正方形を配置する標準的な仮想ゲームフィールド上にあり、基本単位は小さな正方形であり、4つの小さな正方形と7つの異なる正則グラフィックス(フィールド形状、Z形状、逆Z形状、 7の字、逆7の字、T字、ロングバー)プレーヤーの上キー、左キー、左キーの操作によりブロックを90度、180度、270度、360度回転させる合計28種類のグラフィックスキームがあります。右キー、下キー。落下を加速して位置を調整するには、ブロックは画面の下部で 1 つ以上の完全なブロックに形成され、その後、新たに落下するブロックのためのスペースを確保するために削除されます。横棒を消すとプレイヤーのレベルが1段階上がり、一定のレベルに達すると時間の経過とともに落下速度が速くなり、消えていないブロックが画面上部に到達するとゲームオーバーとなります。
コンピューター技術の継続的な更新と開発に伴い、テトリス ゲームにはさまざまなモードが常に導入されており、ゲーム自体は単純なものも複雑なものもあり、ゲーム プレイヤーを十分に訓練できるため、誰でもプレイできるさまざまなバージョンが存在します。論理的思考力もプレイヤーに無限のゲームの楽しさをもたらすため、大多数のプレイヤーに深く愛されています。ゲーム ソフトウェアの開発というと、手の届かない、魔法のようなものと感じる人がほとんどですが、開発手法やツールの継続的な革新により、小規模なゲームを自分で開発することも不可能ではありません。テトリス ゲームはゲームの歴史の中で比類のない地位を占めています。ゲーム インターフェイスはシンプルで、コードはそれほど複雑ではありません。また、テトリス ゲームを実装するためのアルゴリズムや設計はインターネット上に数多く存在し、難易度は特に高くありません高い。
テトリスはシンプルなパズル ゲームです。そのユニークで簡潔なインターフェイスと非常に楽しいプレイ モードにより、多くのゲーム愛好家が夢中になって抜け出せなくなり、あらゆる年齢層に適しています。今日のペースの速い生活の中で、学生や社会人に対する勉強や仕事のプレッシャーも増大しており、全員の仕事がますます重くなり、休息の自由時間がますます少なくなっているため、人々は簡単なことをより緊急に必要としています。誰でも楽しめる時間を節約できるカジュアルゲーム。テトリスはシンプルなパズルでありながら面白いカジュアルゲームであることは間違いなく、コンピュータ、携帯電話、タブレット、TV ゲーム機、携帯ゲーム機、電子辞書、MP4 などの一連のポータブル デバイスに移植できます。デバイス。この研究プロジェクトは技術開発の面でも社会的意義の面でも非常に価値があり、ゲーム開発という私にとっては大胆な試みです。
1.2開発技術の概要
ソフトウェア エンジニアリングは、効果的で実用的かつ高品質のソフトウェアを構築および維持するためのエンジニアリング手法の使用を研究する分野です。設計には、プログラミング言語、データベース、アルゴリズム、ソフトウェア開発ツール、システム プラットフォーム、デザイン パターン、その他多くの側面が含まれます。現代社会では、ソフトウェアは電子メール、組み込みシステム、人間とコンピューターの対話インターフェイス、オフィススイート、オペレーティングシステム、エディター、データベース、ゲームなどの多くの典型的な側面で使用されていると同時に、今日の社会のさまざまな産業でも使用されています。産業、農業、銀行、航空、政府部門などを含むコンピュータ ソフトウェア アプリケーションであり、経済的および社会的発展を効果的に促進し、人々の仕事効率と生活効率を向上させることができます。
テトリス ゲームの開発コードはそれほど複雑ではありませんが、この文書は Java プログラミング言語に基づいており、Java 言語で一般的に使用される Swing コンポーネントを使用しています。Swing は、Java のグラフィカル ユーザー インターフェイス (GUI) ツールキットです。Java の基本クラスの一部です。テキスト ボックス、分離されたペイン、ボタン、テーブル、その他の GUI デバイスが含まれています。純粋な Java で書かれています。開発者は、小さなツールキットを使用できます。 Swing のさまざまな柔軟で豊富な機能とモジュール式コンポーネントへのコードを大量に記述して、美しく優雅なユーザー インターフェイスを作成できます。Java Swing コンポーネントには、次の一般的に使用されるクラスが含まれています: JFrame は、最大化、最小化、閉じるなどの基本的な操作を実行できる画面上のグラフィック オブジェクトです。これは Java GUI プログラミングの基本的な考え方であり、JPanel を使用できます。ネスト用. フォーム内の同じ論理機能を持つコンポーネントを結合して JFrame フォームに追加できます. Swing のパネル コンテナー クラスです。JLabel オブジェクトはテキスト、画像、またはその両方を表示するために使用され、そのプロパティの一部を設定できます。JTextField は 1 行のテキストを編集するために使用される実行コンポーネントであり、JButton はボタンを作成するために使用されるクラスです。さらに、Java の Swing コンポーネントには、美しいグラフィカル インターフェイスを簡単に作成できる多くの関数クラスも含まれています。
1.3テトリスゲームの研究状況
1.3.1国内外の研究状況
21世紀に入ってからコンピューターの発展が続き、eスポーツ産業も発展段階に入り、ドラマや映画と同様にゲームソフトの開発も盛んになってきました。ますます注目を集める新しいタイプのテクノロジー、総合アート製品。一般的な Web 開発やソフトウェア開発とは異なり、コンピュータ ゲーム ソフトウェアの開発は、デザイナーや開発者が専門的なプログラミング スキルやソフトウェア エンジニアリング手法を習得する必要があるだけでなく、効果を発揮するにはゲーム分野の専門知識や専門的なゲーム開発の知識も必要です。 . ゲームの鮮やかなインターフェイス、サウンドエフェクト処理を開発および実装し、プレイヤーとの完璧なインタラクションを実現します。
旧ソ連の科学者アレックス・パジトノフが教育用ソフトとして開発した「テトリス」は、その後さまざまなゲーム会社にライセンス供与されるようになり、その後、主要なプラットフォームで利用できるようになり、さまざまなバージョンが登場しました。
ゲームボーイ版テトリスは日本で424万本を販売し、ゲームボーイゲーム史上最も人気のあるゲームとなった。湾岸戦争中、テトリスというゲームは前線のアメリカ軍にとって最適な暇つぶしゲームの 1 つとなりました。
テトリスの基本原理はほとんどのプログラマーにとって比較的単純であり、テトリスは数学的で動的であり、よく知られています。ゲームプログラミングの練習科目としてもよく使われます。
1.3.2文献レビュー
資料[1]と[2]はゼロベースの説明を目的としており、基礎知識→コア技術→高度な応用→実際のプロジェクト実践という説明モードを用いて、Javaのさまざまな技術と実践を説明するために、例を使用して深く学ぶことができます。シンプルでわかりやすい用語、スキル。Java言語を使ったプログラム開発で身につけるべき技術を初心者の視点から、わかりやすい言語と多彩なサンプルを通して詳しく紹介します。Eclipse 開発ツール、Java 言語の基本、クラスとオブジェクト、パッケージ化クラス、数値処理クラス、インターフェイス、継承とポリモーフィズム、クラスの高度な機能、例外処理、Swing プログラミング、コレクション クラス、I/O 入出力、リフレクション、列挙型とジェネリック、マルチスレッド、ネットワーク通信、データベース操作、Swing テーブル コンポーネント、Swing ツリー コンポーネント、その他の高度な Swing コンポーネント、高度なレイアウト マネージャー、高度なイベント処理、AWT 描画とオーディオ再生など。この 2 つのドキュメントは、豊富なサンプルと詳細な内容で「十分な」Java 言語と技術をカバーしており、初心者や Java の基礎をある程度持っている学生にとって、学生の開発技術とスキルを迅速に向上させることができます。このプロジェクトの設計にあたり、グラフィカル インターフェイスの設計、ユーザー インターフェイスのコンポーネントと設計、イベント処理とウィンドウ構築コンポーネントに関する内容、および Swing とその一連のコンポーネントの基礎知識はすべてこれら 2 つのドキュメントを参照しました。たくさんのインスピレーションを与えてくれました。助けてください。
資料[3]では主に2D描画、ゲームアニメーション制作、ネットワークプログラム基盤、強化されたゲームインターフェース、人工知能と2.5Dゲーム、マインスイーパ、迷路、テトリスなどのゲーム例、衝突、パーティクルシステム、5次元三次元座標などについて解説しています。描画アルゴリズム、マルチプレイヤー オンライン ゲームの制作。読者がより便利に使用できるように、一連のアルゴリズム公式を集めました。段階的なアプローチでゲーム設計プロセスを徐々に分析し、読者をゲーム開発段階で遭遇する可能性のある問題の解決に導き、Java ゲーム制作における実際の経験を要約します。ゲームの原理、アニメーションの実装、サウンドエフェクト処理、マウスとキーボードのイベント処理、人工知能、およびこのコースの設計におけるその他の知識はすべて、このドキュメントを参照しています。
文献 [4] では、古典的なコンピュータ ゲームであるテトリスのプログラム原理と実装技術が論じられ、プログラムの機能要件、データ構造、グラフィックスの回転、座標変換などの主要な技術がソフトウェア工学の観点から説明されています。このドキュメントを通じて、私はテトリス ゲーム開発の専門分野についてさらに学びました。
文書 [5] は、Java を使用して問題を考え、解決する方法を説明することに重点を置いた高度な本です。このドキュメントは、コース設計時に Java プログラミングのアイデアとテクニックに関して非常に役立ちました。
2関連技術
2.1 JAVAの概要
Java は、Sun Microsystems が発売した Java オブジェクト指向プログラミング言語および Java プラットフォームの一般名です。クロスプラットフォームのアプリケーション ソフトウェアを作成できるオブジェクト指向プログラミング言語です。Java テクノロジーは、優れた汎用性、効率性、クロスプラットフォーム性、およびセキュリティーを備えており、PC、データセンター、ゲーム機、科学用スーパーコンピューター、携帯電話、インターネットなどで広く使用されており、世界最大の開発者の専門コミュニティもあります。
過去 20 年にわたって、 Java言語は人間のコンピュータの歴史の中で最も影響力のあるプログラミング言語の 1 つに発展し、ある意味ではプログラミング言語の範囲を超え、開発プラットフォームや言語の役割を果たしています。開発プラットフォーム、正規モード。さらに、Java は一種の信念となっており、Java 言語が提唱するオープンソース、自由、その他の精神は、世界中の無数の優れたプログラマーを魅了してきました。実際、人類の有史以来、これほど多くの優れたプログラマーが使用できるプログラミング言語は存在しませんでした。また、これほど多くのオープンソース フレームワークを派生できるプログラミング言語もありませんでした。
Java 言語は、C 言語と C++ 言語のさまざまな利点を取り入れ、C++ 言語の多重継承やポインタなどの理解しにくい概念を放棄した、非常に純粋なオブジェクト指向プログラミング言語です。 Java 言語は強力であり、シンプルさと使いやすさが非常に優れた特徴です。静的オブジェクト指向プログラミング言語の代表である Java 言語は、オブジェクト指向理論を見事に体現しており、プログラマーがより洗練された考え方でより複雑なプログラミング開発を行うことができます。
それだけでなく、Java 言語の関連する Java EE 仕様には、今日最も一般的なソフトウェア エンジニアリングの概念が含まれており、さまざまな高度な設計アイデアを Java EE 仕様、プラットフォーム、および関連フレームワークに実装できます。Java 言語関連の知識のさまざまな側面に習熟することを学習することは、単にプログラミング言語を学習するのではなく、ソフトウェア開発の関連知識を体系的に学習することとある程度同じです。
現在、ほとんどの銀行、電気通信、証券、電子商取引、電子政府、およびその他のシステムは、Java EE プラットフォームを使用して構築されているか、徐々に Java EE プラットフォームに移行しています。Java EE 仕様は現在最も成熟しています。は、最も広く使用されているエンタープライズレベルのアプリケーション開発仕様でもあります。
2.2Swing コンポーネントの概要
Swing API は、JAVA ベースのフロントエンド/GUI アプリケーションを作成するための GUI コンポーネントの拡張可能なセットです。これは AWT API の上に構築されており、その中のほぼすべてのコントロールが AWT コントロールに対応しているため、AWT API の代替として機能します。Swing コンポーネントは、次のガイドラインを満たすために、モデル-ビュー-コントローラー アーキテクチャに従っています。複数の外観とスタイルをサポートするには、単一の API で十分です。API はモック駆動であるため、最上位の API にはデータが必要ありません。API は Java Bean パターンを使用するため、ビルダー ツールと IDE はより優れた機能を提供できます。開発者がそれを使用できるようにサービスを提供します。
Swing APIアーキテクチャは、次のように大まかにベースになった MVC アーキテクチャに従います。モデルはコンポーネントのデータを表します。ビューは、コンポーネントのデータを視覚的に表現したものです。コントローラーはビュー上でユーザー入力を受け入れ、変更をコンポーネントのデータに反映します。Swing コンポーネントはモデルを別個の要素として扱い、ビューとコントローラーの部分をユーザー インターフェイス要素に結合します。このアプローチを使用すると、Swing はプラグイン可能なルック アンド フィール アーキテクチャを備えています。Swing の主な機能は次のとおりです。
軽量 - Swing API コントロールは通常、基礎となるオペレーティング システム呼び出しを使用するのではなく、純粋な JAVA コードを使用してレンダリングされるため、Swing コンポーネントはネイティブ オペレーティング システム API から独立しています。
豊富なコントロール - Swing は、ツリー、タブ フォーム、スライダー、カラー ピッカー、テーブル コントロールなどの高度なコントロールの豊富なセットを提供します。
高度なカスタマイズ - 視覚的な外観が内部表現から独立しているため、Swing コントロールは非常に簡単な方法でカスタマイズできます。
プラグ可能なルック アンド フィール - Swing ベースの GUI アプリケーションのルック アンド フィールは、有効な値に基づいて実行時に変更できます。
2.3 Eclipse 開発プラットフォームの概要
Eclipse は、オープンソースの Java ベースの拡張可能な開発プラットフォームであり、高度に統合されたツール開発のためのフル機能の商用品質の産業用プラットフォームを提供することに重点を置いています。Eclipse は、プラグイン コンポーネントを通じて開発環境を構築するための単なるフレームワークとサービスのセットです。Eclipse には、Java 開発ツール (JDT) を含むプラグインの標準セットが付属しています。
Eclipse は 1999 年 4 月に開始されました。もともと、商用ソフトウェア Visual Age for Java を置き換える次世代 IDE 開発環境として IBM によって開発されました。IBM は、2001 年 11 月に、プラットフォーム、JDT、PDE を含む最初の Eclipse コード ベースを提供しました。現在 IBM が主導するオープン ソース コミュニティへの影響により、Eclipse プロジェクトは大規模な Eclipse アライアンスに発展し、Borland、Rational Software、Red Hat、Sybase など 150 以上のソフトウェア会社が Eclipse プロジェクトに参加しています。現在は、ソフトウェア ベンダーの非営利連合である Governed by the Eclipse Foundation が主導しています。2003 年、Eclipse 3.0 では、ランタイム アーキテクチャとして OSGi サービス プラットフォーム仕様が選択されました。2007 年 6 月に、安定バージョン 3.3 がリリースされました。バージョン 3.4 (コード名 Ganymede) は 2008 年 6 月にリリースされました。
Eclipse はよく知られたクロスプラットフォームの無料統合開発環境 (IDE) で、元々は主に Java 言語開発に使用されていましたが、現在ではプラグインを使用して他のコンピューター言語の開発ツールとして使用する人もいます。 C++ と Python。Eclipse はもともと単なるフレームワーク プラットフォームであり、プラグイン開発環境 (プラグイン開発環境、PDE) を提供していました。このコンポーネントは主に Eclipse を拡張したいソフトウェア開発者を対象としており、Eclipse とシームレスに統合されるツールの構築を可能にします。 Eclipse 環境. 多くのプラグインをサポートしているため、Eclipse は機能が固定的な他の IDE ソフトウェアにはない柔軟性を持っています。Eclipse のすべてはプラグインであるため、Eclipse 用のプラグインを提供すると、一貫性のある統合された統合開発環境がユーザーに提供され、すべてのツール開発者が平等に活躍できるようになります。
エクリプスの利点:
現在、世界中で何百万人もの人々が開発に Eclipse を使用しています。なぜEclipseにはこれほど多くのファンがいるのですか?これは、Eclipse が多くの機能を 1 つに統合していることと大きく関係しています。
Eclipse はオープンソース ソフトウェアです。これは、Eclipse を無料で使用できるだけでなく、ソース コードを学習することで世界のトップ開発者のプログラミング テクニックを学ぶことができ、世界中の開発者が寄稿したパブリック オープン ソース コード ライブラリを共有できることを意味します。
Eclipse は本当に拡張可能で構成可能です。Eclipseは花瓶のようなプラグイン機構を採用しており、いつでも花瓶に花を加えることができ、不要になった花も簡単に取り出すことができます。現在、インターネット上には無料・有料のプラグインが乱立しており、国内外でプラグインの開発も盛んに行われています。
Eclipse は Java だけでなく多くの開発言語をサポートしています。Eclipse は、システム機能を拡張できる最小限のコアのみを開発者に提供しますが、拡張ポイントに基づくプラグイン アーキテクチャにより、Eclipse は複数の言語をサポートできます。対応する言語のプラグインがインストールされている限り、Eclipse はその言語の開発をサポートできます。現在、Eclipse は C/C++、COBOL、PHP、Perl、Python およびその他の言語をサポートできます。(Eclipse は主に Java 開発環境ですが、そのアーキテクチャにより他のプログラミング言語も確実にサポートされます)。
Eclipse は、複数のプラットフォーム機能のサポートを提供します。開発者は、Windows、Linux、MacOS など、最も快適で使い慣れているプラットフォームを使用できます。Eclipse にはプラットフォームごとに独自の個別のグラフィックス ツールキットがあり、アプリケーションにネイティブ オペレーティング システムに近い外観と優れたパフォーマンスを提供します。
業界をリードする OSGi 仕様に基づいています。OSGi 仕様は、1999 年に Sun Microsystems、IBM、Ericsson などによって初めて発表されました。そのサービス プラットフォームには、サービス ゲートウェイ、自動車、携帯電話、産業オートメーション、ビルディング オートメーション、PDA グリッド コンピューティング、エンターテイメント (iPronto など)、IDE が含まれます。 、など。OSGi ベースのシステムはマイクロカーネルの形式で実行されるため、ソフトウェア業界が夢見る、ホットスワップ可能で動的に変化する動作、安定した効率的なシステムを簡単に実現できます。Eclipse は 3.1 から、業界で認められた独自のフレームワークを断固として放棄し、アーキテクチャとして OSGi を採用しました。Eclipse3.2 以降、Eclipse は OSGi ベースの開発のサポートを提供し、開発者は Eclipse を使用して OSGi ベースのシステムを開発できます。
Eclipse の美しいヒューマン マシン インターフェイスは広く賞賛されています。Eclipse は、(AWT/Swing の代わりに) 新しい SWT/JFace API を提供します。これにより、SWT/Swing の単調で退屈なインターフェイス スタイルが変更され、春風が吹くように、リッチなグラフィカル インターフェイスを備えたローカルベースのアプリケーションを開発できるようになります。 Java デスクトップ開発の分野は、人々に新鮮な感覚を与えます。
Eclipse は業界リーダーによって立ち上げられ、業界で強力な影響力を持っています。Eclipse Foundation は、Eclipse の長期的な計画と開発を主導し、Eclipse がソフトウェア ツール業界で主導的な地位を確実に保つために、多数の学術研究機関や商業組織を吸収してきました。
2.4システムプラットフォーム環境:
2.4.1ハードウェア プラットフォーム:
このプログラムによって開発されるコンピュータのハードウェアは次のとおりです。
ハードドライブ: 500G
CPU:Intel(R)Core(TM)i5—3230M CPU @2.60GHz
インタラクティブツール: キーボード、マウス
ディスプレイ: LCDディスプレイ
2.4.2ソフトウェア プラットフォーム:
本システムの開発環境は以下の通りです
オペレーティング システム: Microsoft Windows 7 Ultumate
JDK バージョン: jdk-8u121-windows-x64
Eclipse バージョン: Neon.2 リリース (4.6.2)、eclipse-inst-win64
3 システム分析
システム分析は、システム要件分析や実現可能性分析など、ソフトウェア開発プロセスの最初のステップです。システム要件分析は主に、システムが何であるか、何に使用する必要があるかを説明し、この問題について開発者と主要ユーザーの間で合意に達するために使用されます。システムの実現可能性分析は、主にシステムのすべてのリソースの実装を分析して、システムの開発と投資の合理性、実現可能性、必然性を説明し、発生する可能性のある予期せぬ問題を合理化する分析です。ソフトウェア開発で最も困難なリンクはシステム需要分析です。オンデマンド分析に費やされる時間は間違いなく非常に貴重です。需要の変化が頻繁に発生すると、予定された計画内で完了するソフトウェア開発タスクに問題が発生します。非常に深刻な悪影響が生じます。システム要件分析と実現可能性分析をうまく行うことで、ソフトウェア開発プロセスの利便性が向上し、ソフトウェア開発プロセスをリアルタイムで監視・管理できるようになり、計画通りに進めやすくなり、改善の目的が達成されます。ソフトウェアの品質を向上させ、プログラム開発者やユーザーなどに、よりポータブルな通信と協力を提供します。また、システム需要分析や実現可能性分析は、業務実績の本来の根拠として、システムの機能を潜在的なユーザーに間接的に表現することができ、ユーザーはシステムの機能が実現したいニーズを満たしているかどうかを判断することができます。
3.1実現可能性の分析
実現可能性分析は、市場需要、資源供給、建設規模、工程ルート、設備選定、環境への影響、資金調達など、技術、経済、エンジニアリング、テクノロジーなどの観点からプロジェクトの主な内容と裏付け条件に基づいて行われます。 、収益性など。他の側面の調査、分析、比較、プロジェクト完了後に達成される可能性のある財務的、経済的、社会的環境への影響の予測、プロジェクトに投資する価値があるかどうか、プロジェクトの意思決定をどのように相談して構築するかなどの基礎を提供します。包括的なシステム分析手法。実現可能性の分析は、先見の明があり、公正で、信頼でき、科学的でなければなりません。
実現可能性調査業務の科学性、客観性、公平性を確保し、誤りや漏れを効果的に防止するためには、まず、実現可能性調査において、客観的かつ公平な立場で調査研究を実施し、基礎データの収集をしっかり行う必要があります。収集された基礎データは、客観的な経済法則を忠実に反映し、客観的な実態に基づいて実証および評価され、客観的なデータから出発して科学的分析を経て、プロジェクトが実現可能かどうかの結論を導き出す必要があります。
実現可能性調査報告書の内容の深さは国家が定める基準を満たさなければならず、基本的な内容は完全でなければならず、手抜きや形式主義を避けるためにできるだけ多くのデータを使用する必要があります。
実務では、実証してから意思決定すること、企画提案、実現可能性調査、評価の3段階の関係を適切に扱うこと、実現不可能と判断した研究はいかなる段階でも中止すること、研究の段階で実現不可能と判断した場合には研究を中止すること、その後に意思決定を行うこと、の3点を実践上で習得する必要があります。調査と研究を実行する必要があります。データ選択の包括性、重要性、客観性、継続性を確保するには、実践的で信頼できる情報を習得し、複数の選択肢を比較して最適なものを選択する必要があります。海外関連プロジェクトや、WTO加盟などの外的要因により海外基準に準拠する必要があるプロジェクトについては、実現可能性調査の内容や深さは可能な限り国際基準と一致する必要がある。
フィージビリティスタディの品質を確保するためには、コンサルティング設計部門の十分な作業サイクルを確保し、さまざまな理由による無責任で性急な行動を防止する必要があります。
実現可能性分析の目的は、問題を最短の時間と最低のコストで解決できるかどうかを判断することです。実現可能性分析の主なポイントは、問題を解決することではなく、これらの問題が研究と解決に人的および財政的リソースを費やす価値があるかどうかを検討することです。シンプルで簡単な方法があるなら、そうです。
3.1.1経済的実現可能性分析
システムの経済性分析の目的は、開発・構築からシステム運用までに必要な設備投資、新システムの市場需要と経済効果を算出し、投資予算と期待される効果を比較し、算出することです。経済的コスト、実現可能性。
このゲームシステムは主に大学生向けのソフトウェア工学の卒業課程の設計に使用されており、それが生み出す経済効果やゲームの将来の開発状況を考慮する必要はありません。ゲームシステム自体の経済的要求は高くありませんが、このゲームシステムの開発を通じて生徒自身の知識や能力レベルが向上します。必要なのは、JDK動作環境とJava開発ツールEclipseソフトウェアがインストールされたコンピュータだけなので、経済的な問題を考慮する必要はありません。
3.1.2技術的実現可能性分析
テトリスのゲームを記述するために使用できるプログラミング言語は多数ありますが、ここでは主に Java ベースの環境でゲーム システムを開発することを目的としています。そのため、このシステムは主に Java の Swing コンポーネントを使用して開発し、変数の定義と初期化、インターフェイスの設計、ゲームの初期化、ゲームの開始、ゲームの終了、ゲーム中のさまざまな操作の処理、および対応する機能のコード要件の実行技術要件は特に難しいものではなく、技術的に実現可能です。
3.1.3社会的実現可能性分析
このゲームシステムの開発は、主に大学4年間の学びの知識を統合するための卒業課程設計と論文に使用されます.主に個人および学校向けです.個人の娯楽および学校の授業設計と卒業論文チェックインのみを目的としています.社会に影響を与えないため、法的、著作権、その他の社会的要因を考慮する必要がなく、この点においては完全に実現可能です。
3.2要件分析
いわゆる「ニーズ分析」とは、解決すべき問題を詳細に分析し、どのようなデータを入力する必要があるか、どのような結果が得られるか、最終的に何を出力する必要があるかなど、問題の要件を明確にすることを指します。ソフトウェア工学における「ニーズ分析」とは、コンピュータが何を「行う」のか、どのような効果をもたらすのかを判断することであると言えます。要件分析はシステムが完成する前に完了していると言えます。
ソフトウェア エンジニアリングでは、要件分析とは、新しいコンピューター システムを作成するとき、または既存のコンピューター システムを変更するときに、新しいシステムの目的、範囲、定義、機能を記述するために必要なすべての作業を指します。要件分析はソフトウェア エンジニアリングにおける重要なプロセスです。このプロセスでは、システム アナリストとソフトウェア エンジニアが顧客のニーズを判断します。これらのニーズが特定されて初めて、新しいシステムのソリューションを分析して追求できます。要件分析フェーズのタスクは、ソフトウェア システムの機能を決定することです。
ソフトウェア エンジニアリングの歴史において、人々は常に要件分析がソフトウェア エンジニアリングの最も単純なステップであると信じてきました。しかし、過去 10 年間で、ニーズ分析が最も重要なプロセスであるという認識が高まってきました。需要分析時にアナリストが顧客のニーズを正しく理解できなければ、最終的なソフトウェアが顧客のニーズを真に満たすことができなかったり、ソフトウェアプロジェクトが指定された期間内に完了しなかったりすることになります。
3.2.1機能要件
ゲームシステム全体では、4つの小さなブロックで構成される7つの異なる形状のブロックがランダムに生成され、回転すると28の状態が得られ、ゲームの難易度を上げると6つの異なる形状のブロックが追加され、回転すると24種類になります。追加した状態です。ブロックは一定の速度で自由に落下し、プレイヤーはキーボードの上下左右キーでブロックの左右の移動と回転を制御し、落下後の適切な位置にブロックを配置します。ブロックが落ちたときに、ブロックが落ちた後に行全体がブロックで満たされている場合、その行全体が削除されます。列を消すとプレイヤーのスコアが10ポイント増加し、スコアが100ポイントに達するとプレイヤーのレベルが1段階上がり、スピードが1段階上がり、難易度が上がります。ブロックが落ちた後にゲーム キャンバス インターフェイス全体が占有されている場合、ブロックは落ちなくなり、ゲームは失敗します。ゲームの具体的な機能要件は次のとおりです。
▪ ゲーム インターフェイスの要件: ゲームの優れたインターフェイスはプレイヤーの目を輝かせ、ゲームによってもたらされるエンターテイメントとリラクゼーションを十分に感じることができます。このゲームのデフォルトの背景色は濃い緑色です。ゲームのメインインターフェイス画面は、好みの画像にカスタマイズして変更できます。メインインターフェイスの四角形のデフォルト色はオレンジ色、事前表示四角形のデフォルト色はラベンダー。背景色と前景色のコントラストがはっきりしていて、プレイヤーの目を明るくし、ゲームのレベルが高くなってブロックの落下速度が速くなると、落ちてくるブロックの形がはっきりと分かり、ゲームの雰囲気が高まります。ゲーム、イライラする。
▪ ゲーム形状の要件: データ構造として配列を使用して、ブロックの 52 個の状態、つまり、プライマリ レベルのロング バー、Z 形状、逆 Z 形状、フィールド形状、7 形状を含む合計 7 つの形状を保存します。 、逆7字、T字の4方向回転変形、中級3ブロック12状態、上級3ブロック12状態。各ブロックは反時計回りに回転することができますが、回転できるかどうかは条件によって判断する必要があり、回転後に境界を越える可能性がある場合は回転できず、回転できるように位置を調整する必要があります。
▪ キーボード処理イベント要件: ブロックが落下すると、プレイヤーはキーボードの方向キーを使用できます。上キーで回転、下キーで落下を加速、左キーで左に移動、右キーで右に移動、スペースバーとワンクリック落下を実現し、Pキーで一時停止、Cキーで続行などの一連の操作を実現します。
▪ マウス処理イベントの要件: マウスを使用すると、コントロール パネルのメニュー ボタンとヘルプ ボタンをクリックし、メニュー バーでメニュー項目を選択し、ゲームを開始し、ゲーム レベルを選択し、ゲーム内のブロックの色の表示を変更できます。ゲーム、メインゲームインターフェイスの背景の表示色と前景色、ゲームの背景画像の変更、ブロックの落下速度、ゲーム内サウンドの再生の有無と一連の機能。
▪ 表示要件: このゲーム プログラムの表示要件は、ブロックが落ちて列全体が埋まると、その列が消去され、埋まっていない残りの列が自動的に 1 つずつ下に移動し、列を消去するとスコアが増加します。適切なインターフェイスを 10 ポイント獲得し、スコアが 100 ポイントになると、レベルが 1 段階上がります。ブロックが落ちてメイン インターフェイスのすべての行に重なると、ブロックは落ちなくなり、ゲームが終了し、メイン インターフェイスに「ゲーム オーバー」という言葉が表示されます。
3.2.2非機能要件
非機能要件: テトリス ゲーム システムの非機能要件には、ゲームのメイン インターフェイスの左上隅のアイコン表示、ウィンドウ サイズの最大化と最小化の調整 (ただし、メイン インターフェイスのサイズは含まれません)、ゲーム実行時のポップアップ ウィンドウの位置などの非機能要件のセット。
3.2.3 インターフェース制御
Windows オペレーティング システムの下で、このロシアのゲーム システムは主にキーボードを通じてゲームを操作します。
マウスを使って起動、終了、設定などの一連の操作を行うことができます。まず、ゲームはキーボードのキーを使用してゲームを操作するため、キーボード インターフェイス イベントを使用する必要があります。次に、ゲームの全プロセス中、開始、レベルの選択、設定の変更、色の変更、バージョン情報の表示、終了などを含むゲームの制御にマウスを使用する必要があるため、インターフェイスを追加する必要があります。マウスのクリックとボタンのイベントを監視し、対応するコードを記述して、マウスとキーボードの対応する機能を実装します。
4 システム概要設計
4.1 システムの機能設計
4.1.1 手動業務処理の基本的な流れ
このゲームはエンターテイメントを本来の目的として、パズルを目的として設計されており、これまでの古典的なテトリスゲームの機能を包括的に研究し、新しい機能を追加して、ゲームに新たな活力と活力を与えています。ゲームの基本的な流れを以下で詳しく説明します。
取扱説明書:
1>プログラムを実行し、右側のコントロールパネルの「スタート」または「コントロール」メニューの「スタート」ボタンをクリックしてゲームを開始します。
2>上下左右キーとスペースバー、Pキー、Cキーを使用して、ブロックの変形、落下、左右の動き、急速な落下、一時停止、続行をワンクリックで制御します。
3> ブロックをすべて消去すると、スコアが自動的に増加し、レベルが自動的に 1 レベル上がります。
4>レベルが上がり、ブロックの落下速度が速くなるにつれて、右側のコントロールパネルまたは「ゲーム」メニューの「初級」、「中級」、「上級」ボタンを押して、ゲームの難易度を手動で変更します。また、「ブロックの色」メニューのオプションをクリックして、ブロックの色などを変更することもできます。また、「カスタマイズ」メニューのオプションを使用して、ゲームの一部の属性を変更することもできます。
5> キーボードの P キーを押してゲームを一時停止し、C キーを押してゲームを続行します。「ゲーム終了」ボタンを押すと進行中のゲームが完全に停止し、「コントロール」メニューの「スタート」または「リスタート」を押すと新しいゲームが開始されます。
6>ブロックがウィンドウ全体を占め、新しいブロックを落とすことができない場合、ゲームは「ゲームオーバー」ダイアログボックスをポップアップ表示してゲームの終了を促します。
ゲームの基本的なフローチャートを図 4-1 に示します。
図 4-1 ゲームの基本フローチャート
4.1.2 基本プロセスの機能モジュール
このシステムは、ゲームのさまざまな機能に基づいて、ゲームの各機能モジュールを設計します。図 4-2 は、このゲームのシステム機能モジュールの概略図であり、図に示すように、このゲームは主に、ゲーム インターフェイス領域とゲーム コントロール領域の 2 つのモジュールで構成されます。ゲームインターフェースは、プレイヤーの任意の操作を表示する部分と、プレイヤーの操作の結果を表示する部分の 2 つの部分に分かれています。ゲームコントロールは、色の変更、開始、初級へのゲームレベルの変更、中級へのゲームレベルの変更、上級へのゲームレベルの変更、落下速度のカスタマイズ、背景の変更、終了などのいくつかの機能モジュールに分割されています。
図 4-2 システム機能モジュールの概略図
図 4-3 は、ゲーム インターフェイス領域モジュールの設計の概略図であり、図に示すように、ゲーム インターフェイス領域モジュールは、新しいゲーム インターフェイスの開始、プレーヤーの操作の処理、およびプレーヤーの操作結果の表示の 3 つの機能モジュールに再分割できます。 。
図 4-3 インターフェースモジュールの概略図
図 3-4 は、ゲーム コントロール領域の設計の概略図であり、図に示すように、ゲーム コントロール領域モジュールは、開始、カスタマイズされた操作設定、初期ゲーム レベル設定、初期カラー設定、終了などの機能モジュールに分割されています。 。
5システムの詳細 設計と導入
Java は純粋なオブジェクト指向 (オブジェクト指向) プログラミング言語であり、その多くの利点についてはここでは詳しく説明しません。オブジェクト指向の概念に基づいて、このプログラムは主に次のモジュールに分割できます。
●ゲームメインインターフェース表示モジュール
●ブロック&データ表示モジュール
●ブロック移動制御モジュール
●ゲームインターフェースカラーコントロールモジュール
●ゲームの進行とレベル管理モジュール
オブジェクトを分析するスキルは、その機能の拡張性とメンテナンスの効率にあります。想像してみても、外部環境の変化やユーザーニーズの変化により、プログラムの機能を拡張・維持する必要が生じた場合、コードを大幅に変更したり、書き換えたりする必要が生じ、オブジェクト指向の利点が失われることになります。 , そのため、このプログラムを解析する際には、プログラムの拡張性や保守性を向上させるために、独立性の高いモジュールを対象として使用します。ゲーム内のクラスの設計は次のとおりです。
MyFrame クラス: JFrame クラスから継承され、ゲームのメイン クラスとして、ゲーム本体の制御と各クラスのハブへの接続と命令を担当します。
PreView クラス: JPanel クラスから継承され、操作パネル クラスとして、メイン ゲーム ウィンドウ、スコアボード、レベル コントロール ボタン、およびゲーム プロセスを制御するその他のウィンドウを配置する役割を果たします。
GameCanvas クラス: JPanel クラスから継承した ChangeBlockColor スレッド クラスは、キャンバス クラスの四角形の色を動的に変更し、四角形の色を確認することで ChangeBlockColor 四角形の移動と削除をキャンバス クラスに反映します。
Box クラス: Square クラス、ボックスを構成する基本要素であり、主な表現は色です。
ブロッククラス:ブロックを操作するクラスとして、ブロックの移動、落下、変形を制御します。
5.1 ゲームメインインターフェース表示モジュール
優れたソフトウェア システムは、コア機能の多様性とパワーに反映されるだけでなく、ユーザーが退屈で古いインターフェイスに直面している場合、ソフトウェア システムは成功しません。 . インターフェイスのデザインは非常に重要なリンクです。プレーヤーにとって合理的なレイアウトと優れた視覚効果を備えたインターフェイスを設計および作成することの重要性は自明です。
ゲームのメイン インターフェイスは Swing コンポーネントを使用して開発され、さまざまな制御機能を実装するためにリスナーがそれに登録されます。ゲーム フォームの設計に基づいて、アクション リスナー (ActionListener) という少なくとも 3 つのリスナーを登録する必要があります。およびキーボード リスナー、リスナー (KeyListener)、オプション リスナー (ItemListener)。
予備設計によれば、クライアントで使用される Swing コンポーネント オブジェクトには、JFrame オブジェクト、JPanel オブジェクト、JLabel オブジェクト、JButton オブジェクト、JMenuBar オブジェクト、JMenu オブジェクト、JMenuItem オブジェクト、JTextField オブジェクト、JTextArea オブジェクト、JDialog が含まれると判断できます。オブジェクトなど、少なくとも 10 個の Swing コンポーネント オブジェクト。下の図 5-1 は、ゲームのメイン インターフェイスのスクリーンショットです。
図 5-1 ゲームのメイン インターフェイスのスクリーンショット
このゲームのメイン インターフェイス デザインの初期カラー マッチングはシャープ コントラストの原則に基づいています。デフォルトの背景色は濃い緑色です。テトリス アイコンは左上隅に設定されています。スコアの初期値は 0、レベルの初期値は1、最高スコアレコードの初期値は0です。メインゲームフォームのサイズは(520, 580)に設定され、ブロック移動範囲ペインは20行12列の2次元配列で制御され、左上隅のアイコンはブロックパターンに設定されます。識別目的のため。
5.2 キャンバスとボックス表示モジュール
このゲームでは、キャンバスがカスタム画像としてデザインされており、必要に応じて背景画像を自分で変更することができ、ブロックが落下する過程で、色の変化によって落下するブロックが識別されます。
5.2.1 背景キャンバスモジュールの設計
ゲームのメイン背景キャンバスは 20 行 12 列の 2 次元配列です。正方形の表示は、対応する色の変化によって識別されます。メイン フォームは色で塗りつぶされ、背景スタイルと正方形を形成します。このゲームでは、JPanel から継承した GameCanvas クラスを使用して、背景キャンバスの表示を制御します。Rows はキャンバスの行数を表し、cols はキャンバスの列数を表します。行数と列数によって正方形の数が決まります。キャンバスにはあります。背景キャンバスの主な実装コードは次のとおりです。
まず、キャンバス クラスのコンストラクターを使用して、メイン インターフェイス全体の行、列、およびメインの境界線の数を表します。
相対位置:
/**
* Canvasクラスのコンストラクタ
* @param rows int、キャンバス内の行数
* @paramcols int、キャンバスの列数
* 行と列の数によって、キャンバスの正方形の数が決まります。
*/
public GameCanvas(int rows, intcols) {
this.rows = 行;
this.cols = 列;
this.setOpaque(false);
ボックス = 新しいボックス[行][列];
for (int i = 0; i < box.length; i++) {
for (int j = 0; j < box[i].length; j++) {
ボックス[i][j] = 新しいボックス(false);
}
}
setBounds(0, 0, 300, 500);//相対位置座標を設定する
setBorder(new EtchedBorder(
EtchedBorder.RAISED、Color.white、新しい Color(148, 145, 140)));
}
/**
* キャンバス内の正方形の行数を取得します
* @return int、グリッド内の行数
*/
public int getRows() {
行を返します。
}
/**
* キャンバス内の列数を取得します
* @return int、グリッド内の列の数
*/
public int getCols() {
列を返します。
}
次に、メイン インターフェイス全体の前景色と背景色を表すように Canvas クラスのコンストラクターを設定し、その前景色と背景色を取得します。
/**
* Canvasクラスのコンストラクタ
* @param rows は public GameCanvas(int rows, intcols) と同じです
* @param cols は public GameCanvas(int rows, intcols) と同じです
* @param backColor カラー、背景色
* @param frontColor Color, 前景色
*/
public GameCanvas(int rows, intcols,
カラーバックカラー、カラーフロントカラー) {
this(行数、列数);
this.backColor = backColor;
this.frontColor = フロントカラー;
}
/**
* ゲームの背景色を設定します
* @param backColor カラー、背景色
*/
public void setBackgroundColor(Color backColor) {
this.backColor = backColor;
}
/**
* ゲームの背景色を取得します
* @return カラー、背景色
*/
public Color getBackgroundColor() {
戻る色;
}
5.2.2 ブロックモジュール設計のプレビュー
ブロックとデータ情報は、ゲームの最も基本的な機能モジュールです。Box は、ブロックを構成する基本要素です。Box は、ブロックの外観を表すために独自の色を使用します。MyTask は、TimerTask クラスを継承して居場所を計測し、カウント メソッドを使用して速度の変化を実現します。 MyListenerクラスはKeyAdapterクラスを継承してボタン監視を実装し、ブロックの上下左右を制御します。合計 16 個のセルを持つ 4x4 正方行列を定義します。「0」と「1」を使用して、各正方形を新しい色でペイントするか、背景色を保持するかを示します。
新しいブロックが取得されるたびに、7 つの形式のブロックのうち 1 つがランダムに選択されます。ゲームは、新しいブロックのモデルを表す変数を定義します。たとえば、7 行 4 列の 28 種類のブロックを表す int 配列 STYLE を定義し、各要素がブロックの 1 つを表します。つまり、0<=blockkindnum<=6、0=<blockstatusnum<=3
その後、ブロックが終了し、新しいブロックを取得する必要がある場合は、blockkindnum と blockstatusnum の値のペアをランダムに取得し、この STYLE の値に基づいて対応するブロックを構築するだけで済みます。残りの問題は、STYLE の行と列の値のペアをランダムに生成する方法です。
Java 言語パッケージの Math クラスには、乱数を生成するためのメソッド randan() が用意されており、このメソッドを呼び出すと、0 ~ 1 の倍精度浮動小数点数が生成されます。したがって、新しいブロックを取得するたびに、このメソッドを 1 回呼び出すだけで、0 から 1 までの倍精度浮動小数点数を取得し、その数値を 7 で乗算し、それを整数にキャストして、 1 ~ 7 の整数。行を制御するために使用されます。この数値を 4 で乗算し、整数にキャストして 1 から 4 までの整数を取得します。これは列の制御に使用されます。
これにより、複数のグラフィックス定義を結合し、コードを使用して次の機能を実装できます。
1> 各実行では、まず乱数の異なる初期値が生成されます。
int col = (int) (Math.random() * (gc.getCols() - 3));//ランダムな位置に列を生成します
int style = Constant.STYLES[(int) (Math.random() * Block.get_addl())][(int) (Math.random() * 4)];
図 5-2 ランダムにブロックを生成するフローチャート
2> 図をランダムに選択します。図 5-2 は、生成されたランダム CNC を具体的に説明するブロック図をランダムに生成します。
結果として得られるグラフィックス。
3>4*4 グリッド内の現在のグラフィックの位置情報。
4 行 4 列のブロックの事前表示グリッドを描画し、事前表示ブロック スタイルをランダムに生成します。このゲームでは、2 次元配列を使用して 28 スタイルのブロックを保存します。
注目に値するのは、伝統的なテトリス ゲームに基づいて、革新的な思考を反映し、学習の原則に沿って、このゲーム システムは、中級レベルと上級レベルに 3 つの他のブロック スタイルを追加していることです。伝統的なゲーム、その他のブロック スタイル。ブロック スタイルは合計 52 種類あり、具体的な格納方法の主な実装コードは次のとおりです。
/**
※13機種52状態にそれぞれ対応
*/
public Final static int[][] STYLES = {// 合計 28 州
{0xf000, 0x8888, 0xf000, 0x8888}, // 長いバーの 4 つの状態
{0x4e00, 0x4640, 0xe400, 0x4c40}, // 'T' タイプの 4 つの状態
{0x4620, 0x6c00, 0x4620, 0x6c00}, // 逆「Z」字型の 4 つの状態
{0x2640, 0xc600, 0x2640, 0xc600}, // 'Z' タイプの 4 つの状態
{0x6220, 0x1700, 0x2230, 0x7400}, // '7' タイプの 4 つの状態
{0x6440, 0xe200, 0x44c0, 0x8e00}, // 逆「7」タイプの 4 つの状態
{0x6600, 0x6600, 0x6600, 0x6600}, // ブロックの 4 つの状態
{0x8c88,0xf200,0x44c4,0x4f00},// 3 つの中間スタイル ブロックを追加しました
{0xea00,0xc4c0,0xae00,0xc8c0},
{0x8c00,0xc800,0xc400,0x4c00},
{0xac00,0xcc40,0x6e00,0x8cc0},// 3 つの高度なスタイル ブロックを追加しました
{0x4e40,0x4e40,0x4e40,0x4e40},
{0x8480,0xa400,0x4840,0x4a00},
};
従来のテトリス ゲームの 7 つのブロック スタイルを知っている人は多いと思うので、一般的なブロック スタイルを 1 つずつ示すためにスクリーンショットを撮ることはしません。以下は、従来のゲーム モードに追加された中級難易度の 3 つのブロック モデルと上級難易度の 3 つのブロック モデルです。
●中難易度のブロックモデルを3種類追加(90度、180度、270度、360度の4つの回転状態が得られます)
図 5-10 3 つの追加の中難易度ブロック モデル
●3つの上級難易度ブロックモデルを追加(90度、180度、270度、360度後の4つの回転状態が得られます)
図 5-11 追加の 3 つの上級難易度ブロック モデル
5.2.3 ブロックの移動および回転モジュールの設計
ブロックの反転と移動は比較的簡単に実装でき、ブロックを移動するには、ブロックの横座標または縦座標を変更して、ブロックを再描画するだけです。ブロックを反転するには、背景配列の値を変更してブロックを再描画するだけです。
このゲームのブロックが落ちると、動的描画が実行され、Object.clone() メソッドがフィールドによってこのクラスのインスタンスを合法的にコピーできることを示す Cloneable インターフェイスが実装されます。ブロック操作クラス BlockOperation は、Thread クラスを継承し、run() メソッドをオーバーライドして、ブロックの動的かつ正確な位置を実現します。もちろん、スレッド内でブロックが移動中か停止中かを判断する必要がある。
publicvoid run()
{
//移動によってブロックが動的に落下するかどうかが決定される
(移動中)
{
試す
{
//betweenleveltime は隣接するレベル間の時間差を示します
睡眠(レベル間時間)
* (ControlMainGame.maxlevel - レベル + flatgene));
キャッチ(つまり、InterruptedException)
{
ie.printStackTrace();
}
//一時停止により、ゲームが一時停止されるかどうかが決まります
if (!一時停止中)
移動 = (moveTo(y + 1, x) && 移動);
//移動は 100 ミリ秒待機していますが、移動は変更されていません。
}}
もちろん、ゲームでは、ブロックの移動の境界問題も決定する必要があります。たとえば、ブロックを反転する前に、ブロックの左側にはちょうど 1 グリッドのスペースがありますが、右側にはちょうど 1 グリッドのスペースがあります。この場合、ブロックを反転できないとユーザーの操作が不便になりますが、反転できると境界を越えて既存のブロックを占有してしまいます。範囲外に出ずにブロックを反転したい場合は、ブロックを反転した後、ブロックを 1 マス右に移動してから、再度ブロックを描画すると、ブロックが他の固定ブロックを邪魔することがなくなります。境界外の問題を解決します。
1>ブロックフリップ判定
越境は 2 つの状況で発生する可能性があります。1 つはブロックが落下して固定された場合、もう 1 つは周囲のスペースがブロックを反転させることを許可しない場合です。
前者の場合は、ブロックが落ちた後に移動できないという判定を参照すればよいだけです。
2 番目のケースでは、各ブロックを反転する前に、まずブロックの周囲のスペースを計算し、スペースが許せば反転する必要があります。そうしないと反転できません。
7種類の正方形は不定形であるため、正方形の種類ごとに必要な反転スペースが異なり、反転状態が異なる場合でも、必要な反転スペースも異なります。反転スペースやブロックの種類を変えて、ブロックの状態ごとに判定条件を書くのですが、これでは面倒です。
観察によれば、7 つのブロックの形の中で、長いブロックが横棒状に落ちた場合、落ちる限り弾くことができることを見つけるのは難しくありません。垂直バーの場合、反転後の位置になります。反転する前に、位置には 4x1 のグリッド スペースが必要です。天の形のマスは落ち続ける限り必ず反転できるので、天の形のマスが落ちない限り必ず反転できます。他の 5 つのブロックの形状には 1 つの共通点があります。つまり、それらはすべて、水平方向に 3 グリッドのスペースと垂直方向に 2 つのスペースを占有する 2 つの反転状態を持ち、他の 2 つの反転状態は水平方向に 2 グリッドのスペースを占有し、3 つのグリッド スペースを占有します。縦方向に3マスの状態で落ちれば、落ちれば反転できる 横2マスの状態で落ちれば、反転後、周囲には 3x2 のグリッドスペースが必要です。
したがって、ブロックの裏返しの判定は、ブロックが落ちて裏返せない場合、第2の状況、垂直状態で出現した長いブロックが裏返される場合、第3の状況の3つの状況に分けて判断する必要がある。めくり判定の対象となるのは、長い短冊や野原状のマス目に加え、横方向に2マスを占める状態で出現する他の5つのマス目です。
どのような状況でブロックが反転できるかという問題は解決したので、次は反転後のブロックの位置の問題を解決する必要があります。これは、反転後のブロックの位置を事前に知っていなければなりません。その位置の空間範囲を決定できますか。ブロックを収容できるかどうかを確認してください。
確かなのは、ブロックがどのように反転されても、依然としてブロック配列内にあるということです。これは、ブロックがゲーム マップ内の特定の 4x4 グリッド スペース内に存在する必要があることを意味します。
ゲームのメイン インターフェイスのブロック配列の座標は決定されます。不確実なのは、反転した後にブロックがブロック配列のどこに配置されるかです。この問題を解決するには、ブロックの格納原理を制限することができます。ブロック配列を左右に配置します。この方法では、どのように反転しても、ブロック配列の最初の行と列には常にブロックが存在します。これにより、ブロック配列内のブロックの位置も決まります。また、ブロックが反転された後にゲーム マップ上でどのように表示されるかを知ることもできます。
ブロック配列の水平座標と垂直座標を x と y とすると、この位置は、長いブロックが反転される行がゲーム マップの y 行目であり、それが占める列が x 番目から x+3 番目であることになります。長短冊と反転後のフィールド形状を除く5種類のマスが占める行はゲームマップのy行目とy+1行目であり、それらが占める列はx行目からx+2列目までである。
したがって、上記のスペースに空きセルがあれば、ブロックを反転することができます。
2>境界外の反転補正
ブロックは、裏返した後にその上に十分なスペースがある限り裏返すことができますが、ブロックを裏返した後のスペースは十分ではなく、反対側に十分なスペースがある場合はどうなりますか?
ブロックが境界にある場合、反転後にマップから外れる可能性があるだけでなく、配列が範囲外になる可能性もあります。もちろん、配列の範囲外を避けるためにマップ配列をより大きく定義する必要があるだけです。境界外のブロックの場合、ブロックの反対側にある場合 十分なスペースがある場合、ブロックは適切な単位で反対方向に移動して、ブロック境界外エラーを修正する必要があります。図 5-12 のブロック反転フローチャートに示すように、ブロックを反転するには 3 つの判断が必要です。ブロックが最下位に落ちたかどうか、反転後に十分なスペースがあるかどうか、反転後に境界を越えたかどうかです。
図 5-12 ブロックフリップ処理フローチャート
プレイヤーはキーボードを操作してブロックの移動や回転を行うコードで、ControlKeyListenerクラスを導入し、KeyAdapterクラスを継承してキーボード監視機能を実装しています。KeyAdapter クラスは、Object クラスを継承し、キーボード イベントを受信するために使用される抽象アダプター クラスである KeyListener インターフェイスを実装します。このクラスのメソッドは空です。このクラスは、リスナー オブジェクトの作成を容易にするために存在します。このクラスを拡張して KeyEvent リスナーを作成し、必要なイベントのメソッド (ControlKeyListener クラス) をオーバーライドします。ControlKeyListener を使用してリスナー オブジェクトを作成し、コンポーネントの addKeyListener メソッドを使用してリスナー オブジェクトをコンポーネントに登録します。キーが押される、離される、または入力されると、リスナー オブジェクト内の対応するメソッドが呼び出され、KeyEvent が適切なメソッドに渡されます。実装コードは次のとおりです。
privateclass ControlKeyListener は KeyAdapter を拡張します
{
publicvoid keyPressed(KeyEvent ke)
{
if (!game.isPlaying())
戻る;
BlockOperation blockope = game.getCurBlock();
スイッチ (ke.getKeyCode())
{
KeyEvent.VK_DOWN の場合:
blockope.moveDown();
壊す;
KeyEvent.VK_LEFT の場合:
blockope.moveLeft();
壊す;
KeyEvent.VK_RIGHT の場合:
blockope.moveRight();
壊す;
KeyEvent.VK_UP の場合:
blockope.turnNext();
壊す;
デフォルト:
壊す;}}}
5.3コントロール パネルモジュール
5.3.1 メニューバーモジュールの設計
メニューバーには「ゲーム」と「ヘルプ」の4つのメニューオプションがあります。「ゲーム」オプションは「開始」、「初級」、「中級」、「上級」、「カスタマイズ」、「ブロックカラー」、「終了」の7つのオプションに分かれています。「ヘルプ」オプションの中に「バージョン情報」があり、ゲームのバージョンなどの情報を表示します。
1>「スタート」ボタンの機能は、リセット機能と同様に、ゲームキャンバスを再描画することです。このボタンの監視実装コードは次のとおりです。
/**
*キャンバスをリセット
*/
パブリックボイドリセット() {
for (int i = 0; i < box.length; i++) {
for (int j = 0; j < box[i].length; j++)
ボックス[i][j].setColor(false);
}
リペイント();
}
2>「初級」、「中級」、「上級」ボタンを使用してゲームのレベルを手動で調整し、ゲームのレベルの難易度を変更します。「終了」ボタンは、いつでもゲームを終了してゲームを終了するように制御します。
3>「ヘルプ」ボタン内の「バージョン情報」ボタンをクリックすると、ゲームソフトウェア自体に関する情報が表示されます。具体的な情報は図のとおりです。
図 4-19 「バージョン情報」オプションのスクリーンショット
5.3.2 コントロールパネルのボタンのデザイン
ゲーム コントロール パネルには、スコア統計やレベル統計などのフィールドが含まれています。
TextField コントロールはゲーム自体の統計によって提供され、プレイヤーはそれらを個人的に編集することはできません。このゲームのルールは、ラインを消すごとに10点、100点増えるごとに1レベル上がり、初期得点は0、初期レベルは1となります。
以下は、スコアやレベル更新などの機能を実装するための主なコードです。
/**
* ラインがいっぱいかどうかを判断し、ラインがいっぱいの場合は消去メソッドを呼び出します。
*/
private void isFullLine() {
// TODO 自動生成されたメソッド スタブ
for (int i = 0; i < 20; i++) {
int 行 = 0;
ブール値フラグ = true;
for (int j = 0; j < 12; j++) {
if (!gc.getBox(i, j).isColorBox()) {
フラグ = false;
壊す;
}
}
if (フラグ == true) {
行 = i;
gc.delete(row);//行を削除
if(isMusic==true)
{mp.playEraseSound();}
addScor();//スコアを追加
if(scor%100==0)//1レベルを上げるには100ポイントに設定します
upspeed=true;//速度フラグをtrueに増やします
if(アップスピード==true)
アップレベル();
}
}
}
/**
* スコアの計算方法
*/
private void addScor() {
スコア=スコア+10;
jt9.setText("スコア: "+MyFrame.scor);
}
}
プライベート void リセット() {
スコア=0;
ランク=0;
jt10.setText("レベル:"+ランク);
jt9.setText("スコア: "+scor);
アップスピード = false;
プレイ中 = true;
ランストップ=false;
gc.setGameOver(false);
gc.repaint();
gc.reset();
}
コントロール パネルのボタンの機能は 4.3.1 でコーディングされているため、ここでは再度説明しません。
6システムテストの実行
6.1テストの概要
システムテストとは、各種情報システムの組み立てテストや確認テストにおいて、ソフトウェア、コンピュータハードウェア、周辺機器、ネットワークなどをまとめて確認することをいい、システムテストとは、製品システム全体をテストして、システムが要求仕様を満たしているかどうかを確認することを目的としています。仕様 要件仕様との不一致や矛盾を定義および特定して、より包括的なソリューションを提案します。システムのテストで問題が判明したら、エラーの原因と場所を特定し、修正してください。これはブラック ボックス テストに基づく全体的なシステム要件であり、システムのすべてのコンポーネントをカバーする必要があります。オブジェクトには、テスト対象のソフトウェアだけでなく、そのソフトウェアが依存するハードウェア、周辺機器、さらには一部のデータ、一部のサポート ソフトウェアとそのインターフェイスも含まれます。
システム テストは、コンピュータ システムの一部としてシステムの他の部分と組み合わせて、コンピュータ システムの実際の動作環境で一連の厳密かつ効果的なテストを実行し、ソフトウェアの潜在的な問題を特定し、システムの通常の動作。
システムテストの目的は、最終的なソフトウェアシステムがユーザーの要件を満たしているかどうかを検証することです。
主な内容は次のとおりです。
(1) 機能テスト。つまり、テスト ソフトウェア システムの機能は、「製品要件仕様書」などの文書の要件に従って正確です。正確性はソフトウェアの最も重要な品質要素であるため、機能テストは非常に重要です。
(2) ロバストネステスト。つまり、異常な状況下でソフトウェア システムの通常の動作をテストする機能です。ロバストネスには 2 つの意味があります。1 つは耐障害性、もう 1 つは回復力です。
6.1.1 テストの原則
ソフトウェアテストの基本原則は、製品利用者の視点に立った総合的なテストであり、システム利用プロセスにおける問題点や抜け穴を可能な限り発見し、調査・分析し、製品の欠陥部分について問題点や改善案を提案することです。詳細なテスト原理は次のとおりです。
(1) ソフトウェアテスト計画はソフトウェアテストの行動指針であり、実際のテストは慎重かつ厳密に実施する必要があり、特にテスト方法とテスト目的を決定するために、実現可能性の高いテスト計画を厳格に実施する必要があります。
(2) テスト基準はユーザーのニーズに基づいて設定されます. ソフトウェアテストの主な目的は、製品の一貫性を確保し、製品が顧客のニーズを満たしていることを確認することです. したがって、テストプロセスでは、常にユーザーの視点から問題を見る必要がありますソフトウェアの欠陥や欠点、システム内の最も重大なエラー、ユーザーのニーズを満たしていないプログラム、および機能上の欠陥の影響を視点から発見します。
(3) 検査は安易に扱うことはできません。
特にシステムテストや繰り返しテストでは、テスト計画が厳密に実施されないと、過失により新たなBUGが発生する可能性が非常に高くなります。したがって、繰り返しのテスト段階にも十分な注意を払う必要があり、早期発見には多くのエラーがあり、そのほとんどは過失により発見されません。
目的:
(1) システムテスト活動が正常に実行されていることを確認します。
(2) ソフトウェア製品とシステム要件間の不一致または矛盾を検証します。
(3) 完全なシステムテストの欠陥追跡データベースを確立する。
(4) ソフトウェア システムのテスト活動と結果がタイムリーに関連グループおよび個人に通知されるようにします。
6.1.2 試験方法
システムを包括的にテストし、システムの問題や障害を特定するには、複数のテスト方法を使用して一緒にテストすることで、システム設計の長所と短所をより包括的に要約できます。次のテスト方法が使用されます。
機能テスト: システム内の各機能モジュールの下にある機能ポイントが正常に使用できるかどうかをテストします。
手動テスト: 主に入力、クリック、その他の機能をテストします。
ブラックボックステスト:入力後、結果が正しいかどうかを確認します。
リカバリ テスト: システム テストとして、リカバリ テストは主にソフトウェアの障害を引き起こすさまざまな条件に焦点を当て、リカバリ プロセスが正常に実行できることを検証します。場合によっては、システムにフォールト トレラント性が必要になることがあります。さらに、システム障害は指定された時間内に修正する必要があり、修正しないと重大な経済的損失が発生します。回復テストは主にシステムの耐障害性をチェックします。システムエラーが発生した場合、指定された時間内にエラーを修正してシステムを再起動できますか。回復テストでは、まずさまざまな方法を使用してシステムに障害を強制し、次にシステムができるだけ早く回復できるかどうかを検証する必要があります。自動回復の場合は、再初期化、チェックポイント設定メカニズム、データ回復、および再起動の正確さを検証する必要があります。手動介入回復システムの場合は、平均修復時間を推定し、それが許容範囲内であるかどうかを判断する必要があります。
セキュリティ テスト: セキュリティ テストは、不正な侵入を防ぐためにシステム内の保護メカニズムを検証するために使用されます。セキュリティテストでは、テスターはシステムに侵入しようとする役割を果たし、さまざまな方法を使って防御線を突破しようとします。したがって、システム セキュリティ設計の標準は、システムへの侵入をより高価にする方法を見つけることです。セキュリティ テストでは、システムが違法な侵入を防ぐ能力をチェックします。セキュリティテスト中、テスターは不法侵入者を装い、さまざまな方法を使って防御線を突破しようとしました。例えば、①あらゆる手段を使ってパスワードを傍受または解読しようとする、②ソフトウェアを特別にカスタマイズしてシステムの保護メカニズムを破壊する、③システムを意図的に停止させ、復旧中に不正侵入を試みる、④必要な情報を推測しようとする、などです。機密データの閲覧などによる 理論的には、十分な時間とリソースがあれば、アクセスできないシステムは存在しません。したがって、システムのセキュリティ設計の原則は、不正侵入のコストが保護される情報の価値を超えるようにすることです。この時点では不法侵入者には何の利益もありません。
ストレス テスト: ストレス テストとは、通常のリソースの下で異常なトラフィック、周波数、またはデータ量を使用するシステムの実装を指します。圧力テスト中に次のテストを実行できます。
① 平均割り込み数が 1 秒あたり 1 ~ 2 件の場合、特別なテスト ケースは 1 秒あたり 10 件の割り込みを生成するように設計されています。
② 入力データの量を一桁増やして、入力関数がどのように応答するかを決定します。
③ 仮想オペレーティングシステムでは、最大量のメモリやその他のリソースを必要とするテストケースが必要な場合、または過剰なディスクストレージデータが生成される場合。
通常の状況では、システムは繰り返しテストする必要があり、システム時間と機能の制限により、システムを完璧にすることはできません。そのため、さまざまな試験方法を併せて検討する必要があります。
強度試験
強度テストでは、異常な状態に対するプログラムの耐性をチェックします。ストレス テストでは、常にシステムが異常なリソース構成で実行されます。例えば、①通常の割り込み頻度が毎秒 1 ~ 2 回である場合、毎秒 10 回の割り込みを発生させるテストケースを実行する、②データ入力レートを定量的に増加させて入力サブ関数の応答能力を確認する、③最大操作に必要なストレージ スペース (またはその他のリソース)、④ 仮想メモリ オペレーティング システムのクラッシュやディスク データの激しいジッターなどを引き起こす可能性のあるテスト ケースを実行します。
性能試験
これらのリアルタイムシステムや組み込みシステムでは、ソフトウェア部分が機能要件を満たしていても、性能要件を満たせない場合があります。単体テストから始まりますが、すべてのテストステップには性能テストが含まれます。リードテスターは次のように考えています。システムが真に統合されて初めて、実際の環境でのパフォーマンス要件を満たすことができなくなります。システム パフォーマンス テストは、運用パフォーマンスを包括的かつ確実にテストするために、このタスクを実行するように設計されています。パフォーマンス テストは強度テストと組み合わせられる場合があり、多くの場合、他のソフトウェアやハードウェアのサポートが必要になります。
6.1.3 検査の意義と注意事項
ソフトウェア テストは、ソフトウェア設計プロセスにおいて非常に重要なリンクであり、ソフトウェアの品質を保証するための重要な保証です。テスト方法の品質はソフトウェアの品質に直接影響し、ソフトウェア テストによってエラーや欠陥を特定し、改善することで、効率的で信頼性の高いシステムを実現できます。
ソフトウェアは、エラーを見つけるために、さまざまな角度からテストおよび分析する必要があります。テスト時には、設計システムやアナリストとまったく関係のない人を見つけるのが最善です。なぜなら、ソフトウェアを開発するとき、開発者は独自の考え方を形成しており、テスト時には常にその考え方に縛られているため、エラーを見つけるのは難しく、設計に関係のない人やアナリストにとっては簡単に見つかります。発生した。
プログラムのデバッグプロセスでは、忍耐強く慎重に行う必要があり、わずかなエラーにより機能全体が実現できなくなり、修正に多くの時間が無駄になります。次の点に注意する必要があります。
1>文法上の誤り
構文エラーは、頻繁に発生するエラーです。たとえば、コマンドのスペルが間違っていたり、関数に渡されたパラメータが間違っていたりすると、エラーが生成されます。構文エラーにより、コードの作成を続行できない場合があります。
2>ロジックエラー
論理エラーは多くの場合潜在的であり、検出が困難です。入力ミスやプログラムのロジック フローによってロジック エラーが発生した場合、正常に実行される可能性がありますが、生成される結果は間違っています。たとえば、小なり記号を使用する必要があるときに、値を比較する代わりに大なり記号を使用すると、誤った結果が返されます。
3>実行時エラー
実行時エラーは、命令が実行中に不可能な動作を実行しようとすることによって発生します。ソフトウェア動作の信頼性を確保するには、実行時エラーを修正する必要があります。
このゲームの開発プロセスでは、ソフトウェアの品質を保証するためのテストにさまざまな効果的な手段が使用され、ゲームの境界回転、ブロック反転、およびクロスボーダーテストがテストされ、ソフトウェアの品質とエラー率が大幅に保証されました。ただし、システムには他のエラーや欠陥がまだ存在する可能性があるため、ゲームは可能な限りバグを最小限に抑えるために繰り返し実行テストを行う必要があります。
6.2ゲームコードとアルゴリズムのテスト
1> get() メソッドを記述する際に戻り値が必要ですが、プログラム中に return 文が存在しないため、プログラムのコンパイル時にエラーが発生します。解決策は、メソッドに return ステートメントを追加し、対応するコンテンツを返すことです。
2>ランダム関数を使用してブロックを生成すると、各ブロックにパラメータが渡されず、コンパイルが通過できません。解決策は、各ブロックの構造に従って対応するパラメーターを渡すことです。
3> T 字型の正方形の各正方形のデフォルトの位置を書き込むとき、正方形の位置を制御する変数 i を 0 に初期化します。演算の結果、T 型の正方形はデフォルトで縦長の正方形になります。解決策は、設計された効果を達成するために変数 i の初期値を 1 に変更することです。
4>プログラムを実行すると、統計スコアは各行がすべて削除された後のスコアのみとなり、以前のスコアは上書きされ、蓄積されません。解決策は、プログラム内の「score=」を「score+=」に変更して、スコアを蓄積できるようにすることです。
5>アルゴリズム処理におけるエラーは、主にブロックの検出と削除方法、クリア後のスコアの累積処理方法、アップグレードの有無などに焦点が当てられており、クラスメイトや参考資料との話し合いを経て最終的に解決されました。
6.3ゲームインターフェイスメニューオプションの機能テスト
1> 「ゲーム」メニューのテスト
表6.1 ゲームメニューのテストケース
テストケース番号 |
テストプロジェクト名 |
テスト実行手順 |
出力 |
試験結果 |
01 |
「開始」ボタンのテスト |
「ゲーム」→「スタート」をクリック |
ゲームのリセット |
成功 |
02 |
「ゲーム終了」ボタンのテスト |
「ゲーム」→「ゲーム終了」をクリック |
ゲームオーバー |
成功 |
03 |
「基本」ボタンのテスト |
「ゲーム」→「基本」をクリックします。 |
ゲームレベルは初心者として選択されています |
成功 |
04 |
「中級」ボタンテスト |
「ゲーム」→「中級」をクリック |
ゲームレベルは中級として選択されています |
成功 |
05 |
「詳細」ボタンのテスト |
「ゲーム」→「詳細設定」をクリックします。 |
ゲームレベルはAdvancedとして選択されています |
成功 |
06 |
「カスタム」ボタンのテスト |
「カスタム」ボタンのテスト |
カスタム情報を変更するためのダイアログボックスが表示されます |
成功 |
07 |
「フォールスピード」スライダーテスト |
「ゲーム」→「カスタマイズ」→「落下速度」をクリック |
スライダーをドラッグしてブロックの落下速度を変更します |
成功 |
08 |
「ブロック形状」ラジオボタンテスト |
「ゲーム」→「カスタマイズ」→「ブロック形状」ラジオボタンをクリックします。 |
ブロックの形状を初級、中級、上級から選択してブロックの形状を変更できます。 |
成功 |
09 |
「ボックスが自動的に上昇するかどうか」選択ボックステスト |
「ゲーム」→「カスタマイズ」→「ブロックを自動で上昇させるかどうか」選択ボックスをクリック |
小さなマス目にチェックを入れることができ、チェックを入れると自動的にマス目が上昇し、チェックをしないと自動でマス目が上昇しません。 |
成功 |
10 |
「ゲーム中にサウンドを鳴らすかどうか」選択ボックスのテスト |
「ゲーム」→「カスタマイズ」→「ゲーム中にサウンドを鳴らすかどうか」選択ボックスをクリックします。 |
小さなボックスにチェックを入れるとゲーム中に音が鳴り、チェックが入っていない場合はゲーム中に音が鳴りません。 |
成功 |
11 |
「背景変更」選択ボックス |
「ゲーム」→「カスタマイズ」→「ゲーム中にサウンドを鳴らすかどうか」選択ボックスをクリックします。 |
小さな四角にチェックが入っているので、チェックを入れるとゲームの背景画像が変更され、チェックを外すとゲームの背景画像は変更されません。 |
成功 |
12 |
[OK] ボタンと [キャンセル] ボタンのテスト |
「ゲーム」→「カスタマイズ」→「OK」または「キャンセル」ボタンをクリックします |
[OK] をクリックして変更した設定を保存し、ダイアログ ボックスを終了します。[キャンセル] をクリックして設定を変更せずにダイアログ ボックスを終了します。 |
成功 |
13 |
「ブロックカラー」ボタンのテスト |
「ゲーム」→「ブロックカラー」をクリック |
ダイアログ ボックスが表示され、ブロックの色、HSB、RGB、その他のカスタマイズ情報を変更できます。 |
成功 |
14 |
「終了」ボタンのテスト |
「ゲーム」→「終了」をクリックします |
ゲームを終了し、メインインターフェイスウィンドウを閉じます |
成功 |
2> 「ヘルプ」メニューのテスト
表6.2 「ヘルプ」メニューのテストケース
テストケース番号 |
テストプロジェクト名 |
テスト実行手順 |
出力 |
試験結果 |
15 |
「About」ボタンのテスト |
「ヘルプ」→「バージョン情報」をクリックします。 |
ダイアログ ボックスが表示され、ゲームのバージョンやその他の情報が表示されます。 |
成功 |
6.4主要なイベントの機能テスト
表 6.3 主要なイベント機能のテスト ケース
テストケース番号 |
テストプロジェクト名 |
テスト実行手順 |
出力 |
試験結果 |
16 |
ブロック移動テスト |
ゲーム中に「左、右、下」をクリックします |
ブロックは通常どおりに移動し、範囲外には移動しません |
成功 |
17 |
ブロック回転試験 |
ゲーム中に「上」方向キーをクリックします |
ブロックは境界線や障害物なしで反転できます。 |
成功 |
6.5ブロックの積み重ねと消去機能のテスト
表6.4 ブロックスタッキングとエリミネーション機能のテストケース
テストケース番号 |
テストプロジェクト名 |
テスト実行手順 |
出力 |
試験結果 |
18 |
ブロック積み試験 |
ブロックが下に落ちたり、障害物に接触したとき |
ブロックは正常に一番下に積み上げられています |
成功 |
19 |
ブロック除去テスト |
行がいっぱいになった場合 |
完全な行がすべて削除され、ブロックが 1 つずつ下に移動します。 |
成功 |
20 |
ゲームオーバーテスト |
画面がいっぱいのとき |
セッションウィンドウがポップアップし、「ゲームオーバー」を促すメッセージが表示されます。 |
成功 |
6.6 テスト結果
システムのさまざまな側面と機能を複数のテスト方法でテストした後のテスト結果は、システムが全体的な設計要件を基本的に満たしており、期待される機能が基本的に完成していることを示しています。システムは基本的に設計と開発の開始時に要件を満たしており、テストは終了します。ただし、全体的な機能が十分ではなく、革新性もわずかに劣っており、開発の最初のバージョンとして、機能やインターフェイスのデザインなど、多くの点でさらなる改善の必要があるゲームです。
結論は
卒業制作まではJava関連の開発は理論的な知識レベルでしたが、今回の卒業制作で「机上で学んだことは結局浅いけど、知ったら実践しなければいけない」という原理を理解することができました。 」実際のソフトウェア開発の経験が無いというのが私自身の結論です。この卒業制作を通じて、私はテトリスゲームの開発タスクをすべて完了しました。ブロックの描画や変形、スレッド作成の問題、同期制御、全行判定、消去行処理、最高スコア記録機能の実装など、開発全体を通して多くの問題に遭遇しましたが、最終的には解決することができました。より重要な点のいくつかを次のように要約します。
まず、テトリス関連の機能やデザインに慣れるために、大手ゲームダウンロードサイトからスタンドアロン版のテトリスゲームをダウンロードして、機能の実装やインターフェースのデザインを勉強したり、考えたり相談したりすることが多いです。解析用のデータを取得し、徐々にデザインしていき、修正と議論を繰り返し、ゲーム全体の開発が完了しました。
次に、ゲームデザインのプロセスでは、大まかなものから細かいものへのデザインパターンと、小さなものから大きなものへのテストの原則を採用します。まずゲームのフレームワークを設計してレイヤーごとにテストし、次に特定の実装コードを追加して、徐々に詳細なテストを実施します。設計の途中で問題に遭遇することも多々ありますが、思考と検証を繰り返しながら間違いを見つけては修正し、次のステップに進むことで問題がないことを確認し、最終的なデバッグの負担を軽減するよう努めます。
3つ目は、卒業設計の仕事は常に新しいことを学ぶプロセスであると言え、最初は理解できずにデザインを完成させるまで、実践で学び続けることの重要性を実感しました。将来就職するための教育的意義。卒業制作の制作を通じて Java コースへの理解が深まり、将来の就職に向けた一定の基礎も築かれました。
卒業制作は、学生としての学習段階の最後のステップであり、基礎知識と専門知識を総合的に応用し、総合的に学び直し、改善していくプロセスであり、学生の学習能力と主体的な思考力・実践力を育むプロセスです。設計レベルは大学教育の総合的なレベルも反映するため、本校では卒業設計を重視し、卒業設計作業と動員教育の指導を強化しています。大学での学びの過程において、卒業制作は社会実践への参加の重要な部分であり、人生の問題を学び解決する能力を養うものであり、学校生活と社会生活の変革でもあります。卒業研究を終えた後は、研究デザインと実践を統合することに努めました。これは私たちの能力を強化するのにさらに役立ちます。
数人のクラスメイトや先生の協力を得て、懸命に努力した結果、私はついに重要な課題である卒業制作を完成させることができました。私たちの設計プロセスを振り返ると、難しさと容易さが共存していると言えます。その中でも、大学で学んだ知識を取り入れることは、実は私にとって大きな挑戦であり、大学の知識を試されるものでもあります。
卒業制作の過程では、多くの困難に遭遇し、その多くはこれまで経験したことのない問題でしたが、自分たちでやらなければ、ある程度の知識が不足しているのを見つけるのは難しいかもしれません。問題を見つけて、問題を解決するには、これが最も現実的です。一人では解決が難しい問題に直面しても、先生や学生の協力を得ながら情報を得ながら解決し、卒業制作は無事に終了します。このプロジェクトの知識は依然として非常に深いことが理解されており、現在だけでなく将来も探求を続ける必要があります。
理論と実践の組み合わせには、教室への参加に関する知識だけでなく、学生が社会に関連するものをどのように理解し、接触するかに関するスキルトレーニングと指導の組み合わせも含まれます。学生の卒業プロジェクトは、専門的な理論的知識の指導の下、さまざまな方法でいくつかの実践的な問題を解決できます。設計プロセス中、学生は理論的知識を実践に活用することができ、専門的な理論的知識の理解を深めるだけでなく、本書の理論的知識を充実させ発展させ、それをより高いレベルの経験とスキルに変えることができます。既存の教育モデルでは、理論的な知識やスキルと生産実践の間には大きな隔たりがあり、生徒は教室の外で知識を学ぶことができず、生産実践の問題は学習とは無関係であることが多く、効果的に応用することができません。トピックの合理的な選択を通じて、学生は知識とスキルのシステムを意識的に使用して分析し思考し、理論的知識と実践の有機的な統合に貢献できるように指導されます。
社会は常に変化しています。現在、社会は変化し発展しており、人材への要求はますます高くなっています。視点を使って問題を見つめ、革新することを学び、社会発展の要求に適応することを学びましょう。学校を出て社会に出て、今日のチャンスを掴み、未来を創造してください。先生の影響と知識のおかげで、私は多くの真実を理解し、革新的な精神をもって将来の課題に立ち向かうことができました。
つまり、今回の卒業制作では、これまでよりも専門的な知識が身についただけでなく、実践力も発揮でき、多くのことを得ることができたと感じています。同時に、この作業を一生懸命頑張ったので、小さな達成感も得られます。これからの実際の仕事も、最善を求めるのではなく、より良いものだけを求めて頑張っていきましょう!また、この卒業制作の過程で多大なご協力をいただいた講師やクラスメートに心より感謝いたします。
このプログラムは基本的に技術的にも機能的にもユーザーのニーズを満たします。しかし、初期設計のため機能が十分ではなく、細部の設計も不十分です。
这次的毕业设计,我受益匪浅,让我的思维方式更加缜密,能多个角度的看待、处理问题;知道遇到问题该如何去分析问题、解决问题。相信这些都会让我在以后的工作中受益无穷的。
参考文献
[1] 李刚,疯狂Java讲义(第3版),北京:电子工业大学出版社,2014.7
[2] 明日科技,Java从入门到精通(第4版),北京:清华大学出版社,2016(2017.1重印)
[3] 荣钦科技 Java2游戏设计.清华大学出版社,2004.
[4] 高凌琴 陈青华.俄罗斯方块游戏关键技术探讨[J].信息技术与信息化讨,2008年第二期
[5] 艾克尔.Java编程思想[M].北京:机械工业出版社,2005.2
[6] (美) Paul Hyde.Java线程编程[M].北京:人们邮电出版社,2003
[7] Martin dejode.Symbian OS J2ME[M].北京:人民邮电出版社,2005.10
[8] 朱福喜. Java程序设计技巧与开发实例[M].北京:人民邮电出版社,2004.2
[9] 袁海燕 王文涛.Java实用程序设计100例[M].北京:人民邮电出版社,2005.2:51~96
[10] 黄复贤.俄罗斯方块游戏的敏捷设计与开发[J]. 电脑编程技巧与维护,2005.4
[11] (美)Bill Venners.深入Java虚拟机[M].北京:机械工业出版社,2003.9.63~98
[12] 闻怡洋.J2ME MIDP 1.0/2.0无线设备编程指南[M].北京:北京大学出版社,2004.5:393~420
[13]赵东跃.俄罗斯方块编程[J].电脑编程技巧与维护,1998年第六期
[14]殷兆麟.Java网络编程基础[M].北京:北方交通大学出版社,2004
[15] (美)John Zukowski.Java 2 从入门到精通[M].北京:电子工业出版社,1999
[16] 宋波.Java应用开发教程[M].北京:电子工业出版社,2002
[17] 托普雷.J2ME技术手册[M].北京:中国电力出版社,2004.6:259~312
附录A 外文原文
The psychology of Tetris
Shapes fall from the sky, all you have to do is to control how they fall and fit within each other. A simple premise, but add an annoyingly addictive electronica soundtrack (based on a Russian folk tune called Korobeiniki, apparently) and you have a revolution in entertainment.
Since Tetris was launched on the world in the 1980s, millions of hours have been lost through playing this simple game. Since then, we’ve seen games consoles grow in power, and with it the appearance of everything from Call of Duty to World of Warcraft. Yet block and puzzle games like Tetris still have a special place in our hearts. Why are they are so compelling?
The writer Jeffrey Goldsmith was so obsessed with Tetris that he wrote a famous article asking if the game’s creator Alexey Pajitnov had invented “a pharmatronic?” – a video game with the potency of an addictive drug. Some people say that after playing the game for hours they see falling blocks in their dreams or buildings move together in the street – a phenomenon known as the Tetris Effect. Such is its mental pull, there’s even been the suggestion that the game might be able to prevent flashbacks in people with PTSD.
I had my own Tetris phase, when I was a teenager, and spent more hours than I should have trying to align the falling blocks in rows. Recently, I started thinking about why games like Tetris are so compelling. My conclusion? It’s to do with a deep-seated psychological drive to tidy up.
Many human games are basically ritualised tidying up. Snooker, or pool if you are non-British, is a good example. The first person makes a mess (the break) and then the players take turns in potting the balls into the pockets, in a vary particular order. Tetris adds a computer-powered engine to this basic scenario – not only must the player tidy up, but the computer keeps throwing extra blocks from the sky to add to the mess. It looks like a perfect example of a pointless exercise – a game that doesn't teach us anything useful, has no wider social or physical purpose, but which weirdly keeps us interested.
There's a textbook psychological phenomenon called theZeigarnik Effect, named after Russian psychologist Bluma Zeigarnik. In the 1930s, Zeigarnik was in a busy cafe and heard that the waiters had fantastic memories for orders – but only up until the orders had been delivered. They could remember the requests of a party of 12, but once the food and drink had hit the table they forgot about it instantly, and were unable to recall what had been so solid moments before. Zeigarnik gave her name to the whole class of problems where incomplete tasks stick in memory.
The Zeigarnik Effect is also part of the reason why quiz shows are so compelling. You might not care about the year the British Broadcasting Corporation was founded or the percentage of the world's countries that have at least one McDonald's restaurant, but once someone has asked the question it becomes strangely irritating not to know the answer (1927 and 61%, by the way). The questions stick in the mind, unfinished until it is completed by the answer.
Game theory:
Tetris holds our attention by continually creating unfinished tasks. Each action in the game allows us to solve part of the puzzle, filling up a row or rows completely so that they disappear, but is also just as likely to create new, unfinished work. A chain of these partial-solutions and newly triggered unsolved tasks can easily stretch to hours, each moment full of the same kind of satisfaction as scratching an itch.
The other reason why Tetris works so well is that each unfinished task only appears at the same time as its potential solution – those blocks continuously fall from the sky, each one a problem and a potential solution. Tetris is a simple visual world, and solutions can immediately be tried out using the five control keys (move left, move right, rotate left, rotate right and drop – of course). Studies of Tetris players show that people prefer to rotate the blocks to see if they'll fit, rather than think about if they'll fit. Either method would work, of course, but Tetris creates a world where action is quicker than thought – and this is part of the key to why it is so absorbing. Unlike so much of life, Tetris makes an immediate connection between our insight into how we might solve a problem and the means to begin acting on it.
The Zeigarnik Effect describes a phenomenon, but it doesn't really give any reason for why it happens. This is a common trick of psychologists, to pretend they solved a riddle of the human mind by giving it a name, when all they've done is invented an agreed upon name for the mystery rather than solved it. A plausible explanation for the existence of the Effect is that the mind is designed to reorganise around the pursuit of goals. If those goals are met, then the mind turns to something else.
Trivia takes advantage of this goal orientation by frustrating us until it is satisfied. Tetris goes one step further, and creates a continual chain of frustration and satisfaction of goals. Like a clever parasite, Tetris takes advantage of the mind's basic pleasure in getting things done and uses it against us. We can go along with this, enjoying the short-term thrills in tidying up those blocks, even while a wiser, more reflective, part of us knows that the game is basically purposeless. But then all good games are, right?
If you would like to comment on this article or anything else you have seen on Future, head over to our Facebook page or message us on Twitter.
附录B 外文翻译
俄罗斯方块的心理效应
这一人们喜闻乐见的游戏成功的秘诀在于抓住了我们重复排列与使用的心理乐趣。
几何图形从屏幕上方缓缓降落,你要做的就是控制其降落方式并与其他图形排列消除。游戏的初衷很简单,但加上了令人上瘾的背景电子音乐后(据说来自俄罗斯民谣Korobeiniki)人们的娱乐生活发生了翻天覆地的变化。
自从1986年俄罗斯方块问世后,这一简单的游戏耗去了玩家数百万个小时。从那时起,从使命召唤到魔兽世界,游戏操纵平台的外观和性能都在茁壮发展。但像俄罗斯方块这样的方块益智类游戏始终占据了我们心中的一席之地。为何它们如此经久不衰呢?
作家杰弗里·戈德史密斯是沉迷于俄罗斯方块不能自拔,乃至于他写了一篇著名的文章,文中提到俄罗斯方块的发明者阿里克谢·帕吉诺特夫是否发明了一种“瘾药”——让人可以玩出瘾。一些人说自己连玩了几小时俄罗斯方块后连梦里都会出现降落的方块,还有看街上的大楼都在移动——这是一种名为“俄罗斯效应”的现象。这是游戏产生的心理推动作用,还有建议称那些患有创伤后精神紧张性障碍的人们需要预防游戏产生的幻觉重现。
当我十几岁的时候也有过一段俄罗斯方块沉迷期,我花了很多时间在方块的排列组合上。最近,我开始反思为什么俄罗斯方块这类游戏能够长青。说说我的结论吧,植根人们心中的心理驱使作用是整理这些方块的关键。
很多游戏的宗旨大体都是整理消除。落袋台球(snooker)就是典型的例子(对于非英国人来说叫做pool)。第一个人把球打乱后,其他人依照不同规则轮流将球射入落袋里。俄罗斯方块在这一基本框架中加入了电脑控制的成分——不光是玩家要整理方块,电脑还会不断从上方扔下额外的方块来制造凌乱。游戏看起来就是整一个漫无目的的过程,完全没有寓教于乐的成分在内,也没有深远的社交或是心理意义,但是我们却意外地为此着迷。
ロシアの心理学者ブルーマ・ゼガルニクにちなんで「ザイガルニク効果」と呼ばれる代表的な心理現象がある。1830 年代、ツァイガルニクは混雑したカフェで、ウェイターたちが素晴らしい思い出を持っていることに気づきましたが、それは食事が運ばれてくるまでのことでした。彼らは 12 人のテーブルで何を注文したかは覚えていますが、食べ物や飲み物が出されるとすべてを忘れてしまい、以前の確かな記憶を思い出すことができなくなります。ツァイガルニクは、未完のタスクが記憶に残り続けるこの現象を、自分の名前にちなんで名付けました。
ツァイガルニク効果は、諜報番組が非常に人気がある理由の 1 つです。BBC が何年に設立されたか、マクドナルドが少なくとも 1 軒ある国は世界で何カ国あるかなどは気にしないかもしれませんが、このような質問が出ると、答えが分からないと不快に感じるでしょう (ちなみに、答えは 1927 年で 61%)。疑問は答えられるまで頭の中に残ります。
ゲーム原理
テトリスは常にタスクを作成することで私たちの神経を支配し続けます。ゲーム内の各リンクが謎を解き、列を並べたり完了するとグラフィックが消えますが、常に新しいグラフィックが表示され、サイクルが再び始まります。部分的に解決されたタスクチェーンや新たに形成されたタスクチェーンは時間を潰すのに非常に便利で、満足感と不安感の繰り返しが瞬間ごとに満たされます。
テトリスの人気のもう 1 つの理由は、完了すべきタスクが潜在的な解決策と並行して配置されていることです。徐々に出現するブロックにはそれぞれ独自の配置方法があります。テトリスは、5 つのボタン (もちろん、左、右、左折、右折、着陸) を操作することで解決策にすぐに到達できる、シンプルなビジュアルの世界です。テトリス プレイヤーの研究によると、人々は一般に、ブロックが落ちるのを見ながら考えるよりも、ブロックを回転させて一致するかどうかを確認することを好みます。もちろんどちらの方法も可能ですが、テトリスの世界では常にアクションが優先され、それが魅力の鍵となります。生活とは異なり、テトリスは問題に対処するときに私たちが見ているものと考えていることを直接結びつけ、問題に対して即座に行動を起こすことができます。
ツァイガルニク効果は現象を説明するものですが、その原因と結果を説明することはできません。これは心理学者の常套手段で、人間に名前を付けることで人間の謎を解いたように見えますが、実は貪欲に自分の名前を付けただけで、何の解決にもなっていません。この現実を合理的に説明するには、目標を達成する過程で脳の回路が再編成されるということです。この目標が達成されれば、思考は他のことに移ります。
パズル ゲームは、心理的到達原理を利用して、満足するまで私たちをイライラさせ続けます。テトリスは、失敗と成功の間に継続的な連鎖を生み出すことでさらに一歩進んでいます。テトリスは、賢い寄生虫のように、ゲームを完成させて再利用することで人々の心理的な喜びを利用します。たとえ私たちの性格の理性的で成熟した部分は、これが基本的に無意味なゲームであることを理解しているとしても、私たちはプレイしている間、ブロックを配置する楽しみを一時的に満喫します。でも、楽しいゲームはすべてそうじゃないでしょうか?