Table of Contents
プログラミング学習を目的とした、ブロックを操作してスコアを競うゲームです。
FAQはこちら。
tutorialはこちら。
tetris_score_serverはこちら
tetris_battle_serverはこちら
Finder→Application→Utility→Terminalから、ターミナルを起動して以下コマンドを実行する。
install成功後、実行方法によりゲーム開始すればOK
# install pyqt6 and NumPy
brew install python3
brew install pyqt6
brew install numpy
# install other packages
brew install git
doc/files/install_mac.mdに手順を記載
windowsのpowershellを使ってテトリス環境を構築する場合の手順
WSL(Windows Subsystem for Linux)を使う場合の手順
Docker for Windowsを使う場合の手順
doc/files/install_ubuntu.mdに手順を記載
docker/README.mdに手順を記載
本リポジトリを取得
cd $HOME
git clone https://github.com/seigot/tetris
ゲーム開始用スクリプトを実行
cd tetris
python start.py
実行時、以下のようにオプションを与えることで、スコアアタック用サンプルコードの実行が可能です。
サンプルコードの詳細は、ブロック操作用サンプルプログラムを参照下さい。
python start.py -m sample
実行時、以下のようにオプションを与えることで、手動操作が可能です。 操作方法は、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 |
c key | hold | hold |
--nextShapeMode hate
オプション付きで実行するとhateモード(手動操作で遊ぶ用)になります。
python3 start.py -m keyboard --nextShapeMode hate
実行方法、サンプルコードを用意しています
詳細はAIについてを参照下さい。
実行方法、サンプルコードを用意しています
詳細はartについてを参照下さい。
表題のサーバを有志で用意しています
https://github.com/ChallengeClub/tetris_score_server
制限時間内の獲得スコアを評価します。
加点
項目 | 得点 | 備考 |
---|---|---|
1ライン消し | + 100点 | - |
2ライン消し | + 300点 | - |
3ライン消し | + 700点 | - |
4ライン消し | + 1300点 | - |
落下ボーナス | + 落下したブロック数を得点に加算 | - |
全消しボーナス | + 全消し時に得点 | - |
減点
項目 | 得点 | 備考 |
---|---|---|
gameover | - 500点 | ブロック出現時にフィールドが埋まっていたらgameover |
実行時、オプションを与えることで、難易度(レベル)を指定できます。
level1 | level2 | level3 | level4 | |
---|---|---|---|---|
実行方法 | python start.py | python start.py -l2 | python start.py -l3 | python start.py -l4 |
制限時間 | 180秒 | 180秒 | 180秒 | 180秒 |
ブロックの順番 | 固定(1-7まで順番に繰り返し) | ランダム | ランダム | ランダム |
フィールドの初期ブロック | なし | なし | あり | あり |
フレーム更新頻度 | 約1秒 | 約1秒 | 約1秒 | 約0.001秒 |
全消しボーナス | +500 | +500 | +4000 | +4000 |
備考 | - | - | - | - |
game_manager/game_manager.py
: ゲーム管理用プログラムgame_manager/board_manager.py
: ボード管理用プログラムgame_manager/block_controller.py
: ブロック操作用プログラム(ブロックの操作は、このファイルを更新して下さい。)start.py
: ゲーム開始用コマンド以下のような構成になっています。
ブロック操作用プログラムは、管理プログラムから定期的に呼び出されるので、ボード情報から次の動作を決定して下さい。
graph TB
subgraph ゲーム管理用プログラム
B1["game_manager.py"]
C1["board_manager.py"]
D1["block_controller.py<br>ここで現在のブロックの動作を決定する"]
B1 --update--> C1
B1 --getNextMove--> D1
D1 --NextMove--> B1
subgraph ボード管理用プログラム
C1
end
subgraph ブロック操作用プログラム
D1
end
end
subgraph ゲーム開始用コマンド
A1[start.py] --> B1
end
style ブロック操作用プログラム fill:#fef
詳細
まず、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/pyqt6/tetris/
テトリスの歴史を「ブロックが落ちるルール」の進化から学ぶ
『テトリスでPythonを学ぼうv4』優勝コード解説
次のブロックのランダム性は、現在はrandom関数の出力に依存しています。
しかし、こちらの記事によると選択方式が色々ありそうです。
有識者の方からアドバイス頂けると助かります。
nextShapeIndex = np_randomShape.random.randint(1, 8)
例えば、AI学習を目的としたルールのアップデート、火力ボーナス、などが該当する
issues
例えば、文法、アルゴリズム、AI要素、などが該当する
issues#120
~ HAVE FUN ~