新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → 大家看一下这个游戏的编程 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2390 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 大家看一下这个游戏的编程 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     renren568 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:56
      门派:XML.ORG.CN
      注册:2005/6/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给renren568发送一个短消息 把renren568加入好友 查看renren568的个人资料 搜索renren568在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看renren568的博客楼主
    发贴心情 大家看一下这个游戏的编程


    一个游戏的规则!

    人和计算机的对抗:
    1,10*10游戏界面,每点击一小格,弹出一个对话框,显出当前位置(从1到100)
    2,4种船型,一艘潜水艇U-Boot (长度2)
                二艘驱逐舰       (长度3)
                一艘巡洋舰       (长度4)
                一艘战舰         (长度5)
    3放置船的条件:船应在横向或纵向随机放在游戏界面内
                    船与船之间不应相互碰撞
    4通过鼠标事件摆放船只
    5袭击的结果1Wasser :没有击中船,对手继续
                2Treffe  :击中对手船只,当前游戏人继续
                3Treffe,versenken :击沉对手船只(船只所占的界面全部被击中)当前游戏人继续
    6抽签决定谁先开始游戏
    7游戏人看不到对手的游戏界面位置

    Main-Methode f黵 "Schiffe versenken"
    */

    import javax.swing.*;


    public class SchiffeVersenken {
        
        public static void main(String[] args) { 
       javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          JFrame.setDefaultLookAndFeelDecorated(true);
          GameFrame g = new GameFrame();
         }
         });
        }
        
    }

    2/*
       
    */


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;


    public class GameFrame {
        
        private final int iWindowWidth = 705; 
        private final int iWindowHeight = 400;
        
        private JFrame mainFrame;         // Hauptframe
        private JPanel backPanel;       // Hintergrundpanel
        
        private JLabel humanLabel;       // Schriftzug "Mensch"
        private OceanPanel humanPanel;    // Spielfeld des Menschen
        
        private JLabel computerLabel;     // Schriftzug "Computer"
        private OceanPanel computerPanel; // Spielfeld des Computers
        
        // Konstruktor
        public GameFrame() {
       this.init();
        }
        
        // Initialisieren der Komponenten und Anzeigen des Frames
        private void init() {
     
     // Neuen JFrame erzeugen
     mainFrame = new JFrame("Schiffe versenken");
     mainFrame.setSize(iWindowWidth, iWindowHeight);
     mainFrame.setLocation(300, 300);
     mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     mainFrame.setResizable(false);
     
     // Einen Hintergrund (ContentPane) f黵 den Frame erstellen
     backPanel = new JPanel();
     backPanel.setSize(iWindowWidth, iWindowHeight);
     // Hintergrundfarbe ist Wei?
     backPanel.setBackground(new Color(0.8f, 0.8f, 0.8f));
     // Den Layout-Manager deaktivieren
     backPanel.setLayout(null);
     // Das Panel zum ContentPane machen   
     mainFrame.setContentPane(backPanel);
     
     // Zwei Labels erzeugen und absolut im Frame platzieren
     humanLabel = new JLabel("Mensch");
     humanLabel.setSize(100, 30);
     humanLabel.setLocation(iWindowWidth / 4 - 20, 20);
     computerLabel = new JLabel("Computer");
     computerLabel.setSize(100, 30);
     computerLabel.setLocation(3 * iWindowWidth / 4 - 28, 20);
     
     // Zwei "OceanPanels" erzeugen
     humanPanel = new OceanPanel(300, 300, 10, 10, "Spielfeld Mensch");
     humanPanel.setLocation(iWindowWidth / 4 - 150, 50);  
     computerPanel = new OceanPanel(300, 300, 10, 10, "Spielfeld Computer");
     computerPanel.setLocation(3 * iWindowWidth / 4 - 150, 50);
     
     // Alle Komponenten dem Hintergrundpanel hinzuf黦en
     backPanel.add(humanLabel);
     backPanel.add(computerLabel);
     backPanel.add(humanPanel);
     backPanel.add(computerPanel);
     
     // Den Frame sichtbar machen
     mainFrame.setVisible(true);
     
        }
        
    }

    3/*
       
    */
      
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.JComponent.*;

    public class OceanPanel
        extends JPanel implements MouseListener, MouseMotionListener {
        
        private int iWidth;     // Breite des Panels
        private int iHeight;    // H鰄e des Panels
        private int iFieldCountX;  // Anzahl der Felder in X-Richtung
        private int iFieldCountY;  // Anzahl der Felder in Y-Richtung
        
        private int iFieldWidth;  // Breite eines Feldes
        private int iFieldHeight;  // H鰄e eines Feldes
        
        String sName;
        
        // Konstruktor
        public OceanPanel(int iWidth, int iHeight, int iFieldCountX, int iFieldCountY, String sName) {
     
     this.iFieldCountX = iFieldCountX;
     this.iFieldCountY = iFieldCountY;
     
     // 躡erladene setSize-Methode aufrufen
     this.setSize(iWidth, iHeight);
     
     this.sName = sName;
     
     this.addMouseListener(this);
     this.addMouseMotionListener(this);
        }
        
        
        // Neue setSize-Methode
        public void setSize(int iWidth, int iHeight) {
     
     // Breite und H鰄e eines Feldes ausrechnen
     this.iFieldWidth = iWidth / iFieldCountX;
     this.iFieldHeight = iHeight / iFieldCountY;
     
     this.iWidth = iWidth;
     this.iHeight = iHeight;
     
     // Auch das Java-System muss von der Panelgr鲞e erfahren, da ansonsten
     // die grafische Darstellung nicht angepasst wird 
     super.setSize(iWidth + 1, iHeight + 1);
        }
        
        
        public void mousePressed(MouseEvent e) {
     
     // Nur der linke Mausknopf soll den Dialog 鰂fnen
     if (e.getButton() == MouseEvent.BUTTON1) {
         // Feld bestimmen
         int iField = (e.getY() / iFieldHeight) * iFieldCountX + (e.getX() / iFieldWidth + 1);
         
         // Mausklicks nahe dem Rand ignorieren
         if ((e.getX() % iFieldWidth) > 2 && (e.getX() % iFieldWidth) < iFieldWidth - 2) {
      if ((e.getY() % iFieldHeight) > 2 && (e.getY() % iFieldHeight) < iFieldHeight - 2) {
          // Dialog ausgeben
          JOptionPane.showMessageDialog(this, Integer.toString(iField), sName, JOptionPane.INFORMATION_MESSAGE);
      }
         }
     }
     
        }


        public void paint (Graphics g) {
       
     // Helles Blau als Hintergrundfarbe des Panels
     g.setColor(new Color(0.65f, 0.65f, 1.0f));
     g.fillRect(0, 0, iWidth, iHeight);
     
     // Linien in kr鋐tigem Blau
     g.setColor(Color.blue);
     
     // Horizontale Linien zeichnen
     for (int y = 0; y <= iFieldCountY; y++) {
         g.drawLine(0, y * iFieldHeight, iWidth, y * iFieldHeight);
     }
     
     // Vertikale Linien zeichnen
     for (int x = 0; x <= iFieldCountX; x++) {
         g.drawLine (x * iFieldWidth, 0, x * iFieldWidth, iHeight);
     }
     
        }
      
        public void mouseDragged  (MouseEvent e) {}
        public void mouseReleased (MouseEvent e) {}
        public void mouseClicked  (MouseEvent e) {}
        public void mouseEntered  (MouseEvent e) {}
        public void mouseExited   (MouseEvent e) {}
        public void mouseMoved    (MouseEvent e) {}
        
    }


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/9 7:14:00
     
     renren568 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:1
      积分:56
      门派:XML.ORG.CN
      注册:2005/6/9

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给renren568发送一个短消息 把renren568加入好友 查看renren568的个人资料 搜索renren568在『 Java/Eclipse 』的所有贴子 引用回复这个贴子 回复这个贴子 查看renren568的博客2
    发贴心情 
    4/*
        
      Main-Methode f黵 "Schiffe versenken"
    */

    import javax.swing.*;


    public class SchiffeVersenken {
     
      public static void main(String[] args) { 
       javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
         JFrame.setDefaultLookAndFeelDecorated(true);
         GameFrame g = new GameFrame();
         }
        });
      }

    }

    5/*
      GameFrame.java
      
        
      Main-Methode f黵 "Schiffe versenken"
    */


    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;


    public class GameFrame implements ActionListener {
     
     private final int iWindowWidth = 705; 
     private final int iWindowHeight = 440;
     
     private JFrame mainFrame;      // Hauptframe
     private JPanel backPanel;      // Hintergrundpanel

     private JLabel humanLabel;     // Schrifzug "Mensch"
     private OceanPanel humanPanel;   // Spielfeld des Menschen

     private JLabel computerLabel;    // Schriftzug "Computer"
     private OceanPanel computerPanel;  // Spielfeld des Computers
     
     private JMenuBar mymenubar;
     private JMenu mymenu;
     private JMenuItem mymenuitem_setship;
     private JMenuItem mymenuitem_quit;
     
     // Konstruktor
     public GameFrame() {
      this.init();
     }

     // Initialisieren der Komponenten und Anzeigen des Frames
     private void init() {

      // Neuen JFrame erzeugen
        mainFrame = new JFrame("Schiffe versenken");
        mainFrame.setSize(iWindowWidth, iWindowHeight);
        mainFrame.setLocation(300, 300);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mainFrame.setResizable(false);
      
      // Einen Hintergrund (ContentPane) f黵 den Frame erstellen
        backPanel = new JPanel();
        backPanel.setSize(iWindowWidth, iWindowHeight);
        // Hintergrundfarbe ist Wei?
        backPanel.setBackground(new Color(0.8f, 0.8f, 0.8f));
        // Den Layout-Manager deaktivieren
        backPanel.setLayout(null);
        // Das Panel zum ContentPane machen   
        mainFrame.setContentPane(backPanel);
        
        // Zwei Labels erzeugen und absolut im Frame platzieren
        humanLabel = new JLabel("Mensch");
        humanLabel.setSize(100, 30);
        humanLabel.setLocation(iWindowWidth / 4 - 20, 20);
        computerLabel = new JLabel("Computer");
        computerLabel.setSize(100, 30);
        computerLabel.setLocation(3 * iWindowWidth / 4 - 28, 20);
      
      // Zwei "OceanPanels" erzeugen
      humanPanel = new OceanPanel(300, 300, 10, 10, "Spielfeld Mensch");
      humanPanel.setLocation(iWindowWidth / 4 - 150, 50);  
      computerPanel = new OceanPanel(300, 300, 10, 10, "Spielfeld Computer");
      computerPanel.setLocation(3 * iWindowWidth / 4 - 150, 50);
      
      // Alle Komponenten dem Hintergrundpanel hinzuf黦en
      backPanel.add(humanLabel);
      backPanel.add(computerLabel);
      backPanel.add(humanPanel);
      backPanel.add(computerPanel);
          
          mymenubar = new JMenuBar();
          mymenu = new JMenu("Programm");
          mymenuitem_setship = new JMenuItem("Set ship");
          mymenuitem_quit = new JMenuItem("Quit");
          
          mymenuitem_setship.addActionListener(this);
          mymenuitem_quit.addActionListener(this);
          
          mymenu.add(mymenuitem_setship);
          mymenu.add(mymenuitem_quit);
          mymenubar.add(mymenu);
          
          mainFrame.setJMenuBar(mymenubar);
          
      // Den Frame sichtbar machen
      mainFrame.setVisible(true);
        
     }
     
     public void actionPerformed(ActionEvent e) {
      String command = e.getActionCommand();
      if (command.equals("Set ship")) {
       humanPanel.SetShip((int)(Math.random() * 9), (int)(Math.random() * 9));
       humanPanel.paint(humanPanel.getGraphics());
      } else if (command == "Quit") {
       System.exit(0);
      }
     }
    }

    6/*
      OceanPanel.java
      
      
      Variables Spielfeld f黵 "Schiffe versenken"  
    */
      
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.JComponent.*;

    public class OceanPanel
      extends JPanel implements MouseListener, MouseMotionListener {
        
     private int iWidth;     // Breite des Panels
     private int iHeight;    // H鰄e des Panels
     private int iFieldCountX;  // Anzahl der Felder in X-Richtung
     private int iFieldCountY;  // Anzahl der Felder in Y-Richtung
        
     private int iFieldWidth;  // Breite eines Feldes
     private int iFieldHeight;  // H鰄e eines Feldes
         
         private int iShipFieldX;
         private int iShipFieldY;
         
         private Image ship;
         
     String sName;
        
         // Konstruktor
         public OceanPanel(int iWidth, int iHeight, int iFieldCountX, int iFieldCountY, String sName) {
       
       this.iFieldCountX = iFieldCountX;
       this.iFieldCountY = iFieldCountY;
       
       // 躡erladene setSize-Methode aufrufen
       this.setSize(iWidth, iHeight);
       
       this.sName = sName;
       
       Toolkit mytoolkit = Toolkit.getDefaultToolkit();
       ship = mytoolkit.getImage("Ship.png");
       
       SetShip(0, 0);
       
       this.addMouseListener(this);
       this.addMouseMotionListener(this);
        }

      
      // Neue setSize-Methode
      public void setSize(int iWidth, int iHeight) {
       
       // Breite und H鰄e eines Feldes ausrechnen
       this.iFieldWidth = iWidth / iFieldCountX;
       this.iFieldHeight = iHeight / iFieldCountY;
       
       this.iWidth = iWidth;
       this.iHeight = iHeight;
       
       // Auch das Java-System muss von der Panelgr鲞e erfahren, da ansonsten
       // die grafische Darstellung nicht angepasst wird 
       super.setSize(iWidth + 1, iHeight + 1);
      }
     
      
        public void mousePressed(MouseEvent e) {
       
       // Nur der linke Mausknopf soll den Dialog 鰂fnen
       if (e.getButton() == MouseEvent.BUTTON1) {
        // Feld bestimmen
        int iField = (e.getY() / iFieldHeight) * iFieldCountX + (e.getX() / iFieldWidth + 1);
        
        SetShip(e.getX() / iFieldWidth, e.getY() / iFieldHeight);
        
        // Mausklicks nahe dem Rand ignorieren
        if ((e.getX() % iFieldWidth) > 2 && (e.getX() % iFieldWidth) < iFieldWidth - 2) {
         if ((e.getY() % iFieldHeight) > 2 && (e.getY() % iFieldHeight) < iFieldHeight - 2) {
           // Dialog ausgeben
           JOptionPane.showMessageDialog(this, Integer.toString(iField), sName, JOptionPane.INFORMATION_MESSAGE);
         }
        }
       }
       paint(this.getGraphics());
       
        }


        public void paint (Graphics g) {
       
       // Helles Blau als Hintergrundfarbe des Panels
       g.setColor(new Color(0.65f, 0.65f, 1.0f));
       g.fillRect(0, 0, iWidth, iHeight);
       
       // Linien in kr鋐tigem Blau
       g.setColor(Color.blue);
        
       // Horizontale Linien zeichnen
       for (int y = 0; y <= iFieldCountY; y++) {
        g.drawLine(0, y * iFieldHeight, iWidth, y * iFieldHeight);
       }
       
       // Vertikale Linien zeichnen
       for (int x = 0; x <= iFieldCountX; x++) {
        g.drawLine (x * iFieldWidth, 0, x * iFieldWidth, iHeight);
       }
       g.drawImage(ship, (iShipFieldX * iFieldWidth)  + 2, (iShipFieldY * iFieldHeight) + 2, iFieldWidth - 4, 3 * iFieldHeight - 4, this);
      
      }
      
     public void mouseDragged  (MouseEvent e) {}
         public void mouseReleased (MouseEvent e) {}
         public void mouseClicked  (MouseEvent e) {}
         public void mouseEntered  (MouseEvent e) {}
         public void mouseExited   (MouseEvent e) {}
         public void mouseMoved    (MouseEvent e) {}
     
     void SetShip(int x, int y) {
      this.iShipFieldX = x;
      this.iShipFieldY = y;
     }
    }

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/6/9 7:15:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/9/7 23:08:58

    本主题贴数2,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms