3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS サービス名タイピングゲーム - 解説記事

はじめに

本記事では、AWSのサービス名をタイピングするゲームの作成手順について解説します。このゲームは、Pythonのゲームライブラリ pygame を用いて構築されており、pyinstaller を使用して実行ファイルを作成する方法も含まれています。

目次

  1. プロジェクトの概要
  2. 必要な環境
  3. インストール方法
  4. 仮想環境(venv)の設定方法
  5. 使用方法
  6. pyinstaller での実行ファイル作成
  7. ゲームの詳細
  8. まとめ

プロジェクトの概要

このゲームは、AWSのサービス名を素早く正確にタイピングすることでスコアを競います。各ラウンドでランダムに表示されるサービス名をタイピングし、時間内にできるだけ多くのポイントを獲得してください。

必要な環境

  • Python 3.x
  • pygame ライブラリ

インストール方法

Pythonとpygameのインストール

まず、Pythonがインストールされていることを確認し、pygame ライブラリをインストールします。

pip install pygame

次に、リポジトリをクローンまたはダウンロードします。

git clone https://github.com/your-username/aws-typing-game.git
cd aws-typing-game

仮想環境(venv)の設定方法

仮想環境を使用すると、依存関係が隔離され、プロジェクト間でのライブラリの衝突を避けることができます。以下の手順で仮想環境を設定します。

  1. 仮想環境を作成します

    python -m venv venv
    
  2. 仮想環境をアクティブにします

    • Windows:

      .\venv\Scripts\activate
      
    • macOS/Linux:

      source venv/bin/activate
      
  3. 必要なライブラリを仮想環境内にインストールします

    pip install pygame
    

使用方法

  1. 仮想環境をアクティブにします(上記の手順を参照)

  2. ゲームのメインスクリプトを実行します

    python main.py
    
  3. ゲームが起動したら、表示されるAWSサービス名をタイピングしてエンターキーを押します

  4. 正確にタイピングすることでスコアが加算されます。タイムリミット内にできるだけ多くのサービス名をタイピングしてください

pyinstaller での実行ファイル作成

ゲームを実行ファイルとして配布したい場合は、pyinstaller を使用して以下の手順で作成します。

  1. 仮想環境がアクティブな状態で、pyinstaller をインストールします

    pip install pyinstaller
    
  2. pyinstaller を使用して実行ファイルを作成します

    pyinstaller --onefile main.py
    
  3. dist フォルダ内に main 実行ファイルが生成されます。このファイルをダブルクリックすることでゲームを起動できます

ゲームの詳細

ゲームの概要

このゲームは、プレイヤーがAWSのサービス名をタイピングし、正確に入力することでスコアを競うゲームです。以下は主要なゲームロジックの詳細です。

ゲームの主要クラス

  • Word クラス:

    各AWSサービス名を表すクラスです。textxy の属性を持ち、スクリーン上での描画と移動を担当します。

    class Word:
        def __init__(self, text, x):
            self.text = text
            self.x = x
            self.y = 0
    
        def move(self, speed):
            self.y += speed
    
        def draw(self, screen):
            text_surface = FONT.render(self.text, True, BLACK)
            screen.blit(text_surface, (self.x, self.y))
    
  • Game クラス:

    ゲーム全体のロジックを管理するクラスです。ゲームの開始、プレイ、ゲームオーバーの各状態を制御します。

    class Game:
        def __init__(self):
            self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
            pygame.display.set_caption("AWS Service Name Typing Game")
            self.clock = pygame.time.Clock()
            self.start_time = 0
            self.reset_game()
    
        def reset_game(self):
            self.state = START
            self.words = []
            self.current_word = ""
            self.score = 0
            self.time_left = TIME_LIMIT
            self.input_text = ""
            self.composition = ""
    
        def run(self):
            while True:
                if self.state == START:
                    self.start_screen()
                elif self.state == READY:
                    self.ready_screen()
                elif self.state == PLAYING:
                    self.game_screen()
                elif self.state == GAME_OVER:
                    self.game_over_screen()
                elif self.state == RESULT:
                    self.result_screen()
    

ゲームの動作

  1. スタート画面:

    プレイヤーは難易度を選択し、ゲームを開始します。

    def start_screen(self):
        self.screen.fill(WHITE)
        title_text = FONT.render("AWS タイピングゲーム", True, BLACK)
        self.screen.blit(title_text, title_text.get_rect(center=(WIDTH//2, HEIGHT//5)))
        # 省略...
        pygame.display.flip()
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                mouse_pos = pygame.mouse.get_pos()
                # 省略...
    
  2. ゲーム画面:

    単語が上から落ちてくる間にタイピングし、正確に入力するとスコアが加算されます。

    def game_screen(self):
        self.screen.fill(WHITE)
        # 省略...
    
        for word in self.words:
            word.move(self.word_speed)
            word.draw(self.screen)
    
            if word.y > HEIGHT * 9/10:
                self.state = GAME_OVER
        # 省略...
    
  3. ゲームオーバー画面:

    時間切れになるとゲームオーバー画面が表示されます。

    def game_over_screen(self):
        self.screen.fill(RED)
        text = FONT.render(f"ゲームオーバー!{self.score}点でした。。スペースキーでリスタート", True, BLACK)
        self.screen.blit(text, text.get_rect(center=(WIDTH//2, HEIGHT//2)))
        pygame.display.flip()
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.reset_game()
                    self.state = START
    

まとめ

このゲームは、AWSのサービス名をタイピングし、スコアを競うシンプルで楽しいタイピングゲームです。pygame を使用してゲームを構築し、pyinstaller を使って実行ファイルを作成する手順も紹介しました。このプロジェクトを通じて、Pythonでのゲーム開発やパッケージングの基礎を学ぶことができます。

ゲームのさらなる改良や、他のテーマを用いたタイピングゲームの開発など、ぜひチャレンジしてみてください。質問やフィードバックがあれば、気軽にコメントしてください。

git repo

3
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?