paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

スリーカードポーカーゲームのGUI化への道2 手札と画像の紐づけ

未知の領域への挑戦は小出しに整理していくほうが進みも見えやすくいいですね。
今回はゲームの処理と画像の紐づけを行います。

今回やること

  • トランプのデッキから3枚引いた手札の画像を表示する
  • ゲーム実行部分の処理と紐づけて毎回違う手札を出力する

ゲームの処理

ターミナルプレイ用のコードをインポートします。
自作モジュールの読み込みも慣れました。

自作モジュールですが、

  • トランプのデッキ作成
  • シャッフル
  • 3枚手札を引く

ができます。

開発機のubuntuのログです。

Python 3.8.5 (default, Jul 28 2020, 12:59:40)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pokerapp
>>>
>>> deck = pokerapp.Deck()
>>> deck.shuffle()
>>> hand = pokerapp.Handout(deck)
>>> hand
['♣10', '♠5', '♢14']

今回は最後のhandを画像ファイルと紐づけます。

紐づけ方法

画像ファイル名は編集せず使おうと思っています。
そして作成済みのコードも変更したくない。

という考えのもと以下の方式にします。

  • 画像ファイルを辞書型で定義しておく
  • 手札確定後に画像ファイルを呼び出す
  • 画像ファイルをblitで出力する
{'♠2': 'src/2_of_spades.png', '♠3': 'src/3_of_spades.png' …}

の感じでカードの柄とファイル名を定義しておいて、
hand[0]、hand[1]、hand[2]で手札のキーがそのまま画像ファイルの値を呼び出せるようにします。

コード修正

出力部分は前回のものを流用して定義と手札引く部分を追加します。

masashi@PC-ubuntu:~/Three-card-poker$ git diff game.py
(略)
--- a/game.py
+++ b/game.py
@@ -1,6 +1,7 @@
 import pygame
 import sys
 from pygame.locals import *
+import pokerapp

 pygame.init()
 DISPLAYSURF = pygame.display.set_mode((600, 400))
@@ -8,10 +9,19 @@ pygame.display.set_caption('Three card poker')

 GREEN = (0, 127, 0)

+card_images = {'♠2': 'src/2_of_spades.png', '♠3': 'src/3_of_spades.png', '♠4': 'src/4_of_spades.png' (略、52枚分あります)
+
 width, height = 100, 144
-ace1 = pygame.image.load('src/ace_of_spades.png')
-ace2 = pygame.image.load('src/ace_of_hearts.png')
-ace3 = pygame.image.load('src/ace_of_diamonds.png')
+
+# poker play
+deck = pokerapp.Deck()
+deck.shuffle()
+
+player_hand = pokerapp.Handout(deck)
+
+ace1 = pygame.image.load(card_images[player_hand[0]])
+ace2 = pygame.image.load(card_images[player_hand[1]])
+ace3 = pygame.image.load(card_images[player_hand[2]])
 card1 = pygame.transform.scale(ace1, (width, height))
 card2 = pygame.transform.scale(ace2, (width, height))
 card3 = pygame.transform.scale(ace3, (width, height))

実行

これで手札が毎回ランダムになるはずなので3回試してみます。

  • 1回目

8ペア

f:id:paloma69:20210129200942p:plain

  • 2回目

10のハイカード

f:id:paloma69:20210129200951p:plain

  • 3回目

Kのハイカード

f:id:paloma69:20210129201001p:plain

いいですね。
トランプゲームっぽくなってきましたよ。

これを2セット作ればプレイヤーとディーラーの手札ができるので対決もできますね。
ちょっと見えてきました!

まとめ

ランダム性を見えるようにしただけでグッとゲームっぽくなった気がします。
ターミナル用のコードでゲームの処理はほとんどできているので、GUIの動きとどう連携させるかがキモですね。

今のままだと一瞬でカードが配られてしまうのでディレイの処理を入れて雰囲気を出したいですね。
ディーラーの方は裏面で出してからオープンという処理も加えたい。

スリーカードポーカーゲームのGUI化への道1 画像を表示させる

昨年の自粛期間中に勉強がてらスリーカードポーカーゲームを作ったのですが、ターミナルでしかプレイできません。
どうせゲーム作るならGUI化もしたいと思っていたのですが、そう言っている間に年が明けてしまいました。

今月再度緊急事態宣言で自粛中ですので、少しでも進捗を出したいと思います。

GUI化ってまじでどうすればいいかわからん

プログラムの分岐の流れはどうすればいいかはわかります。
しかし画像処理系の実際のコードをどう書けばいいのかが全然わかりません。
(画面だけは作れました)

だからといって何もしないのは進まないので、画像を1枚でも描画するところから始めようと思います。

とりあえずトランプ画像取得

ありがたいことにオープンソースのトランプ画像がありますので、いったんこちらを使わせていただきます。

GitHub - hayeah/playing-cards-assets: Playing Cards Image Assets (SVG+PNG)

仮で使わせていただきますので画像のcommitはしません。

pygame.blit

画像を描画するにはblit関数を使う様です。

Pygame チュートリアル - たすけて! 絵を動かすにはどうやるの?

一旦画面系は簡単に整理すると

  • display
    • ゲーム画面の作成
  • blit
    • 画像の描画
  • update
    • 画面を更新

で、blitをゲームループの中で処理してupdate書けていく感じですかね。

3枚表示してみる

とりあえず画像を表示させることを目標として3枚出してみます。
スリーカードポーカーゲームなのでね。

  • 追記したコード

3枚の画像を読み込んでリサイズ。
手動で画面に貼り付けます。
画像ロード、位置系はループで処理させたいですね。

(pygames) masashi@PC-ubuntu:~/Three-card-poker$ git diff game.py
(略)
--- a/game.py
+++ b/game.py
@@ -8,10 +8,23 @@ pygame.display.set_caption('Three card poker')

 GREEN = (0, 127, 0)

+width, height = 100, 144
+ace1 = pygame.image.load('src/ace_of_spades.png')
+ace2 = pygame.image.load('src/ace_of_hearts.png')
+ace3 = pygame.image.load('src/ace_of_diamonds.png')
+card1 = pygame.transform.scale(ace1, (width, height))
+card2 = pygame.transform.scale(ace2, (width, height))
+card3 = pygame.transform.scale(ace3, (width, height))
+
 while True:

        DISPLAYSURF.fill(GREEN)

+       x, y = 10, 10
+       DISPLAYSURF.blit(card1, (x,y))
+       DISPLAYSURF.blit(card2, (x + width,y))
+       DISPLAYSURF.blit(card3, (x + width * 2,y))
+
        for event in pygame.event.get():
                if event.type == QUIT:
                        pygame.quit()

実行

動かしてみます。

(pygames) masashi@PC-ubuntu:~/Three-card-poker$ python3 game.py

f:id:paloma69:20210126213946p:plain

いいですね。
ちゃんと画像が描画できました。

しかも(自分で選びましたが)いい組み合わせですね。
この役だとペアプラスボーナスとアンティボーナスで34倍の払い戻しですw

まとめ

とりあえずGUI化の第一歩は踏み出せました。

まだまだやることはたくさんありますが、とりあえずは

  • トランプ画像の選定
    • 裏面カードを使うか迷い中
  • 本体の処理と画像を紐づけ
  • ポーカーテーブルっぽい装飾

というところです。
次はこれらのどれか完了を目標に進めようと思います。

本シリーズ

スリーカードポーカーゲームを作りたい やっとゲームになった編 - paloma blog

gitで初めてbranchを切ってみた - paloma blog

GPGでファイルを単独で共通鍵暗号化する 復号化編

前回ツイートアプリのAPIキーを暗号化して保存しておこうということで実施しました。
お手軽に暗号化したかったのでパスワードのみの共通鍵暗号を行っています。

ツールが入っているPCが壊れてもすぐ使えるように別マシンで復号化したいと思います。

暗号化PC

ツールの入っているubuntuデスクトップです。

masashi@PC-ubuntu:~$ uname -a ; lsb_release -a
Linux PC-ubuntu 5.4.0-60-generic #67-Ubuntu SMP Tue Jan 5 18:31:36 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal
  • GPGのバージョン
masashi@PC-ubuntu:~$ gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: /home/masashi/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
      TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2

復号化PC

WindowsのWSL ubuntuで実施します。
こっちは16.04LTSです。(アップデートしないとね)

masashi@DESKTOP-986MNSO:~$ uname -a ; lsb_release -a
Linux DESKTOP-986MNSO 4.4.0-18362-Microsoft #1049-Microsoft Thu Aug 14 12:01:00 PST 2020 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.4 LTS
Release:        16.04
Codename:       xenial
  • GPGのバージョン

こちらのバージョンの方が古いです。

masashi@DESKTOP-986MNSO:~$ gpg --version
gpg (GnuPG) 1.4.20
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

復号化実施

無事復号化できるんでしょうか。

  • 元ファイル

WSLにファイルを移動しました。
もちろん暗号化されています。
なんのこっちゃわかりませんね。

masashi@DESKTOP-986MNSO:~$ cat configure.py.gpg
???<?1????J:=???|F???w?,\rT(?????TC???;?Ok0?yD8lxv?p??8??~?P?/?????Q????R??Go??|4wq?c?KA?2u??./zYZ?'?"63W?C??&?*?6K+??i?i??84??
                  ??=?????M}??sJ??7P
  • 復号化

共通鍵暗号のみなのでgpgコマンドだけでOKです。
パスワード入力後の出力です。

masashi@DESKTOP-986MNSO:~$ gpg configure.py.gpg
gpg: AES256 encrypted data
gpg: gpg-agent is not available in this session
gpg: encrypted with 1 passphrase

これで復号化されたはず。
復号化ファイルを見てみます。
キーが入っているので変数名だけ出してみます。

masashi@DESKTOP-986MNSO:~$ cat configure.py | awk '{print $1}'
CK
CS
AT
AS

OKですね。
キーは公開するわけにはいきませんが、無事に復号できました。

むすび

GPGでお手軽ファイル暗号化でした。
証明書も作成しなくていいので、パスワード管理さえ出来ればこれで重要ファイルを管理してもよさそうですね。

また、公開鍵と秘密鍵の管理が出来れば仕事でお客さんとのファイルやり取りも安全にできそうですが、今の現場ではずっとパスワード付きzipのままなんだろうな。
人の入れ替えも結構あるので仕方ないのですが、適材適所ですかね。

GPGでファイルを単独で共通鍵暗号化する

昔映画視聴メモ用のtwitter投稿ツールを作ったのですが、APIキーの保管をどうしようか悩んでいました。

paloma69.hatenablog.com

ツールはGithubに上げているのでいつでも復元できますが、さすがにキーを上げるわけにはいきません。
とは言えPCが壊れたらまたキーを拾ってくるという作業が発生します。
別にtwitterの開発者サイトから拾えるのですが、自分で持ってた方が何かと楽ですよね。

というわけでファイルを暗号化すればどこにおいてもいいんじゃない?という考えのもと実行しようと思います。

Linuxでのファイル暗号化

よく仕事でパスワード付きzip圧縮を行いますが、今回単独ファイルなのでzipで固める必要はありません。
ファイルを開けない点ではいいのですが、どうせなら中身を暗号化したいところです。

Windowsだったらアタッシェケースとかのツールで暗号化できますが、ツールはubuntuで動かしているのでいいツールが欲しいところです。

opensslコマンドで暗号化してもいいんですが、鍵作成などの面倒なことはやりたくありません。

ここでGPGです

よくSoftware DesignでGPGで暗号化云々という記事を見ましたが、公開鍵暗号を使って暗号化、複合化ができるようです。

GnuPGの略でOpenPGPという暗号化ツールの派生らしいです。
(PGPがそれらの元々の暗号化ツールらしい)

しかし、結局鍵作る必要があるのかと思っていたところパスワードのみでも暗号化できるようです。
よかった、これでやってみよう。

ディレクトリ構成

ツールのディレクトリ構成です。

masashi@PC-ubuntu:~/movietweet$ ls -l
合計 32
-rwxrwxr-x 1 masashi masashi 1660  114  2020 README.md
drwxr-xr-x 2 masashi masashi 4096 1011 00:25 __pycache__
-rw-r--r-- 1 masashi masashi  202  94  2019 configure.py # これを暗号化したい
-rw-r--r-- 1 masashi masashi  413  76  2020 gettw.py
-rw-rw-r-- 1 masashi masashi  127  516  2020 posttw.py
-rw-rw-r-- 1 masashi masashi  180  114  2020 requests.txt
-rwxrwxr-x 1 masashi masashi  369  516  2020 tweetapi.py
-rw-r--r-- 1 masashi masashi  925  927 12:00 twmovieinfo.sh

GPGのヘルプをみると-cオプションで出来るようです。

コマンド:
 
 -s, --sign                  署名を作成
     --clear-sign            クリア・テクスト署名を作成
 -b, --detach-sign           分遣署名を作成
 -e, --encrypt               データを暗号化
 -c, --symmetric             暗号化には共通鍵暗号方式のみを使用

…

実施してみる

早速やってみます。

masashi@PC-ubuntu:~/movietweet$ gpg -c configure.py 

これだけ。
デスクトップ環境で行いましたが、パスワード入力のウィザードが出てきました。

f:id:paloma69:20210109192650p:plain

2回入力して完了。

gpgファイルが出来てます。

masashi@PC-ubuntu:~/movietweet$ ls -l
合計 36
-rwxrwxr-x 1 masashi masashi 1660  1月 14  2020 README.md
drwxr-xr-x 2 masashi masashi 4096 10月 11 00:25 __pycache__
-rw-r--r-- 1 masashi masashi  202  9月  4  2019 configure.py
-rw-rw-r-- 1 masashi masashi  272  1月  9 18:35 configure.py.gpg
-rw-r--r-- 1 masashi masashi  413  7月  6  2020 gettw.py
-rw-rw-r-- 1 masashi masashi  127  5月 16  2020 posttw.py
-rw-rw-r-- 1 masashi masashi  180  1月 14  2020 requests.txt
-rwxrwxr-x 1 masashi masashi  369  5月 16  2020 tweetapi.py
-rw-r--r-- 1 masashi masashi  925  9月 27 12:00 twmovieinfo.sh

ファイルタイプ。
暗号化データになってます。

masashi@PC-ubuntu:~/movietweet$ file configure.py.gpg 
configure.py.gpg: GPG symmetrically encrypted data (AES256 cipher)

中身を見てみましょう。

masashi@PC-ubuntu:~/movietweet$ cat configure.py.gpg 
?       ??N?5????>????eN1u?l?L4?????q????Mx????v??MK?p?w3p?x??5h?~?,B?9???????;F???<?1????J:=???|F???w?,\rT(?????TC???;?Ok0?yD8lxv?p??8??~?P?/?????Q????R??Go??|4wq?c?KA?2u??./zYZ?'?"63W?C??&?*?6K+??i?i??84??
                                               ??=?????M}??sJ??7Pmasashi@PC-ubuntu:~/movietweet$ 

ちゃんと暗号化されてますね。 これでは解読できそうもありません。
これなら別の媒体に保存しても大丈夫そうです。

別のマシンでも複合化できるかは別途確認しようと思います。

参考サイト

PGP、OpenPGP、GnuPG 暗号化の違い

GnuPG - Linux Wiki

GPG でファイルをパスワードで暗号化(共通鍵暗号)するときの簡易コマンド一覧 - Qiita

ターミナルでローグをプレイしてみたい もう少し遊んだその後

昨年末インストールしたローグですが、年末年始でちょこちょこプレイしまして操作もこなれてきました。

プレイしててパッケージについて把握してきましたので残しておきます。

難易度

昔のゲームらしく難しいですね。
装備の運もありますが敵も結構強くて体力満タンじゃないとやられます。
ホブゴブリン(H)、オーク(O)、ケンタウロス(C)、クアッガ(Q)によくやられました。

巻物とポーションも使うまで効果がわからないのでこれも運になります。
深くは潜れていないので何ともですが、操作覚えた後の餓死は無かったですね。

パッケージ名

もちろんオリジナルでは無くローグライクrogue-clone Version IIIという名前の様です。
名称はRogue Clone IIIでいいのかな?

f:id:paloma69:20210104154859p:plain

このサイトに系譜がありました。
たぶんですが本家からクローンのようですね。

Rogue

私の最高スコア

ローグは特定アイテムを回収して持ち帰るというストーリーはありますが、獲得したゴールドがスコアになります。
20回前後しかプレイしていませんが、私の最高は1428Gでした。
潜った階数は忘れてしまいましたが、レベル11なので地下10階くらいですかね。
levelが階数のようなので、地下11階でオークにやられたようです。
経験値のレベルはExpという表記でスコアには出ないようです。

f:id:paloma69:20210104155020p:plain

Top Tenとありますが、ナンバー1しかランキングに出力されないようです。
プレイ記録としてランキング数を増やしたいのですが、変更できるのか不明です。
名前も一度変更したのですが、死んだらrootに戻ってしまってますね。

また、どこかにランキングサイトとかあるんでしょうか?
他の強者のスコアを見てみたいですね。


今年も明けましたが、ローグに限らずたくさんゲームをやっていきたいです。
作りかけのポーカーゲームも今年中に完成させないと。

本シリーズ

ターミナルでローグをプレイしてみたい 環境構築編 - paloma blog

ターミナルでローグをプレイしてみたい 遊ぶ編 - paloma blog

2020年下半期見た映画メモ

あと数時間で今年も終わりますが、恒例の下半期見た映画を振り返ろうと思います。
今年は家にいる時間が多かったので視聴数も多いです。

上半期はこちら

2020年上半期見た映画メモ & twitter取得ツール改修 - paloma blog

下半期見た映画

(movies) masashi@PC-ubuntu:~/movietweet$ python3 gettw.py | nl
     1  2020-12-29 23:07:24 No Country for Old Men
     2  2020-12-28 21:50:48 Point Break
     3  2020-12-20 22:09:36 Takers
     4  2020-12-19 22:39:02 The Girl in the Spider's Web
     5  2020-12-13 22:02:20 Like a Boss
     6  2020-12-12 23:33:19 The Equalizer 2
     7  2020-12-06 22:27:00 The Bounty Hunter
     8  2020-12-05 22:28:16 Billionaire Boys Club
     9  2020-11-29 22:48:05 Valerian and the City of a Thousand Planets
    10  2020-11-23 23:43:06 Blue Streak
    11  2020-11-23 14:14:54 Inglourious Basterds
    12  2020-11-21 23:28:56 Goodfellas
    13  2020-11-15 22:01:57 Ride Along
    14  2020-11-15 13:26:26 The Big Short
    15  2020-11-08 22:10:24 Get Smart
    16  2020-11-07 23:00:17 Indiana Jones and the Last Crusade
    17  2020-11-03 19:27:42 Lucy
    18  2020-11-01 21:17:25 Jue di tao wang
    19  2020-10-25 15:01:59 Morning Glory
    20  2020-10-18 22:33:01 Vacation
    21  2020-10-18 00:27:51 Scent of a Woman
    22  2020-10-11 21:50:11 Elle
    23  2020-10-11 00:25:22 Casino
    24  2020-09-30 22:28:37 Who Am I - Kein System ist sicher
    25  2020-09-26 22:52:40 Mr. Deeds
    26  2020-09-22 21:25:34 Hot Fuzz
    27  2020-09-22 10:14:53 2 Guns
    28  2020-09-20 22:03:55 A Million Ways to Die in the West
    29  2020-09-12 22:50:39 Fear and Loathing in Las Vegas
    30  2020-09-06 22:10:55 Austin Powers: The Spy Who Shagged Me
    31  2020-08-30 20:50:12 Hancock
    32  2020-08-29 22:48:02 Aloha
    33  2020-08-16 20:29:05 Kung Fu Hustle
    34  2020-08-15 23:26:45 American Ultra
    35  2020-08-09 22:21:21 Bulletproof
    36  2020-08-08 22:29:36 Broken City
    37  2020-08-01 23:42:26 The Blues Brothers
    38  2020-07-26 21:31:48 Gambit
    39  2020-07-18 23:04:35 The World's End
    40  2020-07-11 22:47:01 Drive
    41  2020-07-05 00:12:09 The Green Hornet

どうしてもアクション系を見るのが多くなってしまいますw

下半期ベスト3

絞るのは難しいですが、一応出しました。

  1. Who Am I - Kein System ist sicher (2014)
    邦題「ピエロがお前を嘲笑う」です。ハッカー映画ですが職業柄ずっと見たかった映画でした。
    ハッカー集団の知名度を上げるために色々侵入をやらかしていく話です。 この手の映画のハッキングシーンはかっこいいですね。
    ハッカー映画といいつつアクションが多めになりがちですが、この映画はアクションが多すぎずちゃんとハッキングしてるのも良かったです。
  2. The Big Short (2015)
    邦題「マネー・ショート 華麗なる大逆転」です。経済映画ながらもハラハラして面白かったです。
    サブプライムローンを元にしていて、証券のオプションを身の回りの環境で例えて解説してくれるのもわかりやすかったです。
  3. Morning Glory (2010)
    邦題「恋とニュースのつくり方」です。ニュース番組を立て直す話ですが、女性主人公がすごく前向きなのが印象に残っています。 こんな恋人がいたら明るい気持ちになりますね。

蜘蛛の巣を払う女」も入れるか迷いましたが、印象度でMorning Gloryにしました。

むすび

お酒を飲みながら見ているので覚えていない部分もあったり、ちょっともったいない見方をしているかもしれませんが、 楽しく見れているので良しとします。

来年もたくさん見たいですね。

ちなみに2020年の合計視聴本数は61本でした。

(movies) masashi@PC-ubuntu:~/movietweet$ python3 gettw.py | grep 2020 | wc -l
61

来年もよろしくお願いします。

ターミナルでローグをプレイしてみたい 遊ぶ編

前回インストールしたrogueを遊んでみたいと思います。

実行

ファイル実行で始まります。

root@debian:~# /usr/games/rogue 
Hello root, just a moment while I dig the dungeon...

操作方法

全てキーボード操作です。
移動もviよりでWASDではないので慣れるまで少しかかるかもですね。
私はvimmerなので問題ありませんでした。

攻撃や装備は

  1. 攻撃は方向キー押下
  2. アイテム系は
    1. アクション(装備、使う)を選択
    2. 使いたいアイテムを選択

という流れですね。

ここのサイトにまとまっててわかりやすいです。
バージョン的に違うものだと思いますが、操作は同じでした。

ローグ (rogue 5.4.4) マニュアル

プレイ画像

少し遊んでみました。
記号が拾えるアイテムです。

f:id:paloma69:20201231163624p:plain

マップだけ見ると私の世代的にまんまトルネコシレンを思い出しますねw

大文字アルファベットが敵です。(BとK)
倒さないとやられてしまいます。

f:id:paloma69:20201231163505p:plain

iでインベントリを開いて何を持っているか確認できます。

f:id:paloma69:20201231163733p:plain

呪いの装備もあります。
装備が交換できなくなった時だったかな。

f:id:paloma69:20201231163837p:plain

死亡

敵にやられるとドクロが出ます。
出ないパターンもあったので何かフラグがあるんでしょうか。

f:id:paloma69:20201231163859p:plain

こっちはスコアですが、飢えで死んでしまいました。

f:id:paloma69:20201231164017p:plain

所感

ターミナルという音も無しのシンプルな環境ながら意外と面白いです。
ずっと遊べますね。

今年の年末は帰省しないのでこいつとSteamのゲームで過ごそうと思います。

元は1980年代のゲームなのにこの時代からこんなに作り込まれていたんですね。
ローグライクのジャンルに限らずですが、最近のゲーム開発で斬新なアイデアを入れるのは相当に大変そうです。

おまけ

マニュアルらしきものがあったので開いてみたところNetBSD版?でカリフォルニア大学に所有権があるようです。
non-freeセクションのパッケージなので遊ぶ以外の余計なことなしないでおこうと思います。

root@debian:~# zcat /usr/share/doc/bsdgames-nonfree/rogue.me.gz
.\"    $NetBSD: rogue.me,v 1.6 2004/02/13 11:36:08 wiz Exp $
.\"
.\" Copyright (c) 1986, 1993
.\"    The Regents of the University of California.  All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\"    notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\"    notice, this list of conditions and the following disclaimer in the
.\"    documentation and/or other materials provided with the distribution.
.\" 3. Neither the name of the University nor the names of its contributors
.\"    may be used to endorse or promote products derived from this software
.\"    without specific prior written permission.

…

オリジナル版ではありませんでしたが、面白いですよ。