تنفذ Java لعبة الطاولة المصغرة
package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame Extends JFrame { // تحديد لوحة التشغيل OperatorPane op=null; " ); // اضبط حجم النافذة this.setSize(510,510); // اضبط موضع النافذة // احصل على حجم شاشة الكمبيوتر int Computer_width=Toolkit.getDefaultToolkit().getScreenSize().width; int Computer_height=Toolkit.getDefaultToolkit().getScreenSize().height("عرض شاشة الكمبيوتر:/n"+computer_width+"/ ارتفاع شاشة الكمبيوتر:/n"+computer_height); //مركز 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() } }
package Gomoku 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 import; java.awt.image.BufferedImage;import java.awt.image.BufferedImageFilter import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; public class OperatorPane Extends JPanel Implements MouseListener,Runnable{ // تحديد كائن صورة الخلفية Image imageBackground = null; شبكة رقعة الشطرنج int boardrows=18; // تحديد عدد أعمدة شبكة رقعة الشطرنج int boardcols=18; boardsize=20; // احفظ إحداثيات قطع الشطرنج int x=0,y=0; // احفظ إحداثيات جميع قطع الشطرنج التي تم لعبها من قبل // محتوى البيانات 0: يعني أنه لا توجد قطعة شطرنج في هذا. النقطة 1: تعني أن هذه النقطة هي قطعة سوداء، 2: تشير إلى أن هذه النقطة هي قطعة بيضاء int allchess[][]=new int [19][19]; // حدد ما إذا كانت الخطوة التالية سوداء أو الأبيض boolean isBlack=true; // احفظ المعلومات المعروضة String message = "الأسود يذهب أولاً" ؛ // احفظ الحد الأقصى للوقت (بالثواني) int maxTime = 0; // فئة الموضوع للعد التنازلي Thread t = new Thread(this); مع White int blackTime = 0; int WhiteTime = 0; // احفظ معلومات العرض للوقت المتبقي للطرفين String blackMessage = "Unlimited"; @SuppressWarnings("deprecation") public OperatorPane() { t.start(); imageBackground=new ImageIcon("image/background.jpg").getImage(); { // تقنية التخزين المؤقت المزدوج BufferedImage b1=new BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB); ); 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 }); // ارسم الموضع الثلاثي g2.fillOval(67, 107, 6, 6); 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); fillOval(187, 227, 6, 6); //ارسم نص موجه/*Font f=new Font("黑体", Font.BOLD, 24); g.setFont(f);*/ g2.setFont(new Font("黑体", Font.BOLD, 20)); g2.drawString("معلومات اللعبة:"+message, 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; // تخزين الشطرنج الأبيض if(allchess[i][j]==2) { int tempX=i*20-10; tempY=j*20+30; // ارسم القطعة البيضاء g2.setColor(Color.BLACK); .fillOval(tempX+12, tempY+13, 15, 15); g2.setColor(c); g.drawImage(b1,0,0,this) } public boolean checkWin() { boolean flag=false; نفس عدد قطع الشطرنج الملونة int count1=1; int count3=1; // تحديد ما إذا كانت هناك 5 قطع شطرنج متصلة في الاتجاه الأفقي الخصائص هي نفسها. أي أن قيم y في allChess[x][y] هي نفسها // استخدم حلقة لتحديد ما إذا كانت قطع الشطرنج متصلة أم لا int i = 1; while (color == allchess[x+i][y ]) { count1++; // احكم على الاتجاه العمودي، أي أن قيم x في allChess[x][y] هي نفسها 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; while (color == allchess[x+m1]) { count3++; n1=1; -m1[y-n1]) { count3++; n1++; } if(count3>= 5) { flag = true } // الحكم على الاتجاه المائل "/" int m2=1; while (color == allchess[x+m2]) { count4++; x-m2[y+n2]) { count4++; n2++; // عدد الحكم الأفقي = 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); مائل "/" count=this.checkCount(1, -1, color); if(count>=5) { flag = true; } } } } return flag; public int checkCount(int xChange,int yChange,int color) { =1; int tempX=xChange; int tempY=yChange; while (color==allchess[x+xChange][y+yChange]) { count++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange-- } else { } } } // إعادة تعيين xChange=tempY; (color==allchess[x-xChange][y-yChange]) { count++; } if(yChange!=0) { if(yChange<0) { yChange-- } else { yChange++; } } } return count; public void mouseClicked(MouseEvent e) { System.out.println("x:" +e.getX()+"y:"+e.getY()); 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="White's Turn"; } else { allchess[x][y]=2; isBlack =true; message="Black's Turn"; } // تحديد ما إذا كانت قطعة الشطرنج هذه متصلة بقطع شطرنج أخرى في اتصال 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] = } } // طريقة أخرى allChess = new int[19][19]; blackTime = maxTime; * 60) + ": " + (maxTime - maxTime / 60 * 60);whiteMessage = maxTime / 3600 + ": "+ (maxTime / 60 - maxTime / 3600 * 60) + ": "+ (maxTime - maxTime / 60 * 60)؛ t.resume(); else { blackMessage = "whiteMessage = "Unlimited"; "الأسود يأتي أولاً"; isBlack = true; this.canPlay = true; // انقر فوق زر إعدادات اللعبة if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160) { String input = JOptionPane .showInputDialog("الرجاء الدخول" اللعبة الحد الأقصى للوقت (الوحدة: الدقائق)، إذا أدخلت 0، فهذا يعني أنه لا يوجد حد زمني: ")؛ حاول { maxTime = Integer.parseInt(input) * 60؛ اكتملت، أعد تشغيل اللعبة؟"); 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]; blackTime = maxTime; blackMessage = "بلا حدود"; 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; ) + ": " + (maxTime - maxTime / 60 * 60); WhiteMessage = maxTime / 3600 + ": " + (maxTime / 60 - maxTime / 3600 * 60) + ": " + (maxTime - maxTime / 60 * 60)؛ this.canPlay = true } } } Catch (NumberFormatException e1) { / / كتلة التقاط TODO التي تم إنشاؤها تلقائيًا JOptionPane.showMessageDialog(this, "الرجاء إدخال المعلومات بشكل صحيح!"); // انقر فوق زر وصف اللعبة if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210) { JOptionPane.showMessageDialog(this, "هذا هو برنامج لعبة الطاولة، يتناوب الجانبان الأبيض والأسود للعب الشطرنج عندما يصل أحد الجانبين إلى خمس قطع متتالية، تنتهي اللعبة. "); } // انقر على زر الاعتراف بالهزيمة if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310) { int result=JOptionPane.showConfirmDialog (هذا، "هل أنت متأكد من أنك تريد الاعتراف بالهزيمة؟")؛ if (result == 0) { if (isBlack) { JOptionPane.showMessageDialog(هذا، "لقد استسلم اللون الأسود، انتهت اللعبة!"); } else { JOptionPane.showMessageDialog(هذا، "لقد استسلم الأبيض، انتهت اللعبة!") } 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, "انتهت اللعبة") System.exit(0); } } //************************// @Override public void mouseEntered(MouseEvent arg0) { // TODO كعب روتين تم إنشاؤه تلقائيًا } @Override public void mouseExited(MouseEvent arg0) { // TODO كعب روتين تم إنشاؤه تلقائيًا } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated way stub } @Override public void mouseReleased (MouseEvent arg0) { // TODO كعب روتين الطريقة التي تم إنشاؤها تلقائيًا } @Override public void run() { if (maxTime > 0) { while (true) { if (isBlack) { blackTime--; if (blackTime == 0) { JOptionPane.showMessageDialog(هذا، "انتهت المهلة السوداء، انتهت اللعبة! "); } } else { WhiteTime--; if (whiteTime == 0) { JOptionPane.showMessageDialog(this, "لقد انتهت المهلة البيضاء، انتهت اللعبة!"); } } blackMessage = blackTime / 3600 + ": " + (blackTime / 60 - blackTime / 3600 * 60) + ": " + (blackTime - blackTime / 60 * 60)؛ WhiteMessage = WhiteTime / 3600 + ": " + (whiteTime / 60 - WhiteTime / 3600 * 60) + ": " + (whiteTime - WhiteTime / 60 * 60)؛ this.repaint(); حاول { Thread.sleep(1000) } Catch (InterruptedException e) { // كتلة الالتقاط التي تم إنشاؤها تلقائيًا لـ TODO e.printStackTrace() } System.out.println(blackTime + " -- " + وايت تايم)؛ } } } }
الصورة التجريبية:
ما ورد أعلاه هو المحتوى الكامل لهذه المقالة، وآمل أن يكون مفيدًا للجميع لإتقان Java.