練習問題

【Java アプレット】マルバツゲーム(○×ゲーム)を行うプログラム作ってみた

ここではJavaのアプレットで作ったマルバツゲームのプログラムを紹介します。

アプレットについての基礎はこちらの記事をご覧ください。

あわせて読みたい
【Java アプレット】アプレットの基本ここではJavaアプレットの基本について触れたいと思います。 アプレットとは? コマンドプロンプトではなくapp...

各メソッドについての解説は以下の記事で行います。

http://mittsu2017.com/2017/09/21/post-435/

仕様

・先攻、後攻がランダムに決まる
・アプレットを使って作動させる
・クリックしたマスに〇か✕を表示させる
・〇か✕がすでに入っているマスに上書きはできない
・勝敗が決まったらリセット以外できない
・勝敗が決まったら揃ったラインの記号を赤く表示する

全体のソースコード

import java.applet.Applet;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseListener;import java.awt.event.MouseEvent;import java.util.Random;public class マルバツゲーム extends Applet implements MouseListener,ActionListener {int[][] masu;int[][] b=new int;int x;int y;int none=0,maru=1,batu=-1;final int FRAMEPOSX=200,FRAMEWIDTH=70,FRAMEPOSY=200,FRAMEHEIGHT=70;//1なら○のターン、-1なら×のターンint turn;Button bt;boolean finished;//初期化public void init() {setLayout(null);masu=new int;//リセットボタンの設定bt=new Button("RESET");add(bt);bt.addActionListener(this);bt.setBounds(0,0,100,30);//ゲームの初期化を行うゲームの初期化();//マウスを使うための登録addMouseListener(this);}//画面に描画するpublic void paint(Graphics g) {g.setFont(new Font("Serif",Font.PLAIN,30));if (finished==false)g.drawString(((turn==maru)?"○":"×")+"のターンです",200,150);枠の表示(g);マスの表示(g);String str=勝敗の判定();if (str.equals(""));else {g.setColor(Color.red);g.drawString(str,FRAMEPOSX,FRAMEPOSY-50);揃ったマスの表示(g);}}//先攻、後攻をランダムに決定するpublic int 順番を決める() {Random r=new Random();int a=r.nextInt(2);if (a==0) return batu;return maru;}//マウスがクリックされた時等のイベントの記述public void mouseEntered(MouseEvent e) { repaint(); }public void mouseExited(MouseEvent e) { repaint(); }public void mouseReleased(MouseEvent e){ repaint(); }public void mouseClicked(MouseEvent e) { repaint(); }public void mousePressed(MouseEvent e) {x=e.getX();y=e.getY();//枠外をクリックされた時は何もしないif(x < FRAMEPOSX || x > (FRAMEPOSX + (3*FRAMEWIDTH)) ||y < FRAMEPOSY || y > (FRAMEPOSY + (3*FRAMEHEIGHT)))return;//ゲームが終わっている時は何もしないif (finished) return;//座標を配列で使用できるように変換int masuX=(x-FRAMEPOSX)/FRAMEWIDTH;int masuY=(y-FRAMEPOSY)/FRAMEHEIGHT;boolean 判定=マスの確認(masuY,masuX);if(判定==true) {masu[masuY][masuX]=turn;turn*=-1;//勝敗が決まっている時はtrueにして、分かるようにするif(勝敗の判定().equals("○の勝ちです")) finished=true;if(勝敗の判定().equals("×の勝ちです")) finished=true;if(勝敗の判定().equals("引き分けです")) finished=true;}//画面を更新するrepaint();}//リセットボタンを押した時の処理public void actionPerformed(ActionEvent e) {ゲームの初期化();}//ゲームの初期化を行うpublic void ゲームの初期化() {for (int i=0;i<3;i++){for (int j=0;j<3;j++){masu[i][j]=0;b[i][j]=0;}}turn=順番を決める();finished=false;repaint();}
//枠線の表示を行うpublic void 枠の表示(Graphics g) {//横に線を引くfor (int i=0;i<4;i++)g.drawLine(FRAMEPOSX, FRAMEPOSY + (i * FRAMEHEIGHT),FRAMEPOSX + (3 * FRAMEWIDTH), FRAMEPOSY + (i * FRAMEHEIGHT));//縦に線を引くfor (int i=0;i<4;i++)g.drawLine(FRAMEPOSX + (i * FRAMEWIDTH), FRAMEPOSY,FRAMEPOSX + (i * FRAMEWIDTH), FRAMEPOSY + (3 * FRAMEHEIGHT));}//マス内の描画を行うpublic void マスの表示(Graphics g) {for (int i=0;i<3;i++) {for (int j=0;j<3;j++) {if (masu[i][j]==maru)g.drawString("○", FRAMEPOSX + (j * FRAMEWIDTH) + (FRAMEWIDTH / 2),FRAMEPOSY + (i * FRAMEHEIGHT) + (FRAMEHEIGHT / 2));if (masu[i][j]==batu)g.drawString("×", FRAMEPOSX + (j * FRAMEWIDTH) + (FRAMEWIDTH / 2),FRAMEPOSY + (i * FRAMEHEIGHT) + (FRAMEHEIGHT / 2));}}}//揃ったラインの記号を赤く表示するpublic void 揃ったマスの表示(Graphics g) {for (int i=0;i<3;i++) {for (int j=0;j<3;j++){if (b[i][j]==maru)g.drawString("○", FRAMEPOSX + (j * FRAMEWIDTH) + (FRAMEWIDTH / 2),FRAMEPOSY + (i * FRAMEHEIGHT) + (FRAMEHEIGHT / 2));if (b[i][j]==batu)g.drawString("×", FRAMEPOSX + (j * FRAMEWIDTH) + (FRAMEWIDTH / 2),FRAMEPOSY + (i * FRAMEHEIGHT) + (FRAMEHEIGHT / 2));}}}//マスに既に記号が入っていないかどうか確認する//何も入っていなければtrue、入っていればfalseを返すpublic boolean マスの確認(int x,int y) {if(masu[x][y]==none) return true;else return false;}//勝敗がついているかどうか確認するpublic String 勝敗の判定() {//縦、横に揃っているかどうか確認するfor (int i=0;i<3;i++) {int 縦=0;int 横=0;for (int j=0;j<3;j++) {縦+=masu[j][i];横+=masu[i][j];}//揃っているラインを別の配列に入れるif (縦==3) {for (int a=0;a<3;a++)b[a][i]=masu[a][i];return "○の勝ちです";}else if (横==3) {for (int a=0;a<3;a++)b[i][a]=masu[i][a];return "○の勝ちです";}else if (縦==-3) {for (int a=0;a<3;a++)b[a][i]=masu[a][i];return "×の勝ちです";}else if (横==3) {for (int a=0;a<3;a++)b[i][a]=masu[i][a];return "×の勝ちです";}}//斜めに揃っているかどうか判定するint ナナメ1=masu[0]+masu+masu[0];int ナナメ2=masu[0][0]+masu+masu;//揃っているラインを別の配列に入れるif(ナナメ1==3||ナナメ1==-3) {b[0]=masu[0];b=masu;b[0]=masu[0];if (ナナメ1==3) return "○の勝ちです";else return "×の勝ちです";}else if (ナナメ1==-3||ナナメ2==3) {b[0][0]=masu[0][0];b=masu;b=masu;if (ナナメ1==-3) return "×の勝ちです";else return "○の勝ちです";}//引き分けの判定を行うint count=0;for (int i=0;i<3;i++)for (int j=0;j<3;j++)if (masu[i][j]!=none) count++;if (count==9) return "引き分けです";//ゲームが終わっていない場合は空白を返すreturn "";}}スポンサーリンク


htmlファイル

<html><body><applet code = "マルバツゲーム.class" width =700 height =550></applet></body></html>実行方法

C:\Users\Documents\Java\jdk1.8.0_51>javac マルバツゲーム.java

C:\Users\Documents\Java\jdk1.8.0_51>appletviewer マルバツゲーム.html


サイトマップ