第1回 uecコンピュータ大貧民大会 マニュアル...第1章 はじめに...

63
1 UEC コンピュータ大貧民大会 マニュアル UEC コンピュータ大貧民大会実行委員会 http://www.tnlab.ice.uec.ac.jp/daihinmin/ 20061028

Upload: others

Post on 14-Mar-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第1回 UECコンピュータ大貧民大会

マニュアル

UECコンピュータ大貧民大会実行委員会

http://www.tnlab.ice.uec.ac.jp/daihinmin/

20061028版

Page 2: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

目 次

第 1章 はじめに 4

第 2章 大会運営方法 6

2.1 自作プログラムの部 . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1.1 対象者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1.2 おおまかな流れ . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.1.3 対戦の方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

2.1.4 ポイントの割り当て方 . . . . . . . . . . . . . . . . . . . . . 7

2.1.5 大会優勝者の決定方法 . . . . . . . . . . . . . . . . . . . . . 8

2.2 飛び入り参加の部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.1 対象者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.2.2 飛び入り参加者の自作プログラムの部への参加 . . . . . . . 8

第 3章 参加方法 10

3.1 方法 1 自分で作成する . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.1.1 クライアントソフトウェア開発キットの入手 . . . . . . . . . 11

3.1.2 クライアントソフトウェアの開発 . . . . . . . . . . . . . . . 11

3.1.3 動作チェック . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.1.4 実行委員会にソースコードを送る . . . . . . . . . . . . . . . 12

3.2 方法 2 実行委員と相談して作成する . . . . . . . . . . . . . . . . . 12

第 4章 UEC標準ルール 13

4.1 基本的なルール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1.1 カードの枚数 . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1.2 カードの配布方法 . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1.3 カードの強さ . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.2 カードの出し方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.1 パス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.2 ゲームの開始 . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.3 順番の回し方 . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.4 場の流れ方 . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.5 上がり方 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

1

Page 3: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

4.2.6 複数枚同時出し (ペア) . . . . . . . . . . . . . . . . . . . . . 15

4.2.7 階段 (連番) . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.2.8 革命 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

4.2.9 順位 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.3 カードの役割についてのルール . . . . . . . . . . . . . . . . . . . . 16

4.3.1 ジョーカー . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.3.2 スペードの 3 . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.3.3 8のカード (マークは問わない) . . . . . . . . . . . . . . . . . 17

4.4 特殊なルール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4.1 8切り . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4.2 しばり . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.5 今大会に特有のルール . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.5.1 千日手 (無限ループの処理) . . . . . . . . . . . . . . . . . . . 18

4.5.2 計算量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

4.6 ルールに関する質問先 . . . . . . . . . . . . . . . . . . . . . . . . . 19

第 5章 クライアント作成の準備 20

5.1 動作環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

5.2 CygwinをインストールしたWindowsでの開発 . . . . . . . . . . . 21

5.2.1 Cygwinのインストール . . . . . . . . . . . . . . . . . . . . 21

5.2.2 開発キットのダウンロード、解凍、コピー . . . . . . . . . . 22

5.3 knoppixによる開発 . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

5.3.1 開発にかかるコスト . . . . . . . . . . . . . . . . . . . . . . 25

5.3.2 開発環境の準備 . . . . . . . . . . . . . . . . . . . . . . . . . 25

第 6章 クライアントの改良、コンパイル、実行 30

6.1 改良の準備 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.1.1 cygwinの場合 . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.1.2 knoppixの場合 . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.2 クライアント・プログラムの改良 . . . . . . . . . . . . . . . . . . . 32

6.2.1 Cygwinを使う場合 . . . . . . . . . . . . . . . . . . . . . . . 32

6.2.2 knoppixを使う場合 . . . . . . . . . . . . . . . . . . . . . . . 33

6.3 クライアント・プログラムのコンパイル . . . . . . . . . . . . . . . 33

6.4 クライアント・プログラムの動作チェック . . . . . . . . . . . . . . 33

6.4.1 準備 (Cygwinの場合) . . . . . . . . . . . . . . . . . . . . . . 34

6.4.2 準備 (knoppixの場合) . . . . . . . . . . . . . . . . . . . . . 34

6.4.3 サーバーの実行 . . . . . . . . . . . . . . . . . . . . . . . . . 35

6.5 クライアントの実行 . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6.5.1 Cygwinの場合 . . . . . . . . . . . . . . . . . . . . . . . . . 36

2

Page 4: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

6.5.2 knoppixの場合 . . . . . . . . . . . . . . . . . . . . . . . . . 36

6.6 クライアントの改良について . . . . . . . . . . . . . . . . . . . . . 37

第 7章 通信のプロトコル 38

7.1 概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.2 カードの表現 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

7.3 通信手順 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.3.1 通信の概略図 . . . . . . . . . . . . . . . . . . . . . . . . . . 39

7.3.2 通信の繰り返し . . . . . . . . . . . . . . . . . . . . . . . . . 40

7.3.3 ゲーム開始前の準備 . . . . . . . . . . . . . . . . . . . . . . 43

7.4 補足事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

7.4.1 ジョーカー . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

7.4.2 パス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

7.5 プロトコルの知識は必要か? . . . . . . . . . . . . . . . . . . . . . . 45

第 8章 サーバー・プログラムについて 46

8.1 サーバー・プログラムの役割 . . . . . . . . . . . . . . . . . . . . . 46

8.2 インストール方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

8.3 使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

第 9章 標準クライアント 49

9.1 ソースの構造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

9.2 宣言済の変数一覧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

9.3 構造体の解説 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

9.3.1 scope type . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

9.3.2 state type . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

9.4 関数一覧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

9.4.1 daihinmin.c . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

9.4.2 connection.c . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

9.5 実行例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

第 10章 質問などの受付け 57

10.1 よくある質問 FAQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

10.1.1 大会自体に関する質問 . . . . . . . . . . . . . . . . . . . . . 57

10.1.2 ルールに関する質問 . . . . . . . . . . . . . . . . . . . . . . 58

10.2 問い合わせ先 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

第 11章 おわりに 61

3

Page 5: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第1章 はじめに

大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

つでしょう。このゲームは、1960年頃に日本で生まれたと言われており、海外で

は、ほとんどプレイされていないようです。本大会は、その日本固有の人気トラ

ンプ・ゲームである大貧民を、人が直接プレイするのではなく、プレイするコン

ピュータ・プログラムを作成して持ち寄り、対戦させる大会です。

情報系の学問に馴染みのない皆さんには、ご自分の頭の中にある大貧民のプレ

イの仕方を、アルゴリズム(問題解決手順)として正確に書き下していただき、プ

ログラム化していただくことで、情報系の学問の基礎に親しんでいただきたいと

思い、本大会を企画致しました。また、プログラミングの腕に覚えのある皆さん

には、会場で、是非、ハイレベルな戦いを繰り広げていただきたいと思います。本

大会では、プログラム同士の高速対戦を行いますので、配布されたカードの善し

悪しに左右されない、プレイのアルゴリズム本来の優劣を競うことができます。

本大会で実際に使用するプログラムの詳細につきましては、5章以降をご参照下

さい。ここでは、その概略だけ申し上げます。本大会で使用するプログラムには、

カードの配布や場の管理を行うサーバ・プログラムと、プレイヤーに対応するク

ライアント・プログラムの 2種類があります。そして、5人のプレイヤーに対応す

る 5つのクライアント・プログラムを、サーバ・プログラムにつないで対戦を行っ

ていただきます。それらのプログラムのソース・コードは、6章で述べる要領で公

開しておりますので、ダウンロードしてお使い下さい。

また、本大会には、プログラムがまったく組めない方も参加することができま

す。11月 18日に、会場の UECに直接お越しいただき、ティーチング・アシスタ

ントの電通大生と相談していただければ、ご自分のプログラムをその場で準備す

ることができます。ただし、その場合は、プログラムをゼロから組んでいる時間

はありませんので、標準プログラム(クライアント)に修正を加える程度のこと

しかできません。しかし、そのようにして、どなたにも、ご自分のプログラムを

準備できるようにしてあります。

4

Page 6: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

そして、ご自分で作成されたプログラムや、上記のような修正版プログラムを

持ち寄って、会場で対戦に参加して下さった方には、もれなく、下記デザインの

UEC特製トランプを記念品として進呈致します。

このトランプは、本大会のために特別に作成したものですので、大会参加の良

い記念品になることでしょう。また、最終的な優勝者は表彰し、ウェブ上でお名

前を公開させていただきます。栄えある、「第 1回UECコンピュータ大貧民大会

優勝者」(=大富豪)を目指して、皆様、奮ってご参加下さい。

参加の詳細につきましては、本マニュアルの当該ページをご参照下さい。それ

では 11月 18日に、東京都調布市の UECでお会いしましょう!

5

Page 7: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第2章 大会運営方法

ここでは、第 1回UECコンピュータ大貧民大会の運営方法について説明します。

なお、この章の内容は基本的に自作のクライアント・プログラムを作成して参加

される方が対象になります。

2.1 自作プログラムの部

この節は、自作のクライアント・プログラムを作成して参加される方の対戦に

ついて記述されています。対戦の回数は 100回としていますが、サーバ・プログラ

ムの効率化や、大会運営の都合上、対戦回数が増える可能性があるのでご注意く

ださい。

2.1.1 対象者

自作プログラムの部への参加となるのは、次の方です。

• 自作のクライアント・プログラムを作成された方

• 飛び入り参加を希望された方のうち、一部の方

これらの参加者の方々をグループに分割し、強いクライアント・プログラムを

決定していきます。

2.1.2 おおまかな流れ

ひとつのグループにおける対戦のおおまかな流れは次のようになります。

1. 5プレイヤー (5つのクライアント・プログラム)をひとつのグループとする。

2. 1回の勝敗が決まる度に、順位に応じてポイントが割り振られる。(ポイント

については 2.3節に書いてあります)

3. 同じグループで 100回の対戦をコンピュータ上で高速に行う。

6

Page 8: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

4. 得点が高いプレイヤーが上位グループに進出する権利を得る。

5. 得点が低いプレイヤーは敗退となる。

ひとことでいうと、5人 1組で対戦し、100回の対戦の合計ポイントが多いプ

レイヤーが勝利して、次の試合に参加できるということです。従って優勝を目指

していくためには可能な限り多くのポイントをゲットできるようなクライアント・

プログラムを作成する必要があります。

2.1.3 対戦の方法

ひとつのグループでは 100回の対戦が行われる予定です。なお、最初のうちは

ゆっくりと対戦のすすみ方をみられるようにしますが、遅くても 1回の勝敗が決

まった段階で可能な限り高速に試合を進めていきます。100回の対戦を終えるまで

の時間は、種々の準備や最初のゆっくりとした対戦の時間も含め、全体で約 30分

位と考えてください。

ちなみに、大会の会場では司会者がクライアント・プログラムの作成者の方に

インタビューを行う予定です。大げさなものではなく、どういう考え方でプログ

ラムを作成したかをちょっと伺う格好になります。

実行委員会では、観客の方に「どのクライアント・プログラムが強そうか」を

投票して頂くことを検討していますので、魅力的な解説を考えておくと大量の得

票を期待できるかもしれません。

2.1.4 ポイントの割り当て方

1回の対戦がおわるたびに、それぞれのプレイヤーにポイントが与えられます。

ポイントは順位に応じて決まります。当然、大富豪が一番たくさんのポイントを、

大貧民は一番少ないポイントを与えられるので、クライアント・プログラムは可

能な限りたくさんの回数、大富豪になれるような設計にする必要があります。

順位 級名 ポイント

1 大富豪 5

2 富豪 4

3 平民 3

4 貧民 2

5 大貧民 1

対戦は 100回行われるので、全部の対戦で大富豪だった場合は 500ポイントを、

全部の対戦で大貧民だった場合は 100ポイントを手にいれることになります。手

7

Page 9: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

にいれたポイント数が高い順に上位グループに参加し、それにもれた場合は敗退

となってしまいますので注意してください。

2.1.5 大会優勝者の決定方法

対戦を行ったグループ内でポイントが高かったプレイヤーから順に、1名または

2 名に上位グループでの対戦に参加していただく予定です。この部分の詳細は参

加人数に左右されますので、当日、会場にておしらせ致します。

グループ内で 100回対戦し、ポイントが高いプレイヤーが上位グループへ、と

いう流れで試合を進めていき、決勝グループに参加するプレイヤーを 5名選びだ

します。

この 5名で、100回の対戦を行い優勝者を決定する形になります。決勝グループ

については対戦の状況を見せる時間を長く取る事になりますので、インタビュー

の機会も増えます。司会者がマイクをお渡しすることになると思いますので、そ

の際はご協力をよろしくお願いいたします。

2.2 飛び入り参加の部

この節では、自作のクライアント・プログラムを作成しなかった方の対戦につ

いて説明していきます。

2.2.1 対象者

飛び入り参加の部で対戦を行って頂くのは、次の方です。

• 当日、実行委員と相談してクライアント・プログラムを作成した方

2.2.2 飛び入り参加者の自作プログラムの部への参加

飛び入り参加の方でも、自作プログラムの部へ参加するチャンスがあります。大

会当日、早い時間に飛び入り参加受付けに来て頂ければ、実行委員と相談して作

成したクライアント・プログラムを使って自作プログラムの部へ参加できる場合

があります。

何人の人が自作プログラムの部へ参加できるのか、何時までに飛び入り参加受

付けに来て頂ければいいのかについてはWebページでアナウンスを致します。自

作プログラムの部での対戦方法については、前節をご参照ください。

8

Page 10: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

クライアント・プログラムの作成

飛び入り参加受付けに、記入用紙を用意する予定です。この記入用紙に記入し

て頂いた上で、実行委員と相談を行い、クライアント・プログラムを作成する形

になります。

従ってクライアント・プログラムの自由度は比較的小さいものになります。

おおまかな流れ

飛び入り参加の部についても、対戦は 5人 1組で行います。大まかな流れは次の

ようになっています。

1. 5プレイヤーが集まったら試合開始

2. 1回の勝敗が決まる度に、順位に応じてポイントが割り振られる。(ポイント

については 2.3節に書いてあります)

3. 同じグループで多数の対戦を高速に行う。

4. 得点が高い 1名か 2名のプレイヤーは勝ち抜きとなり、次の試合にも参加する

5. 得点が低いプレイヤーは敗退

大会優勝者の決定方法

飛び入り参加の部では、大会優勝者を勝ち抜いた回数によって決定します。

勝ち抜いた回数がもっとも多い方が優勝となりますので、夕方に受付けをする

よりは早い時間に受付けを行って頂いた方が有利になる可能性があります。従っ

て優勝を狙う方は早い時間に来て頂くことをおすすめします。

9

Page 11: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第3章 参加方法

この章では UECコンピュータ大貧民大会に参加するための方法を説明します。参

加には大きく分けてふたつの方法があります。

1. 自分でクライアントソフトウェアを作成して参加する方法

2. 当日、実行委員と相談して作成したクライアントで参加する方法

これから、それぞれの方法について説明していきます。

3.1 方法1 自分で作成する

実行委員会としては、こちらの方法がオススメです。なぜなら、コンピュータ

大貧民大会を勝ち抜くための戦略を完全に自分で決めることができるからです。

自分で作成する場合は、

1. knoppixというCDから起動する Linux上で開発する (このマニュアルで説

明します)

2. Windowsに cygwinを導入して開発する

3. FreeBSD,Solaris,Linuxがインストールされた環境で開発する

などの方法があります。

1.についてはこのマニュアルで説明します。2,3の方法で開発する場合は、次の

ような流れに従って開発をすることになります。

1. 環境がWindowsなら cygwin(http://www.cygwin.com)を導入する (2.の方

法の場合に必要)

2. 開発キットをダウンロードする (http://www.tnlab.ice.uec.ac.jp/daihinmin/)

3. ダウンロードした開発キットを展開する (.tar.gzで固めてあります)

4. 開発キットに含まれている文章や、このマニュアルを参照しながらクライア

ント・プログラムのソースコードを編集する

10

Page 12: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

5. ソースコードをコンパイルし、動作チェックを行う

詳細は説明をお読み頂きたいと思いますが、方法 2の場合は時間や作業量の関

係上、凝ったクライアントソフトウェアを作成することはまず不可能です。

一方方法 1の場合は、自分が最強だと思う戦略を自由に記述することができま

す。なのでプログラミングをやったことがある人は、ぜひとも方法 1での参加を

オススメします。

3.1.1 クライアントソフトウェア開発キットの入手

UECコンピュータ大貧民大会のWebサイト (http://www.tnlab.ice.uec.ac.jp/daihinmin/)

で、標準的な動作を行うクライアントソフトウェア (標準クライアント)を公開し

ております。

この標準クライアントは手持ちのカードのうち、場に出すことができる一番弱

いカードを出します。ただそれだけです。他にインテリジェントな判断 (たとえば、

8など特殊な役割のあるカードは温存しておこう、など)は一切できません。

ただし、カードを出すための通信処理などの機能は一通り備えています。した

がって参加者の方はこの標準クライアントを改造して、強力なクライアントソフ

トウェアを作成して頂くことになります。

標準クライアントの改造方法などは、他の章に詳しく書いてありますので割愛

しますが、このマニュアルを読めばすぐにでも改造に取り掛かれるようになって

います。(少なくとも実行委員会一同はそう信じています。)

3.1.2 クライアントソフトウェアの開発

Webサイトから標準クライアントをダウンロードしたら、ソースコードの改造

に着手しましょう。標準クライアントの構造については後の方に詳しく解説して

あります。改造の方法はアイデア次第、好きなように改造してしまってください。

筆者が思いつく範囲でも · · ·

• 特殊な役割のあるカードを温存する (8,ジョーカーなど)

• ペアや階段として出せるカードは温存する

• 他のプレイヤーの状況によって戦略を変える

• 革命を起こす前に強いカードを優先的に処分しておく

このくらいアイデアは浮かんできます。ぜひともこれを越える優れたアイデア

を導入したプログラムを設計し、コンピュータ大貧民大会の優勝を目指して頑張っ

てください。

11

Page 13: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

3.1.3 動作チェック

プログラムが完成したら動作チェックを行いましょう。クライアントソフトウェ

ア開発キットには、ゲームを取り仕切るサーバーソフトウェアが含まれています。

開発したクライアントソフトウェアと標準クライアント、加えてサーバーソフト

ウェアがあれば動作チェックは可能です。詳細な方法は 6章に書いてあります。

3.1.4 実行委員会にソースコードを送る

動作チェックも完了し、(各自が考える)最強のクライアントができあがったら、

UECコンピュータ大貧民大会の実行委員会にソースコードを送ってみましょう。

実行委員会では、自作のクライアントソフトウェアで参加する方のソフトウェ

アを簡単にチェックします。チェックする内容は以下の通りです。

• エラーを出して不正終了することがないか

• 一目でわかる異常動作をしていないか

• その他、気になる点はないか

注意して頂きたいのが、作成者が意図した戦略が実行されているかどうかは判

断しないという点です。単純に、試合の途中でプログラムが無限ループに陥って

しまったり、不正終了してしまわないようにチェックを行うだけです。

したがって、自分が作ったプログラムが自分の思い通りに動作しているかは充

分にチェックをしたうえで、ソースコードを実行委員会に送って頂くようにお願い

します。

締め切りは 11月 12日、メールアドレスは [email protected]です。

3.2 方法2 実行委員と相談して作成する

プログラミングはやったことがない、よくわからないし忙しい、という人でも

心配はいりません。UECコンピュータ大貧民大会の実行委員が、大会への参加に

必要なクライアントソフトウェアを用意いたします。

具体的な方法としては当日会場で、簡単なチェックシートに記入 (場合によって

は入力)していただくことで、私たちが作成したクライアントを調整し、方法 2で

の参加者用のクライアントを作成する予定です。

ただ、ベースとするクライアント・ソフトウェアはそれほど高機能なものには

ならないと考えられます。さらには調整するといっても、時間的な都合もありま

すのでちょっとした改変程度に留まってしまうでしょう。

もしプログラミングができるのであれば、UECコンピュータ大貧民大会の実行

委員会は方法 1での参加を強くオススメします。

12

Page 14: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第4章 UEC標準ルール

この章では第 1回UECコンピュータ大貧民大会で採用する標準ルールについて説

明します。

大貧民には本当にたくさんのローカルルールが存在します。それぞれ矛盾する

ローカルルールも多いので、実行委員会では第 1回UECコンピュータ大貧民大会

用の標準ルールUECルール 2006を定めさせて頂きました。

なるべく多くの人が知っているルールを取捨選択したつもりです。こんなルー

ル知らないぞ、あのルールは無しですか、といった意見はあるかと思いますが、今

回はこの UECルール 2006に従って大会を進めさせて頂きます。

4.1 基本的なルール

4.1.1 カードの枚数

ゲームに使用するカードは各マークのエースからキングまでの 52枚と、ジョー

カー 1枚を加えた 53枚です。

4.1.2 カードの配布方法

初回は一番最初にサーバに接続してきたクライアントから順にカードを配りま

す。大貧民、大富豪などの序列が決定される 2回目以降は、大富豪から順にカー

ドを配布します。

4.1.3 カードの強さ

普通は 3が一番弱く、数字が大きくなるほど強いカードとなります。なお、エー

スはキングよりも、2はエースよりも強いものとします。革命 (後で説明します)が

発生すると、カードの強弱は逆転し、3がもっとも強いカードとなります。

13

Page 15: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

4.2 カードの出し方

場に出ているカードよりも強いカードを出すことができます。なお、場にでて

いるカードの出方に従う必要があります。たとえば、場に 3枚の階段が出ている

ときは自分も 3枚の階段しか出すことができません。

4.2.1 パス

自分に順番が回ってきたときは、カードを出すかパスをするかを決める必要が

あります。もし出せるカードがあっても、いろいろな理由で出したくないときは

パスをしてもかまいません。

ただし、一度パスをすると場が流れるまで (場にでたカードが無くなり、権利を

持った人が好きなカードを出せる状態になるまで)順番が回ってくることはありま

せんので注意してください。

4.2.2 ゲームの開始

各プレイヤーの手札が決まったら、ゲームの開始です。ゲーム開始時は、ダイ

アの 3を持っている人が権利を持っていることにします。必ずしもダイアの 3を

出す必要はありません。

4.2.3 順番の回し方

カードを出す順番は、ゲームに参加した順番に回ってきます。たとえば 3番目に

ゲームに参加した人の次に、カードを出せるのは 4番目に参加した人となります。

また、5番目に参加した人の次は 1番目の人の順番です。

4.2.4 場の流れ方

すべての人がパスをすると場が流れることになります。最後に場にカードを出

した人が権利を獲得し、好きなカードを出すことができるようになります。

仮に自分以外の人がすべてパスをしているけれど、自分はまだまだ出せるカー

ドがあるという場合には何度も自分に順番が回ってくることになります。つまり、

全員がパスを宣言するまで、場は流れないということです。

したがって、場合によっては一人の人が何度も連続でカードを出すケースも考

えられますので注意してください。

14

Page 16: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

4.2.5 上がり方

今回のルールでは、どんなカードでも上がることができます。ルールによって

は 2や 8で上がるとペナルティ、とする場合もありますが、今回はどのカードでも

ペナルティはありません。

もちろんジョーカーやスペードの 3で上がっても問題ありません。

4.2.6 複数枚同時出し (ペア)

同じ数字のカードを複数枚同時に場に出すことができます。このときマークは

問いません。ジョーカーを含めて出すこともできます。ジョーカーについては後

で詳しく説明します。

4.2.7 階段 (連番)

同じマークでつながった数字のカードが 3枚以上あれば、同時に出すことがで

きます。たとえばハートの 9、10、ジャックを持っている場合、階段として場に出

すことができます。連番でさえあれば枚数に制限はありませんが、マークが同じ

でなければいけないことに注意してください。

場に階段が出されている場合、出すことができるカードの条件は次の通りです。

• すべてのカードが場にでているカードよりも大きいこと

• 場にでている枚数と同じ数によって構成される階段であること

従って、場にスペードの 5-6-7が出ていたら、次に出せるのは 8-9-10以上の階段

となります。(この場合マークは問いませんが、後で説明する「しばり」が発生し

ている場合はマークに制限がかかります。)

なお、ジョーカーを含めて階段にすることもできます。ジョーカーについては

後で詳しく説明します。

4.2.8 革命

革命が発生すると、カードの強弱が逆転します。つまり 3が最強のカードにな

り、2が最弱のカードになります。革命は、次のカードが出されたときに無条件

で発生します。カードを出した人が革命を起こすかどうか選択することはできま

せん。

• 同じ数字のカードが 4枚同時に出されたとき

• 同じ数字のカード 3枚と、ジョーカーが同時に出されたとき

15

Page 17: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

• 同じ数字のカード 4枚とジョーカーが同時に出されたとき

• 5枚以上のカードが階段として同時に出されたとき

4.2.9 順位

最初に上がったプレイヤーから順に、大富豪、富豪、平民、貧民、大貧民とい

う序列付けを行います。序列に応じて次のゲームが始まる際、手札の交換が行わ

れます。それぞれの階級がどのように手札を交換するべきかを記したのが以下の

表です。

順位 階級名 カード交換で行う作業

1 大富豪 大貧民に好きなカードを 2枚渡す

2 富豪 貧民に好きなカードを 1枚渡す

3 平民 交換は行わない

4 貧民 富豪にもっとも強いカードを 1枚渡す

5 大貧民 大富豪に強いカードから 2枚渡す

貧民と大貧民については、サーバ側で強いカードを決定し、自動的に交換作業

が行われます。同じ数字のカードが複数あった場合どのカードを渡すかは、次の

優先順位によって決定されます。

1. スペード

2. ハート

3. ダイア

4. クラブ

4.3 カードの役割についてのルール

4.3.1 ジョーカー

ジョーカーは常に最強のカードとして扱われます。革命が起きていない状態であ

れば、2よりも強いものとします。革命が発生しているときは、3よりも強いカー

ドとして使うことができます。

また、ジョーカーはどんなカードとしても使うことができます。たとえば 9の

カードを 2枚もっているとき、ジョーカーを加えて 9の 3枚組として場に出すこと

もできます。

16

Page 18: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

ただし、ジョーカーを含んだ複数枚同時出し (ペア)や階段出しでシバリ (後で説

明します)状態を起こすことができます。また、ジョーカーを含んだ複数枚同時出

し (ペア)や階段出しで革命を起こすことも可能です。

しかしながら、ジョーカーをスペードの 9として出すということはできません。

単独で出されたジョーカーは、最強のカードとして扱われます (スペードの 3は例

外です)。

4.3.2 スペードの 3

スペードの 3は、基本的に単なる 3のカードです。ただし、場にジョーカーが 1

枚で (単独で)出されている場合、スペードの 3を持っていればジョーカーよりも

強いカードとしてスペードの 3を使うことができます。この場合ジョーカーが出

される以前に「しばり」が発生していたか否かは関係ありません。

他のプレイヤーが切札としてジョーカーを出してきたときに使えば効果は抜群

ですが、革命が起きなければ最弱のカードなので温存するか、すぐに出してしま

うかは悩みどころになるでしょう。

なお、単独のジョーカーに対してスペードの 3が出された場合、場は流れます。

従って、スペードの 3を出した人が権利をとる事ができます。また、場にジョー

カーが単独で出されても、スペードの 3を持っている人が既にパスをしていた場

合は、出すことができないので注意が必要です。

4.3.3 8のカード (マークは問わない)

8のカードを出すと8切りが発動します。8切りについては後で詳しく説明しま

すが、自動的に場が流れて権利を取ることができます。

ちなみに、8を含んだペアや階段を出しても 8切りは発動します。

4.4 特殊なルール

4.4.1 8切り

8を出すと8切り (やぎり)が発生します。8切りが発生すると、場がながれカー

ドを出した人に権利が与えられます。

なお、8を含んだ複数枚出しや階段を出した場合でも 8切りは発動します。ただ

しジョーカーを 8として使うことはできません。

17

Page 19: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

4.4.2 しばり

同じマークが連続して場に出された場合はしばりが発生します。

しばりが発生すると場にでているカードのマークと同じ物しか出せなくなりま

す。たとえば場にハートの 4が出ているとします。ここにハートの 6を出すとしば

りの発生となり、以後ハートのカードしか出せなくなります。

このしばりは複数枚出しの場合や、階段のときにも適用されます。階段の場合

は、カードが一枚だけ出ているときと同じなので例は割愛します。複数枚出しの

ときのしばりは次のような場合に起こります。

場にハートの 7とスペードの 7が出ているとき、新たにハートの 9とスペードの

9が出されるとしばりとなり、以後ハートとスペードの同じ番号を 2枚セットで出

す以外の出し方はできなくなります。新たにハートの 9とクラブの 9が出された

場合は、しばりにはなりませんので注意してください。

なお、しばりはマークについてのみ適用されますので注意してください。

4.5 今大会に特有のルール

4.5.1 千日手 (無限ループの処理)

万が一、すべてのクライアント・プログラムがパスをし続けるとゲームが終了

しなくなってしまいます。人間同士で大貧民をプレイするときは、自分が権利を

持っているのにカードを出さない、という選択をする人はいないはずです。です

が、プログラムの場合は何が起こるかわかりません。

仮にすべてのクライアントが延々とパスをし続けた場合は、次のような処理を

行い順位を決定することにします。

1. 既に上がってしまったクライアント・プログラムは通常通りの順位がつき

ます。

2. パスが 20回続いた場合、まだ上がっていないクライアント・プログラムはラ

ンダムに順位が決定されます。

クライアント・プログラムを作成される方は、自分が権利を持っているときに

パスをしてしまうルーチンにならないよう充分に注意してください。

4.5.2 計算量

クライアントがどのカードを出すか計算する際の処理速度は、常識的な範囲で

おねがいします。あまりにも遅い (計算時間がかかる)プログラムは事前チェック

時にはねられる可能性があります。

18

Page 20: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

具体的な目安としては、2.8Ghzで動作する Pentium4上で実行した場合、一手

の計算が最長でも数秒におさまるようにお願い致します。

なお、実行環境は UltraSparcIII Cu上で動作する Solaris8です。

4.6 ルールに関する質問先

マニュアルでわかりにくい部分があれば [email protected]までメールで

質問してください。

19

Page 21: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第5章 クライアント作成の準備

標準クライアントやサーバー・ソフトウェアは C言語を使用して作成されていま

す。Javaバージョンも現在開発中ではありますが、オリジナルのクライアント・プ

ログラムを作成する場合は C言語を使うことをおすすめします。

5.1 動作環境

このマニュアルを執筆している段階で動作確認がとれている環境は以下の通り

です。

• Solaris

• FreeBSD

• Linux系のOS

• CygwinをインストールしたWindows環境

Windowsの動作するパソコンをお持ちでしたら、Cygwinをインストールして

開発するのがおすすめです。Cygwinとは、Windows環境上に Linux互換環境を構

築するソフトウェアで、導入すれば Linuxと同等の開発環境を実現できます。使

い慣れた環境でクライアント・プログラムを改良することができるので、特に理

由がなければ Cygwinをつかった開発を行いましょう。

Linux上で開発したい場合は、knoppixを使うのがいいでしょう。knoppixは1CD

Linuxといわれる Linuxの一種で、CD-ROMやDVDからパソコンを起動するこ

とで、パソコンの中のデータなどを壊すこと無く使用できるものです。

なお、knoppixを使って開発する場合は気をつけていただきたい点があります。

knoppixには CD版と DVD版がありますが、開発環境の都合上DVD版を使いま

す。お使いのパソコンでDVDを書き込めない場合はご連絡ください。連絡先は

[email protected]です。CD版で動作させるために必要なファイルと説

明をさせていただきます。

このマニュアルでは、Cygwinを使った開発方法と、knoppixを使った開発方法

の両方を説明します。好みに応じて開発環境を選択してください。

20

Page 22: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

5.2 CygwinをインストールしたWindowsでの開発

まず、CygwinをインストールしたWindows環境で開発する方法を解説します。

5.2.1 Cygwinのインストール

なにはともあれ、Cygwinを導入しないことには始まりません。まずは Cygwin

のインストールからはじめましょう。すでに導入済みの場合はこの節は読み飛ば

しても結構です。

まずは Cygwinのインストーラをダウンロードしましょう。ブラウザを起動し、

http://www.cygwin.com/にアクセスしてください。図 5.1のウェブページが

表示されますので、Install or update now!というリンクをクリックしてインス

トーラをダウンロードしましょう。図中の赤いカコミ部分です。

図 5.1: Cygwinの公式サイト (http://www.cygwin.com/)。カコミ部分をクリック

してダウンロードしてください

ダウンロード先はどこでも良いですが、とりあえずデスクトップに保存してお

けばよいでしょう。ダウンロードが完了したら図 5.2のようなアイコンが表示され

るので、ダブルクリックして起動しましょう。

インストーラが起動するといろいろ設定が可能ですが、特に設定を変更する必

要はありません。図 5.3のようなウインドウが表示されたら、URLが.jpで終わっ

ているサイトを選択して「次へ」のボタンをクリックしてください。

21

Page 23: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

インストールを進めていくと、図??のようなウインドウが表示されます。図中

の赤いカコミ部分を一度クリックすると、表示が「Install」に変わります。図のよ

うな表示になったら、「次へ」ボタンをクリックしてインストールを進めましょう。

¡注意¿この手順に従うと、必ずしも必要でないパッケージも導入されます。Cyg-

winについて良く知っている方は必要でない物を省いてしまっても問題ありませ

ん。ただし、DevelとX11は必ずインストールしてください。よく分からないと

きは上の手順通りに進めてください。

インストーラの指示に従ってインストールを進めていくと、図 5.4のようなウイ

ンドウが表示されます。この画面はインターネットから必要なファイルをダウン

ロードし、インストールしていることを意味します。しばらく時間がかかるので、

ゆっくりと待ってください。これからの開発にそなえてコーヒーを用意するのも

いいアイデアです。

この画面が表示されたらインストールは完了です。お疲れ様でした!

5.2.2 開発キットのダウンロード、解凍、コピー

UECコンピュータ大貧民大会のWebサイト (

http://www.tnlab.ice.uec.ac.jp/daihinmin/

)にアクセスし、「ダウンロードページ」のリンクをクリックしてください。開発

キットの最新版へのリンクをクリックすると、クライアント・プログラムの開発

や動作確認に必要なファイル一式がダウンロードできます。図 5.6参照

開発キットは.tar.gz形式で圧縮されています。Windowsの圧縮解凍ソフトで解

凍することができますので、好きなソフトで解凍を行ってください。もしお使い

の解凍ソフトが.tar.gz形式に対応していない場合はLhaForgeやLhaplusをイン

ストールしましょう。検索エンジンで検索をかければ配布元のサイトを探すこと

ができます。

配布キットを解凍してできたフォルダを開くと、daihinminというフォルダが

あります。このフォルダを右クリックして、「コピー」を選択してください。

「マイコンピュータ」を開き、「ローカルディスク (C:)」→「cygwin」→「home」

という順でフォルダを開くと、「home」の中にユーザ名のフォルダがあるはずで

す。大抵はAdministratorだとおもいますが、環境によっては違うかもしれません。

とにかく、自分のユーザ名のフォルダを開き、図 5.7のように、先ほどコピーした

ファイルを貼り付けましょう。

これで準備は完了です。実際に開発を行う方法は第 6章を参照してください。

22

Page 24: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図 5.2: インストーラのダウンロードが完了したら、このアイコンをダブルクリッ

クして起動しましょう

図 5.3: この画面が表示されるまでは特に設定を変更する必要はありません

図 5.4: ダウンロードおよびインストール中の画面。しばらく時間がかかります

図 5.5: インストール完了画面

23

Page 25: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図 5.6: 更新した日付がバージョンになっていますので最新版をダウンロードして

ください

図 5.7: 自分のユーザ名のフォルダに、フォルダ daihinminをコピーしてください

24

Page 26: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

5.3 knoppixによる開発

5.3.1 開発にかかるコスト

参加者が必ず用意しなくてはいけないものは以下の通りです。

1. DVD-Rのメディアを 1枚 (100円あれば充分買えます)

2. 64MB以上の USBメモリ (2000円くらいで買えます)

3. コンピュータ (普通の PCで大丈夫です。これをみているあなたはもう持っ

ているはずです)

4. インターネット接続環境 (このマニュアルをみているならもう持っているは

ずです)

必要なソフトウェアなどはすべて knoppixに含まれていますので、これ以外に

用意してもらうものはありません。

5.3.2 開発環境の準備

いよいよクライアント・プログラムを開発するための準備を始めます。DVD-R

のメディア 1枚と、USBメモリは用意ができましたか?準備 OKなら早速始めま

しょう!

knoppixのダウンロード

まずは knoppixをダウンロードしましょう。いま使っているパソコンのブラウザ

(Internet Exprolerや Firefoxなど)を起動し、http://unit.aist.go.jp/itri/knoppix/

にアクセスしましょう。(図 5.8を参照)

(表記は CDですがとりあえず気にせず)CD[iso版]というアイコンをクリックし

てください。(図 5.9参照)

ダウンロードするサイトを選択するページにジャンプしますので、「最新ダウン

ロードサイト」のリンクをクリックしてください。(図??参照)

するといろいろなファイルが表示されますので、knoppix v5.0.1DVD(以下略)

というファイルで、名前の末尾が.isoになっているものをクリックしてください。

knoppixのダウンロードが始まります。(図 5.11参照)

ダウンロードが完了したら、ダウンロード先に指定したフォルダに新しいファ

イルができているはずです。このファイルを、あらかじめ用意しておいたDVD-R

に書き込めば knoppixの準備は完了です。(図 5.12参照)

25

Page 27: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図 5.8: knoppixの配布サイト。「ダウンロード」をクリックしてください

図 5.9: CD[iso版]をクリックすると別のページにジャンプします

26

Page 28: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図 5.10: 「最新ダウンロードサイト」以下に書いてあるリンクならどれでも大丈

夫です

図 5.11: 分かりにくいですが、このファイルが該当するファイルです

27

Page 29: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

開発キットの準備

UECコンピュータ大貧民大会のホームページ (http://www.tnlab.ice.uec.ac.jp/daihinmin/)

にアクセスして、クライアント・プログラム開発キットをダウンロードしてくだ

さい。

ダウンロードが完了したら USBメモリにコピーしておいてください。これで準

備は完了です。

knoppixのDVDから PCを起動する

PCの電源を入れたらすかさず knoppixの DVDを DVDドライブに入れてくだ

さい。もし間に合わなかったら、あらかじめドライブに DVDを入れておき、再

起動しても大丈夫です。PCのメーカーによって状況はちがいますが、必ず DVD

からの起動ができるようになっているはずなのでDVDから PCを起動してくださ

い。しばらく待つと knoppixが起動するはずです。

knoppixが起動したら、準備しておいたUSBメモリをPCに接続しましょう。自

動的に認識が行われて、デスクトップ上にアイコンが表示されるはずです。

これで準備は完了です。第 6章では実際にクライアント・プログラムを改良し

たり、実行する方法を説明します。

28

Page 30: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図 5.12: このファイルを DVDに書き込んだら準備完了です

29

Page 31: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第6章 クライアントの改良、コンパ

イル、実行

配布されている開発キットにはクライアント・プログラムのソースコードが含ま

れています。ソースコードをコンパイルすることで、はじめてクライアント・プ

ログラムを動作させることができるようになります。

この章では、クライアント・プログラムのソースコードを改良する方法を説明し

ます。また、ソースコードをコンパイルする方法と、サーバを起動して動作チェッ

クを行う方法について説明します。

6.1 改良の準備

実際の改良に先だって、少々の準備作業が必要になります。cygwinを使う場合

と、knoppixを使う場合はこの節の情報が役に立つはずです。それ以外の環境の場

合は、開発キットに付属のドキュメントをご参照ください。

6.1.1 cygwinの場合

cygwinの場合は基本的な準備は完了しています。クライアント・プログラムの

ソースコードを編集するためには適当なテキストエディタが必要なので、お好き

な物を用意しておいてください。もしこれからテキストエディタを用意するなら、

terapadがおすすめです。無料で使用することができます。入手方法は検索エン

ジンで検索すれば、すぐに配布元サイトがみつかります。

6.1.2 knoppixの場合

knoppixの場合はデータの保存に USBメモリを使用するので少々準備に手間取

ります。以下の項目を良く読んで作業を進めてください。

30

Page 32: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

USBメモリの準備

knoppixの DVDからパソコンが起動したら、USBポートに第 5章で準備した

USBメモリを刺してください。デスクトップ上に図 6.1のようなアイコンが表示

されるので、右クリックして「プロパティ」を選択してください。

図 6.1: このアイコンを右クリックしてプロパティを開きます

するとデバイスの設定ウインドウが表示されます。「デバイス」タブをクリック

し、「読み取り専用」のチェックをはずして「OK」をクリックしましょう。(図 6.2

参照)

図 6.2: この操作で USBメモリのファイルを編集できるようになります

完了したら同じアイコンを再び右クリックし、「マウント」をクリックしてくだ

さい。これで USBメモリの準備は完了です。

開発キットの解凍

画面下に表示されているバーの一番左に用意されたKDEボタン、システム、

ターミナルの順番でクリックしていくと、コンソールが起動します。knoppixの操

作は基本的にターミナルを使うのが便利です。

ターミナルが開いたら、USBメモリ内の開発キットを解凍しましょう。一般的

に USBメモリのルートは/media/sda1です。解凍にはtarコマンドを使います。

コマンドラインオプションとしてxvzfを与えておきましょう。

31

Page 33: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

入力するコマンドをまとめると次のようになります。(ファイル名の 20061018の

部分は開発キットのバージョンが入ります。仮に 20061020版であれば、二行目の

20061018の部分を 20061020に変更してください。)

$cd /media/sda1

$tar xzvf tndhm_devkit20061018.tar.gz

ちなみに、上のコマンドでは$を入力する必要はありませんので注意してくださ

い。解凍が完了すると daihinminというディレクトリが出来上がるはずです。

6.2 クライアント・プログラムの改良

この節ではクライアント・プログラムの改良方法について解説します。あくま

でも、どのような方法でソースコードを書き換えればよいかを説明するだけです。

つまり、改良の方針については触れません。

6.2.1 Cygwinを使う場合

第 5章でコピーした daihinminというフォルダ内のclientというフォルダを開い

てください。するとclient.cというファイルが存在しているはずです。このファイ

ルをお好みのテキストエディタで開けば、すぐに自分のアイデアをクライアント・

プログラムに盛り込むことが (クライアント・プログラムの改良に取り掛かること

が)できます。(図 6.2.1)

図 6.3: client.cがソースコードです。適当なエディタで編集してください

具体的にどのファイルがどの機能を担当しているかについては、clientフォルダ

に同封されたドキュメントや、本マニュアルの第 9章をご覧ください。

32

Page 34: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

6.2.2 knoppixを使う場合

先ほど表示させたターミナルを使って、クライアント・プログラムのソースコード

が保存されたディレクトリに移動しましょう。場所は{USBメモリのルートディレ

クトリ }/daihinmin/client/以下にあります。このディレクトリの中にあるソー

スコードを編集すれば、クライアント・プログラムの改良を行うことができます。

編集に使うコマンド (エディタ)はemacsが便利です。

ターミナルに入力するコマンドは次のようになります。

$cd /media/sda1/daihinmin/client

$emacs client.c &

ちなみに、上のコマンドでは$を入力する必要はありませんので注意してくださ

い。emacsをつかって、開発キットに同梱されたクライアント・プログラムをどん

どん改良してください。

emacsの使い方は、web上にたくさんのドキュメントがあります。検索エンジン

でemacs 使い方などと検索してみてください。

6.3 クライアント・プログラムのコンパイル

クライアント・プログラムのソースコードを編集し終わったら、実際に実行で

きるようにコンパイルを行う必要があります。

コンパイル方法について、このマニュアルで詳しく解説することはしません。開

発キットに含まれているREADME.txtを読むと、詳しい解説が用意されています

のでそちらを確認してください。

基本的な流れを以下に記します。入力するコマンドの形式です。このコマンド

は clientというディレクトリ (フォルダ)で行ってください。

$./configure

$make clean

$make

これでエラーが出なければコンパイルは完了です。

6.4 クライアント・プログラムの動作チェック

クライアント・プログラムのなお、knoppixを使って開発する場合は気をつけて

いただきたい点があります。knoppixには CD版と DVD版がありますが、開発環

境の都合上DVD版を使います。お使いのパソコンでDVDを書き込めない場合は

33

Page 35: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

ご連絡ください。連絡先は [email protected]です。CD版で動作させる

ために必要なファイルと説明をさせていただきます。

このマニュアルでは、Cygwinを使った開発方法と、knoppixを使った開発方動

作チェックを行うには、サーバー・プログラムを使用する必要があります。実際に

通信をおこなわせて、動作を確認する必要があるからです。

6.4.1 準備 (Cygwinの場合)

動作チェックを行う前に、サーバー・プログラムのコンパイルを行う必要があり

ます。サーバー・プログラムのコンパイルを行うには、Cygwinをインストールし

たときにデスクトップ上に作成された図 6.4.1のアイコンをダブルクリックしてく

ださい。

図 6.4: このアイコンをダブルクリック

するとコマンドラインプロンプトが表示されますので、以下のように入力して

ください。

$cd ~/daihinmin/server

$./configure

$cd src

$make clean

$make

これでとりあえずの準備は完了です。

6.4.2 準備 (knoppixの場合)

サーバー・プログラムをはじめて実行するときは、クライアント・プログラム

と同様にコンパイルを行う必要があります。サーバー・プログラムのコンパイル

は次のコマンドを実行すれば OKです。

34

Page 36: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

$cd /media/sda1/daihinmin/server

$./configure

$make clean

$make

コマンドを入力するときは$を入力する必要はありません。特に問題なくコンパ

イルが完了するはずですが、なにかエラーが出た場合は [email protected]

までメールでお問い合わせください。

$./configure

$make clean

$make

サーバー・プログラムの準備についての詳しい情報は、INSTALL.txtをお読み

ください。詳しい解説が準備されています。

6.4.3 サーバーの実行

Cygwinの場合

先ほどと同様に、デスクトップ上のcygwin.exeというアイコンをダブルクリッ

クしてコマンドラインプロンプトを起動してください。ここで次のコマンドを入

力します。

$startxwin.sh

すると図 6.5のようなコマンドラインプロンプトが表示されるはずです。

図 6.5: 今までつかったコマンドラインプロンプトと違い、バックグラウンドカラー

が白なのが目印です。

バックグラウンドカラーが白のコマンドラインプロンプトが起動したら、以下

のコマンドを入力してください。

35

Page 37: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

$cd ~/daihinmin/server/src

$./tndhms.exe &

これでサーバー・プログラムの起動は完了です。詳しい使い方については第 8章

をお読みください。

knoppixの場合

ターミナルに以下のコマンドを実行するとサーバー・プログラムが起動します。

$cd /media/sda1/daihinmin/server/src

$./tndhms &

サーバー・プログラムの使い方はこのマニュアルの 8章に書いてありますので、

ぜひお読みください。

6.5 クライアントの実行

6.5.1 Cygwinの場合

先ほどの白いコマンドラインプロンプトで以下のコマンドを入力してください。

$cd ~/daihinmin/client

$./client.exe 127.0.0.1 &

サーバー・プログラムはクライアントが 5つ起動するまで処理を始めない仕様

になっています。上のコマンドの 2行目を 5回繰り返してください。キーボードの

上矢印キーを使うと簡単です。

5つのクライアントが起動したら、大貧民の対戦がはじまります。サーバー・プ

ログラムをステップ実行に設定して、自分のクライアントが正しく動作している

かを確認してください。

6.5.2 knoppixの場合

サーバー・プログラムが起動したら、クライアント・プログラムを起動しましょ

う。以下のコマンドを実行してください。

$cd /media/sda1/daihinmin/client

$./client 127.0.0.1 &

36

Page 38: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

これで一つめのクライアントが起動します。ただし、サーバーは 5つのクライ

アントが接続を完了するまで処理を行わないので、同様の手順を 5回繰り返して

ください。

5つのクライアントが起動したら大貧民の対戦が始まります。自分がプログラム

したクライアントが正常に動作しているか、充分にチェックを行ってください。

6.6 クライアントの改良について

クライアントの改良には、現在の標準クライアントがどのようにつくられてい

るかを知らなければなりません。詳しい情報は 9章にありますので、一度読むこ

とをおすすめします。

また、サーバーとクライアントの間では通信が行われますが、その通信手順は

7章で解説しています。

37

Page 39: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第7章 通信のプロトコル

この章では、サーバーとクライアントの間で通信をするための決め事について説明

します。プロトコルと言ってしまってもいいかどうかは、少々議論の余地がのこっ

ているのですがここでは説明の都合上、プロトコルと呼ぶことにしておきます。

7.1 概要

サーバとクライアントは socketを使って通信します。それぞれのプレイヤーが

持っているカードは二次元配列で表現されていて、この二次元配列をやり取りす

ることで、サーバがクライアントに持ち札を通知したり、クライアントが出した

いカードをサーバに通知したりします。

7.2 カードの表現

クライアントがどのようなカードを持っているか、現在ゲームはどのような状態

なのか、という情報は常に整数値の二次元配列で表現します。二次元配列は 8x15

のサイズになっていて、それぞれのセル (マス目)には整数値が入ります。なお、

UECコンピュータ大貧民大会ではこの二次元配列をテーブルと呼ぶことにします。

テーブル内のマス目の意味は図 7.1のようになります。

図 7.1: テーブルの定義

カードを持っているか否かは、セルに 1が立っているかどうかで判断します。1

が立っている場合は、カードを持っています。例外的に JOKERは 2を使って表現

することがありますが、それは後で説明します。

基本的に Yes or Noで答えられるような内容のセルは、1が Yesで 0が Noです。

38

Page 40: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

7.3 通信手順

ここでは通信手順について詳しく説明します。

7.3.1 通信の概略図

通信手順の模式図が図??です。なお、この図中では socketはすでに確立されて

いるものとしています。

図 7.2: 通信手順の概略図

それぞれの通信の詳細については次の表を参照してください。

39

Page 41: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

図中の添字 通信の目的 データ形式

1 プレイヤー番号の通知 整数値

2 ゲーム開始時の手札通知 テーブル

3 交換したいカードの通知 (富豪、大富豪時のみ) テーブル

4 クライアントが持っている手札を通知 テーブル

5 出したいカードの通知 テーブル

6 通信 5で通知したカードがルール上受理できたかを通知 整数値

7 場のカードや各プレイヤーの状況などを通知 テーブル

8 一回のゲームが終了したかを通知 整数値

7.3.2 通信の繰り返し

図 7.2中では表現されていませんが、複数回繰り返される通信が存在します。通

信が発生する順序を箇条書きで表現すると次のようになります。

• 通信 1

• すべてのゲームが終了するまで、次の通信を上から順に繰り返す

• 通信 2

• もしテーブルの [5][1]要素が 1か 2なら次の通信が発生

– 通信 3

• 通信 8の結果、1回のゲーム終了が通知されるまで、次の通信を順に繰り返す

– もし自分がカードを出す順番であれば次の通信が発生

∗ 通信 4

∗ 通信 5

∗ 通信 6

– 通信 7

– 通信 8

プログラミングができる人は次のコードを見るとわかりやすいかもしれません。

正確なコードではありませんが、C言語風に書くと次のような具合になります。な

お通信につかうテーブルは tableという二次元配列の変数風に書いてあります。

通信 1;

while(すべてのゲームが終了していない){

通信 2;

40

Page 42: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

if(table[5][1]>0){

通信 3;

}

while(通信 8の結果の値が 1でない){

if(自分がカードを出す順番である){

通信 4;

通信 5;

通信 6;

}

通信 7;

通信 8;

}

}

説明がわかりにくい場合は [email protected]までメールにてお問い合わ

せ下さい。

通信 1:プレイヤー番号の通知

クライアントがサーバに対して socketを確立すると、サーバからクライアント

に対してプレイヤー番号が通知されます。プレイヤー番号はサーバに接続を要求

した順番に割り当てられ、値の範囲は 0から 4です。

サーバからテーブルが渡される際、各プレイヤーの残り枚数や、階級はこのプ

レイヤー番号ごとに通知されます。たとえば、自分が何番のプレイヤーなのかが

分からなくなってしまうと、サーバから送られてくるテーブルに含まれる情報の

一部が無意味になってしまいます!

通信 2:ゲーム開始時の手札通知

プレイヤー番号を正常に受け取ることができたら、サーバはクライアントに対

して手札を通知してきます。すなわち、サーバからクライアントに対してテーブ

ルが渡されます。

このとき、テーブルの [5][1]要素は重要なデータを含んでいます。自分が富豪か

大富豪の場合は、ここに正の整数がセットされていて、それぞれ貧民、大貧民に

渡すカードの枚数を意味しています。

通信 3:交換したいカードの通知

通信 2でふれましたが、自分の階級が大富豪か富豪の時は大貧民、貧民に渡す

カードを選択することができます。この通信では、自分が要らないと考えるカー

41

Page 43: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

ドをテーブル形式に置き換えた上でサーバに通知する必要があります。

なお、平民以下の階級の場合はテーブルを送り返す必要はありません。

通信 4:クライアントが持っているカードを通知

この通信はクライアントにカードを出す順番が回ってきたときにしか発生しま

せん。通信 4でも通信 7でも似たようなテーブルを受け取りますが、通信 4 によ

るテーブルとと通信 7によるテーブルを区別する方法は [5][2]のセルの値です。こ

れが 1であれば自分の順番が来ているということを意味するので、このテーブル

は通信 4によるものであると判別できます。

このテーブルでは自分の手札に加えて、場が流れているかどうか、革命が発生

しているかどうか、という情報が含まれています。

このテーブルを元に、自分がどのカードを出すかを決めるアルゴリズムを考え

るのがクライアント・プログラム改良の作業のうち大部分を占めます。

通信 5:出したいカードの通知

通信 4で得られた手札のテーブルを元に、自分が出したいカードのテーブルを

作成します。具体的には、自分が出したいカードを意味するセルを 1に、それ以外

のセルを 0にしたテーブルを生成して、サーバに送信する作業です。ジョーカー

を出す場合はセルに 2を立てて出す必要があるのですが、それについては後述し

ます。

また、パスをしたい場合はすべて 0で埋めたテーブル送信するひつようがあり

ますが、これについても後述します。

通信 6:通信 5で通知したカードがルール上受理できたかを通知

サーバは 5で受け取ったテーブルが意味するカードが、ルール上本当に出せる

ものであるかどうかを検証し、その結果をクライアントに通知します。

諸般の事情で、出せた場合は整数値の 9が、だめだった場合は整数値の 8が返

されます。現状のルールでは、8が帰ってきた場合、サーバはクライアントがパス

をしたものとしてあつかいます。したがって、クライアントがカードを再提出す

るチャンスが与えられるわけではないことに注意してください。

主に、クライアント側で自分の手札を独立して管理している場合に整合性をと

るために使用します。

通信 7:場のカードや各プレイヤーの状況などを通知

この通信はすべてのクライアントに対して発生します。

42

Page 44: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

順番が回ってきたクライアントがカードを出したか、パスをしたかにかかわら

ず現在場に出ているカードを意味するセルに 1が、それ以外のカードを意味する

セルに 0が保持されたテーブルです。

また、ゲームの状態を意味するセル (5行目以降)は、現在のゲーム状態を反映

するような値を持っていることが多いですが、保障されていません。ゲームの状

態を知りたい場合は、かならず通信 4で得られたテーブルを見るようにしてくだ

さい。

通信 8:一回のゲームが終了したかを通知

この通信は整数値がわたされます。もし値が 1であれば、5クライアント中 4ク

ライアントが上がり、一回のゲームが終了したことを意味します。

これはクライアントの実装上、ループを抜けるフラグが必要なため設けられた

通信です。

7.3.3 ゲーム開始前の準備

以下の部分は実際にゲームが始まる前の、準備を行います。

ゲームへの参加登録とプレイヤー番号の取得

クライアントソフトウェアを起動すると、サーバとの通信を確立しようとしま

す。通信が確立できると、サーバから整数値が返されます。この整数値はプレイ

ヤー番号を意味しています。値の範囲は 0から 4までです。サーバは接続してきた

順にプレイヤー番号を配布します。

7.4 補足事項

これまでに書ききれなかった重要な事項について説明します。

7.4.1 ジョーカー

カードを意味するセルに 2を立てるとジョーカーを意味します。ジョーカーは

オールマイティカードとして使うことができるので、このような仕様になってい

ます。ジョーカーが関係しうるケースについて、詳しく説明していきます。

43

Page 45: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

手札にジョーカーがある場合のテーブル表現

幸運にも、自分がジョーカーを持っている場合、サーバから通知されるテーブ

ル上ではどのように表現されるのでしょうか?

答えは[4][1]に 2がセットされているです。出すカードを決定するアルゴリズム

上で、この [4][1]に 2が収められているケースの処理を忘れてしまうと、せっかく

手に入れたジョーカーは永遠にあなたの手札のままです!当然あがることもできま

せん。十分に気をつけてください!

ジョーカーを単独で出したい場合のテーブル表現

ジョーカーを単体で出す際、サーバに送るテーブルの表現はどのようにすれば

いいのでしょうか?

答えは[0][0]から [3][14]の範囲のセルのうち、どこでもいいので 2をセットし、

それ以外を 0で埋め尽くすことです。

この範囲内であれば、サーバーは自動的にジョーカーを単独で出したいのだな、

と理解してくれます。

複数枚同時出しや、階段にジョーカーを含めたいとき

ジョーカーはオールマイティカードなので、階段の中に含めてだしたり、複数

枚同時出しに参加させることができます。

当然この場合は、ジョーカーがどのカードの役割を果たすべきかはっきりとし

ていますよね?

サーバに出したいカードを通知するテーブルを作るときは、ジョーカーに果た

させたい役割のカードを意味するセルに 2を立てれば OKです。

たとえば、スペードの 9、10とジョーカーを持っていて、スペードの 9、10、11

の階段として提出したいときは、[0][7]と [0][8]に 1を、[0][9]に 2を立ててそれ以

外を 0とします。

また、スペードとハートとダイアの 5をそれぞれと、ジョーカーを持っていて、

5の 4枚組みとして革命を起こしたいときは [0][3]、[1][3]、[2][3]にそれぞれ 1を、

[3][3]に 2を立てて、それ以外を 0とすれば OKです。

わかりにくければ、[email protected]までメールでお問い合わせください。

7.4.2 パス

パスをしたい場合は、すべてのセルを 0で埋めたテーブルをサーバに送信して

ください。サーバから受け取ったテーブルをそのまま送り返しても、ほとんどの

場合はパスになる (ルール上出せないカードであることが多いので)はずですが、

44

Page 46: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

推奨しません。

なるべくなら、きっちりとすべてのセルを 0で埋めるようにしてください。

7.5 プロトコルの知識は必要か?

プロトコルの知識はほとんど必要ありません。なぜなら、通信関係の処理はす

べて標準クライアントで実装されているからです。オリジナルのクライアントを

作成しようと考えている人は、標準クライアントの指定された部分を書き換える

だけで OKです。

詳細は標準クライアントをみて頂きたいと思いますが、書き換えるべき部分が

明示されています。

45

Page 47: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第8章 サーバー・プログラムにつ

いて

本章では、サーバー・プログラムの役割と使用方法を説明します。

8.1 サーバー・プログラムの役割

クライアントプログラムがカードの出し方を決定するのに対して、サーバー・プ

ログラムは、場の管理を行います。具体的には、次のようなことを管理します。

• それぞれのプレイヤー(クライアント)の持っているカードの管理

• 各プレイヤーへのカードの配布

• 各プレイヤーから出されたカードのが、正当な物かの判定。

• 場に出ているカードの管理

• 場の状況(革命中か否か・縛り中か否か等)等の管理

• 画面線画

サーバー・プログラムは、クライアントからの接続を待ち、接続してきたクラ

イアントにプレイヤー番号を割り振ります。プレイヤーの人数が 5人になったら

ゲームが始まります。

1ゲーム終了までの流れと、その中におけるサーバーの役割は、次のようにな

ります。クライアントとの通信を伴うパートには、行末に「通信」と書いてあり

ます。

1. サーバーの内部で、各プレイヤーに渡すカードを決定する。

2. 大貧民から、強いカードを 2枚取り、大富豪に渡すカードに追加する。

3. 大富豪にカードを提示し、大貧民に渡すカードを 2枚受け取る。(通信)

4. 貧民から、強いカードを 1枚取り、富豪に渡すカードに追加する。

5. 富豪にカードを提示し、貧民に渡すカードを 1枚受け取る。(通信)

46

Page 48: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

6. 4人のカードが無くなるまで、次を繰り返す。

(a) 各プレイヤーに対して、持ち札を通知する。(通信)

(b) 順番が回ってきたクライアントにターンを回す。(通信)

(c) クライアントからカードを受け取る。(通信)

(d) クライアントから貰ったカードが正当か否かを判定する。

(e) 特殊効果を持っているカードだった場合、その処理を行う。

(f) 場の状況等を更新する。

(g) 次にカードを出すプレイヤーが誰かを判定する。

(h) 場のカードと状況を、各クライアントに通知する。(通信)

(i) 各クライアントに、ゲームが続行することを通知する。

7. 1ゲームが終了したことを各クライアントに通知し、次のゲームに移る。

配布キット中に含まれているサンプルクライアントプログラムをベースに開発

を行なう場合には、上記の流れを意識する必要は、特にないでしょう。

8.2 インストール方法

configure スクリプトを利用する方法や xmkmf を使用する方法があります。詳

しくは、ソースに付属している INSTALL.txt を読んで下さい。

8.3 使用方法

コンパイル後、srcディレクトリに移動し、tndfgs を実行して下さい。

ゲーム中は、図 8.1の画面が表示されます。

画面の各部分の意味は、以下の通りです。

1. 現在、場に出ているカードが表示されます。

2. 通常は緑色ですが、革命が起きるとオレンジ色になります。

3. 現在のゲームで「縛り」が行われているとき、ここに表示されます。

4. 各プレイヤーの持っているカードの一覧です。

5. 各プレイヤーがパスを行ったか否かを表示します。また、現在ターンが回っ

ているプレイヤーを表示します。

6. 各プレイヤーの現在の身分です。

47

Page 49: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

7. 操作窓です。サーバーの動作速度を切り替えます。

• 上半分をクリックした場合は、自動実行モードに切り替わります。このモードの際は、上半分をクリックする毎に、自動実行高速モードと自動

実行低速モードが切り替わります。

• 下半分をクリックした場合、ステップ実行モードに切り替わります。このモードの際は、下半分をクリックする毎に、1ステップずつ進みます。

図 8.1: サーバーの実行の様子

48

Page 50: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第9章 標準クライアント

ここでは、標準クライアントのソースファイルの構成や、宣言されている関数や

変数の簡単な説明をします。

9.1 ソースの構造

client.c

クライアントのメインとなるソースです。

daihinmin.c daihinmin.h

大貧民のカード選択のための変数や関数の宣言や定義がされています。カー

ド選択のアルゴリズムを拡張のため関数の追加や変更を行う場合は、ここに

記述をすると良いでしょう。

connection.c connection.h

サーバとの通信に必要な変数や関数の宣言や定義が記述されています。ここ

を書き直す必要は普通ないでしょう。

selection.c

ゲーム中にカードを出すときの、カードを選択するアルゴリズムが記述され

ています。このファイルは client.c の該当部分に読み込まれます。

change.c

富豪、大富豪がカード交換の時に交換するカード選択するアルゴリズムが記

述されています。このファイルは client.c の該当部分に読み込まれます。

client.cの概要 client.cの大まかな流れは下記のようになっています。

1. サーバに接続し、プレイヤー番号を受け取る。(entryToGame())

2. シャッフルされたカードをサーバから受け取る。(startTrick())

3. 富豪・大富豪ならば、交換する不要なカードを 1枚ないし 2枚選ぶ。(change.c)

4. サーバから送られてくる手札の情報を受け取る。(receiveCards())

49

Page 51: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

5. 自分のターンならば、出すカードを選ぶ。(selection.c)

6. 場に出されたカードの情報をサーバから受け取る。(sendCards())

7. そのゲームが終わるまで 4へ戻る。

8. 全ゲームが終わるまで 2へ戻る。

9. 接続を切って終了する。(closeSocket)

9.2 宣言済の変数一覧

すでに標準クライアントで宣言されている変数のリストは以下の通りです。

グローバル変数

int g logging ログ取りをするかを判定するための変数

struct state type state カードを選ぶときの範囲を示す変数

client.cのmain内のローカル変数

int my playernum; プレイヤー番号を記憶する

int whole gameend flag=0; 全てのゲームが終了したかを判別する変数

int one gameend flag=0; 1つのゲームが終わったかを判別する変数

int accept flag; 提出が受理されたかを判別する変数

int own cards buf[8][15]; 手札や状態を納めるテーブル

int own cards[8][15]; テーブルを操作するときはこちらを使う

int ba cards buf[8][15]; 現在の場のカードを納めるテーブル

int ba cards[8][15]; 操作するときはこちらを使う

int table count=0; 今まで受け取ったテーブル数のメモ

int game count=0; ゲームの回数を記憶する

int new game flag=1; ゲームが初期化されているかをチェック

char server name[16]; サーバの IPアドレスをいれる

daihinmin内の静的グローバル変数 daihinmin.cの外側とは干渉しない

static int order[15] カード選択時の優先順位に使用

connection内の静的グローバル変数 connection.cの外側とは干渉しない

static int g sockfd これらはサーバとの通信に使用する。

static int g writer len

static int g new sockfd

static int g buf len

static struct sockaddr in g reader addr

static struct sockaddr in g writer addr

static struct sockaddr in g client addr

50

Page 52: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

9.3 構造体の解説

標準クライアントでは、daihinmin.hで次の 2つの構造体が定義されています。

9.3.1 scope type

構造体 scope typeはカードを選ぶときの範囲をするために用います。

定義と各要素の意味

struct scope_type

{

int lowOrd; 選ぶ範囲の最低のカード。

int highOrd; 選ぶ範囲の最高のカード。

int maxQty; 選ぶ範囲の最大の枚数。

int minQty; 選ぶ範囲の最小の枚数。

int sequence; 階段のとき 1、枚数組のとき 0。

};

9.3.2 state type

state typeは現在の状態の情報を保持するために用います。

定義と各要素の意味

struct state_type

{

int ord; 現在場に出ているカードの強さ

int sequence; 場に出ているカードが階段なら 1、枚数組なら 0

int qty; 場に出ているカードの枚数

int rev; 革命なら 1、そうでないなら 0

int b11; 11バックなら 1、そうでないなら 0(未使用)

int lock; しばりのとき 1、そうでないとき 0

int onset; 場に何も出ていないとき 1、そうでないとき 0

int suit[5]; 場に出ているカードのマーク。suit[i]が 1のとき、

マークが iのカードが出ている。

int joker; 自分が Jokerを持っているとき 1、そうでないとき 0。

};

51

Page 53: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

9.4 関数一覧

標準クライアントでは、次のような関数をすでに定義しています。関数を追加

する場合は重複のないように注意してください。

9.4.1 daihinmin.c

struct scope type setScope(int low,int high,int min,int max,int sequence)

引数に指定した値に各要素を設定した scope type を返す。

struct scope type defaultScope()

状態に応じて、標準の scope type の値を返す。

void getState(int cards[8][15])

現在の状態を cardsから読み込み、state type型のグローバル変数 stateに情

報を保持する。

void getField(int cards[8][15])

場にでているカードの情報を cardsから読み込み、state type型のグローバ

ル変数 stateに情報を保持する。

void showState(void)

stateの内容をを表示する。デバック用

void showScope(struct scope type scope)

scopeの内容を表示する。デバック用

struct scope type setScope(int low,int high,int min,int max,int sequence)

引数に指定した値に各要素を設定した scope type を返す。

struct scope type defaultScope()

状態に応じて、標準の scope type の値を返す。

void setScopeLowOrd(struct scope type* scope,int val)

scope typeの lowOrdの値を設定する。

void setScopeHighOrd(struct scope type* scope,int val)

scope typeの highOrdの値を設定する。

void setScopeMinQty(struct scope type* scope,int val)

scope typeのminQtyの値を設定する。

void setScopeMaxQty(struct scope type* scope,int val)

scope typeのmaxQtyの値を設定する。

52

Page 54: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

void setScopeSequence(struct scope type* scope,int val)

scope typeの sequenceの値を設定する。

void cardsSieve(int cards[8][15],struct scope type scope)

scopeで指定された条件にあうカードだけを、cardsに残す。

void cardsSieveTuple(int cards[8][15],struct scope type scp)

cardsSieveから呼び出される、枚数組用の手続き。

void cardsSieveSequence(int cards[8][15],struct scope type scp)

cardsSieveから呼び出される、階段用の手続き。

void setOrder(int,int,int,int,int,int,int,int,int,int,int,int,int,int,int)

カードを選ぶ時 (selectCards実行時)の優先順位を静的グローバル変数order[]

に保存する。selectCardsは引数のより前に指定された強さのカードから選ん

でいく。

void setOrderDefault(void)

静的グローバル変数 orderを状況に応じた標準の値に設定する。

void selectCards(int cards[8][15])

まず、cardsの中から静的グローバル変数 orderで指定された順番で、一番最

初のカードを探す。次にそこから、グローバル変数 stateの条件にしたがっ

て、縦あるいは横に必要な枚数取り出してゆく。

ただし、必要枚数に満たないときは cardsは空になる。したがって、cardsに

は stateの条件に対して出せるカードのみが残っていることが望ましい。

void cardsOr(int cards1[8][15],int cards2[8][15])

cards2に含まれているカードを cards1に加える。

void cardsAnd(int cards1[8][15],int cards2[8][15])

cards1と cards2の共通部分を cards1に入れる。

void cardsDiff(int cards1[8][15],int cards2[8][15])

cards1から cards2に含まれているカードを除く。

void cardsNot(int cards[8][15])

cardsにないカードだけ cardsに入れる。カードの有無の反転させる。

void outputTable(int table[8][15])

渡されたテーブルを標準出力に出力する。

void copyTable(int org table[8][15],int dest table[8][15])

org tableを dest tableにコピーする。

53

Page 55: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

void copyCards(int org cards[8][15],int dest cards[8][15])

org cardsを dest cardsにコピーする。copyTableと違いコピーされるのは

カードの部分のみ。

void clearCards(int cards[8][15])

cardsのカード部分をすべて 0にする。

int beEmptyCards(int cards[8][15])

cardsのカード部分をすべて 0の時 1を返す。

9.4.2 connection.c

int entryToGame(char* host)

hostで指定されたサーバに接続し、プレーヤー番号をもらう。もらった番号

を戻り値として返す。

int startTrick(int table[8][15])

シャッフルされたカードをサーバから受け取り、今現在、何回目のゲームか

を返す。

void sendChangingCards(int cards[8][15])

カード交換時のカードの提出の一連の動作を行う。オプションによってはロ

グを表示する。

int receiveCards(int cards[8][15])

カードをサーバから受け取り、自分のターンであれば 1を返すオプションに

よってはログを表示する。

int sendCards(int cards[8][15])

カード提出の一連の動作を行い、受理されたか否かを返す。オプションによっ

てはログを表示する。

void lookField(int cards[8][15])

サーバから場にでているカードの情報を受け取る。

int beGameEnd(void)

ラウンドの最後にゲームか終ったか否かをサーバから受け取り終りならば 1

を返す。

int refreshTable(int table val[8][15])

サーバからテーブル情報を受け取り、成功なら 0、失敗なら-1を返す

54

Page 56: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

int sendTable(int table val[8][15])

サーバにテーブル情報を投げる関数。成功なら 0、失敗時-1を返す

int openSocket(char ip addr[], int portnum data)

ソケットの設定・接続を行う。成功時 0、失敗時-1を返す

int closeSocket()

ソケットの closeを行う。成功時 0、失敗時-1を返す

9.5 実行例

まず、次のようなカードテーブル cards1があったとします。

cards1:

1 1

1 1 1 1

1 1 1 1

1

これに対して、

copyCards(cards1,cards2);

とすると、cards1の内容が cards2にコピーされます。続いて、scopeを設定します。

setScopeLowOrd(scope,1);

setScopeHighOrd(scope,13);

setScopeMinQty(scope,3);

setScopeMaxQty(scope,10);

setScopesequence(scope,1);

この設定では、1から 13まで (つまり、トランプの 3,4,· · ·,K,A,2)のカードのう

ち、階段で枚数が 3以上 10以下となるようなカードが残るようになります。この

設定でカードをふるいにかけてみます。

cardsSieve(cards2,scope);

この結果、cards2は次のようになります。

cards2:1 1 1

1 1 1

このように、階段のみが残ります。さらに cards1から cards2に含まれるカード

を除きます。

cardsDiff(cards1,cards2);

この結果、cards1は次のようになります。この場合、cards2は変化しません。

55

Page 57: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

cards1:

1 1

1

1

1

このように、階段を構成するカード以外のカードだけが残ります。

さらに、

selectCards(cards1);

selectCards(cards2);

とすると、変数 orderにで定められた順番に値たがって調べていき、最初にある手

札が、stateで指定された条件を満たしていれば、それぞれ cards1、cards2に残り

ます。

56

Page 58: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第10章 質問などの受付け

本章では、わからないことがある場合の手引きを行います。基本的にはメールで

お問い合わせ頂く形になりますが、随時FAQを拡充していきますのでご一読頂け

れば幸いです。

10.1 よくある質問FAQ

10.1.1 大会自体に関する質問

試合回数は何回になりますか?

1グループ辺りの対戦回数は 100回を想定しています。ですが、100回の対戦で

は運の要素を充分に排除することができない可能性が指摘されいるのも事実です。

実行委員会側としては、対戦回数が増えれば増えるほど運の要素を排除するこ

とができ、クライアント・プログラムの優秀性を正確に評価することができると

考えています。したがって、現在実行委員会ではサーバ・プログラムの効率化を図

ることによって対戦の高速化を実現し、より多くの対戦を行えるよう努力を続け

ています。

具体的に何回の対戦を行うかは現在調整中ですが、最低100回の対戦は行います。

途中でゲームをリセットしないのですか?

たとえば、10回の対戦が終了するごとに一旦順位をリセットして、やり直すと

いう大会運営方法も考えられます。

この件については実行委員会内で長時間の議論が行われましたが、本年度の大

会についてはある意図のもと、リセットは行わないものとして運営をさせていた

だくことと決定いたしました。

57

Page 59: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

10.1.2 ルールに関する質問

適用されるルールが多すぎませんか?

大貧民というゲームでは、カードの交換が行われます。従って大富豪は強いカー

ドを、大貧民は弱いカードを持った状態でゲームが始まるという傾向があります。

しばりや革命などのルールが少ないと、純粋にカードの強弱で勝敗が決まって

しまい、手札と自分の順位に応じた戦術をとる余地が狭くなってしまう点を考慮

し、本年度はある程度の数のルールを導入致しました。

どんなルールが採用されていないのですか?

第 4章に書かれていないルールは採用されていません。比較的メジャーなルー

ルでいうと

• イレブンバック

• 都落ち

• 順位による座席の変更 (プレイ順番の変更)

• あがり札に関する禁則

• スキップ

• 3の 3枚組

• 片しばり、番号しばり

などがあります。

最初のプレイヤーはダイアの 3を出す義務はありますか?

ゲームはダイアの 3を持っているプレイヤーから始まります。

とはいえ、ダイアの 3を必ずしも出さなければいけないというわけではありま

せん。戦略上、温存しておきたい場合は特に出さなくてもOKです。

場に階段が出ているとき、自分はどんなカードが出せますか?

場に階段が出ている場合は、自分がさらにカードを出したいときは次の条件を

満たしている必要があります。

• 場にでているのと同じ枚数の階段であること

58

Page 60: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

• 自分が出すカードすべてが、場にでているカードよりも強いものであること

したがって、場に 4-5-6という階段が出ている場合、出すことができるのは 7-8-9

よりも強い階段ということになります。

場合によっては「しばり」が適用されている可能性もあるので注意してください。

カードはだれから配るのですか?

初回ゲームは最初にサーバに接続したクライアントから順に配ります。順位が

決定した 2回目のゲーム以降は、大富豪を起点としてカードの配布が行われます。

単体で出されたジョーカーに対してスペードの3が出された場合、場は流れますか?

流れます。単体のジョーカーに対してスペードの 3を出すことができますが、ス

ペードの 3が出されたら場は流れ、スペードの 3を出した人が好きなカードを出

すことができるようになります。

単体で出されたジョーカーに対するスペードの3はどんなときでも出せるのですか?

そうとは限りません。単体のジョーカーに対してスペードの 3を出すには、ス

ペードの 3を持っている人がパスをしていないことが必要です。

この条件さえ満たしていれば、ジョーカー以前に「しばり」が発生していても、

気にすること無くスペードの 3を出すことができます。

10.2 問い合わせ先

以下のような場合にはメールでお問い合わせください。

• 参加申し込み方法がわからない

• どのように大会が行われるのかがわからない

• サーバーが動かない

• 実行環境 (knoppix)がうまく動かない

• クライアントの作成がうまくいかない

• サーバーやクライアントのコンパイルができない

• 通信関係の仕様を深く知りたい

59

Page 61: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

• マニュアルの意味がわからない

• Webサイトやマニュアルに間違いを見つけた

• その他諸々の質問がある

宛先のメールアドレスは以下の通りです。

[email protected]

大会実行委員会側では、クライアント作成の手引きは基本的に致しません。ただ

し、ある程度のアドバイスを指せて頂くことができる場合もありますので、何か

わからない点があればお気軽にお問い合わせください。

メールなので 24時間送信して頂いて大丈夫ですが、返信までは少々時間がかか

る場合があります。その際はご容赦ください。

60

Page 62: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

第11章 おわりに

本マニュアルは、UECコンピュータ大貧民大会実行委員会が作成致しました。本

マニュアルの内容の無断転載を禁じます。

また、本マニュアルで言及したプログラムをダウンロードし、それを改変した

ものを配布するのは自由ですが、その場合、オリジナルのパッケージもかならず

付随させて下さい。また、改変したものがオリジナルではないことがわかるよう

に明記して下さい。

なお、本ソフトウェアを使用した際に生じたいかなる損害についても、UECコ

ンピュータ大貧民大会実行委員会、ならびに西野研究室は責任を負いません。

上記の約束事を守っていただき、皆様、奮って本大会に御参加下さい。11月 18

日に一人でも多くのみなさまと、UECの会場でお目にかかるのを楽しみにしてお

ります。大貧民を心ゆくまで楽しみましょう。

更新履歴

20061028版

2006年 10月 28日リリース

第 2章を「自作プログラムの部」と「飛び入り参加の部」に分けて記述。

第 4章に「カードの配布方法」を追加し、仕様を明確に記述した。

同章の「ゲームの開始」、「上がり方」、「階段」、「革命」、「順位」、「ジョーカー」、

「スペードの 3」、「しばり」について加筆を行い、明確な基準に修正。仕様変更で

はありません!

第 10章に FAQを追加。

20061021版

2006年 10月 21日リリース

第 2章に本マニュアルの対象となる参加者を明記。

第 4章に計算量についての記述を追加。

第 5章の前半、開発環境として cygwinを使う方法について加筆。

第 6章の全般について、cygwinを使った場合のコマンド等を追加。

第 9章のプロトコルについてを全面改修。

61

Page 63: 第1回 UECコンピュータ大貧民大会 マニュアル...第1章 はじめに 大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひと

20061018版

2006年 10月 18日リリース

第 3章に対応環境について加筆。

第 4章に先日手に関する記述を追加。

第 6章を knoppixは DVD版を使うように修正。

同章に図表を追加。これで knoppixは問題なくダウンロードできるようになった

はず。

第 7章を図表を修正。テーブル中の JOKERのスペリングミスを修正。

同章の「ゲームへの参加登録」と「プレイヤー番号の取得」をマージ。

20061016版

2006年 10月 16日午前 11時ごろリリース

文章の各所を修正。

20061015版

2006年 10月 15日午後 5時ごろリリース

第 1章を追加。

第 2章を前面改修。

第 3章 3.2、「係員」を「実行委員」に変更。

第 4章 4.3.1、ジョーカーに関する項の記述が間違っていたので修正。

第 11章を全面改修。

20061014版

2006年 10月 14日午後 3時ごろリリース

ファーストリリース。図表は基本的に省略。近日中にアップデート予定。

62