Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Snake Game 🐍

2025年09月19日に「Dev.to」が公開したITニュース「Snake Game 🐍」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

「Snake Game」は、PythonとPostgreSQLを連携させ、データベース上でスネークゲームを実装する記事だ。`psycopg2`ライブラリでDBと接続し、盤面管理やヘビの移動ロジックをPostgreSQLの関数として処理。Pythonはゲーム開始や操作、盤面表示を担当する構成で、データベースをバックエンドとするゲーム開発の基礎を学べる。

出典: Snake Game 🐍 | Dev.to公開日:

ITニュース解説

この記事のコードは、Pythonというプログラミング言語を使って「Snake Game」を実装したものだ。しかし、一般的なSnake Gameとは異なり、このゲームの状態管理にはPostgreSQLというデータベースが使われている点が大きな特徴だ。システムエンジニアを目指す上で、プログラムとデータベースの連携は非常に重要なスキルとなるため、このコードを通してその基礎を学ぶ良い機会となる。

プログラムを実行する前には、必要なソフトウェア部品(依存関係)をインストールする必要がある。これは、料理をする前に食材を揃えるようなものだ。具体的には、requirements.txtというファイルにリストアップされているライブラリや、特にpsycopg2-binaryという、PythonからPostgreSQLデータベースを操作するためのライブラリをpip installコマンドでインストールする必要がある。もしこれがないと、プログラムはデータベースに接続できず、エラーで停止してしまう。

コードの冒頭にはimport osimport sysといった記述がある。これらはPythonの標準モジュールで、osはオペレーティングシステム(コンピュータの基本的な動作を管理するソフトウェア)に関する操作、例えばコマンドを実行して画面をクリアする際などに使われる。sysはPythonインタプリタ(プログラムを実行するソフトウェア)に関する操作、例えばエラーメッセージを出してプログラムを強制終了させる際などに使われる。

このゲームの核心は、データベースとの連携にある。PythonからPostgreSQLに接続するために、先ほどインストールしたpsycopg2というライブラリが使われる。プログラムはDB_PARAMSという辞書(キーと値のペアでデータを格納する形式)を使って、どのデータベースに、どのユーザー名で、どのパスワードで、どのコンピュータ(ホスト)の、どのポート番号で接続するかという情報をまとめている。これらの情報は、os.getenvという関数を使って環境変数から取得するようになっている。環境変数を使うことで、パスワードなどの機密情報をコードの中に直接書かずに済み、プログラムの安全性や柔軟性が高まる。

connect()関数は、これらの接続情報を使って実際にデータベースへの接続を確立する役割を担う。そして、with connect() as conn, conn.cursor() as cur:という構文は、データベースに接続し、その接続を使ってデータベースに命令を送るための「カーソル」というものを用意する一連の流れを、安全かつ簡潔に記述するためのものだ。プログラムが正しく動いている間だけ接続を開き、処理が終われば自動的に接続を閉じるようにすることで、データベースへの負荷を減らし、リソースの無駄遣いを防ぐことができる。

ゲームの各操作は、データベースの関数と連携している。 init_game(rows=10, cols=20)関数は、新しいゲームを開始する際に呼ばれる。この関数は、指定された行数と列数でゲームボードを初期化するようデータベースに命令を送り、新しく始まったゲームの識別子(ゲームID)を受け取る。このゲームIDを使って、以降の操作でどのゲームを対象にするかを指定する。 get_board(gid)関数は、現在のゲームボードの状態をデータベースから取得し、プログラムに返す。これにより、ゲームの盤面が画面に表示される。 step(gid, direction)関数は、プレイヤーの入力(方向)を受けて、ゲームを1ステップ進める役割を果たす。これもデータベースに命令を送り、スネークを移動させたり、エサを食べさせたり、壁にぶつかったりといったゲームロジックの処理をデータベース側で行わせ、その結果(例えば「ゲームオーバー」や「進行中」などのステータス)を受け取る。

ユーザーからの入力処理も実装されている。KEY_TO_DIRという辞書は、キーボードからの入力('w', 'a', 's', 'd')を、ゲーム内で使う方向の表現('U', 'L', 'D', 'R')に変換するために使われる。read_key()関数は、ユーザーがキーボードから何かキーを押したときに、その入力を1文字だけ読み取るための特別な機能だ。これは、ゲームがリアルタイムでプレイヤーの操作に反応するために必要となる。

プログラムの実行はmain()関数から始まる。まず、init_gameを呼び出して新しいゲームを始め、ゲームIDを表示する。その後、while Trueという無限ループに入る。このループが、ゲームが終了するまで繰り返し実行される部分だ。ループのたびにos.system('clear')で画面をクリアし、get_board(gid)で取得した現在のゲームボードの状態を表示する。次に、read_key()でユーザーからのキー入力を待ち、'q'が押されればゲームを終了する。'w', 'a', 's', 'd'キーが押されれば、それに対応する方向にゲームの進行方向を更新する。その後、step(gid, current_dir)を呼び出してゲームを1ステップ進める。もしstep関数が返したステータスに「dead」という文字が含まれていれば、ゲームオーバーと判断し、最終的なボード状態を表示してからループを抜けてプログラムを終了する。

このPythonコードは、単なるゲームの実装だけではない。データベースをバックエンドとして利用したアプリケーション開発の基本的な構造を示している。データ(ゲームの状態)をプログラム内部だけでなく、外部のデータベースで管理することで、データの永続性(プログラムが終了してもデータが消えないこと)や、複数のプログラムからのアクセス、より複雑なデータ処理への対応といったメリットが得られる。システムエンジニアにとって、このようにプログラムが外部システム、特にデータベースと連携する仕組みを理解することは、実践的な開発の重要な第一歩となるだろう。

関連コンテンツ

関連IT用語