前提・実現したいこと
ここに質問の内容を詳しく書いてください。
javaで○×ゲームのコードを自分で改造するという課題で以下のように改造したいのですが、できません。
1,ゲーム終了後に盤面をもう一度クリックすると、再度ゲームが始まるようにする
2,"引き分け"などの文字を大きくする
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
java
1クラス1 2 3public class OXmodel { 4 private int brd[][]; 5 private int turn; 6 OXmodel() { 7 brd = new int[3][3]; 8 for(int y=0 ; y<3 ; y++) { 9 for(int x=0 ; x<3 ; x++) { 10 brd[y][x] = 0; 11 } 12 } 13 turn=1; 14 } 15 public int getCell(int x, int y) { return brd[y][x]; } 16 public void put(int x, int y) { 17 if (judge() != -1) return; 18 if ((0<=x)&&(x<3)&&(0<=y)&&(y<3)&&(brd[y][x]==0)) { 19 brd[y][x]=turn; 20 turn=3-turn; 21 } 22 } 23 public int judge() { 24 for(int i=0 ; i<3 ; i++) { 25 if ((brd[i][0]!=0)&& 26 (brd[i][0]==brd[i][1])&&(brd[i][1]==brd[i][2])) { 27 return brd[i][0]; 28 } 29 if ((brd[0][i]!=0)&& 30 (brd[0][i]==brd[1][i])&&(brd[1][i]==brd[2][i])) { 31 return brd[0][i]; 32 } 33 } 34 if (brd[1][1]!=0) { 35 if ((brd[0][0]==brd[1][1])&&(brd[2][2]==brd[1][1])) { 36 return brd[1][1]; 37 } 38 if ((brd[2][0]==brd[1][1])&&(brd[0][2]==brd[1][1])) { 39 return brd[1][1]; 40 } 41 } 42 int c=0; 43 for(int y=0 ; y<3 ; y++) { 44 for(int x=0 ; x<3 ; x++) { 45 if (brd[y][x]==0) { c++; } 46 } 47 } 48 if (c == 0) return 0; 49 return -1; 50 } 51 52} 53 54クラス2 55 56import java.awt.Canvas; 57import java.awt.Color; 58import java.awt.Graphics; 59import java.awt.Font; 60 61public class OXview extends Canvas{ 62 private OXmodel model; 63 OXview(OXmodel model) { 64 setSize(400,400); 65 this.model = model; 66 } 67 @Override 68 public void paint(Graphics g) { 69 g.setColor(Color.white); 70 g.fillRect(0,0,400,400); 71 g.setColor(Color.black); 72 for(int i=0 ; i<2 ; i++) { 73 g.drawLine(20,140+i*120,380,140+i*120); 74 g.drawLine(140+i*120,20,140+i*120,380); 75 } 76 for(int y=0 ; y<3 ; y++) { 77 for(int x=0 ; x<3 ; x++) { 78 int bx=x*120+20, by=y*120+20; 79 int c = model.getCell(x, y); 80 if (c == 1) { 81 g.setColor(Color.red); 82 g.drawOval(bx+20,by+20,80,80); 83 } else if (c == 2) { 84 g.setColor(Color.blue); 85 g.drawLine(bx+20,by+20,bx+100,by+100); 86 g.drawLine(bx+20,by+100,bx+100,by+20); 87 } 88 } 89 } 90 int j = model.judge(); 91 92 if (j == 0) { 93 g.setColor(Color.black); 94 g.drawString("引き分け",100,100); 95 } else if (j == 1) { 96 g.setColor(Color.black); 97 g.drawString("〇の勝ち",100,100); 98 } else if (j == 2) { 99 g.setColor(Color.black); 100 g.drawString("×の勝ち",100,100); 101 } 102 } 103} 104 105クラス3 106 107import java.awt.event.MouseEvent; 108import java.awt.event.MouseListener; 109import javax.swing.JFrame; 110 111public class OX implements MouseListener { 112 private OXmodel model; 113 private OXview view; 114 OX() { 115 model = new OXmodel(); 116 view = new OXview(model); 117 JFrame frame = new JFrame(); 118 frame.add(view); 119 view.addMouseListener(this); 120 frame.pack(); 121 frame.setVisible(true); 122 view.repaint(); 123 } 124 public void mouseClicked(MouseEvent e) { 125 int bx=e.getX(),by=e.getY(); 126 if ((20<=bx)&&(bx<380)&&(20<=by)&&(by<380)) { 127 int x=(bx-20)/120, y=(by-20)/120; 128 model.put(x,y); 129 view.repaint(); 130 } 131 } 132 public void mousePressed(MouseEvent e) {} 133 public void mouseReleased(MouseEvent e) {} 134 public void mouseExited(MouseEvent e) {} 135 public void mouseEntered(MouseEvent e) {} 136 137 public static void main(String[] args) { 138 new OX(); 139 } 140} 141 142
試したこと
1についてOXmodelクラスのgetCellメソッドにおいて、
if (judge() != -1) return;
を
if (judge() != -1)
for(int y1=0 ; y1<3 ; y1++) {
for(int x1=0 ; x1<3 ; x1++) {
brd[y1][x1] = 0;
と書いたところ、盤面がりセットされると同時に次のマスが書かれてしまうので、1ターン開けてから始まるようにしたいです。
2についてjava.awt.Font クラスと、GraphicsクラスのsetFontメソッドを使って書きたいのですが、
g.setColor(Color.black);
g.setFont(Font ~);
g.drawString("引き分け",100,100);
と書いたところエラーが出ました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー