質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

解決済

javaのまるばつゲームのリセット方法とFontの変換

syachi
syachi

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

2回答

0評価

0クリップ

510閲覧

投稿2021/11/19 15:49

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
javaで○×ゲームのコードを自分で改造するという課題で以下のように改造したいのですが、できません。
1,ゲーム終了後に盤面をもう一度クリックすると、再度ゲームが始まるようにする
2,"引き分け"などの文字を大きくする

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

java

クラス1 public class OXmodel { private int brd[][]; private int turn; OXmodel() { brd = new int[3][3]; for(int y=0 ; y<3 ; y++) { for(int x=0 ; x<3 ; x++) { brd[y][x] = 0; } } turn=1; } public int getCell(int x, int y) { return brd[y][x]; } public void put(int x, int y) { if (judge() != -1) return; if ((0<=x)&&(x<3)&&(0<=y)&&(y<3)&&(brd[y][x]==0)) { brd[y][x]=turn; turn=3-turn; } } public int judge() { for(int i=0 ; i<3 ; i++) { if ((brd[i][0]!=0)&& (brd[i][0]==brd[i][1])&&(brd[i][1]==brd[i][2])) { return brd[i][0]; } if ((brd[0][i]!=0)&& (brd[0][i]==brd[1][i])&&(brd[1][i]==brd[2][i])) { return brd[0][i]; } } if (brd[1][1]!=0) { if ((brd[0][0]==brd[1][1])&&(brd[2][2]==brd[1][1])) { return brd[1][1]; } if ((brd[2][0]==brd[1][1])&&(brd[0][2]==brd[1][1])) { return brd[1][1]; } } int c=0; for(int y=0 ; y<3 ; y++) { for(int x=0 ; x<3 ; x++) { if (brd[y][x]==0) { c++; } } } if (c == 0) return 0; return -1; } } クラス2 import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Font; public class OXview extends Canvas{ private OXmodel model; OXview(OXmodel model) { setSize(400,400); this.model = model; } @Override public void paint(Graphics g) { g.setColor(Color.white); g.fillRect(0,0,400,400); g.setColor(Color.black); for(int i=0 ; i<2 ; i++) { g.drawLine(20,140+i*120,380,140+i*120); g.drawLine(140+i*120,20,140+i*120,380); } for(int y=0 ; y<3 ; y++) { for(int x=0 ; x<3 ; x++) { int bx=x*120+20, by=y*120+20; int c = model.getCell(x, y); if (c == 1) { g.setColor(Color.red); g.drawOval(bx+20,by+20,80,80); } else if (c == 2) { g.setColor(Color.blue); g.drawLine(bx+20,by+20,bx+100,by+100); g.drawLine(bx+20,by+100,bx+100,by+20); } } } int j = model.judge(); if (j == 0) { g.setColor(Color.black); g.drawString("引き分け",100,100); } else if (j == 1) { g.setColor(Color.black); g.drawString("〇の勝ち",100,100); } else if (j == 2) { g.setColor(Color.black); g.drawString("×の勝ち",100,100); } } } クラス3 import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JFrame; public class OX implements MouseListener { private OXmodel model; private OXview view; OX() { model = new OXmodel(); view = new OXview(model); JFrame frame = new JFrame(); frame.add(view); view.addMouseListener(this); frame.pack(); frame.setVisible(true); view.repaint(); } public void mouseClicked(MouseEvent e) { int bx=e.getX(),by=e.getY(); if ((20<=bx)&&(bx<380)&&(20<=by)&&(by<380)) { int x=(bx-20)/120, y=(by-20)/120; model.put(x,y); view.repaint(); } } public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public static void main(String[] args) { new OX(); } }

試したこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/11/19 16:12

コードのマークダウンはファイル毎に分けて頂けますか。コピペの際に修正が必要になり、修正で間違えてしまうと現象が再現できなくなる可能性があります。 > ~ 1ターン開けてから ~ 「ターン」とは何のことでしょう。 > ~ エラーが出ました。 エラーの詳細をご提示ください。
jimbe

2021/11/19 16:37

Swing(JFrame) と AWT(Canvas) のコンポーネントを混在しての使用は危険ですので避けた方が良いと思います。
TN8001

2021/11/19 21:58

> g.setFont(Font ~); 肝心のところを省略しないでください。 > と書いたところエラーが出ました。 エラーが出たのならエラー文を記載してください。
BeatStar

2021/11/19 23:26

エラーメッセージを読みましょう。 エラーメッセージは罵倒ではなく、「コンパイラ等からのメッセージ」です。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。