2

こんにちは、最近ヘビゲームの開発を始めました。私は移動オブジェクトとそれが食べるドットを持っている初期段階にいますが、私の主な問題は、ヘビがドットを「食べた」かどうかを確認する方法と、それを消すにはどうすればよいですか?
どんな助けでも大歓迎です。

ここに次のコードがあります:

import java.awt.event.ActionEvent;    
import java.awt.event.ActionListener;    
import java.awt.event.KeyEvent;    
import java.awt.event.KeyListener;    
import javax.swing.*;    
import java.awt.*;    
import java.util.Random;    
import javax.swing.JPanel;

public class Gui extends JPanel implements ActionListener,KeyListener{

    Random rnd= new Random();

 int pointx=100 + (int)(Math.random() * ((400- 100) + 1));;

 int pointy=100 + (int)(Math.random() * ((300 - 100) + 1));

 private String text;

    Timer tm = new Timer(5, this);

    int x = 300, y = 178, velx = 0, vely = 0;


      public Gui() 
      {
          tm.start();

          addKeyListener(this);

          setFocusable(true);

      }
      public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.green);
            g.fillRect(x, y, 35, 15);
            g.setColor(Color.BLACK);
            g.fillOval(pointx,pointy, 20,20);

        }

      public void keyPressed(KeyEvent e)
      {
          int c = e.getKeyCode();
          if (c == KeyEvent.VK_LEFT)
          {
              velx = -1;
              vely = 0;
          }
          if (c == KeyEvent.VK_UP)
          {
              velx = 0;
              vely = -1;
          }
          if (c == KeyEvent.VK_RIGHT)
          {
              velx = 1;
              vely = 0;
          }
          if (c == KeyEvent.VK_DOWN)
          {
              velx = 0;
              vely = 1;
          }
      }

      public void actionPerformed(ActionEvent e)
      {
          x += velx;
          y += vely;
          repaint();
          borders(e);

      }
      public void borders(ActionEvent e) {
          if (x < 0) {
              velx = 0;
              x = 0;
              JOptionPane
                      .showMessageDialog(null, "you hit the borders you lost!");
              System.exit(0);
          }
          if (x > 530) {
              velx = 0;
              x = 530;
              JOptionPane
                      .showMessageDialog(null, "you hit the borders you lost!");
              System.exit(0);
          }
          if (y < 0) {
              velx = 0;
              y = 0;
              JOptionPane
                      .showMessageDialog(null, "you hit the borders you lost!");
              System.exit(0);
          }
          if (y > 330) {
              velx = 0;
              y = 330;
              JOptionPane
                      .showMessageDialog(null, "you hit the borders you lost!");
              System.exit(0);

          }
      }
      public static void main(String[] args)
      {
         JFrame frame = new JFrame("gui");
          frame.add(new Gui());
          frame.setVisible(true);
          frame.setSize(600, 400);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      }
4

1 に答える 1

5

まず最初に:GUIはゲームロジックから分離する必要があります。

基本的に、1つ以上のクラスでゲームの状態をカプセル化する必要があります。このGameStateクラスには、描画する円のリストを返す関数と、入力を受け入れる別の関数があります。GUIクラスは、パネルのセットアップと描画要求の実行を処理します。そうすれば、物事は本当に簡単になります。ドットを非表示にするには、リストからドットを削除するだけです。2つのものが衝突したかどうかを確認するには、それらの位置を比較します。

しばらく前に、Javaで実際にヘビゲームを作りました。これが私が持っていたクラスのリストです。これは単なる提案であることに注意してください。個人的な好みやゲームの複雑さに応じて、必要なクラスは多かれ少なかれなります。

  • GameInstance-ゲームロジックを保持します
  • GameWindow-GUI部分
  • MainLoop-イベントループを設定します
  • ヘビ-ヘビに関する情報を保持します
  • Pnt2-加算、減算、距離テストなどのロジックを備えた2次元ポイント

明らかに、これは物事を行うための1つの方法にすぎませんが、私がお勧めするアプローチです。

于 2012-10-09T03:09:21.470 に答える