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
ممنون میشم راهنماییم کنین
پروژه دانشگاهم هست دیگه خودتون میدونین چقدر دردسره
بی زحمت اول یه نگاهی به بازی بندازین
هر کسی یه نقطه داره و اول بازی دوتا کلید تعریف میکنه برای حرکت به سمت راست و چپ و بعد بازی شروع میشه و حرکت رو انجام میدی
من هنوز اول کارم و بطور دیفالت باتن 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
ممنون میشم راهنماییم کنین
پروژه دانشگاهم هست دیگه خودتون میدونین چقدر دردسره