package TheWork;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JPanel;
public class MainPanel extends JPanel implements KeyListener, Runnable
{
private Cannon P1 = Cannon.getPlayer();
private TheirBullet[] bullets = {};
private TheirRocket[] rockets = {};
private Enemy[] enemies = {};
private long timeCount = 0;
private int timeDis = 10;
public void drawCannon(Graphics g)
{
g.setColor(Color.BLUE);
g.fillRect((int)P1.getX() - 20, (int)Cannon.POS_Y, 40, 20);
g.fillRect((int)P1.getX() - 5, (int)Cannon.POS_Y - 5, 2, 20);
g.fillRect((int)P1.getX() + 3, (int)Cannon.POS_Y - 5, 2, 20);
}
public void drawGoodBullet(Graphics g)
{
for(YourBullet temp : P1.bullets)
{
if(temp != null && temp.hit == false)
{
g.setColor(Color.BLUE);
g.drawRect((int)temp.x - 2, (int)temp.y - 2, 4, 4);
}
if(temp.hit == true)
{
P1.bullets.remove(temp);
}
}
}
public void drawBadBullet(Graphics g)
{
for(int i = 0;i < bullets.length;i++)
{
TheirBullet temp = bullets[i];
g.setColor(Color.GREEN);
g.drawRect((int)temp.x - 2, (int)temp.y - 2, 4, 4);
}
for(int i = 0;i < rockets.length;i++)
{
TheirRocket temp = rockets[i];
g.setColor(Color.RED);
g.drawRect((int)temp.x - 1, (int)temp.y - 4, 2, 8);
}
}
public void drawEnemy(Graphics g)
{
for(int i = 0;i < enemies.length;i++)
{
Enemy temp = enemies[i];
if(temp instanceof Fodder)
{
g.setColor(Color.GREEN);
}
else
{
g.setColor(Color.RED);
}
g.fillRect((int)temp.getX() - 10, (int)temp.getY() - 5, 20, 10);
g.fillRect((int)temp.getX()-2, (int)temp.getY(), 4, 10);
}
}
@Override
public void paint(Graphics g)
{
super.paint(g);
drawCannon(g);
drawGoodBullet(g);
drawBadBullet(g);
drawEnemy(g);
}
@Override
public void run()
{
timeCount++;
System.out.println("check 1");
if(timeCount % 300 == 0)
{
Enemy poorThing = generate();
System.out.println("get");
enemies = Arrays.copyOf(enemies, enemies.length + 1);
enemies[enemies.length - 1] = poorThing;
}
System.out.println("check 2");
for(int i = 0;i < enemies.length;i++)
{
Enemy temp = enemies[i];
temp.move();
}
System.out.println("check 3");
while(true)
{
try
{
Thread.sleep(timeDis);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
System.out.println("check 4");
this.repaint();
System.out.println("check 5");
}
}
@Override
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == KeyEvent.VK_LEFT && P1.getX() > 20)
{
P1.goLeft();
P1.setWay(-1);
}
else if(e.getKeyCode() == KeyEvent.VK_RIGHT && P1.getX() < 780)
{
P1.goRight();
P1.setWay(1);
}
if(e.getKeyCode() == KeyEvent.VK_SPACE)
{
if(P1.bullets.size() <= 6)
{
P1.shoot();
}
}
this.repaint();
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
public static Enemy generate()
{
Random r = new Random();
Random s = new Random();
Random t = new Random();
int chance = r.nextInt(10);
int dirDec = s.nextInt(2);
int tirDec = t.nextInt(5);
if(chance >= 8)
{
System.out.println("A acquired");
return new Danger(dirDec, tirDec);
}
else
{
System.out.println("B acquired");
return new Fodder(dirDec, tirDec);
}
}
}
繰り返されていないです:私は(キャノンクラスの)選手オブジェクトの両方が敵のサブクラスで飼料や危険クラスの敵オブジェクトを(、撃つゲームを作成しようとしていますrun()メソッド(スレッドは別のクラスで開始されます)で呼び出されるgenerate()メソッドによって生成されます。いくつかのコードは何が起こっている
しかし、私は決して単一の敵オブジェクトを作成することはありません。プログラムがどのように流れているかを確認するためにprintln文を挿入しました。その結果、「A取得」と「B取得」は決して起こらず、「Check 1」、「Check 2」、「Check 3」、 "Check 4"と "Check 5"の無限ループ。だけランダムに、
また、プレイヤオブジェクトが作成されますし、適切に描きました。何も変更せずにコードを実行しようとすると、結果は常に作業中と無塗装の間で変化します。
私は本当にどうもありがとうございました、私は間違っていた場所を知りたいです。
ようこそ。投稿を検討する[mcve] – c0der