01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
import java.applet.Applet;
import java.awt.*;
import java.util.*;
import java.lang.*;
import java.awt.event.*;
public class shinkeisuijaku extends java.applet.Applet implements MouseListener {
MediaTracker mt;
Image pict[] = new Image[7] ; // 絵を入れる配列
Image back ; // カードの裏の絵を入れる変数
int count = 0; // ひっくり返されたカードの枚数
int openCard[] = new int[2]; // ひっくり返された2枚のカード番号
int stat[] = new int[12]; // カードの状態(0:裏、1:ひっくり返された、2:表のまま)
int card[] = new int[12]; // カードの配列(セットされた絵の番号が入る)
int x[] = new int[12]; // カードのx座標
int y[] = new int[12]; // カードのy座標
int cardWidth = 128, cardHeight = 128; // カードの幅、高さ
int margin = 5; // 余白
public void init() {
int i ,j; // カウンター
int k; // カード番号
int yy; // 段毎のy座標
mt = new MediaTracker(this);
/* イメージファイルの読み込み */
back = getImage(getCodeBase(), "back.jpg");
mt.addImage(back,0);
for( i = 0 ; i < 7 ; i++ ) {
pict[i] = getImage(getCodeBase(), "s" + (i) + ".jpg");
mt.addImage(pict[i],1);
}
/* イメージが全て読み込まれるまで待つ */
try {
mt.waitForID(0);
mt.waitForID(1);
} catch (InterruptedException e) {
return;
}
/* カードの位置(x、y座標)の設定 */
k = 0;
for( i = 0 ; i < 3 ; i++ ) {
yy = i * cardHeight + margin;
for( j = 0 ; j < 4 ; j++ ) {
x[k] = j * cardWidth + margin ;
y[k] = yy;
k = k + 1;
}
}
/* カードをセットする */
shuffle(); //カードのセット
addMouseListener(this); //マウスリスナーとして自分自身を登録
}
public void paint(Graphics g){
update(g);
}
public void update(Graphics g){
int i; //カウンタ
//バックをオレンジで塗る
g.setColor(Color.orange);
g.fillRect(0, 0, 600, 404);
//タイトルの描画
g.setColor(Color.red);
g.drawString("神経衰弱", 520, 30);
//カードの描画
for(i = 0;i < 12;i++){
if(stat[i] == 0){ //statが0」なら裏の絵を描く
g.drawImage(back, x[i], y[i], this);
}else{ //
g.drawImage(pict[card[i]], x[i], y[i], this);
}
}
//SHUFFLEボタンの描画
g.setColor(Color.green);
g.fillRect(520, 70, 65, 25);
g.setColor(Color.black);
g.drawString("SHUFFLE", 522, 88);
}
public void mousePressed(MouseEvent e){
int i; //カウンタ
int row, col; //マウスが押された位置
int nn; //ひっくり返すカードの番号
int ix, iy; //マウスが押された座標
//マウスがクリックされた位置の取得
ix = e.getX();
iy = e.getY();
//SHUFFLEボタンの描画領域ならカードをセットし直す
if(ix > 520 && ix < 585 && iy > 70 && iy <95){
shuffle();
repaint();
}
//一枚目のカードをひっくり返す前の処理
if(count == 0){
for(i = 0; i < 12;i++){
if(stat[i] == 1){
//毎回ひっくり返されたカードは裏に戻す
//ただし、一致したカードは表のまま残す
stat[i] = 0;
repaint(x[i] , y[i], 128 , 128);
}
}
}
//マウスで何列目が押されたか
col = -1;
if(ix > margin) col = 0;
if(ix > cardWidth + margin) col = 1;
if(ix > cardWidth * 2 + margin) col = 2;
if(ix > cardWidth * 3 + margin) col = 3;
if(ix > cardWidth * 4 + margin) col = -1;
//マウスで何行目が押されたか
row = -1;
if(iy > margin) row = 0;
if(iy > cardHeight + margin) row = 1;
if(iy > cardHeight * 2 + margin) row = 2;
if(iy > cardHeight * 3 + margin) row = -1;
//ひっくり返されたカード番号の計算
if(col >= 0 && row >= 0){
nn = row * 4 + col;
if(stat[nn] == 0){ //カードが裏だったらカードをひっくり返す
openCard[count] = nn; //どのカードが開けられたかをセットする
stat[nn] = 1; //カードの状態をひっくり返すにする
repaint(x[nn], y[nn], 128, 128);
if(count == 1){ //2枚目をひっくり返した時の処理
if(card[openCard[0]] == card[openCard[1]]){
stat[openCard[0]] = 2;
stat[openCard[1]] = 2;
}
}
}
//現在何枚のカードがひっくり返されたか
count = count + 1;
if(count == 2){
count = 0;
}
}
}
public void mouseReleased(MouseEvent e){ //マウスボタンは放された
}
public void mouseClicked(MouseEvent e){ //マウスボタンはクリックされた
}
public void mouseEntered(MouseEvent e){ //マウスカーソルが入ってきた
}
public void mouseExited(MouseEvent e){ //マウスカーソルが出て行った
}
//
public void shuffle(){
int i, k; //カウンター
int notuse; //未使用のカード番号
int no; //入れ替えるカードの位置
int work; //入れ替えようの変数
count = 0; //ひっくり返されたカードは0枚
for(i = 0;i < 12 ; i++){ //すべてのカードを裏返す
stat[i] = 0;
}
//使わない絵を乱数で決定
notuse = (int)(Math.random() * (float)(7));
//カードに絵の番号をセット
k = 0;
for(i = 0; i < 7 ; i++){
if(i != notuse){
card[k] = i;
card[k + 1] = i;
k = k + 2;
}
}
//カードの順番を入れ替える
for(k = 0; k < 12; k++){
//入れ替えるカードを乱数で決定
no = (int)(Math.random() * (float)(12));
//カードの入れ替え
work = card[k];
card[k] = card[no];
card[no] = work;
}
}
}
|