Basically, I have been set an assignment but I am really out of my depth. Pretty much kind of struggling to learn all the languages I am learning atm (C, C++, java, javascript, css, html) and keep up with all of them. Java is my main downfall really, I have been going through tutorials and bits of pieces of the web but really struggling to get my head around it.
I am not expecting someone to use their time to write me a bunch of code, but need a real pointer in the right direction or some kind of decent tutorials that relate to the framework code I am supplied with.
The code is below compiles and shows a basic ball running across a screen (like it would in pong)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.awt.Color;
/*
* Note If you change S (Speed) collision detection will be
* more complex as the ball edge may be within the bat
* Ignores concurrency issues (x, y, x_inc, y_inc access)
*/
class Main
{
public static void main( String args[] ) //
{ //
System.out.println("Application");
Application app = new Application();
app.setVisible(true);
app.run();
} //
}
class Application extends JFrame // So graphical
{
private static final int H = 600; // Height of window
private static final int W = 800; // Width of window
public Application()
{
setSize( W, H ); // Size of application
addKeyListener( new Transaction() ); // Called when key press
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void update( Graphics g ) // Called by repaint
{ //
drawPicture( (Graphics2D) g ); // Draw Picture
}
public void paint( Graphics g ) // When 'Window' is first
{ // shown or damaged
drawPicture( (Graphics2D) g ); // Draw Picture
}
private Dimension theAD; // Alternate Dimension
private BufferedImage theAI; // Alternate Image
private Graphics2D theAG; // Alternate Graphics
public void drawPicture( Graphics2D g ) // Double buffer
{ // allow re-size
Dimension d = getSize(); // Size of curr. image
if ( ( theAG == null ) ||
( d.width != theAD.width ) ||
( d.height != theAD.height ) )
{ // New size
theAD = d;
theAI = (BufferedImage) createImage( d.width, d.height );
theAG = theAI.createGraphics();
AffineTransform at = new AffineTransform();
at.setToIdentity();
at.scale( ((double)d.width)/W, ((double)d.height)/H );
theAG.transform(at);
}
drawActualPicture( theAG ); // Draw Actual Picture
g.drawImage( theAI, 0, 0, this ); // Display on screen
}
// The ball position and how to increment to next position
private int x = W/2, x_inc = 1;
private int y = H/2, y_inc = 1;
// Called on key press
class Transaction implements KeyListener // When character typed
{
public void keyPressed(KeyEvent e) // Obey this method
{
// Key typed includes specials
switch ( e.getKeyCode() ) // Character is
{
case KeyEvent.VK_LEFT: // Left Arrow
x_inc = -1;
break;
case KeyEvent.VK_RIGHT: // Right arrow
x_inc = 1;
break;
case KeyEvent.VK_UP: // Up arrow
y_inc = -1;
break;
case KeyEvent.VK_DOWN: // Down arrow
y_inc = 1;
break;
}
// x,y could send to a server instead of calling
repaint(); // Call update method
}
public void keyReleased(KeyEvent e)
{
// Called on key release including specials
}
public void keyTyped(KeyEvent e)
{
// Normal key typed
char c = e.getKeyChar(); // Typed
repaint(); // Redraw screen
}
}
private static final int B = 6; // Border offset
private static final int M = 26; // Menu offset
private static final int BALL_SIZE = 10; // Ball diameter
private static final int HALF_BALL_SIZE = BALL_SIZE/2;
// Code called to draw the current state of the game
public void drawActualPicture( Graphics2D g )
{
// White background
g.setPaint( Color.white );
g.fill( new Rectangle2D.Double( 0, 0, W, H ) );
Font font = new Font("Calibri",Font.BOLD,24);
g.setFont( font );
// Blue playing border
g.setPaint( Color.blue ); // Paint Colour
g.draw( new Rectangle2D.Double( B, M, W-B*2, H-M-B ) );
// Display state of game
g.setPaint( Color.blue );
FontMetrics fm = getFontMetrics( font );
String fmt = "Bouncing Ball x=%4d y = %4d";
String text = String.format( fmt, x, y );
g.drawString( text, W/2-fm.stringWidth(text)/2, M*2 );
// The ball at the current x, y position (width, height)
g.setPaint( Color.red );
g.fill( new Ellipse2D.Double( x-HALF_BALL_SIZE, y-HALF_BALL_SIZE,
BALL_SIZE, BALL_SIZE ) );
}
// Main program loop
public void run()
{
final int S = 1; // Speed 1 - 5
try
{
while ( true )
{
if ( x >= W-B-HALF_BALL_SIZE ) x_inc = -1*S;
if ( x <= 0+B+HALF_BALL_SIZE ) x_inc = 1*S;
if ( y >= H-B-HALF_BALL_SIZE ) y_inc = -1*S;
if ( y <= 0+M+HALF_BALL_SIZE ) y_inc = 1*S;
x += x_inc;
y += y_inc;
repaint(); // Now display
Thread.sleep( 10 ); // 100 Hz
}
} catch ( Exception e ) {};
}
}
The minimum objectives I would like to achieve are
- Insert 2 paddles that can be moved using W/S and UP/DOWN which the ball collides with
- Insert a score for both players at top of screen rather than current text
- Change the background image to something over than a basic colour.
Thankyou for any replies.
In the meantime I will work on my C program in arduino to take random numbers and display them in binary 