/****************************************/ /* */ /* ポーカーver 0.90 */ /* */ /* 1997/ 2/13 宍戸 輝光  */ /* */ /****************************************/ import java.awt.*; import java.util.Random; public class poker090 extends java.applet.Applet { Panel p_ok,p_mes; Panel p_card[]=new Panel[5]; Button ok; Button b_card[]=new Button[5]; Label message; Image screen; Image mark[]=new Image[5]; Graphics g_screen; Graphics g_mark[]=new Graphics[5]; Font f; Random rnd=new Random(); int cardMark[]=new int[5]; int cardNo[]=new int[5]; boolean doneCard[][]=new boolean[4][14]; int i,j; public void init() { resize(400,320); setBackground(Color.white); screen=createImage(332,128); g_screen=screen.getGraphics(); g_screen.setColor(Color.magenta); g_screen.fillRect(0,0,332,128); g_screen.setFont(new Font("Courier",Font.BOLD,16)); for (i=0;i<5;i++) { /*スートマーク用イメージ作成*/ mark[i]=createImage(16,16); g_mark[i]=mark[i].getGraphics(); } this.setLayout((LayoutManager)null); for (i=0;i<5;i++) { /*Change/Hold ボタン作成*/ p_card[i]=new Panel(); add(p_card[i]); p_card[i].reshape(64*i+42,172,60,32); b_card[i]=new Button(); b_card[i].setFont(new Font("Courier",Font.BOLD,12)); b_card[i].setLabel("Change"); p_card[i].add(b_card[i]); } p_ok=new Panel(); /*Start/Ok ボタン作成*/ add(p_ok); p_ok.reshape(164,216,64,32); ok=new Button(); ok.setFont(new Font("Courier",Font.BOLD,12)); ok.setLabel("Start"); p_ok.add(ok); p_mes=new Panel(); add(p_mes); p_mes.reshape(100,250,201,25); message=new Label(); /*メッセージ表示用ラベル作成*/ p_mes.add(message); message.reshape(0,0,200,24); message.setFont(new Font("Courier",Font.BOLD,12)); message.setAlignment(1); message.setText("Push Start Button!!"); markDraw(); /*スートマークイメージ作成*/ repaint(); } public void markDraw() { /*スートマークを描く*/ for (i=0;i<4;i++) { g_mark[i].setColor(Color.white); g_mark[i].fillRect(0,0,16,16); } g_mark[0].setColor(Color.black); /*スペード*/ g_mark[0].fillRect(1,7,14,4); for (i=0;i<5;i++) g_mark[0].fillRect(2+i,6-i,12-i*2,1); g_mark[0].fillRect(7,11,2,4); g_mark[0].fillRect(7,1,2,1); g_mark[0].fillRect(2,11,3,1); g_mark[0].fillRect(11,11,3,1); g_mark[1].setColor(Color.black); /*クラブ*/ g_mark[1].fillOval(5,1,6,7); g_mark[1].fillOval(1,6,6,6); g_mark[1].fillOval(9,6,6,6); g_mark[1].fillRect(7,6,2,9); g_mark[2].setColor(Color.red); /*ダイア*/ g_mark[2].fillRect(1,7,13,1); for (i=0;i<6;i++) { g_mark[2].fillRect(2+i,6-i,11-i*2,1); g_mark[2].fillRect(2+i,8+i,11-i*2,1); } g_mark[3].setColor(Color.red); /*ハート*/ g_mark[3].fillRect(1,2,13,5); for (i=0;i<6;i++) g_mark[3].fillRect(2+i,7+i,11-i*2,1); g_mark[3].fillRect(2,1,4,1); g_mark[3].fillRect(9,1,4,1); } public void drawCards() { /*表示用イメージにカードを描く*/ String No=new String(); for (i=0;i<5;i++) { /*カードの枠を描く*/ g_screen.setColor(Color.white); g_screen.fillRect(i*64+8,20,56,96); g_screen.setColor(Color.black); g_screen.drawRect(i*64+8,20,56,96); g_screen.drawImage(mark[cardMark[i]],i*64+24,32,this); if (cardNo[i]>1 && cardNo[i]<11) /*カードの数字部分*/ No=String.valueOf(cardNo[i]); else switch (cardNo[i]) { /*数字部分が文字の場合*/ case 1: No="A"; break; case 11: No="J"; break; case 12: No="Q"; break; case 13: No="K"; break; } g_screen.drawString(No,i*64+24,72); /*数字部分を描く*/ } } public void getCards() { /*カードを配る*/ for (i=0;i<5;i++) { if (b_card[i].getLabel()=="Change") {/*Change 状態か*/ do { /*カード決定*/ cardMark[i]=Math.abs(rnd.nextInt() % 4); cardNo[i]=Math.abs(rnd.nextInt() % 13)+1; } while (doneCard[cardMark[i]][cardNo[i]]); doneCard[cardMark[i]][cardNo[i]]=true; } } } public String hantei() { /*役の判定*/ boolean flush,st,rs; int sameMark,sameNo,pair,max,min; int work[]=new int[5]; sameMark=1; flush=false; for (i=1;i<5;i++) { /*同じマークのカード枚数を数える*/ if (cardMark[0]==cardMark[i]) sameMark++; } if (sameMark==5) /*5枚同じマークならフラッシュ*/ flush=true; for (i=0;i<5;i++) work[i]=0; for (i=0;i<5;i++) /*同じ数字のマーク枚数を数える*/ for (j=0;j<5;j++) if (cardNo[i]==cardNo[j]) work[i]++; sameNo=0; pair=0; for (i=0;i<5;i++) /*2枚同じになっているカードの枚数*/ if (work[i]==2) pair++; for (i=0;i<5;i++) /*同じ数字が最大何個あるか数える*/ if (work[i]>sameNo) sameNo=work[i]; max=0; min=13; for (i=0;i<5;i++) { /*数字の最大と最小を調べる*/ if (cardNo[i]>max) max=cardNo[i]; if (cardNo[i]