Pereiti prie turinio

Kamuoliuko judėjimas. JAVA


Rekomenduojami pranešimai

Susidūriau su gan kvaila problema. Niekaip nesugebu pajudinti kamuoliuko taip kaip noriu.

 

import acm.graphics.*;
import acm.program.*;
import acm.util.*;

import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Breakout extends GraphicsProgram {

/** Width and height of application window in pixels */
public static final int APPLICATION_WIDTH = 400;
public static final int APPLICATION_HEIGHT = 600;

/** Dimensions of game board (usually the same) */
private static final int WIDTH = APPLICATION_WIDTH;
private static final int HEIGHT = APPLICATION_HEIGHT;

/** Dimensions of the paddle */
private static final int PADDLE_WIDTH = 60;
private static final int PADDLE_HEIGHT = 10;

/** Offset of the paddle up from the bottom */
private static final int PADDLE_Y_OFFSET = 30;

/** Number of bricks per row */
private static final int NBRICKS_PER_ROW = 10;

/** Number of rows of bricks */
private static final int NBRICK_ROWS = 10;

/** Separation between bricks */
private static final int BRICK_SEP = 4;

/** Width of a brick */
private static final int BRICK_WIDTH =
  (WIDTH - (NBRICKS_PER_ROW - 1) * BRICK_SEP) / NBRICKS_PER_ROW;

/** Height of a brick */
private static final int BRICK_HEIGHT = 8;

/** Radius of the ball in pixels */
private static final int BALL_RADIUS = 10;

/** Offset of the top brick row from the top */
private static final int BRICK_Y_OFFSET = 70;

/** Number of turns */
private static final int NTURNS = 3;

private RandomGenerator rgen = RandomGenerator.getInstance();
private double vx, vy;

private GOval ball;
private GRect paddle;

/* Method: run() */
/** Runs the Breakout program. */
public void run() {
	/* You fill this in, along with any subsidiary methods */
setSize ( APPLICATION_WIDTH , APPLICATION_HEIGHT) ;
appWindow();
paddle();
setUp();
for(int i=0; i<100; i++){
moveBall();	
pause(500);
	}
}

private void appWindow(){
	GRect appWin = new GRect (APPLICATION_WIDTH, APPLICATION_HEIGHT);
	appWin.setFilled(false);
	add(appWin);


}
private void setUp(){//sukuriamos plytos
	Color colours[] = new Color[10];
	colours[0] = Color.RED;
	colours[1] = Color.RED;
	colours[2] = Color.ORANGE;
	colours[3] = Color.ORANGE;
	colours[4] = Color.YELLOW;
	colours[5] = Color.YELLOW;
	colours[6] = Color.GREEN;
	colours[7] = Color.GREEN;
	colours[8] = Color.CYAN;
	colours[9] = Color.CYAN;

	for(int i=0; NBRICK_ROWS>i; i++)//plytu skaiciu eileje i sonus
	{
		for(int j=0; NBRICK_ROWS>j; j++)//plytu skaicius i virsu
		{
		int yBrick = i * (BRICK_WIDTH+3);//nustatomas tarpai tarp plytu
		int xBrick = j * (BRICK_HEIGHT+3);

			GRect brick = new GRect( BRICK_WIDTH, BRICK_HEIGHT);//sukuriama plyta

			brick.setLocation(yBrick + (APPLICATION_WIDTH/100), xBrick + (APPLICATION_HEIGHT/10));//nustatau vieta
			//nudazau plyta
			brick.setColor(colours[j]);
			brick.setFillColor(colours[j]);
			brick.setFilled(true);
			add(brick);

	}	
	}
GOval ball = new GOval(BALL_RADIUS , BALL_RADIUS);  
ball.setFilled(true);
add(ball);

}

private void paddle(){//pagrindas
	paddle = new GRect(PADDLE_WIDTH, PADDLE_HEIGHT);
	paddle.setLocation(APPLICATION_WIDTH/2, ((APPLICATION_HEIGHT*3)/4));
	paddle.setFilled(true);
	add(paddle);
	addMouseListeners();

}
public void mouseMoved(MouseEvent e){

	 paddle.setLocation(e.getX()- 30,(APPLICATION_HEIGHT*3)/4);		
}

public void moveBall(){
	vx = rgen.nextDouble(1.0, 3.0);
	if (rgen.nextBoolean(0.5)) vx = -vx;
vy += BALL_RADIUS;
ball.move((APPLICATION_WIDTH - BALL_RADIUS - BALL_RADIUS/4) + vx, (APPLICATION_HEIGHT/3) + vy);
}
}

Žinau kad kodas nėra labai gražus, bet tai mano pirmoji rimtesne užduotis ir suklupau lygioje vietoje. ball.move(...) turėtu keisti kamuoliuko poziciją, bet kamuoliukui visai nerūpi ką turi moveBall().

Tikiuosi bent truputi padėsite ir paaiškinsite kur aš darau klaidą. Sauso ištaisyto kodo nelaukiu ;)

Redagavo vilimas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matai esu naujokas JAVoje. Mėginau naudoti repaint(), bet manau naudojau klaidingai. Šiuo nežinau ar repaint() tinka, nes ateityje kamuoliukas turės atšokinėti nuo sienų. Dėl GraphicsProgram klasės tai realiai jos neturiu, bet gal padės tai, bent truputi http://jtf.acm.org/javadoc/student/acm/graphics/package-tree.html

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nuo B iki Z aš rašiau. Tai yra stanfordo universiteto užduotis joje buvo surašytos tik konstantos, o pdf dokumente darymo etapai.

Geriausiu atveju gaunu tai, kad kamuoliukas persikopijuoja į kita vietą, o originalas išlieka. To pasekoje gaunu ilga stora nelygia liniją. Nemanau, kad čia reikia naudoti repaint(), kadangi paskaitose apie šia funkcija neužsimenama. Keik aš sugebu išmastyti tai per kiekviena loopa turėtu kamuoliukas pasilinkit per tam tikra kieki pixeliu.

_______________________________________________________________________

 

Pavyko išspręsti problema

public void moveBall(){
GOval ball = new GOval(BALL_RADIUS , BALL_RADIUS);  
ball.setFilled(true);
while(true){
vx = rgen.nextDouble(1.0, 3.0);
if (rgen.nextBoolean(0.5)) vx = -vx;
vy -= BALL_RADIUS;
ball.setLocation((APPLICATION_WIDTH - BALL_RADIUS - BALL_RADIUS/4) + vx, (APPLICATION_HEIGHT/3) + vy);
add(ball);
pause(500);	
}
}

Redagavo vilimas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...