ورود

View Full Version : مشکل در اپلت



amirhossein1376
دوشنبه 05 بهمن 1394, 08:39 صبح
سلام دوستان من یه پروژه ای دارم آخرش میشه یه بازی مث این بازی (http://curvefever.com/play.html)

بی زحمت اول یه نگاهی به بازی بندازین
هر کسی یه نقطه داره و اول بازی دوتا کلید تعریف میکنه برای حرکت به سمت راست و چپ و بعد بازی شروع میشه و حرکت رو انجام میدی

من هنوز اول کارم و بطور دیفالت باتن RIGHT , LEFT کیبورد رو واسه چپ و راست گذاشتم

کلاس Main





import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;


import javax.swing.JApplet;
import javax.swing.Timer;


public class Main extends JApplet implements ActionListener,KeyListener {

private Timer timer;
private Game game;
private boolean rightPressed;
private boolean leftPressed;

public static void main(String[] args) {

}


@Override
public void destroy() {
}


@Override
public void init() {
timer = new Timer(20, this);
game = new Game();


setSize( 1280 , 800 );
setLayout(new BorderLayout());
setBackground(Color.BLACK);

add(game , BorderLayout.CENTER);

addKeyListener(this);
setFocusable(true);
}


@Override
public void start() {
timer.start();
}


@Override
public void stop() {
timer.stop();
}

public int[] keyL(int x , int y){
return null;

}


@Override
public void actionPerformed(ActionEvent e) {
game.update(rightPressed , leftPressed);
}



@Override
public void keyTyped(KeyEvent e) {

}


@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==39){
rightPressed = true;
}else if(e.getKeyCode()==37){
leftPressed = true;
}
}


@Override
public void keyReleased(KeyEvent e) {
if(e.getKeyCode()==39){
rightPressed = false;
}else if(e.getKeyCode()==37){
leftPressed = false;
}

}
}





کلاس Game:





import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
import java.util.Random;


import javax.swing.JComponent;


public class Game extends JComponent{

private double speed = 1;
private double xDir;
private double yDir;

public Ellipse2D.Double ball = new Ellipse2D.Double(100, 100, 5, 5);
public Ellipse2D.Double lastBall;


public Game(){
int[] num= {-1 , 0 , 1};
Random r = new Random();
xDir = num[r.nextInt(3)];
yDir = num[r.nextInt(3)];

}


@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASIN G, RenderingHints.VALUE_ANTIALIAS_ON);

g2.setColor(Color.BLACK);
g2.fillRect(0, 0, getWidth(), getHeight());

g2.setColor(Color.RED);
g2.fill(ball);

}

@Override
public void repaint() {
Graphics2D g2 = (Graphics2D) getGraphics();

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASIN G, RenderingHints.VALUE_ANTIALIAS_ON);

g2.setColor(Color.RED);
g2.fill(ball);
}

public void paintLastPoint(double x , double y ){
Graphics2D g2 = (Graphics2D) getGraphics();

lastBall = new Ellipse2D.Double(x, y, 5, 5);

g2.setRenderingHint(RenderingHints.KEY_ANTIALIASIN G, RenderingHints.VALUE_ANTIALIAS_ON);

g2.setColor(Color.YELLOW);
g2.fill(lastBall);
}


public void update(boolean r , boolean l) {

if(r)
if(xDir <= 0 && yDir <= 0)
xDir--;
else if(xDir >= 0 && yDir >= 0)
yDir++;
else if(xDir <= 0 && yDir >= 0)
yDir--;
else if(xDir >= 0 && yDir <= 0)
xDir++;
if(l)
if(xDir <= 0 && yDir <= 0)
yDir--;
else if(xDir >= 0 && yDir >= 0)
xDir++;
else if(xDir <= 0 && yDir >= 0)
xDir--;
else if(xDir >= 0 && yDir <= 0)
yDir++;




ball.x += xDir * speed ;
ball.y += yDir * speed;
if(
ball.x < 0
||
ball.x > getWidth() - ball.getBounds().width
||
ball.y < 0
||
ball.y > getHeight() - ball.getBounds().height
){
paintLastPoint(ball.x, ball.y);
return;
}
repaint();
}
}






این تکه کدا واسه حرکت یک کاربره ولی موقع چپ و راست زدن خیلی باگ داره

بعد چن بار چپ و راس زدن اینطوری میشه

138636

ممنون میشم راهنماییم کنین

پروژه دانشگاهم هست دیگه خودتون میدونین چقدر دردسره

محمد فدوی
چهارشنبه 14 بهمن 1394, 11:48 صبح
درست متوجه هدفی که از بازی دارید نشدم.. ولی به نظر می‌رسه نمی‌خواید نقطه‌ها از هم جداجدا باشن. اگه به جای رنگی کردن خود نقطهٔ فعلی، بین هر نقطه با نقطهٔ بعدی یک خط رسم کنید این مشکل رفع می‌شه.