• 締切済み

javaでクイズ

最初の問題(最初の画面) (1) (2) (3) ↓ ↓ ↓ × × ○     第二問     (1) (2) (3)     ↓ ↓ ↓     ○ × × 第三問 (1) (2) (3) ↓ ↓ ↓ × × ○      第四問      (1) (2) (3)      ↓ ↓ ↓      × × ○          第五問          (1) (2) (3)          ↓ ↓ ↓          × ○ ×            第六問 (1) (2) (3)            ↓ ↓ ↓            × × ○                第七問 (1) (2) (3)                ↓ ↓ ↓                ○ × × というクイズのプログラムを作ろうとしています。 画面数は全部で22ページあって(一番初めの画面は00という名前にしてあります)正解ページと次の問題画面が一緒なので22ページになります。実際ページにつけた番号は21までですが・・・ 間違った答えのページに行くと「previous」で前の画面に戻ったり、間違った答えのページでは下に表示してある回答ボタンを押せないようにしたりしたいです。一画面一画面ifで設定する必要があるのでしょうか?

みんなの回答

  • zozy
  • ベストアンサー率60% (20/33)
回答No.2

あなたはどの程度できるのでしょうか? それによって解答が変わってきますので。 そして、そもそも何で作りたいのでしょうか? AWT,swingなどを使ってアプリケーションを作りたいのか? サーブレット,JSPを使ってweb動くものを作りたいのか? とりあえず、AWTで既存のコンポーネント(ボタンなどの部品)を使わず作ってみましたので参考にしていただけると幸いです。 package gui; import java.applet.Applet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Quiz extends Applet implements MouseListener{ //この中には問題文を書きましょう。 //なお、改行コードは\nです final String[] question={"1+1=?","5-2=?","3*5=?","24/6=?"," "}; //この中には正解を書きましょう。 final String[] answer={" ","2番が正解\n1+1=2","1番が正解\n5-2=3", "3番が正解\n3*5=15","1番が正解\n24/6=4"}; //回等の選択肢 final String[][] select={{"1) 1","2) 2","3) 3"} ,{"1) 3","2) 4","3) 5"} ,{"1) 9","2) 12","3) 15"} ,{"1) 4","2) 5","3) 6"} ,{" "," "," "}}; //正解の番号 final int[] seikai={1,0,2,0}; //各問題で何番を選択したか //question.lengthは問題数 int[] choice=new int[question.length]; //点数 int point; //現在のページ int index=0; //lock==trueになると再回答できなくなる boolean[] lock=new boolean[question.length]; //ダブルバッファのために宣言 //ダブルバッファ処理をすることで //画面のちらつき防止になる Graphics gr; Image img; public void init(){ //画面のサイズ設定 setSize(300,300); //マウスリスナの追加 addMouseListener(this); //フォントの設定 setFont(new Font("MS UI Gothic",Font.PLAIN,30)); //ダブルバッファ処理 img=createImage(240,480); gr=img.getGraphics(); } //描画処理 public void paint(Graphics g){ if(index<question.length){ //解答欄の背景描画 g.setColor(new Color(255,128,128,128)); g.fillRect(0,0,300,90); //問題欄の背景描画 g.setColor(new Color(128,128,255,128)); g.fillRect(0,90,300,90); g.setColor(new Color(128,255,255)); //解答の描画 g.drawString(answer[index],0,25); g.setColor(new Color(255,255,128)); //問題の描画 g.drawString(question[index],0,115); //選択中の選択肢のフォントカラーを変化 for(int i=0;i<3;i++){ if(choice[index]==i)g.setColor(new Color(255,255,0,128)); else g.setColor(new Color(0,0,0)); g.drawString(select[index][i],0,i*30+205); } //前のページへボタンの背景描画 g.setColor(new Color(255,128,128,128)); g.fillRect(0,270,150,30); //次のページへボタンの背景描画 g.setColor(new Color(128,128,255,128)); g.fillRect(150,270,150,30); g.setColor(new Color(0,0,0)); //前のページへボタンの文字描画 g.drawString("前のページへ",0,295); //次のページへボタンの文字描画 g.drawString("次のページへ",150,295); //結果表示のページの描画 }else{ g.setColor(new Color(0,255,0)); g.fillRect(0,0,300,300); g.setColor(new Color(255,0,0)); g.setFont(new Font("MS UI G0thic",Font.BOLD,50)); g.drawString("ポイント:".concat(String.valueOf(point)),0,150); } } //マウスがクリックされたときの処理 public void mouseClicked(MouseEvent e){ //最終問題ページでクリックしたら結果表示ページにいく if(index==question.length-1)index++; //選択肢をクリックするとその選択肢を選択する for(int i=0;i<3;i++){ if(e.getY()>i*30+180&&e.getY()<i*30+210&&lock[index]==false)choice[index]=i; } //前のページへボタンを押すと前のページに戻る if(index>0&&e.getY()>270&&e.getX()<150)index--; //次のページへボタンを押すと if(index<question.length-1&&e.getY()>270&&e.getX()>150){ //このページの回答をできないようにする lock[index]=true; //選択した答えと解答が同じなら点数を追加 if(seikai[index]==choice[index])point++; //次のページへ進む index++; } //再描画処理 repaint(); } public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }

tf0811
質問者

お礼

回答ありがとうございます。 初心者なのでうまく説明できなくてすみません。 質問をもうひとつ載せたので回答していただけるとありがたいです。

  • Gizensha
  • ベストアンサー率34% (207/608)
回答No.1

問題の表示と回答を受け付ける部分はループできる構造にして、毎回データを差し替えられる構造にすれば >一画面一画面ifで設定する必要があるのでしょうか? この必要はなくなりますね。 何となくJavaScriptな質問に感じるのは私の気のせいでしょうか。

tf0811
質問者

お礼

おそらくJavaScriptです。 コマンドプロンプトを使ってコンパイルしたいです。 質問をもうひとつ載せたので回答していただけるとありがたいです。

関連するQ&A

専門家に質問してみよう