Java implémente un mini-jeu de backgammon
package Gomoku; import java.awt.Toolkit; import javax.swing.JFrame; public class GomokuFrame extends JFrame { //Définir un panneau de commande op=null; public GomokuFrame() { //Définir le nom this.setTitle("Gomoku) " ); //Définir la taille de la fenêtre this.setSize(510,510); //Définir la position de la fenêtre//Obtenir la taille de l'écran de l'ordinateur int Computer_width=Toolkit.getDefaultToolkit().getScreenSize().width; int Computer_height=Toolkit.getDefaultToolkit().getScreenSize().height; System.out.println("La largeur de l'écran de l'ordinateur :/n"+computer_width+"/ ncomputer Hauteur de l'écran :/n"+computer_height); //Centrer this.setLocation((computer_width-510)/2, (computer_height-510)/2); //Instancier le rideau op=new OperatorPane(); //Importer le rideau this.add(op); Ajouter une souris à l'écoute this.addMouseListener(op); //Définir l'affichage de la fenêtre this.setVisible(true); //Définit la fermeture normale de la fenêtre this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } //Exécute le test public static void main(String[] args) { new GomokuFrame();
package Gomoku ; importer java.awt.Color ; importer java.awt.Font ; importer java.awt.Graphics ; importer java.awt.Image ; importer java.awt.event.MouseEvent ; importer java.awt.event.MouseListener ; java.awt.image.BufferedImage; importer java.awt.image.BufferedImageFilter; javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel; public class OperatorPane extends JPanel implémente MouseListener,Runnable{ //Définir l'objet image d'arrière-plan Image imageBackground = null; la grille de l'échiquier int boardrows=18; //définit le nombre de colonnes de la grille de l'échiquier int boardcols=18; //définit la taille de la grille de l'échiquier int; boardsize=20; //Enregistre les coordonnées des pièces d'échecs int x=0,y=0; //Enregistre les coordonnées de toutes les pièces d'échecs jouées auparavant//Le contenu des données 0 : signifie qu'il n'y a pas de pièce d'échecs à ce moment-là. point, 1 : signifie que ce point est une pièce noire, 2 : Indique que ce point est une pièce blanche int allchess[][]=new int [19][19] //Marque si l'étape suivante est noire ou blanc boolean isBlack=true; //Déterminez si le jeu peut continuer boolean canPlay=true ; //Enregistrer les informations affichées String message="Black go first"; //Enregistrer le temps maximum (secondes) int maxTime = 0; //Classe de thread pour le compte à rebours Thread t = new Thread(this); with White int blackTime = 0; int whiteTime = 0; // Enregistre les informations d'affichage du temps restant des deux parties String blackMessage = "Unlimited"; String whiteMessage = "Unlimited"; @SuppressWarnings("obsolescence") public OperatorPane() { t.start(); t.suspend(); imageBackground=new ImageIcon("image/background.jpg").getImage(); { //Technologie de double buffering BufferedImage b1=new BufferedImage(495,475,BufferedImage.TYPE_INT_ARGB); Graphics g2=b1.createGraphics(); //Dessine l'image d'arrière-plan g2.drawImage(imageBackground, 0, 0,495,475,null); //Dessine la ligne en damier Couleur 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 }); //Dessinez la position trois-trois g2.fillOval(67, 107, 6, 6); g2.fillOval(67, 347, 6, 6); ( 307, 347, 6, 6); //Dessine des points supplémentaires g2.fillOval(67, 227, 6, 6); g2.fillOval(307, 227, 6, 6); g2.fillOval(187, 107, 6, 6); g2.fillOval(187, 347, 6, 6); fillOval(187, 227, 6, 6); //Dessiner une invite de texte/*Police f=new Font("黑体", Font.BOLD, 24); g.setFont(f);*/ g2.setFont(new Font("黑体", Font.BOLD, 20)); g2.drawString("Informations sur le jeu :"+message, 130, 40); g2.setFont(new Font("宋体", Font.ITALIC, 15)); g2.drawString("Temps noir :"+blackMessage,25, 445); g2.drawString("Temps blanc :"+whiteMessage,245, 445); //Dessinez toutes les pièces d'échecs pour(int i= 0); ;i<=boardrows;i++) { for(int j=0;j<=boardcols;j++) { //Stockage des échecs noirs if(allchess[i][j]==1) { int tempX=i*20-10; int tempY=j*20+30; //Dessiner du noir g2.setColor(Color.BLACK); g2.fillOval(tempX+12, tempY+13, 15, 15) ; //Stockage des échecs blancs if(allchess[i][j]==2) { int tempX=i*20-10; tempY=j*20+30; //Dessine la pièce blanche g2.setColor(Color.BLACK); g2.drawOval(tempX+12, tempY+13, 15, 15); .fillOval(tempX+12, tempY+13, 15, 15); g2.setColor(c); g.drawImage(b1,0,0,this); } private boolean checkWin() { boolean flag=false; int color = allchess[x][y]; identique Combien de pièces d'échecs de la couleur sont connectées int count1=1; int count2=1; int count3=1; // Détermine s'il y a 5 pièces d'échecs connectées dans la direction horizontale. les caractéristiques sont les mêmes. Autrement dit, les valeurs y dans allChess[x][y] sont les mêmes // Utilisez une boucle pour déterminer si les pièces d'échecs sont connectées int i = 1; while (color == allchess[x+i][y ]) { count1++; i++; } / /Réinitialiser la valeur i = 1; while (color == allchess[xi][y]) { count1++; //Jugez la direction verticale, c'est-à-dire que les valeurs x dans allChess[x][y] sont les mêmes int j = 1; while (color == allchess[x][y+j]) { count2++; ; } //Réinitialiser la valeur j j = 1; while (color == allchess[x][yj]) { count2++; } if(count2>= 5) { flag = true } //Juge la direction oblique; "/" entier m1=1; int n1=1; while (color == tous les échecs[x+m1][y+n1]) { count3++; n1++; m1=1; -m1][y-n1]) { count3++; m1++; n1++; } if(count3>= 5) { flag = true } //Juge la direction oblique "/" int m2=1; int n2=1; while (color == allchess[x+m2][y-n2]) { count4++; n2++; m2=1; x-m2][y+n2]) { count4++; m2++; n2++; } if(count4>= 5) { flag = vrai } */ int count; //Jugement horizontal count=this.checkCount(1, 0, color); if(count>=5) { flag = true; } else { //Jugement vertical count=this.checkCount(0, 1, color); (count>=5) { flag = true; } else { //Slant "/" count=this.checkCount(1, 1, color); if(count>=5) { flag = true } else { / / inclinaison "/" 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; while (color==allchess[x+xChange][y+yChange]) { nombre++; if(xChange!=0) { xChange++; } if(yChange!=0) { if(yChange<0) { yChange-- } else { yChange++; } } //Réinitialiser xChange=tempY; (color==allchess[x-xChange][y-yChange]) { count++; if(xChange!=0) { xChange++; } 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()); x=e.getX(); if(x>=10&&x<=(10+boardsize*boardrows+20)&&y>=50&&y<=(50+boardsize*boardcols+40)) { //System.out.println("Le point est sur le tableau. "); ==0) { if(isBlack==true) { allchess[x][y]=1; isBlack=false; message="Le tour des Blancs"; } else { allchess[x][y]=2; estNoir =true; message="Le tour des Noirs"; } // Détermine si cette pièce d'échecs est connectée à d'autres pièces d'échecs dans une connexion à 5, c'est-à-dire si la partie est terminée. boolean winFlag=this.checkWin(); true) { JOptionPane.showMessageDialog (this, "Game over!"+ (allchess[x][y]==1?"Black":"White")+"Win."); canPlay=false; JOptionPane.showMessageDialog(this, "Il y a déjà une pièce d'échecs à la position actuelle, veuillez la replacer !"); } } this.repaint( } //Cliquez sur le bouton de démarrage du jeu //Redémarrez une nouvelle partie if( e.getX() >=400&&e.getX()<=470&&e.getY()>=80&&e.getY()<=110) { int result=JOptionPane.showConfirmDialog(this, "Paramètres terminés, souhaitez-vous redémarrer le jeu ?"); if(result==0) { //Redémarrer l'opération, toutes les informations du tableau allchess[][] sont 0 // Effacer l'échiquier pour (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } //Une autre façon allChess = new int[19][19]; blackTime = maxTime; whiteTime = maxTime; if (maxTime > 0) { blackMessage = maxTime / ":" + (maxTime / 60 - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); whiteMessage = maxTime / 3600 + ":" + (maxTime / 60 - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); t.resume(); else { blackMessage = "Illimité"; "Le noir passe en premier"; isBlack = true; this.canPlay = true; this.repaint(); //Cliquez sur le bouton des paramètres du jeu if(e.getX()>=400&&e.getX()<=470&&e.getY()>=130&&e.getY()<=160) { String input = JOptionPane .showInputDialog("Veuillez entrer le jeu La durée maximale (unité : minutes), si vous entrez 0, cela signifie qu'il n'y a pas de limite de temps : "); try { maxTime = Integer.parseInt(input) * 60 ; if (maxTime < 0) { JOptionPane.showMessageDialog(this, "Veuillez saisir les informations correctes, les nombres négatifs ne sont pas autorisés !" } if (maxTime == 0) { int result = JOptionPane.showConfirmDialog(this, "Setup) ; terminé, Redémarrer le jeu?"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } // Une autre façon allChess = new int[19][19] ; blackTime = maxTime; whiteTime = maxTime; blackMessage = "Aucune limite"; whiteMessage = "Aucune limite" this.canPlay = true; 0) { int result = JOptionPane.showConfirmDialog(this, "Paramètres terminés, voulez-vous redémarrer le jeu ?"); if (result == 0) { for (int i = 0; i < 19; i++) { for (int j = 0; j < 19; j++) { allchess[i][j] = 0; } } // Une autre façon allChess = new int[19][19]; message = "Le noir passe en premier"; isBlack = true; blackTime = maxTime; whiteTime = maxTime / 3600 + ":" + (maxTime / 60 - maxTime / 3600 * 60 ) + ":" + (maxTime - maxTime / 60 * 60); whiteMessage = maxTime / 3600 + ":" + (maxTime / 60); - maxTime / 3600 * 60) + ":" + (maxTime - maxTime / 60 * 60); t.resume(); this.canPlay = true; this.repaint(); } } } catch (NumberFormatException e1) { / / TODO Bloc catch généré automatiquement JOptionPane.showMessageDialog(this, "Veuillez saisir les informations correctement!" } }); //Cliquez sur le bouton de description du jeu if(e.getX()>=400&&e.getX()<=470&&e.getY()>=180&&e.getY()<=210) { JOptionPane.showMessageDialog(this, "Ceci est un Programme de jeu de backgammon, les côtés noir et blanc jouent aux échecs à tour de rôle. Lorsqu'un côté atteint cinq pièces d'affilée, la partie se termine. "); } //Cliquez sur le bouton Admettre la défaite if(e.getX()>=400&&e.getX()<=470&&e.getY()>=280&&e.getY()<=310) { int result=JOptionPane.showConfirmDialog (this ,"Êtes-vous sûr de vouloir admettre votre défaite ?"); if (result == 0) { if (isBlack) { JOptionPane.showMessageDialog(this, "Les noirs ont cédé, le jeu est terminé !"); else { JOptionPane.showMessageDialog(this, "Les blancs ont cédé, le jeu est terminé !" } canPlay = false; //Cliquez sur le bouton À propos if(e.getX()>=400&&e.getX()<=470&&e.getY()>=330&&e.getY()<=360) { JOptionPane.showMessageDialog(this,"Ce jeu est fourni par Nanmu Produit par le studio, si vous avez des questions connexes, veuillez visiter www.yiyiinformation.com"); } //Cliquez sur le bouton de sortie 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 Stub de méthode généré automatiquement } @Override public void mouseExited(MouseEvent arg0) { // TODO Stub de méthode généré automatiquement } @Override public void mousePressed(MouseEvent arg0) { // TODO Stub de méthode généré automatiquement } @Override public void mouseReleased (MouseEvent arg0) { // TODO Stub de méthode généré automatiquement } @Override public void run() { if (maxTime > 0) { while (true) { if (isBlack) { blackTime--; if (blackTime == 0) { JOptionPane.showMessageDialog(this, "Black a expiré, le jeu est terminé ! "); } } else { whiteTime--; if (whiteTime == 0) { JOptionPane.showMessageDialog(this, "Les blancs ont expiré, le jeu est terminé !"); } } blackMessage = blackTime / 3600 + ":" + (blackTime / 60 - blackTime / 3600 * 60) + ":" + (blackTime - blackTime / 60 * 60) ; / 3600 * 60) + ":" + (whiteTime - whiteTime / 60 * 60); this.repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Bloc de capture généré automatiquement e.printStackTrace(); System.out.println(blackTime + " -- " + heure blanche); } } } }
Photo de démonstration :
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde de maîtriser Java avec compétence.