goo blog サービス終了のお知らせ 

パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Pythonってこんな形 トランプでカードを出すタイプのプログラム 

2022-08-06 | 新規1000万人ぐらいにプログラムをマスターしてもらいたい

色は4色、数値は0から12、同じ数値、色のものは2つずつ

 

場には色が同じで数字が並んでいるものと、同じ数字で色が違うものの2種類を出して

それにつなげたり、分割したり、取ったりして自分の持っているカードを先になくした方が勝ち

何もできないときはカードを一枚山札から取る

 

ラミーキューブというゲームが元になっている

今回は上のプログラムを10画面で簡易解説

アルゴリズムは出せるものを優先順位で出していき、出せない時に場から取って、つなぎで出せる時は1枚取る

 

 

場に置かれている並びはクラスで管理

PUSHは3枚並びか同じかを出す 関数名の0は数値並びで同じ色 1は同じ数値で色違い

cardsには手持ちのカードがリストで入っています

 

addは1枚追加

この記事では、なんとなく Pythonのプログラムってこんな形 というのを見ていただければいいという気持ちです

 

3枚の色から残り色を見つけるもの(同じ数値のものに1枚足せる色を見つける)

1色から残りの3色を見つけるもの

同じ色の3枚に残りの色が足せればadd1

 

take0は場の数値並びから取れるものを取って、それを使ってPUSHできるような実際に取ります

 

場から取得できるカードを辞書型でキーをカード、バリューを場のIDで返す

take1は場の同じ数値4枚から取れるものを取って、それを使ってPUSHできるような実際に取ります

 

split0は場の数値並びが6枚以上の時、分割してそれにつなげられるカードがあるなら分割します(現在うまく機能しないので作っただけ)

split0bは場の数値並びが7枚以上の時、一枚取って、分割してそれにつなげられるカードがあるなら分割します

 

reach_take1は渡されてきたカードと同じ数字で違う色のカードが場から2枚以上取れれば1枚取る

reach_take1_0はもう今となってはわかりません(バグってそう)

 

join_stackは場の並びでつなげられるものをつなぐのですがうまく動いてないのでダミー状態(環境側が製作中かも)

seqは数値の並びの先頭をキーにして残りをバリューに入れて3枚の数値続きに検出に利用しています

 

プレイヤーのindexごとにカードの情報を取得しています

場の情報を取得しています

数値並びが3枚あれば場に置く

同じ数値で違う色が3枚あれば場に置く

 

次につながる取りがあれば取る

場に1枚つなげられればつなげる

2枚とれればPUSHできるなら取る

場の並びを2つつなげられればつなぐ、手がなければ待つ

シンプルな1手読み+αぐらいでそこそこのプログラム量になりました

 

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。