じんとり


クマ先生 2人で 組になって あそびましょう。
遊び方は
(1)さきにする いろを えらびます。
(2)じぶんの じんちに つなげて じんちを ひろげることが できます。
(3)たくさん じんちを とったひとの かちです。
リスくん 遊びなの??
クマ先生 遊びみたいだけど、ちゃんとした面積の勉強ですよ。

ジャヴァアプレットは動きませんが
プログラムを記念碑として残します。
/*
Jintori.java
2001/2/22
*/
import java.awt.*;
import java.applet.*;
public class Jintori extends Applet
{
int aka=0;
int ao=0;
int tate;
int yoko;
String waku[][];
String kari[][];//=new String[16][16];
int iti[][][];
public void init()
{
//{{INIT_CONtrOLS
setLayout(null);
setBackground(java.awt.Color.white);
setForeground(java.awt.Color.black);
setSize(474,354);
button1.setLabel("赤から");
add(button1);
button1.setBackground(java.awt.Color.red);
button1.setForeground(java.awt.Color.white);
button1.setBounds(28,16,56,28);
button2.setLabel("青から");
add(button2);
button2.setBackground(java.awt.Color.blue);
button2.setForeground(java.awt.Color.white);
button2.setBounds(372,16,60,28);
button3.setLabel("5×5");
add(button3);
button3.setBackground(java.awt.Color.lightGray);
button3.setBounds(84,16,48,28);
button4.setLabel("5×7");
add(button4);
button4.setBackground(java.awt.Color.lightGray);
button4.setBounds(132,16,48,28);
button5.setLabel("7×7");
add(button5);
button5.setBackground(java.awt.Color.lightGray);
button5.setBounds(180,16,48,28);
button6.setLabel("7×9");
add(button6);
button6.setBackground(java.awt.Color.lightGray);
button6.setBounds(228,16,48,28);
button7.setLabel("9×9");
add(button7);
button7.setBackground(java.awt.Color.lightGray);
button7.setBounds(276,16,48,28);
label1.setText("じんとり");
label1.setAlignment(java.awt.Label.CENTER);
add(label1);
label1.setForeground(java.awt.Color.black);
label1.setFont(new Font("Dialog", Font.PLAIN, 18));
label1.setBounds(32,48,396,24);
button8.setLabel("クリア");
add(button8);
button8.setBackground(java.awt.Color.lightGray);
button8.setBounds(324,16,48,28);
//}}
tate=5;
yoko=5;
waku=new String[16][16];
kari=new String[16][16];
iti=new int[16][16][2];
wakuSet("hajime");
nextCol="kuro";
//{{REGISTER_LISTENERS
SymMouse aSymMouse = new SymMouse();
button1.addMouseListener(aSymMouse);
button2.addMouseListener(aSymMouse);
button3.addMouseListener(aSymMouse);
button4.addMouseListener(aSymMouse);
button5.addMouseListener(aSymMouse);
button6.addMouseListener(aSymMouse);
button7.addMouseListener(aSymMouse);
this.addMouseListener(aSymMouse);
button8.addMouseListener(aSymMouse);
//}}
}
/*
枠の大きさを設定する
回りの枠に"soto"、また、指定した大きさに外れる部分を"soto"として
左上隅を"ao",右下隅を"aka"とする
*/
int ueAki=50;
int yokoAki=90;
int w=30;//枠の高さ
int h;//枠の幅
String nextCol="aka";//次に塗られる色、順番
public void wakuSet(String iro)
{
setLabel1(iro);

int w1=getSize().width;
yokoAki=(w1- (w * (yoko+2) ))/2;
for(int x=0;x<=15;x++)
{
for(int y=0;y<=15;y++)
{
iti[x][y][0]=yokoAki+w * x ;
iti[x][y][1]=ueAki+ w * y ;
if(x==0 || y==0 || x>yoko || y>tate )
{
waku[x][y]="soto";
}else
{
waku[x][y]="naka";
}
if(x==1 && y==1)waku[x][y]="aka";
if(x==yoko && y==tate)waku[x][y]="ao";
}
}
//nextCol="kuro";
//setLabel1("nextCol");
repaint();
}
//ラベルの設定
public void setLabel1(String col)
{
if(col.equals("aka"))
{
label1.setForeground(java.awt.Color.red);
label1.setText("●あかの ばん です");
nextCol="aka";
}else if(col.equals("ao"))
{
label1.setForeground(java.awt.Color.blue);
label1.setText("あおの ばん です●");
nextCol="ao";
}else if(col.equals("kuro"))
{
label1.setForeground(java.awt.Color.black);
label1.setText("じんとり");
nextCol="kuro";
}else if(col.equals("soto"))
{
label1.setText("●そこは じんちに できません");
}

}
public void paint(Graphics g)
{
for(int x=1;x<=yoko;x++)
{
for( int y=1;y<=tate;y++)
{
if(waku[x][y].equals("aka"))
{
g.setColor(Color.red);
}else if( waku[x][y].equals("ao"))
{
g.setColor(Color.blue);
}else
{
g.setColor(Color.white);
}
g.fill3DRect(iti[x][y][0],iti[x][y][1],w-1,w-1,true);
g.setColor(Color.black);
g.draw3DRect(iti[x][y][0], iti[x][y][1], w-1, w-1, true);
//g.drawString(waku[x][y],iti[x][y][0]+2,iti[x][y][1]+20);
}
}
}

//{{DECLARE_CONtrOLS
java.awt.Button button1 = new java.awt.Button();
java.awt.Button button2 = new java.awt.Button();
java.awt.Button button3 = new java.awt.Button();
java.awt.Button button4 = new java.awt.Button();
java.awt.Button button5 = new java.awt.Button();
java.awt.Button button6 = new java.awt.Button();
java.awt.Button button7 = new java.awt.Button();
java.awt.Label label1 = new java.awt.Label();
java.awt.Button button8 = new java.awt.Button();
//}}
class SymMouse extends java.awt.event.MouseAdapter
{
public void mouseClicked(java.awt.event.MouseEvent event)
{
Object object = event.getSource();
if (object == button1)
button1_MouseClicked(event);
else if (object == button2)
button2_MouseClicked(event);
else if (object == button3)
button3_MouseClicked(event);
else if (object == button4)
button4_MouseClicked(event);
else if (object == button5)
button5_MouseClicked(event);
else if (object == button6)
button6_MouseClicked(event);
else if (object == button7)
button7_MouseClicked(event);
else if (object == Jintori.this)
Jintori_MouseClicked(event);
else if (object == button8)
button8_MouseClicked(event);
}
}
//青で始める
void button1_MouseClicked(java.awt.event.MouseEvent event)
{
wakuSet("aka");
nextCol="aka";
}
//赤で始める
void button2_MouseClicked(java.awt.event.MouseEvent event)
{
wakuSet("ao");
nextCol="ao";
}
void button3_MouseClicked(java.awt.event.MouseEvent event)
{
yoko=5;
tate=5;
wakuSet("kuro");
}
void button4_MouseClicked(java.awt.event.MouseEvent event)
{
yoko=7;
tate=5;
wakuSet("kuro");
}
void button5_MouseClicked(java.awt.event.MouseEvent event)
{
yoko=7;
tate=7;
wakuSet("kuro");
}
void button6_MouseClicked(java.awt.event.MouseEvent event)
{
yoko=9;
tate=7;
wakuSet("kuro");
}
void button7_MouseClicked(java.awt.event.MouseEvent event)
{
yoko=9;
tate=9;
wakuSet("kuro");
}
//マウスがクリックされたときの色塗り
void Jintori_MouseClicked(java.awt.event.MouseEvent event)
{
int itiX=event.getX();
int itiY=event.getY();
if( nextCol.equals("aka") || nextCol.equals("ao") )
{
itiHantei(itiX,itiY,nextCol);
}
}
public void itiHantei(int ix,int iy,String nCol)
{
//クリックされた枠の番号を得る
int tx=0;//ターゲットの枠ナンバー
int ty=0;
for(int x=1;x<=yoko;x++)
{
for(int y=1;y<=tate;y++)
{
if(iti[x][y][0]<ix && iti[x][y][0]+w>ix && iti[x][y][1]<iy && iti[x][y][1]+w>iy)
{
tx=x;
ty=y;
}
}
}
//クリックされた枠が塗れるかどうか判定する
String rtSt="soto";
if( waku[tx][ty].equals("soto") || waku[tx][ty].equals("ao") || waku[tx][ty].equals("aka") )
{
rtSt="soto";
}else if( waku[tx][ty].equals("naka") )
{
if( waku[tx-1][ty].equals( nCol ) )rtSt="naka";
if( waku[tx+1][ty].equals( nCol ) )rtSt="naka";
if( waku[tx][ty-1].equals( nCol ) )rtSt="naka";
if( waku[tx][ty+1].equals( nCol ) )rtSt="naka";
}
if(rtSt.equals("soto") )//外部で塗れない場合
{
if(nextCol.equals("aka") || nextCol.equals("ao") )
{
setLabel1("soto");
}
}else if(rtSt.equals("naka"))//内部の場合
{
//色塗りして、塗る色を変え、次の順番を表示する
waku[tx][ty]=nCol;
repaint();

String kekka= kekkaHantei();
if(kekka.equals("fuka"))//結果まだ塗れる
{
if(nextCol.equals("aka"))
{
nextCol="ao";
}else if(nextCol.equals("ao"))
{
nextCol="aka";
}
setLabel1( nextCol );
}else//もう塗れない
{
nextCol="kuro";
//結果表示済みkekkaHyouji();
}
}
}
//色が塗り終わったかの判定// aka ao(塗り終わった) fuka(まだ) を返す
public String kekkaHantei()
{
//判定用に仮の枠を作る
for(int x=0;x<=15;x++)
{
for(int y=0;y<=15;y++)
{
kari[x][y]=waku[x][y];
}
}
//空いている枠を上下左右の枠の色を見て塗っていって
//回りが赤と青がある空いた枠があるかで全部塗れるかを判定する
String hantei="ka";
String hantei1;
int x=1;
int y=1;
do
{
do
{
if(kari[x][y].equals("naka"))//内部で塗られていない///////////////////////////////////
{
hantei=mawariHantei(x,y);//塗れるかどうかの判定 aka ao fukanou
if( hantei.equals("aka") || hantei.equals("ao") )//赤か青で塗れる
{
kari[x][y]=hantei;
}
else//塗れない
{
hantei="fuka";//ここでループを抜ける
}
}
y++;
}while( y<=tate && ! hantei.equals("fuka") );
y=1;
x++;

}while(x<=yoko && ! hantei.equals("fuka") );
if( ! hantei.equals("fuka") )
{
//元を全部塗り直して
int akaSu=0;
int aoSu=0;
for( x=0;x<=15;x++)
{
for( y=0;y<=15;y++)
{
waku[x][y]=kari[x][y];
if(waku[x][y].equals("aka") )
{
akaSu++;
}else if(waku[x][y].equals("ao"))
{
aoSu++;
}
}
}
//どっちがかったかによってテキストを表示
String H=""+akaSu+" たい "+aoSu+" で ";
if(akaSu>aoSu)
{
label1.setForeground(java.awt.Color.red);
aka=aka+1;//勝ち数
button1.setLabel(""+aka+" 勝");
H=H+"赤のかち";
}else if(akaSu<aoSu)
{
ao=ao+1;
button2.setLabel(""+ao+" 勝");
label1.setForeground(java.awt.Color.blue);
H=H+"青のかち";
}else
{
label1.setForeground(java.awt.Color.black);
H=H+"ひきわけ";
}
label1.setText( H );
//勝ち負けを表示して
repaint();
}
return hantei;
}
//指定した位置の回りの色の判定 塗りつぶしが可能か不可能か
public String mawariHantei(int x,int y)
{
String rt="fukanou";
int a=mawariHantei(x,y,"aka");
int b=mawariHantei(x,y,"ao");
if (a>0 && b==0)
{
rt="aka";
}else if( a==0 && b>0)
{
rt="ao";
}else if( a>0 && b>0)
{
rt="fukanou";
}
return rt;
}
//回りに指定された色がいくつあるか判定する
public int mawariHantei(int x,int y,String c)
{
int rt=0;
if( kari[x-1][y].equals(c) || kari[x+1][y].equals(c) || kari[x][y-1].equals(c) ||kari[x][y+1].equals(c) )
{
rt++;
}
return rt;
}
void button8_MouseClicked(java.awt.event.MouseEvent event)
{
aka=0;
ao=0;
button1.setLabel("赤から");
button2.setLabel("青から");
nextCol="kuro";
wakuSet(nextCol);
}
}
どっちが広い