0

最初に、私が間違った場所でこれを尋ねているか、これを尋ねて何か間違ったことをしている場合は、非常に申し訳ありません. 何か修正が必要な場合はお知らせください。マウスでマスを動かして敵をよけようとするドッジボール型のゲームを作っています。敵は正方形で、画面のランダムな側面から出てきます。どうすればよいか知りたい:

A. プログラムに独自に正方形を作成させ、プレイヤーのスコアが高いほどその量を増やします。

B. 正方形の出現位置を画面の端のランダムな場所にします。

これが私のコードです。これは、長方形を描く部分です。

public void paint(Graphics g){

        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);

    }

    public void paintComponent(Graphics g) {

        Rectangle player = new Rectangle(playerX, playerY, 50, 50);
        g.setColor(Color.blue);
        g.fillRect(player.x, player.y, player.width, player.height);

    }

GamePanel クラスのコード全体は次のとおりです。

package main;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JPanel;

public class GamePanel extends JPanel implements Runnable{

    //Global variables

    //Double buffering
    private Image dbImage;
    private Graphics dbg;


    //JPanel variables
    static final int GWIDTH = 500, GHEIGHT = 500;
    static final Dimension gameDim = new Dimension(GWIDTH, GHEIGHT);

    //Game variable
    private Thread game;
    private volatile boolean running = false;
    public boolean mouseClicked = false;

    //Character variables
    int playerX = 150, playerY = 150;

    public class Mouse extends MouseAdapter{

        public void mousePressed(MouseEvent e){

            mouseClicked = true;

        }

        public void mouseReleased(MouseEvent e){

            mouseClicked = false;

        }

        public void mouseMoved(MouseEvent e){

            mouseClicked = false;

            repaint();
            playerX = e.getX()-25;
            playerY = e.getY()-25;
            if(playerX <= 50){
                playerX = 50;
            }
            else if(playerX >= 400){
                playerX = 400;
            }

            if(playerY <= 25){
                playerY = 25;
            }
            else if(playerY >= 400){
                 playerY = 400;
            }

            repaint();

        }
    }



    public GamePanel(){

        addMouseMotionListener(new Mouse());
        setPreferredSize(gameDim);
        setBackground(Color.BLUE);
        setFocusable(true);
        requestFocus(true);

    }

    public void run(){

        while(running){



        }

    }

    public void addNotify(){

        super.addNotify();
        startGame();

    }

    private void startGame(){

        if(game == null || !running){

            game = new Thread(this);
            game.start();
            running = true;

        }

    }

    public void stopGame(){

        if(running){

            running = false;

        }

        //Paint method


    }

    public void paint(Graphics g){

        dbImage = createImage(getWidth(), getHeight());
        dbg = dbImage.getGraphics();
        paintComponent(dbg);
        g.drawImage(dbImage, 0, 0, this);

    }

    public void paintComponent(Graphics g) {

        Rectangle player = new Rectangle(playerX, playerY, 50, 50);
        g.setColor(Color.blue);
        g.fillRect(player.x, player.y, player.width, player.height);

    }

    private void log(String s){

        System.out.println(s);

    }

}

お時間をいただきありがとうございます。

4

1 に答える 1

1

まあ、それはプログラミングでタスクを達成する方法についての質問かもしれません。だから私はそれを試してみます。

コードは提供しませんが、目的を達成する方法について説明します。そのため、コーディングを調査または把握する必要があります。

したがって、GamePanel は Java クラスのプライマリ クラスです。

それ自体をペイントできる Rectangle クラスを作成することから始めます。また、長方形 (または敵) 自体を移動できるようにする "move" メソッドを含めることもできます (できれば、タイプと速度/速度に関連して)。そのコンストラクター内で、初期の X、Y 位置をランダムな値に設定できます。上からランダムに開始するには (上 = 0、下 = 画面サイズ y、左 = 0、右 = 画面サイズ x と仮定); 4 つのオプションがあります。上部の位置をランダムに選択するには、y = 0 と x = random int を設定します。下部セットの位置をランダムに選択するには、y = 画面サイズ - 長方形の高さ、および x = ランダムな int; 左の場合、x = 0 および y = random int を設定します。右のセットの場合、x = 画面サイズ - 長方形の幅。

注: この長方形クラスは、プレーヤーの長方形にも使用できます。

次に、GamePanel 内にすべての長方形 (敵) を含むデータ構造が必要になります。データ構造に慣れていない場合は、Java でリストを作成する方法を調べてください。

また、GamePanel で、int 変数を敵の最大数に設定します。これは、プレイヤーのスコアが上がるにつれて変更できます。現在持っている敵の数を追跡するために別の変数が必要になります。前述のリストを使用する場合、おそらくメモリ内の現在の敵の数を取得するために使用できる length メソッドになります。

メイン ループで、敵の数を確認し、数が少ない場合は敵を 1 つ作成します (基本的に、十分な数がない場合は、ループごとに 1 つの敵を作成します。これは遅すぎたり速すぎたりする可能性があります)。あなたが望むものに応じて); しかし、本質的なアイデアは(疑似コードで)次のとおりです。

public void run(){

    while(running){

       if(current_enemies < max_enemies) {
           enemy = new Enemy()
           enemy_list.append(enemy)
       }

    }

}

敵が画面の外に出たときを確認してリストから削除する必要があります。そうしないと、敵がすべて外に出た後も存在しますが、新しい敵は作成されません。

お探しの回答ではないかもしれませんが、参考になれば幸いです。

于 2013-09-10T23:30:45.330 に答える