Java はバックギャモン ミニ ゲームを実装します
package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //操作パネルを定義します op=null; //名前を設定します this.setTitle(" " ); //ウィンドウのサイズを設定します this.setSize(510,510); //ウィンドウの位置を設定します//コンピューターの画面サイズを取得します int computer_width=Toolkit.getDefaultToolkit().getScreenSize().width; intcomputer_height=Toolkit.getDefaultToolkit().getScreenSize().height; System.out.println("コンピュータ画面の幅:/n"+computer_width+"/ ncomputer 画面の高さ:/n"+computer_height); //Center this.setLocation((computer_width-510)/2, (computer_height-510)/2); //カーテンをインスタンス化 op=new OperatorPane() //カーテンをインポートします this.add(op);リッスンするマウスを追加します this.addMouseListener(op) // ウィンドウの表示を設定します this.setVisible(true); //ウィンドウの通常終了を設定 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) } //テストを実行 public static void main(String[] args) { new GomokuFrame() } }
パッケージ五目並べ; インポート java.awt.Color;インポート java.awt.Font;インポート java.awt.Graphics;インポート java.awt.Image;インポート java.awt.event.MouseListener; java.awt.image.BufferedImage;インポート java.awt.image.BufferedImageFilter; javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; public class OperatorPane extends JPanelimplements MouseListener,Runnable{ //背景画像オブジェクトを定義します Image imageBackground = null;チェッカーボード グリッド int boardrows=18; //チェス盤グリッドの列数を定義します int boardcols=18; //チェス盤グリッドのサイズを定義します。 boardsize=20; //チェスの駒の座標を保存します int x=0,y=0; //以前にプレイしたすべてのチェスの駒の座標を保存します//データ内容 0: この時点にチェスの駒がないことを意味しますpoint、1: この点が黒のピースであることを意味します、2: この点が白のピースであることを示します int allchess[][]=new int [19][19] //次のステップが黒であるかどうかをマークします。または白 boolean isBlack=true; //ゲームを続行できるかどうかを判断します boolean canPlay=true ; //表示されている情報を保存 String message="Black が先"; //最大時間 (秒) を保存 int maxTime = 0 //カウントダウン用のスレッド t = new Thread(this); //黒の残り時間を保存with White int blackTime = 0; int WhiteTime = 0; // 双方の残り時間の表示情報を保存 String blackMessage = "Unlimited"; @SuppressWarnings("廃止") public OperatorPane() { t.start(); t.suspend(); imageBackground=new ImageIcon("image/background.jpg").getImage(); { //ダブルバッファリングテクノロジー BufferedImage b1=new BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB); Graphics g2=b1.createGraphics(); //背景画像を描画します g2.drawImage(imageBackground, 0, 0,495,475,null); //チェッカーボードの線を描画します c=g2.getColor( ); g2.setColor(Color.BLACK); i=0;i<=boardrows;i++) { g2.drawLine(10,50+boardsize*i,10+boardsize*boardrows,50+boardsize*i) } for(int i=0;i<=boardcols; i++) { g2.drawLine(10+boardsize*i,50,10+boardsize*i,50+boardsize*boardcols); // 3-3 の位置を描画 g2.fillOval(67, 347, 6, 6); g2.fillOval(307, 107, 6, 6); ( 307, 347, 6, 6); // 追加の点を描画します g2.fillOval(67, 227, 6, 6); g2.fillOval(307, 227, 6, 6); g2.fillOval(187, 347, 6, 6); fillOval(187, 227, 6, 6); //テキストプロンプトを描画/*Font f=new Font("黑体", Font.BOLD, 24); g.setFont(f);*/ g2.setFont(new Font("黑体", Font.BOLD, 20)); g2.drawString("ゲーム情報:"+メッセージ, 130, 40); g2.setFont(new Font("宋体", Font.ITALIC, 15)); g2.drawString("黒の時間:"+blackMessage,25, 445); g2.drawString("白の時間:"+whiteMessage,245, 445); //すべてのチェスの駒を描画します for(int i= 0) ;i<=boardrows;i++) { for(int j=0;j<=boardcols;j++) { //ストレージ黒チェス if(allchess[i][j]==1) { int tempX=i*20-10; int tempY=j*20+30; // 黒を描画 g2.setColor(Color.BLACK); //ストレージ白チェス if(allchess[i][j]==2) { int tempX=i*20-10; tempY=j*20+30; // 白い部分を描画します g2.setColor(Color.BLACK); g2.setColor(Color.WHITE); .fillOval(tempX+12, tempY+13, 15, 15); g2.setColor(c); g.drawImage(b1,0,0,this); } private boolean checkWin() { boolean flag=false; /*// すべてを保存します。同じ色のチェスの駒がいくつ接続されているか int count1=1; int count3=1; int count4=1; // 水平方向に 5 つのチェスの駒が接続されているかどうかを判断します。特性は同じです。つまり、allChess[x][y] の y 値は同じです。 // ループを使用して、チェスの駒が接続されているかどうかを判断します。 int i = 1 while (color == allchess[x+i][y; ]) { i++; } / /i の値 i = 1 をリセットします; if(count1 >= 5) // 垂直方向、つまり allChess[x][y] の x 値が同じであると判断します int j = 1 while (color == allchess[x][y+j]) { count2++; ; } // j の値をリセットします j = 1; while (color == allchess[x][yj]) { count2++; } if(count2>= 5) { flag = true; "/" 整数m1=1; int n1=1; while (color == allchess[x+m1]) { m1++; n1=1; -m1][y-n1]) { count3++; m1++; } if(count3>= 5) { flag = true } //斜め方向を判定int m2=1; int n2=1; while (color == allchess[x+m2][y-n2]) { m2++; n2=1; x-m2][y+n2]) { count4++; m2++; } if(count4>= 5) { flag = true; //水平判定カウント=this.checkCount(1, 0, color); if(count>=5) { flag = true; } else { //垂直判定カウント=this.checkCount(0, 1, color); (count>=5) { flag = true; } else { //Slant "/" count=this.checkCount(1, 1, color); if(count>=5) { flag = true;斜め「/」 count=this.checkCount(1, -1, color); if(count>=5) { flag = true; } } } return flag; } private int checkCount(int xChange,int yChange,int color) { int count =1; int tempX=xChange; int tempY=yChange; (color==allchess[x+xChange][y+yChange]) { count++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange<0) { yChange++; } } //xChange=tempX をリセットします。 (color==allchess[x-xChange][y-yChange]) { count++; if(xChange!=0) { xChange++; if(yChange!=0) { if(yChange<0) { yChange--; } else { yChange++; } } 戻り値 } public void MouseClicked(MouseEvent e) { System.out.println(" +e.getX()+"y:"+e.getY()); x=e.getX(); if(x>=10&&x<=(10+boardsize*boardrows+20)&&y>=50&&y<=(50+boardsize*boardcols+40)) { //System.out.println("ポイントはボード上にあります。 "); ==0) { if(isBlack==true) { allchess[x][y]=1; isBlack=false; message="白の番"; } else { allchess[x][y]=2; isBlack = true; message="黒のターン"; } // このチェスの駒が他のチェスの駒と 5 接続されているかどうか、つまりゲームが終了したかどうかを判断します。 boolean winFlag=this.checkWin(); true) { JOptionPane.showMessageDialog (this,"ゲーム オーバー!"+ (allchess[x][y]==1?"Black":"White")+"Win."); } } else { JOptionPane.showMessageDialog(this, "現在の位置にすでにチェスの駒があります。もう一度配置してください!") } } this.repaint() } //ゲーム開始ボタンをクリック //新しいゲームを再開します if( e.getX() >=400&&e.getX()<=470&&e.getY()>=80&&e.getY()<=110) { int result=JOptionPane.showconfirmDialog(this, "設定が完了しました。ゲームを再起動しますか?"); if(result==0) { //再起動操作、allchess[][] 配列内のすべての情報は 0 //チェス盤をクリア for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } //別の方法 allChess = new int[19][19]; blackTime = maxTime; whitTime = maxTime; if (maxTime > 0) { blackMessage = maxTime / 3600 + ":" + (maxTime / 60 - maxTime / 3600) * 60) + ":" + (maxTime - maxTime / 60 * 60); ホワイトメッセージ = maxTime / 3600 + ":" + (maxTime / 60 - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); } else { blackMessage = "無制限" } メッセージ = "黒が最初です"; isBlack = true; this.repaint(); // ゲーム設定ボタンをクリック if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160) { String input = JOptionPane .showInputDialog("入力してくださいゲームの最大時間 (単位: 分)、0 を入力すると、時間制限がないことを意味します: "); try { maxTime = Integer.parseInt(input) * 60; if (maxTime < 0) { JOptionPane.showMessageDialog(this, "正しい情報を入力してください。負の数値は使用できません!"); } if (maxTime == 0) { int result = JOptionPane.showconfirmDialog(this, "セットアップ完了しました、ゲームを再開しますか?"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } // 別の方法 allChess = new int[19][19]; isBlack = true; blackTime = maxTime; blackMessage = "制限なし"; this.canPlay = true; 0) { int result = JOptionPane.showconfirmDialog(this, "設定が完了しました。ゲームを再起動しますか?"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0 } } // 別の方法 allChess = new; int[19][19]; message = "黒が先"; isBlack = true; blackTime = maxTime; maxTime / 60 - maxTime / 3600 ) + ":" + (maxTime - maxTime / 60 * 60); ホワイトメッセージ = maxTime / 3600 + ":" + (maxTime / 60); - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); t.resume(); this.canPlay = true; } } catch (NumberFormatException e1); / TODO 自動生成された catch ブロック JOptionPane.showMessageDialog(this, "情報を正しく入力してください!") } } // ゲームの説明ボタンをクリックします if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210) { JOptionPane.showMessageDialog(this, "これはバックギャモン ゲーム プログラムでは、黒側と白側が順番にチェスをプレイし、一方の側が連続して 5 つの駒に到達すると、ゲームが終了します。 "); } //敗北を認めるボタンをクリック if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310) { int result=JOptionPane.showconfirmDialog (this ,「負けを認めてもいいですか?」); if (result == 0) { if (isBlack) { JOptionPane.showMessageDialog(this, "黒は諦めました、ゲームは終わりました!"); } else { JOptionPane.showMessageDialog(this, "白は諦めました、ゲームは終わりました!") } canPlay = false; //「バージョン情報」ボタンをクリックします if(e.getX()>=400&&e.getX()<=470&&e.getY()>=330&&e.getY()<=360) { JOptionPane.showMessageDialog(this,"このゲームは提供されていますNanmu 制作 スタジオ制作。関連する質問がある場合は、www.yiyiinformation.com にアクセスしてください。"); } //終了ボタンをクリック if(e.getX()>=400&&e.getX()<=470&&e.getY()>=380&&e.getY()<=410) { JOptionPane.showMessageDialog(this, "Game Over") ; System.exit(0); } } //***********************// @Override public void MouseEntered(MouseEvent arg0) { // TODO 自動生成されたメソッド スタブ } @Override public void MouseExited(MouseEvent arg0) { // TODO 自動生成されたメソッド スタブ } @Override public void MousePressed(MouseEvent arg0) { // TODO 自動生成されたメソッド スタブ } @Override public void MouseClosed (MouseEvent arg0) { // TODO 自動生成メソッド スタブ } @Override public void run() { if (maxTime > 0) { while (true) { if (isBlack) { blackTime--; if (blackTime == 0) { JOptionPane.showMessageDialog(this, "黒はタイムアウトしました、ゲームは終了です! "); } } else {whiteTime--; if (whiteTime == 0) { JOptionPane.showMessageDialog(this, "白がタイムアウトした、ゲームは終了です!"); } } blackMessage = blackTime / 3600 + ":" + (blackTime / 60 - blackTime / 3600 * 60) + ":" + (blackTime - blackTime / 60 * 60); ホワイトメッセージ = ホワイトタイム / 3600 + ":" + (ホワイトタイム / 60 - ホワイトタイム/ 3600 * 60) + ":" + (ホワイトタイム - ホワイトタイム / 60 * 60); this.repaint(); try { Thread.sleep(1000); catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace() } System.out.println(blackTime + " -- " +ホワイトタイム); } } }
デモ画像:
以上がこの記事の全内容です。皆さんが Java を上手にマスターするのに役立つことを願っています。