public RunnableGame(boolean p1Hum, SkillLevel p1Skill, Color p1Col, boolean p2Hum, SkillLevel p2Skill, Color p2Col){
		// make scene and add it to the frame
		scene = new SceneComponent();
		MainClass.addSceneComponent(scene);
		// make players and add them to arraylist
		p1 = new Player(p1Hum, p1Skill, p1Col);
		p2 = new Player(p2Hum, p2Skill, p2Col);
		players.add(p1);
		players.add(p2);
		// make field, paddles, ball and add to arraylist, then add them to scene, all widths, heights, x positions, and y positions are redone in resize()
		field = new Field(scene.getWidth(), scene.getHeight(), Constants.BACKGROUND_DEFAULT, Constants.LINE_COLOR_DEFAULT, Constants.WALL_THICKNESS_DEFAULT);
		leftWall = new GoalWall(0, 0 + Constants.WALL_THICKNESS_DEFAULT, Constants.GOAL_WALL_THICKNESS, scene.getHeight() - Constants.WALL_THICKNESS_DEFAULT*2);
		rightWall = new GoalWall(scene.getWidth() - Constants.GOAL_WALL_THICKNESS, Constants.WALL_THICKNESS_DEFAULT, Constants.GOAL_WALL_THICKNESS, scene.getHeight() - Constants.WALL_THICKNESS_DEFAULT*2);
		topWall = new Wall(0, 0, scene.getWidth() , Constants.WALL_THICKNESS_DEFAULT, Constants.WALL_COLOR_DEFAULT);
		botWall = new Wall(0, scene.getHeight() - Constants.WALL_THICKNESS_DEFAULT, scene.getWidth() , Constants.WALL_THICKNESS_DEFAULT, Constants.WALL_COLOR_DEFAULT);
		paddle1 = new RunnablePaddle(0,(scene.getHeight()-p1.getPaddleHeight()) / 2 , Constants.WALL_THICKNESS_DEFAULT, p1.getPaddleHeight(), p1.getColor(), Constants.PADDLE_INIT_SPEED_DEFAULT, 0.0, 1.0, this.getTop(), this.getBot(), getLeft(), Constants.WALL_THICKNESS_DEFAULT);
		paddle2 = new RunnablePaddle(scene.getWidth() - Constants.WALL_THICKNESS_DEFAULT,(scene.getHeight()-p2.getPaddleHeight()) / 2 , Constants.WALL_THICKNESS_DEFAULT, p2.getPaddleHeight(), p2.getColor(), Constants.PADDLE_INIT_SPEED_DEFAULT, 0.0, 1.0, this.getTop(), this.getBot(), this.getRight() - Constants.WALL_THICKNESS_DEFAULT, this.getRight());
		ball = new RunnableBall((scene.getWidth() - Constants.WALL_THICKNESS_DEFAULT)/2, (scene.getHeight() - Constants.WALL_THICKNESS_DEFAULT)/2, Constants.WALL_THICKNESS_DEFAULT, Constants.WALL_THICKNESS_DEFAULT, Constants.BALL_COLOR_DEFAULT, Constants.BALL_SPEED_DEFAULT, Constants.BALL_DX_DEFAULT, Constants.BALL_DY_DEFAULT, this.getTop(), this.getBot(), this.getLeft(), this.getRight());
		drawables.add(field);
		drawables.add(topWall);
		drawables.add(botWall);
		drawables.add(paddle1);
		drawables.add(paddle2);
		drawables.add(ball);
		for (Drawable d: drawables){
			scene.add(d);
		}
		// add paddles to paddle array
		paddles.add(paddle1);
		paddles.add(paddle2);
		// make threads and add them to arraylist, then start them
		threads.add(new Thread(ball));
		threads.add(new Thread(paddle1));
		threads.add(new Thread(paddle2));
		for (Thread t: threads){
			t.start();
		}
		// listens for window resize and calls resize()
		scene.addComponentListener(new 
				ComponentListener() {
			public void componentResized(ComponentEvent e){
				resize();
			}
			public void componentHidden(ComponentEvent e) {}
			public void componentMoved(ComponentEvent e) {
				resize();
			}
			public void componentShown(ComponentEvent e) {
				resize();
			}
		});
	}