Processing による ポーカーゲームについて 八神孝嗣

Similar documents
課題

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

スライド 1

課題

プログラミング演習 Ⅰ 第 14 回 2017/6/5( 月 ) ゲームを作る クイズ 担当 : 紅林林

Microsoft PowerPoint P演習 第5回 当たり判定(2)【課題】.pptx

pp2018-pp4base

情報システム設計論II ユーザインタフェース(1)

課題

Processingをはじめよう

pp2018-pp9base

<4D F736F F D2089A E838D815B838B B838082C582C D834F F08A7782D42E646F6378>

Microsoft PowerPoint P演習 第10回 関数.ppt [互換モード]

配付資料

大容量情報検索論

情報システム設計論II ユーザインタフェース(1)

Processingをはじめよう

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx


課題

ワンダー ライヴズとは? 世界の様々な特徴 能 を持つ生物たちが 自然界での生き残りをかけて戦うカードゲームです

Microsoft Word - 92.doc

課題

Processing入門マニュアル17

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^


Microsoft Word - 3new.doc

スライド 1

< F2D825282CC947B909482CC A815B83682E6A>

課題

CG

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

Taro-レス・パブリカ

C#の基本2 ~プログラムの制御構造~

FTP とは? FTP とは File Transfer Protocol の略です 日本語訳すると ファイルを転送するときの決まり事という意味です 飛行機が世界中の空港で離陸 着陸できるのは 決められた手順 通信方式 が存在するからです パイロットでない私たちが聞いても よく分からないやり取りです

2016 年度 ハーツにおけるシュート ザ ムーンの検証 坂本 将吾 研究室 グリムベルゲン

アクション講座 第1回目

(Microsoft Word - java\221n\221\242\203\214\203|\201[\203g.doc)

スライド 1

教材ドットコムオリジナル教材 0から始めるiアフ リ リファレンス i アプリ簡易リファレンス ver i アプリ Java 独自のメソッド (1)iアプリの命令を使えるようにする import com.nttdocomo.ui.*; (2) 乱数を使う import java.u

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

Word編2 宛先の氏名を入力する職人編宛名を入力するための画面が表示されます 姓と名の間にスペースを入れて氏名を入力します ボタンをクリックして敬称を選びます [ 連名 情報 ] タブをクリックします 必要に応じて [ 名前 ] 欄をクリックして連名を入力します 3 宛先の住所を入力する [ 自宅

課題

Java講座

プログラミング入門1

情報処理Ⅰ

ToDo: 今回のタイトル

レコードとオブジェクト

情報システム設計論II ユーザインタフェース(1)

設問 println はそこで指定されている内容を出力して改行するものである. 一方,print は内容を出力して改行しないものである. 下記のプログラムそれぞれについて出力結果がどうなるか回答せよ. 下記のプログラム - を実行すると, fms という文字列が 回表示される. プログラム - vo

PowerPoint プレゼンテーション

2 個の円の移動サンプル 9-2 float y0,y1; // 円の中心の Y 座標 float x0,x1; // 円の中心の X 座標 float v0,v1; // 円の縦方向の移動速度 int radius; size(300,400); radius = 10; v0 = random(

データ構造とアルゴリズム論

Mapmakerfor の手順下絵を準備 作者の設定した大きさで作成する場合 下絵にする地図を挿入 トリミングと大きさの調整 大きさを調整した画像を保存 下絵を背景に設定 作成画面の大きさを調整 1 自分で用意した下絵を背景にする場合 下絵を背景に設定 作成画面の大きさを調整 画像が大きい場合シート

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

1. シートの準備 地図の貼りつけ方 1.1 エクセルシートのマス目を 方眼紙 の状態にしておくかんたん電子マップでは エクセルのコメント機能を使って 写真や文字を表示します 地図を貼りつける台紙となるシートの列幅を調整し あらかじめ方眼紙のような細かいマス目にしておけば 地図上の好きなポイントで

Microsoft PowerPoint - lec06 [互換モード]

Java言語 第1回

Microsoft PowerPoint - kougi2.ppt

Microsoft Word - 415Illustrator

スライド 1

GEC-Java

Microsoft Word - 暴君論 ver5.1.1

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

IT プロジェクト

CG

基礎プログラミング2015

目次 1. ログイン ログアウト デスクトップ ( 例 :Word Excel 起動中 ) Dock( 例 :Word Excel 起動中 ) Finder ウィンドウ メニューバー ( 例 :Word 起動中 )...

メソッドのまとめ

PowerPoint プレゼンテーション

10/31 Java AWTの基本構造(Frameクラスの継承) 演習課題資料

プログラミングA

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識


Microsoft Word - macマニュアル【 】.doc

フレーム ページの作り方 那須シニアネット三宅節雄 今回は那須シニアネットのホームページと同様に 1バナーとホームページのタイトルなどを入れた top.html 2スライドショーなど構成するページの名前の一覧から各ページへリンクさせた menu.html 3 取り敢えず表紙を飾った main.htm

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

Microsoft Word - no11.docx

プログラミング入門1

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

(Microsoft Word \203v\203\215\203O\203\211\203~\203\223\203O)

操作元地図準備 フォームの表示 地図準備 シートのフォームのボタンを押し 下絵の準備 フォームを表示します 有料版にされる時は 有料版に ボタンをクリックしパスワードを入力して下さい 元地図の準備 元地図準備 ボタンをクリック ( メッセージが表示 OK で消す ) ファイルを開く ダイアログが表示

Word編Word編7 宛名欄 住所欄を調整する職人編5 差出人登録画面を表示する 住所録の登録が終了したら [ 差出人を作成 編集する ] をクリックし 宛名面を印刷 保存する 1 宛名面を印刷する [ 印刷 ] ボタンをクリックし [ 宛名印刷 ] 画面が表示され印刷範囲を指定し必要に応じて出受

Microsoft Word - gnuplot

p5.js p5.js p5.js Tetris Tetris

PowerPoint プレゼンテーション

プログラミング入門1

Microsoft PowerPoint ppt

Microsoft PowerPoint - kougi7.ppt

<8B9E93738CF092CA904D94CC814090BF8B818F B D836A B B B816A2E786C73>

Microsoft PowerPoint - diip ppt

挙動チェックポイントなどセミコロン ; を忘れていませんか? 黄色なんだか動かないで表示されている部分またはその少し前 Syntax error, maybe a missing にセミコロンを忘れている場所はありま semicolon? などと表示されます せんか? なんだか動作がおかしい の部分

Microsoft Word - 操作マニュアル(PowerPoint2010).doc

スライド 1

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

Taro-2分探索木Ⅰ(公開版).jtd

<4D F736F F D E646F DEC8B40945C82C982C282A282C4>

Taro-テキスト.jtd

Transcription:

Processing による ポーカーゲームについて 110429085 八神孝嗣

Processing によるポーカーゲームについて 1. はじめに Processing でポーカーをつくったきっかけとしては, 指導教員が持ってきた資料の中でトランプを使ったゲームが多かったので, その中でも簡単だと思ったポーカーを選んだ. 2. ポーカーの歴史 ポーカーはトランプを使うゲームである 主にアメリカでプレイされているゲームで, 心理戦を特徴とし, ギャンブルとして行われる事が多い. 日本では, 主にクローズドポーカーと呼ばれる, 手札を隠す方式でプレイされる. 3. ルール ここではルールについて簡単に述べる. スペード, ハート, ダイヤ, クローバーの4つのマークのことをスートといい, それぞれの数字 A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K をランクという. その中から5 枚のカードを選び, 役をつくって勝負する. 役には強さが設定されており, 役の種類は弱い順に次の 10 種類である. ノーペア ( 役なし ) ワンペア ( 同じランクのカードが 2 枚ある ) ツーペア ( ワンペアを 2 組つくる ) スリーカード ( 同じランクのカードを 3 枚つくる ) ストレート (5 つのカードのランクが連続している ) フラッシュ ( スートが全て同じ ) フルハウス ( スリーカードとワンペアを違うランクで同時につくる ) フォーカード ( 同じランクのカードが 4 枚ある ) ストレートフラッシュ ( ストレートとフラッシュを同時につくる ) ロイヤルストレートフラッシュ (A,K,Q,J,10 でストレートフラッシュをつくる ) また, ランクとスートにも強さが設定されており, 役が同じの場合, ランクとスートで勝敗を決める. ランクは A が最も強く,2 が最も弱い. スートの強さはスペード, ハート, ダイヤ, クラブの順である. 1

4. ゲームの進め方 ここでは, 今回作成したポーカープログラムについて説明する. 4.1 オープニング プログラムを起動させると, 最初にタイトルの POKER が表示され, キーボードを押す と, now loading を数秒の間, 表示されたのち, 自動的に Step.0 に移行する. Step.0 カードを配る場所に枠と, 中央上段に山札が描かれ, 山札をクリックすると Step.1 へ移 行する. 2

Step.1 山札から左側にカードが配られ, 配られると Step.2 へ移行する. Step.2 左側にカードが配られてから, さらに山札をクリックすると Step.3 へ移行する. Step.3 山札から右側にカードが配られ, 配られると Step.4 へ移行する. 3

Step.4 左右のカードが裏向きに描かれる. 左側のカードをクリックすると, 左側のカードを表向きに描き,Step.5 へ移行する. Step.5 左側のカードは表向きに描かれる. 右側のカードが裏向きに描かれる. 右側のカードをクリックすると, 右側のカードを表向きに描き,Step.6 へ移行する. Step.6 左右のカードが表向きに描かれる. ここで, キーボードを押すと Step.7 へ移行する. Step.7 4

左右の役の勝敗を決め, 役の名前と WIN,LOSE が描かれる. クリックすると Step.0 へ移行する. 5. プログラムの説明 Processing はオブジェクト指向に対応しているプログラム開発環境である. まず, 作成に利用するために用意したクラスについて述べる. 5.1 クラスの説明 Poker6 メインプログラムクラスや配列, 変数を宣言, 初期化し, ゲームの進行をしている変数 zに従って Step クラスに指示を出してゲームを進めている. 配列は全て 10 個ずつ宣言しているが, 配列の最初の5 個が左のカードに使うもので後の5 個が右のカードに使うものである. 変数の宣言で全てのカードの座標は最初に描く山札の位置に初期化している. Opening オープニングを表示するクラスオープニングを進める変数 wに従ってオープニングを進めている. 変数 c1,c2,c3 に関数 random を使うことでタイトルの色を表示するたびに変化させ, 変数 c4 を大きくしていくことで, タイトルの文字の濃度のだんだん濃くする. そして, キーボードの任意のキーを押すと次の段階に進む. 変数 nの値によって, now loading の後の.. の位置を決めて描画している. Judge 勝敗などを判定するクラス 5

関数 Duplicate はカード同士のかぶりをなくすための関数で if,for,while を使っている. まず, カードに割り当てられた数字が初期化された値 0だった場合, 関数 random を使い数字をそれぞれランダムに与えていく. そのあと if を使い, もしランダムに与えた数字に同じものがあれば, もう一度ランダムに与えていく. これを 10 枚のカードが全て違う数字になるまで続けていく. 関数 Suit は関数 Duplicate で与えられた数字をもとにランクとスートを決めていく関数で, 数字が2~14 ならばクラブの2~A となり,15~27 ならばハートの2~A となり,28~40 ならばダイヤの2~A となり,41~53 ならばスペードの2~A となる. ここでその値を配列 ranks と suits に格納し, 以降はこの2 つの配列を使っていく. 関数 hand は配列 ranks と suits を使いポーカーの役を判定する関数であり, ワンペア, ツーペア, スリーカード, フルハウス, フォーカードの判定は手札の 5 枚の中で同じランクのカードが何枚あるかで決めている. ストレートは5 個のランクを小さい順に並び変え,5 個とも連番になっているかで決めている. フラッシュは5 枚とも同じスートか判定している. ストレートフラッシュはストレートかつフラッシュのときになる. ロイヤルストレートフラッシュはストレートフラッシュの中でも最小のランクが 10 のときになる. 関数 bout は関数 hand で決めた役をもとに左右の役がどちらが強いか判定する関数で, 同じ役同士ならば大きいランクのものが勝つようになっている. Step ゲームを進めるクラス前述のとおりにゲームを進めていく. Trump 描画するクラス関数 Frame は与えられたx 座標 y 座標によって枠を描画する関数である. 関数 Bottom は与えられたx 座標 y 座標によってカードを裏向きにを描画する関数である. 関数 Surface は与えられたx 座標 y 座標によってカードを表向きにを描画する関数であり, 与えられる ranks と suits の値によって描画する. 関数 Hname は関数 hand で決まった役の名前を描画する関数である. 関数 Win と関数 Lose は勝負に勝った方に Win を負けた方に Lose を描画する関数である. 6. ソースプログラム 最後に全ソースプログラムを記載する. 6.1 Poker6 6

Opening opening; // オープニングのクラス Trump trump; // トランプなどを描画するクラス Step step; // ゲームを進めるクラス Judge judge; // 判定するクラス int[] numbers=new int[10]; // 各カードの数字の配列 int[] ranks=new int[10]; // 各カードのランクの配列 int[] suits=new int[10]; // 各カードのスートの配列 float[] cardxs=new float[10]; // 各カードの x 座標の配列 int LY=100; // 左のカードの y 座標 int RY=100; // 右のカードの y 座標 int LH=0; // 左のカードのハンドの強さ int LHr=0; // 左のカードのハンドのランクの強さ int LHs=0; // 左のカードのハンドスート int RH=0; int RHr=0; int RHs=0; // 右のカードのハンドの強さ // 右のカードのハンドのランクの強さ // 右のカードのハンドスート int z=0; // ゲームを進行するための変数 int n=0; // now loading を描画するための変数 PImage clubs; // クラブの画像を使う宣言 PImage diamonds; // ダイヤの画像を使う宣言 PImage hearts; // ハートの画像を使う宣言 PImage spades; // スペードの画像を使う宣言 void setup() { size(1230,500); smooth(); background(255); rectmode(center); strokeweight(5); textalign(center); 7

opening=new Opening(); trump=new Trump(); step=new Step(); judge=new Judge(); for(int i=0;i<numbers.length;i++) { numbers[i]=0; for(int i=0;i<ranks.length;i++) { ranks[i]=0; for(int i=0;i<suits.length;i++) { suits[i]=0; for(int i=0;i<cardxs.length;i++) { cardxs[i]=615; clubs=loadimage("clubs.png"); diamonds=loadimage("diamonds.png"); hearts=loadimage("hearts.png"); spades=loadimage("spades.png"); imagemode(center); void draw() { background(255); trump.bottom(width/2,100); judge.duplicate(); judge.suit(); if(z=-1) { opening.ope(); 8

if(z==0) { step.s0(); else if(z==1) { step.s1(); else if(z==2) { step.s2(); else if(z==3) { step.s3(); else if(z==4) { step.s4(); else if(z==5) { step.s5(); else if(z==6) { step.s6(); else if(z==7) { step.s7(); 6.2 Opening class Opening { int w=0; // オープニングを進めるための変数 float c1=random(255); // タイトルの色を決める変数 float c2=random(255); // タイトルの色を決める変数 float c3=random(255); // タイトルの色を決める変数 int c4=0; // タイトルの色の濃さを決める変数 9

void Ope() { // オープニングを進める関数 if(w==0) { opening.title(); else if(w==1) { opening.loading(); void Title() { // タイトル POKER を表示する関数 fill(c1,c2,c3,c); textsize(390); text("poker",width/2,height-100); textsize(30); fill(0,c); text("press any key",width/2,height/2+120); c++; if(keypressed) { w=1; void Loading() { // now loading を表示する関数 fill(0); textsize(30); if(n%20>=0&&n%20<=4) { text("now loading ",width/2,height/2); if(n%20>=5&&n%20<=9) { text("now loading. ",width/2,height/2); if(n%20>=10&&n%20<=14) { text("now loading.. ",width/2,height/2); if(n%20>=15&&n%20<=19) { 10

text("now loading...",width/2,height/2); n++; if(n>90) { z=0; 6.3 Judge class Judge { void Duplicate() { // カード同士のかぶりをなくす関数 if(numbers[0]==0) { for(int i=0;i<numbers.length;i++) { numbers[i]=int(random(2,53)); for(int i=0;i<numbers.length;i++) { for(int j=i+1;j<numbers.length;j++) { while(numbers[i]==numbers[j]) { numbers[j]=int(random(2,53)); void Suit() { // カードのスートを決める関数 for(int i=0;i<ranks.length;i++) { if(numbers[i]>=2&&numbers[i]<=14) { ranks[i]=numbers[i]; suits[i]=1; else if(numbers[i]>=15&&numbers[i]<=27) { ranks[i]=numbers[i]-13; 11

suits[i]=2; else if(numbers[i]>=28&&numbers[i]<=40) { ranks[i]=numbers[i]-26; suits[i]=3; else if(numbers[i]>=41&&numbers[i]<=53) { ranks[i]=numbers[i]-39; suits[i]=4; void hand(int b) { // ハンドの種類を決める関数 int h=0; int hr=0; int hs=0; int p=0; int q=0; int r=0; int s=0; int str[]=new int[10]; for(int i=0;i<str.length;i++) { str[i]=ranks[i]; for(int i=b;i<b+5;i++) { // ワンペア, ツーペア, スリーカード, for(int j=i+1;j<b+5;j++) { フルハウス, フォーカードの判定 if(ranks[i]==ranks[j]) { p++; if(p==1) { h=1; hr=ranks[i]; hs=suits[i]; 12

else if(p==2) { h=2; if(hr<ranks[i]) { hr=ranks[i]; hs=suits[i]; else if(p==3) { h=3; if(hr<ranks[i]) { hr=ranks[i]; hs=suits[i]; else if(p==4) { h=6; if(hr<ranks[i]) { hr=ranks[i]; hs=suits[i]; else if(p==6) { h=7; if(hr<ranks[i]) { hr=ranks[i]; hs=suits[i]; for(int i=b;i<b+5;i++) { // ストレートの判定 for(int j=i+1;j<b+5;j++) { if(str[i]<str[j]) { r=str[j]; 13

str[j]=str[i]; str[i]=r; if(str[b]-str[b+1]==1&&str[b+1]-str[b+2]==1&&str[b+2]-str[b+3]==1&&str[b +3]-str[b+4]==1 str[b]==14&&str[b+1]-str[b+2]==1&&str[b+2]-str[b+3]==1& &str[b+3]-str[b+4]==1&&str[b+4]==2) { h=4; hs=suits[b]; hr=str[b]; s=1; for(int i=b+1;i<b+5;i++) { // フラッシュの判定 if(suits[b]==suits[i]) { q++; if(q==4&&p<q) { h=5; hs=suits[i]; if(h==5&&s==1) { // ストレートフラッシュの判定 h=8; if(str[b+4]==10) { // ロイヤルストレートフラッシュの判定 h=9; if(h==0) { // ノーペアの判定 for(int i=b;i<b+5;i++) { if(hr<ranks[i]) { hr=ranks[i]; 14

hs=suits[i]; if(b==0) { LH=h; LHr=hr; LHs=hs; else if(b==5) { RH=h; RHr=hr; RHs=hs; void bout() { // ハンド同士を勝負させる関数 trump.hname(lh,295); trump.hname(rh,935); if(lh>rh) { trump.win(295); trump.lose(935); else if(lh<rh) { trump.lose(295); trump.win(935); else if(lh==rh) { if(lh==5) { if(lhs>rhs) { trump.win(295); trump.lose(935); else if(lhs<rhs) { 15

trump.lose(295); trump.win(935); else { if(lhr>rhr) { trump.win(295); trump.lose(935); else if(lhr<rhr) { trump.lose(295); trump.win(935); else if(lhr==rhr) { if(lhs>rhs) { trump.win(295); trump.lose(935); else if(lhs<rhs) { trump.lose(295); trump.win(935); 6.4 Step class Step { void s0() { for(int i=0;i<5;i++) { trump.frame(75+i*110,400); trump.frame(1155-i*110,400); 16

if(mousex>=615-50&&mousex<=615+50&&mousey>=25&&mousey<=175&&mousepressed ) { z=1; void s1() { for(int i=0;i<5;i++) { trump.frame(75+i*110,400); trump.frame(1155-i*110,400); for(int i=0;i<2;i++) { for(int j=0;j<5;j++) { trump.bottom(cardxs[j],ly); cardxs[0]-=7.2; cardxs[1]-=5.7333; cardxs[2]-=4.26666; cardxs[3]-=2.8; cardxs[4]-=1.3333; LY+=4; if(ly>=400) { z=2; void s2() { for(int i=0;i<5;i++) { trump.frame(1155-i*110,400); 17

for(int i=0;i<5;i++) { trump.bottom(cardxs[i],ly); if(mousex>=615-50&&mousex<=615+50&&mousey>=25&&mousey<=175&&mousepressed ) { z=3; void s3() { for(int i=0;i<5;i++) { trump.frame(1155-i*110,400); for(int i=0;i<5;i++) { trump.bottom(cardxs[i],ly); for(int i=0;i<2;i++) { for(int j=5;j<10;j++) { trump.bottom(cardxs[j],ry); cardxs[5]+=7.2; cardxs[6]+=5.7333; cardxs[7]+=4.26666; cardxs[8]+=2.8; cardxs[9]+=1.33333; RY+=4; if(ry>=400) { z=4; 18

void s4() { for(int i=0;i<ranks.length;i++) { trump.bottom(cardxs[i],ly); if(mousex>=25&&mousex<=565&&mousey>=325&&mousey<=475&&mousepressed) { for(int i=0;i<5;i++) { trump.surface(cardxs[i],ly,ranks[i],suits[i]); z=5; void s5() { for(int i=0;i<5;i++) { trump.surface(cardxs[i],ly,ranks[i],suits[i]); for(int i=5;i<ranks.length;i++) { trump.bottom(cardxs[i],ry); if(mousex>=665&&mousex<=1205&&mousey>=325&&mousey<=475&&mousepressed) { for(int i=5;i<ranks.length;i++) { trump.surface(cardxs[i],ry,ranks[i],suits[i]); z=6; void s6() { for(int i=0;i<ranks.length;i++) { trump.surface(cardxs[i],ly,ranks[i],suits[i]); 19

if(keypressed) { z=7; void s7() { for(int i=0;i<ranks.length;i++) { trump.surface(cardxs[i],ly,ranks[i],suits[i]); judge.hand(0); judge.hand(5); judge.bout(); if(mousex>=615-50&&mousex<=615+50&&mousey>=25&&mousey<=175&&mousepressed ) { for(int i=0;i<cardxs.length;i++) { cardxs[i]=615; LY=100; RY=100; numbers[0]=0; z=0; n=0; 6.5 Trump class Trump { 20

void Frame(int x,int y) { // カードを配る枠を描く関数 stroke(150); fill(255); rect(x,y,100,150,10); void Bottom(float x,int y) { // カードの裏側を描く関数 stroke(0); fill(255); rect(x,y,100,150,10); fill(0,0,255); rect(x,y,80,130,10); void Surface(float x,int y,int r,int s) { // カードの表側を描く関数 stroke(0); fill(255); rect(x,y,100,150,10); if(s==1) { fill(0); image(clubs,x,y+30,50,50); else if(s==2) { fill(255,0,0); image(diamonds,x,y+30,50,50); else if(s==3) { fill(255,0,0); image(hearts,x,y+30,50,50); else if(s==4) { fill(0); image(spades,x,y+30,50,50); 21

textsize(50); if(r==14) { text("a",x,y-20); else if(r==11) { text("j",x,y-20); else if(r==12) { text("q",x,y-20); else if(r==13) { text("k",x,y-20); else { text(r,x,y-20); void Hname(int h,int x) { // ハンドの名前を描く関数 fill(0); if(h==0) { text("no Pair",x,height/2+50); else if(h==1) { text("one Pair",x,height/2+50); else if(h==2) { text("two Pair",x,height/2+50); else if(h==3) { text("three of a Kind",x,height/2+50); else if(h==4) { text("straight",x,height/2+50); else if(h==5) { 22

text("flash",x,height/2+50); else if(h==6) { text("full House",x,height/2+50); else if(h==7) { text("four of a Kind",x,height/2+50); else if(h==8) { text("straight Flush",x,height/2+50); else if(h==9) { text("royal Straight Flush",x,height/2+50); void Win(float x) { //WIN を描く関数 fill(255,0,0); text("win",x,height/2-20); void Lose(float x) { //LOSE を描く関数 fill(0,0,255); text("lose",x,height/2-20); 7. まとめと今後の課題 役の判定が難しく, 特にストレートの判定は難問であった. ストレートの種類は A,2,3,4,5 と 10,J,Q,K,A の A を使うストレートだけでも2 種類あるので, その誤差を直すのと,5 個の数字が連番になっているかを調べることが大変であった. 今後の課題としては, ポーカーは手札を好きな枚数だけ交換することができるので, 交換までできればと考えている. 23