Bemelegitésnek
Példa ciklusra
for( int i = 0; i < 20; i++ ) { System.out.println(i);}
vagy
for( int i = 0; i < 50; i++ ){ System.out.println(i + 1);}
Lottó sorsolás véletlen
for( int i = 0; i < 5; i++ ){ System.out.println( (int)(Math.random() * 90) + 1 );}
Elől tesztelő ciklusra példa
int db = 0;
int szam;
while( db != 10 )
{
szam = (int)(Math.random() * 100) + 1;
if( szam % 2 != 0 )
{
System.out.println(szam);
db++;
}
}
Értelmezzük a programot
kell egy változó, ami azt számolja majd, hogy hány páratlan számot sorsoltunk, mert a párosokkal nem foglalkozunk deklaráltam egy szam nevű változót, ahol az aktuálisan kisorsolt számot tároljuk
a ciklust futási feltétele az, hogy amíg nincs 10 páratlan szám, addig sorsolgasson a ciklusban sorsolok egy számot, és eltárolom miután kisorsoltam, megvizsgálom, hogy páratlan-e ha páratlan, akkor kiírom a sorsolt számot, és növelem eggyel a számlálót ha nem páratlan, akkor a ciklusmagból semmi nem hajtódik végre, mert nem megfelelő a szám és ismét próbálkozik egy sorsolással.
Számítsuk ki két egész szám osztóját
Nem, nem a prímtényezős alakra bontással oldjuk meg
int szam1 = 660;
int szam2 = 366;
while( szam1 != szam2 )
{
if( szam1 > szam2 )
{
szam1 = szam1 - szam2 ;
}
else
{
szam2 = szam2 - szam1 ;
}
}
System.out.println("A ket szam legnagyobb kozos osztoja: " + szam1);
Értelmezzük elsőnek deklarálunk 2 változót a vizsgált számoknak kell egy ciklus azzal a futási feltétellel, hogy addig kell a kivonásokat ismételni, amíg a két szám nem egyenlő ha a szam1 a nagyobb, akkor abból vonjuk ki a szam2-őt fordított esetben a szam2-ből vonjuk ki a szam1-et
amikor a ciklus befejeződik, akkor a két szám bármelyike (mivel egyenlőek) a legnagyobb közös osztót jelenti, amit ki is íratunk Ha észrevetted, az is előfordulhat, hogy a ciklus egyszer sem fut le. Mi van akkor, ha a két szám alapból egyenlő? Akkor is kiírathatom bármelyiket, vagyis a ciklus utáni sorra lép a program és kiírja az egyiket. Az elöl tesztelő ciklusnál lehetséges, hogy a ciklus egyszer sem fut le!!!
Sorsolj ki egy páros számot a [10;50] intervallumból. Azt még egyszerűen megoldjuk, hogy az adott intervallumból sorsoljunk, de azzal a plusz feltétellel már nem tudunk mit kezdeni, hogy ez páros is legyen. Ezért addig sorsolunk, hogy a feltételnek megfelelő számot kapjunk:
int szam;
do
{
szam = (int)(Math.random() * 41) + 10;
}
while( szam % 2 != 0 );
Nézzük akkor a programot részenként:
sorsolunk egy számot ha a szám 2-vel osztva nem 0 maradékot ad (páratlan), akkor a ciklus újraindul, vagyis megint sorsol egyet a ciklus akkor áll meg, ha a feltétel hamis lesz (páros) Azért jó itt a do-while ciklus, mert mindenképpen sorsolnom kell egy számot ahhoz, hogy megvizsgálhassam, meg kell-e ismételni a sorsolást. Természetesen összetett feltételt is megadhatok. Mondjuk olyan számot sorsoljunk az adott intervallumból, ami 2-vel és 5-tel is osztható:
int szam;
do
{
szam = (int)(Math.random() * 41) + 10;
}
while( !(szam % 2 == 0 && szam % 5 == 0) );
Itt a ciklus futási feltételeként a kiemelt sorban egy összetett feltételt láthatsz, ami azért nem biztos, hogy annyira egyértelmű, mint amilyennek elsőre tűnik. A ciklus ugye akkor működik, ha a feltétel igaz. De itt eredetileg két részfeltételünk van, 2-vel és 5-tel osztható szám kell. Az már nem jó, ha esetleg egyik, vagy az sem, ha mindkét részfeltétel hamis. Igen ám, de a ciklus futási feltételeként nem azt kell megadni nekünk, amilyen számra nekünk szükségünk van, hanem pont az ellenkezőjét. Azt kell megadni, hogy milyen szám nem jó nekünk! Nézzük akkor lépésenként: szerkesszük meg azt a feltételt, ami nekünk megfelelő (ami összetett feltétel is lehet) negáljuk az egészet Természetesen itt is igaz, hogy ha akarjuk, egyszerűsíthetjük az összetett feltételt a már tanult módon:
while( !(szam % 2 == 0 && szam % 5 == 0) );
vagy ez
while( szam % 2 != 0 || szam % 5 != 0 );
Értelmezzétek a program forrását!
import java.applet.*;
import java.awt.*;
public class Game extends Applet implements Runnable
{
}
Thread gameThread;
int width=400, height=400, MAX=1;
int currentX[] = new int[MAX];
int currentY[] = new int[MAX];
public void start()
{
Thread gameThread = new Thread(this);
gameThread.start();
}
public void init()
{
currentX[0]=0;
currentY[0]=0;
}
public void run()
{
}
public void paint(Graphics g)
{
update(g);
}
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Háttérszín.
g2.setBackground(Color.black);
// Clear the applet.
g2.clearRect(0, 0, width, height);
// Rajzolószín zöld.
g2.setColor(Color.green);
//(X pos, Y pos, Width, Height)
g2.fillOval(currentX[0], currentY[0], 20,20);
}
int speed=10; // Speed at which we will move the objects
// Mozgatás
int directionX[] = new int[MAX];
int directionY[] = new int[MAX];
long start=0;
long tick_end_time;
long tick_duration;
long sleep_duration;
static final int MIN_SLEEP_TIME = 10;
static final int MAX_FPS = 20;
static final int MAX_MS_PER_FRAME = 1000 / MAX_FPS;
float fps=0;
public void init()
{
currentX[0]=100;
currentY[0]=0;
directionX[0]=1;
directionY[0]=0;
}
public void run()
{
while(true){
start = System.currentTimeMillis();
for(int i=0; i < MAX; i++){
if(directionX[i]==1)
currentX[i]+=speed;
if(directionX[i]==0)
currentX[i]-=speed;
if(currentX[i] <= 0)
directionX[i]=1;
if(currentX[i]+20 >= width)
directionX[i]=0;
if(directionY[i]==1)
currentY[i]+=speed;
if(directionY[i]==0)
currentY[i]-=speed;
if(currentY[i] <= 0)
directionY[i]=1;
if(currentY[i]+20 >= height)
directionY[i]=0;
}
repaint();
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
}
}
start = System.currentTimeMillis();
if(directionX[i]==1)
currentX[i]+=speed;
if(directionX[i]==0)
currentX[i]-=speed;
These last two detect if the object has hit the side of the applet and if so change the direction:
if(currentX[i] <= 0)
directionX[i]=1;
if(currentX[i]+20 >= width)
directionX[i]=0;
currentX[i]+20
repaint();
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
g.drawString("FPS: "+fps,1,400);
:
java.awt.image.*;
BufferedImage bufferdImg;
Graphics2D bufferdImgSurface;
bufferdImg = (BufferedImage)createImage(width, height);
bufferdImgSurface = bufferdImg.createGraphics();
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Set the background color.
bufferdImgSurface.setBackground(Color.black);
// Clear the applet.
bufferdImgSurface.clearRect(0, 0, width, height);
bufferdImgSurface.setColor(Color.green);
//(X pos, Y pos, Width, Height)
bufferdImgSurface.fillOval(currentX[0], currentY[0], 20,20);
g2.drawImage(bufferdImg, 0, 0, this);
}
g2.drawImage(bufferdImg, 0, 0, this);
boolean collided=false;
float dist;
currentX[1]=0;
currentY[1]=100;
directionX[1]=0;
directionY[1]=1;
dist = (int)(Math.sqrt(Math.pow((currentX[0]+20)-(currentX[1]+20),2) + Math.pow((currentY[1]+20)-(currentY[1]+20),2)));
if(dist < 20)
collided = true;
else
collided = false;
sqrt(pow((X1)-(X2),2) + pow((Y1)-(Y2),2)))
bufferdImgSurface.fillOval(currentX[1], currentY[1], 20,20);
if(collided==true)
bufferdImgSurface.drawString("Collided",10,10);
g2.drawImage(bufferdImg, 0, 0, this);
public class Game extends Applet implements Runnable, MouseMotionListener, MouseListener
int directionX[] = new int[MAX];
int directionY[] = new int[MAX];
BufferedImage bufferdImg;
Graphics2D bufferdImgSurface;
Thread gameThread;
int width=400, height=400, MAX=50, speed=10;
int currentX[] = new int[MAX];
int currentY[] = new int[MAX];
int step=0, // Number of movements left/right
direction=1, // Current left/right direction (0=left, 1=right)
shipX=width/2-10, // Current player X possition
shipY=height-45, // Current player Y possition
mbx=-10, // The mouse position after mouse down, sets the_
mby=-10, // enemy bullet position to this.
randomShoot=0, // Used to work out which enemy is shooting
health=50, // The players health
BNUM=10, // Number of bullets
playing=0; // Are is the game playing (0=Playing, 1=Paused, 2=Game Over, 3=Win)
int bX[] = new int[BNUM]; // Bullet X pos.
int bY[] = new int[BNUM]; // Bullet Y pos.
int ebX[] = new int[BNUM]; // Enemy Bullet X pos.
int ebY[] = new int[BNUM]; // Enemy Bullet Y pos.
long start=0, // Frame start time
tick_end_time, // End frame time
tick_duration, // Time taken to display the frame
sleep_duration; // How long to sleep for
static final int MIN_SLEEP_TIME = 10, // Min time to sleep for
MAX_FPS = 20, // Max frame rate.
MAX_MS_PER_FRAME = 1000 / MAX_FPS; // MS per frame
float fps=0, // Current frame rate
dist; // Distance between 2 points
int row=10, // Current Y position
col=10, // Current X position
count=0; // How many circles have been drawn
currentX[0]=col;
currentY[0]=row;
for(int i=0; i < 50; i++) {
count++;
currentX[i]=col;
col+=25;
currentY[i]=row;
if(count==10){
row+=25;
col=10;
count=0;
}
}
The following two lines of code are used to start the mouse listener �listening� on the applet:
addMouseMotionListener(this);
addMouseListener(this);
for(int i=0; i < BNUM; i++){
bX[i]=-10;
bY[i]=-10;
ebX[i]=0;
ebY[i]=height+10;
}
while(true){ // Starts the game loop
start = System.currentTimeMillis(); // Sets the current time
if(playing==0){ // Are we playing or is the game over?
step++;
for(int i=0; i < MAX; i++){
if(step > 15) {
if(direction==1){
direction=0;
} else {
direction=1;
}
step=0;
for(int j=0; j < MAX; j++)
currentY[j]+=speed;
}
if(direction==1)
currentX[i]+=speed;
else
currentX[i]-=speed;
}
for(int i=0; i < BNUM; i++){
if(bY[i] <= 0) {
bX[i]=mbx;
bY[i]=mby;
mbx=-10;
mby=-10;
}
bY[i]-=speed;
}
for(int i=0; i < MAX; i++){
for(int j=0; j < BNUM; j++) {
if(!(bY[j]<=0)){
dist = (int)(Math.sqrt(Math.pow((currentX[i]+10)-bX[j],2) + Math.pow((currentY[i]+10)-bY[j],2)));
if(dist <= 20){
bY[j]=-50;
currentY[i]=-500;
}
}
}
}
for(int k=0; k < MAX; k++){
randomShoot=(int)(Math.random()*MAX);
if(currentY[randomShoot] >= 0){
for(int i=0; i < BNUM; i++){
if(ebY[i] >= height) {
ebX[i]=currentX[randomShoot];
ebY[i]=currentY[randomShoot];
break;
}
}
}
}
for(int j=0; j < BNUM; j++) {
if(!(ebY[j]>=height)){
dist = (int)(Math.sqrt(Math.pow((shipX+10)-ebX[j],2) + Math.pow((shipY+10)-ebY[j],2)));
if(dist <= 20){
ebY[j]=height+10;
health-=10;
}
}
}
for(int i=0; i < BNUM; i++){
if(ebY[i] < height) {
ebY[i]+=speed;
}
}
if(health <=0)
playing=2;
int count=0;
for(int j=0; j < MAX; j++){
if(currentY[j]<0)
count++;
if(currentY[j]>=340)
playing=2;
}
if(count==MAX)
playing=3;
} else { }
repaint(); // Redraw the screen
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
}
}
public void paint(Graphics g)
{
update(g);
}
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Set the background color.
bufferdImgSurface.setBackground(Color.black);
// Clear the applet.
bufferdImgSurface.clearRect(0, 0, width, height);
bufferdImgSurface.setColor(Color.green);
//(X pos, Y pos, Width, Height)
for(int i=0; i < MAX; i++)
bufferdImgSurface.fillOval(currentX[i], currentY[i], 20,20);
// Draw the read ship (a square)
bufferdImgSurface.setColor(Color.red);
bufferdImgSurface.fillRect(shipX, shipY, 20, 20);
for(int j=0; j < BNUM; j++){
bufferdImgSurface.setColor(Color.yellow);
bufferdImgSurface.fillOval(bX[j], bY[j], 5,5);
bufferdImgSurface.setColor(Color.blue);
bufferdImgSurface.fillOval(ebX[j], ebY[j], 5,10);
}
// Draw a bottom line to our window
bufferdImgSurface.setColor(Color.red);
bufferdImgSurface.drawString("_________________________________________________________",0,375);
if(playing==1)
bufferdImgSurface.drawString("PAUSED", width/2-10, 390);
else if(playing==2)
bufferdImgSurface.drawString("****Game Over****", width/2-10, 390);
else if(playing==3)
bufferdImgSurface.drawString("****You Win!****", width/2-10, 390);
for(int i=0; i < health; i++)
bufferdImgSurface.drawString(" |", (2*i), 390);
// Draw the buffered image to the screen.
g2.drawImage(bufferdImg, 0, 0, this);
}
public void mouseMoved(MouseEvent e) { shipX=e.getX()-5; }
public void mouseDragged(MouseEvent e) { shipX=e.getX()-5; }
public void mouseClicked(MouseEvent e) {
mbx=e.getX();
mby=shipY;
}
public void mousePressed(MouseEvent e) {
mbx=e.getX();
mby=shipY;
}
public void mouseEntered(MouseEvent e) { playing=0; }
public void mouseExited(MouseEvent e) { playing=1; }
public void mouseReleased(MouseEvent e) { }
Példa ciklusra
for( int i = 0; i < 20; i++ ) { System.out.println(i);}
vagy
for( int i = 0; i < 50; i++ ){ System.out.println(i + 1);}
Lottó sorsolás véletlen
for( int i = 0; i < 5; i++ ){ System.out.println( (int)(Math.random() * 90) + 1 );}
Páros számok
for( int i = 1; i <= 20; i++ ){ System.out.println(i * 2);}
Másik módszer
for( int i = 0; i < 20; i++ )
{
System.out.println((i + 1) * 2);
}
És ha az 1-től indulva kell 20 páratlan?
for( int i = 1; i <= 20; i++ )
{
System.out.println(i * 2 - 1);
}
A párosokból 1-et kivonva páratlanokat kapunk. Vagy 0-tól indulva:
for( int i = 0; i < 20; i++ )
{
System.out.println(i * 2 + 1);
}
De csak hogy lássuk milyen rugalmas is a for ciklus, lássunk a párosokra egy másik megoldást:
for( int i = 2; i <= 40; i += 2 )
{
System.out.println(i);
}
for( int i = 1; i <= 20; i++ ){ System.out.println(i * 2);}
Másik módszer
for( int i = 0; i < 20; i++ )
{
System.out.println((i + 1) * 2);
}
És ha az 1-től indulva kell 20 páratlan?
for( int i = 1; i <= 20; i++ )
{
System.out.println(i * 2 - 1);
}
A párosokból 1-et kivonva páratlanokat kapunk. Vagy 0-tól indulva:
for( int i = 0; i < 20; i++ )
{
System.out.println(i * 2 + 1);
}
De csak hogy lássuk milyen rugalmas is a for ciklus, lássunk a párosokra egy másik megoldást:
for( int i = 2; i <= 40; i += 2 )
{
System.out.println(i);
}
Elől tesztelő ciklusra példa
int db = 0;
int szam;
while( db != 10 )
{
szam = (int)(Math.random() * 100) + 1;
if( szam % 2 != 0 )
{
System.out.println(szam);
db++;
}
}
Értelmezzük a programot
kell egy változó, ami azt számolja majd, hogy hány páratlan számot sorsoltunk, mert a párosokkal nem foglalkozunk deklaráltam egy szam nevű változót, ahol az aktuálisan kisorsolt számot tároljuk
a ciklust futási feltétele az, hogy amíg nincs 10 páratlan szám, addig sorsolgasson a ciklusban sorsolok egy számot, és eltárolom miután kisorsoltam, megvizsgálom, hogy páratlan-e ha páratlan, akkor kiírom a sorsolt számot, és növelem eggyel a számlálót ha nem páratlan, akkor a ciklusmagból semmi nem hajtódik végre, mert nem megfelelő a szám és ismét próbálkozik egy sorsolással.
Számítsuk ki két egész szám osztóját
Nem, nem a prímtényezős alakra bontással oldjuk meg
int szam1 = 660;
int szam2 = 366;
while( szam1 != szam2 )
{
if( szam1 > szam2 )
{
szam1 = szam1 - szam2 ;
}
else
{
szam2 = szam2 - szam1 ;
}
}
System.out.println("A ket szam legnagyobb kozos osztoja: " + szam1);
Értelmezzük elsőnek deklarálunk 2 változót a vizsgált számoknak kell egy ciklus azzal a futási feltétellel, hogy addig kell a kivonásokat ismételni, amíg a két szám nem egyenlő ha a szam1 a nagyobb, akkor abból vonjuk ki a szam2-őt fordított esetben a szam2-ből vonjuk ki a szam1-et
amikor a ciklus befejeződik, akkor a két szám bármelyike (mivel egyenlőek) a legnagyobb közös osztót jelenti, amit ki is íratunk Ha észrevetted, az is előfordulhat, hogy a ciklus egyszer sem fut le. Mi van akkor, ha a két szám alapból egyenlő? Akkor is kiírathatom bármelyiket, vagyis a ciklus utáni sorra lép a program és kiírja az egyiket. Az elöl tesztelő ciklusnál lehetséges, hogy a ciklus egyszer sem fut le!!!
Sorsolj ki egy páros számot a [10;50] intervallumból. Azt még egyszerűen megoldjuk, hogy az adott intervallumból sorsoljunk, de azzal a plusz feltétellel már nem tudunk mit kezdeni, hogy ez páros is legyen. Ezért addig sorsolunk, hogy a feltételnek megfelelő számot kapjunk:
int szam;
do
{
szam = (int)(Math.random() * 41) + 10;
}
while( szam % 2 != 0 );
Nézzük akkor a programot részenként:
sorsolunk egy számot ha a szám 2-vel osztva nem 0 maradékot ad (páratlan), akkor a ciklus újraindul, vagyis megint sorsol egyet a ciklus akkor áll meg, ha a feltétel hamis lesz (páros) Azért jó itt a do-while ciklus, mert mindenképpen sorsolnom kell egy számot ahhoz, hogy megvizsgálhassam, meg kell-e ismételni a sorsolást. Természetesen összetett feltételt is megadhatok. Mondjuk olyan számot sorsoljunk az adott intervallumból, ami 2-vel és 5-tel is osztható:
int szam;
do
{
szam = (int)(Math.random() * 41) + 10;
}
while( !(szam % 2 == 0 && szam % 5 == 0) );
Itt a ciklus futási feltételeként a kiemelt sorban egy összetett feltételt láthatsz, ami azért nem biztos, hogy annyira egyértelmű, mint amilyennek elsőre tűnik. A ciklus ugye akkor működik, ha a feltétel igaz. De itt eredetileg két részfeltételünk van, 2-vel és 5-tel osztható szám kell. Az már nem jó, ha esetleg egyik, vagy az sem, ha mindkét részfeltétel hamis. Igen ám, de a ciklus futási feltételeként nem azt kell megadni nekünk, amilyen számra nekünk szükségünk van, hanem pont az ellenkezőjét. Azt kell megadni, hogy milyen szám nem jó nekünk! Nézzük akkor lépésenként: szerkesszük meg azt a feltételt, ami nekünk megfelelő (ami összetett feltétel is lehet) negáljuk az egészet Természetesen itt is igaz, hogy ha akarjuk, egyszerűsíthetjük az összetett feltételt a már tanult módon:
while( !(szam % 2 == 0 && szam % 5 == 0) );
vagy ez
while( szam % 2 != 0 || szam % 5 != 0 );
Értelmezzétek a program forrását!
import java.applet.*;
import java.awt.*;
public class Game extends Applet implements Runnable
{
}
Thread gameThread;
int width=400, height=400, MAX=1;
int currentX[] = new int[MAX];
int currentY[] = new int[MAX];
public void start()
{
Thread gameThread = new Thread(this);
gameThread.start();
}
public void init()
{
currentX[0]=0;
currentY[0]=0;
}
public void run()
{
}
public void paint(Graphics g)
{
update(g);
}
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Háttérszín.
g2.setBackground(Color.black);
// Clear the applet.
g2.clearRect(0, 0, width, height);
// Rajzolószín zöld.
g2.setColor(Color.green);
//(X pos, Y pos, Width, Height)
g2.fillOval(currentX[0], currentY[0], 20,20);
}
int speed=10; // Speed at which we will move the objects
// Mozgatás
int directionX[] = new int[MAX];
int directionY[] = new int[MAX];
long start=0;
long tick_end_time;
long tick_duration;
long sleep_duration;
static final int MIN_SLEEP_TIME = 10;
static final int MAX_FPS = 20;
static final int MAX_MS_PER_FRAME = 1000 / MAX_FPS;
float fps=0;
public void init()
{
currentX[0]=100;
currentY[0]=0;
directionX[0]=1;
directionY[0]=0;
}
public void run()
{
while(true){
start = System.currentTimeMillis();
for(int i=0; i < MAX; i++){
if(directionX[i]==1)
currentX[i]+=speed;
if(directionX[i]==0)
currentX[i]-=speed;
if(currentX[i] <= 0)
directionX[i]=1;
if(currentX[i]+20 >= width)
directionX[i]=0;
if(directionY[i]==1)
currentY[i]+=speed;
if(directionY[i]==0)
currentY[i]-=speed;
if(currentY[i] <= 0)
directionY[i]=1;
if(currentY[i]+20 >= height)
directionY[i]=0;
}
repaint();
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
}
}
start = System.currentTimeMillis();
if(directionX[i]==1)
currentX[i]+=speed;
if(directionX[i]==0)
currentX[i]-=speed;
These last two detect if the object has hit the side of the applet and if so change the direction:
if(currentX[i] <= 0)
directionX[i]=1;
if(currentX[i]+20 >= width)
directionX[i]=0;
currentX[i]+20
repaint();
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
g.drawString("FPS: "+fps,1,400);
:
java.awt.image.*;
BufferedImage bufferdImg;
Graphics2D bufferdImgSurface;
bufferdImg = (BufferedImage)createImage(width, height);
bufferdImgSurface = bufferdImg.createGraphics();
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Set the background color.
bufferdImgSurface.setBackground(Color.black);
// Clear the applet.
bufferdImgSurface.clearRect(0, 0, width, height);
bufferdImgSurface.setColor(Color.green);
//(X pos, Y pos, Width, Height)
bufferdImgSurface.fillOval(currentX[0], currentY[0], 20,20);
g2.drawImage(bufferdImg, 0, 0, this);
}
g2.drawImage(bufferdImg, 0, 0, this);
boolean collided=false;
float dist;
currentX[1]=0;
currentY[1]=100;
directionX[1]=0;
directionY[1]=1;
dist = (int)(Math.sqrt(Math.pow((currentX[0]+20)-(currentX[1]+20),2) + Math.pow((currentY[1]+20)-(currentY[1]+20),2)));
if(dist < 20)
collided = true;
else
collided = false;
sqrt(pow((X1)-(X2),2) + pow((Y1)-(Y2),2)))
bufferdImgSurface.fillOval(currentX[1], currentY[1], 20,20);
if(collided==true)
bufferdImgSurface.drawString("Collided",10,10);
g2.drawImage(bufferdImg, 0, 0, this);
public class Game extends Applet implements Runnable, MouseMotionListener, MouseListener
int directionX[] = new int[MAX];
int directionY[] = new int[MAX];
BufferedImage bufferdImg;
Graphics2D bufferdImgSurface;
Thread gameThread;
int width=400, height=400, MAX=50, speed=10;
int currentX[] = new int[MAX];
int currentY[] = new int[MAX];
int step=0, // Number of movements left/right
direction=1, // Current left/right direction (0=left, 1=right)
shipX=width/2-10, // Current player X possition
shipY=height-45, // Current player Y possition
mbx=-10, // The mouse position after mouse down, sets the_
mby=-10, // enemy bullet position to this.
randomShoot=0, // Used to work out which enemy is shooting
health=50, // The players health
BNUM=10, // Number of bullets
playing=0; // Are is the game playing (0=Playing, 1=Paused, 2=Game Over, 3=Win)
int bX[] = new int[BNUM]; // Bullet X pos.
int bY[] = new int[BNUM]; // Bullet Y pos.
int ebX[] = new int[BNUM]; // Enemy Bullet X pos.
int ebY[] = new int[BNUM]; // Enemy Bullet Y pos.
long start=0, // Frame start time
tick_end_time, // End frame time
tick_duration, // Time taken to display the frame
sleep_duration; // How long to sleep for
static final int MIN_SLEEP_TIME = 10, // Min time to sleep for
MAX_FPS = 20, // Max frame rate.
MAX_MS_PER_FRAME = 1000 / MAX_FPS; // MS per frame
float fps=0, // Current frame rate
dist; // Distance between 2 points
int row=10, // Current Y position
col=10, // Current X position
count=0; // How many circles have been drawn
currentX[0]=col;
currentY[0]=row;
for(int i=0; i < 50; i++) {
count++;
currentX[i]=col;
col+=25;
currentY[i]=row;
if(count==10){
row+=25;
col=10;
count=0;
}
}
The following two lines of code are used to start the mouse listener �listening� on the applet:
addMouseMotionListener(this);
addMouseListener(this);
for(int i=0; i < BNUM; i++){
bX[i]=-10;
bY[i]=-10;
ebX[i]=0;
ebY[i]=height+10;
}
while(true){ // Starts the game loop
start = System.currentTimeMillis(); // Sets the current time
if(playing==0){ // Are we playing or is the game over?
step++;
for(int i=0; i < MAX; i++){
if(step > 15) {
if(direction==1){
direction=0;
} else {
direction=1;
}
step=0;
for(int j=0; j < MAX; j++)
currentY[j]+=speed;
}
if(direction==1)
currentX[i]+=speed;
else
currentX[i]-=speed;
}
for(int i=0; i < BNUM; i++){
if(bY[i] <= 0) {
bX[i]=mbx;
bY[i]=mby;
mbx=-10;
mby=-10;
}
bY[i]-=speed;
}
for(int i=0; i < MAX; i++){
for(int j=0; j < BNUM; j++) {
if(!(bY[j]<=0)){
dist = (int)(Math.sqrt(Math.pow((currentX[i]+10)-bX[j],2) + Math.pow((currentY[i]+10)-bY[j],2)));
if(dist <= 20){
bY[j]=-50;
currentY[i]=-500;
}
}
}
}
for(int k=0; k < MAX; k++){
randomShoot=(int)(Math.random()*MAX);
if(currentY[randomShoot] >= 0){
for(int i=0; i < BNUM; i++){
if(ebY[i] >= height) {
ebX[i]=currentX[randomShoot];
ebY[i]=currentY[randomShoot];
break;
}
}
}
}
for(int j=0; j < BNUM; j++) {
if(!(ebY[j]>=height)){
dist = (int)(Math.sqrt(Math.pow((shipX+10)-ebX[j],2) + Math.pow((shipY+10)-ebY[j],2)));
if(dist <= 20){
ebY[j]=height+10;
health-=10;
}
}
}
for(int i=0; i < BNUM; i++){
if(ebY[i] < height) {
ebY[i]+=speed;
}
}
if(health <=0)
playing=2;
int count=0;
for(int j=0; j < MAX; j++){
if(currentY[j]<0)
count++;
if(currentY[j]>=340)
playing=2;
}
if(count==MAX)
playing=3;
} else { }
repaint(); // Redraw the screen
tick_end_time = System.currentTimeMillis();
tick_duration = tick_end_time - start;
sleep_duration = MAX_MS_PER_FRAME - tick_duration;
if (sleep_duration < MIN_SLEEP_TIME)
{
sleep_duration = MIN_SLEEP_TIME;
}
fps = 1000 / (sleep_duration + tick_duration);
try{
Thread.sleep(sleep_duration);
} catch(InterruptedException e) {}
}
}
public void paint(Graphics g)
{
update(g);
}
public void update(Graphics g)
{
Graphics2D g2 = (Graphics2D)g;
// Set the background color.
bufferdImgSurface.setBackground(Color.black);
// Clear the applet.
bufferdImgSurface.clearRect(0, 0, width, height);
bufferdImgSurface.setColor(Color.green);
//(X pos, Y pos, Width, Height)
for(int i=0; i < MAX; i++)
bufferdImgSurface.fillOval(currentX[i], currentY[i], 20,20);
// Draw the read ship (a square)
bufferdImgSurface.setColor(Color.red);
bufferdImgSurface.fillRect(shipX, shipY, 20, 20);
for(int j=0; j < BNUM; j++){
bufferdImgSurface.setColor(Color.yellow);
bufferdImgSurface.fillOval(bX[j], bY[j], 5,5);
bufferdImgSurface.setColor(Color.blue);
bufferdImgSurface.fillOval(ebX[j], ebY[j], 5,10);
}
// Draw a bottom line to our window
bufferdImgSurface.setColor(Color.red);
bufferdImgSurface.drawString("_________________________________________________________",0,375);
if(playing==1)
bufferdImgSurface.drawString("PAUSED", width/2-10, 390);
else if(playing==2)
bufferdImgSurface.drawString("****Game Over****", width/2-10, 390);
else if(playing==3)
bufferdImgSurface.drawString("****You Win!****", width/2-10, 390);
for(int i=0; i < health; i++)
bufferdImgSurface.drawString(" |", (2*i), 390);
// Draw the buffered image to the screen.
g2.drawImage(bufferdImg, 0, 0, this);
}
public void mouseMoved(MouseEvent e) { shipX=e.getX()-5; }
public void mouseDragged(MouseEvent e) { shipX=e.getX()-5; }
public void mouseClicked(MouseEvent e) {
mbx=e.getX();
mby=shipY;
}
public void mousePressed(MouseEvent e) {
mbx=e.getX();
mby=shipY;
}
public void mouseEntered(MouseEvent e) { playing=0; }
public void mouseExited(MouseEvent e) { playing=1; }
public void mouseReleased(MouseEvent e) { }
Nincsenek megjegyzések:
Megjegyzés küldése