Table of Contents
プログラミング学習を目的とした、ブロックを操作してスコアを競うゲームです。
FAQはこちら。
tutorialはこちら。
tetris_score_serverはこちら
tetris_battle_serverはこちら
Finder→Application→Utility→Terminalから、ターミナルを起動して以下コマンドを実行する。
# install pyqt5 and NumPy
brew install python3
pip3 install pyqt5
pip3 install numpy
# install other packages
brew install git
doc/files/install_mac.mdに上記手順を記載
doc/files/install_ubuntu.mdに手順を記載
windowsのpowershellを使ってテトリス環境を構築する場合の手順
WSL(Windows Subsystem for Linux)を使う場合の手順
Docker for Windowsを使う場合の手順
docker/README.mdに手順を記載
本リポジトリを取得
cd $HOME
git clone https://github.com/seigot/tetris
ゲーム開始用スクリプトを実行
cd tetris
python start.py
game_manager/game_manager.py
: ゲーム管理用プログラムgame_manager/board_manager.py
: ボード管理用プログラムgame_manager/block_controller.py
: ブロック操作用プログラム(ブロックの操作は、このファイルを更新して下さい。)start.py
: ゲーム開始用スクリプト
以下のような構成になっています。
ブロック操作用プログラムは、管理プログラムから定期的に呼び出されるので、ボード情報から次の動作を決定して下さい。
詳細
実行時、以下のようにオプションを与えることで、手動操作が可能です。 操作方法は、PC操作準拠とゲーム機コントローラ準拠の2種類を選択できるようにしています。
手動操作 | PC操作準拠 | ゲーム機コントローラ準拠 |
---|---|---|
実行コマンド | python start.py -m keyboard | python start.py -m gamepad |
up key | 回転 | 落下 |
left key | 左に移動 | 左に移動 |
right key | 右に移動 | 右に移動 |
m key | 下に移動 | 下に移動 |
space key | 落下 | 回転 |
P key | Pause | Pause |
実行時、以下のようにオプションを与えることで、スコアアタック用サンプルコードの実行が可能です。
サンプルコードについてブロック操作用サンプルプログラムを参照下さい。
python start.py -m sample
制限時間内の獲得スコアを評価します。
加点
項目 | 得点 | 備考 |
---|---|---|
1ライン消し | + 100点 | - |
2ライン消し | + 300点 | - |
3ライン消し | + 700点 | - |
4ライン消し | + 1300点 | - |
落下ボーナス | + 落下したブロック数を得点に加算 | - |
減点
項目 | 得点 | 備考 |
---|---|---|
gameover | - 500点 | ブロック出現時にフィールドが埋まっていたらgameover |
実行時、オプションを与えることで、難易度(レベル)を指定できます。
level1 | level2 | level3 | level3+α | |
---|---|---|---|---|
実行方法 | python start.py | python start.py -l2 | python start.py -l3 | python start.py -l3 -d1 |
制限時間 | 180秒 | 180秒 | 180秒 | 180秒 |
ブロックの順番 | 固定(1-7まで順番に繰り返し) | ランダム | ランダム | ランダム |
フィールドの初期ブロック | なし | なし | あり | あり |
フレーム更新頻度 | 約1秒 | 約1秒 | 約1秒 | 約0.001秒 |
備考 | - | - | - | - |
まず、Githubアカウントを取得して本リポジトリを自リポジトリにforkして下さい。
リポジトリのフォークの例
- GitHubアカウントを作成/ログインする。
- GitHub で、https://github.com/seigot/tetrisリポジトリに移動します
- ページの右上にある [Fork] をクリックします。
参考:リポジトリをフォークする
その後、自リポジトリにforkしたtetris
をローカルマシンに取得して下さい。
cd ~
git clone https://github.com/<yourname>/tetris # "<yourname>"さん(yourname=自分のアカウント名に読みかえて下さい)のリポジトリを取得する場合
git clone https://github.com/seigot/tetris # このリポジトリを取得する場合
既にtetris
が存在しており、これを削除したい場合はrm -f
を実行して下さい。
# ubuntu/mac等の場合
sudo rm -rf tetris
# windows powershellの場合
Remove-Item -Recurse -Force tetris
取得後はソースコード変更、変更リポジトリに反映する等してアップデートを進めて下さい。
実行方法
を参考に実行環境の構築をして下さい。
環境構築の完了後、ブロック操作用プログラムblock_controller.py
を更新していってください。
提出時、自リポジトリのバイナリを公式リリースする場合は、Githubリリースの機能を使うと簡単なのでお勧めです。
自リポジトリのコードを提出(バイナリリリース)する場合の手順参考
リポジトリのリリースを管理する
7.オプションで、コンパイルされたプログラムなどのバイナリファイルをリリースに含めるには、ドラッグアンドドロップするかバイナリボックスで手動で選択します。
今後、本リポジトリもバージョンアップしていく予定です。
本リポジトリのバージョンアップを取り込む場合は、forkしたリポジトリにて以下を実行して下さい。
※追記 2021/5より、Github UI上から操作可能になったようです。
GitHub新機能「Fetch upstream」使ってみた! 1クリックで親リポジトリに追従(同期)
git checkout master # ローカルのmainブランチに移動
git remote add upstream https://github.com/seigot/tetris # fork元のリポジトリをupstream という名前でリモートリポジトリに登録(名前はなんでもいい。登録済みならスキップ)
git fetch upstream # upstream から最新のコードをfetch
git merge upstream/master # upstream/main を ローカルのmaster にmerge
git push # 変更を反映
参考:github で fork したリポジトリで本家に追従する
本リポジトリへ修正リクエストを送ることが可能です。詳しくは参考をご参照下さい。
※追記 Pull Request練習用リポジトリを作成しました。
test_pull_request
参考:
GitHub-プルリクエストの作成方法
[実践] はじめてのPull Requestをやってみよう
【GitHub】Pull Requestの手順
doc/files/FAQ.mdを参照下さい。
https://github.com/LoveDaisy/tetris_game
https://github.com/seigot/tetris_game (2021.12時点まで使用)
http://zetcode.com/gui/pyqt5/tetris/
テトリスの歴史を「ブロックが落ちるルール」の進化から学ぶ
次のブロックのランダム性は、現在はrandom関数の出力に依存しています。
しかし、こちらの記事によると選択方式が色々ありそうです。
有識者の方からアドバイス頂けると助かります。
- 参考:次のブロック選択処理 game_manager.py
nextShapeIndex = np_randomShape.random.randint(1, 8)
スコアアタック用サーバ
https://github.com/seigot/tetris_score_server
対戦用サーバ
https://github.com/seigot/tetris_battle_server
~ HAVE FUN ~