Basic java please help
QUESTION 1: Add code to ask user about the number of players (from 1 to
3) - use game.askForInt. Store the input in a variable numPlayers.
QUESTION 2: Modify the code below to ask for players' names and add
them to the game in a for loop (up to numPlayers iterations).
String name =
game.askForText("What is player 0 name?");
game.addPlayer(name);
name = game.askForText("What is
player 1 name?");
game.addPlayer(name);
name = game.askForText("What is
player 2 name?");
game.addPlayer(name);
QUESTION 3: Modify this part to ask questions and get answers in a for
loop (up to numPlayers iterations)
game.setCurrentPlayer(0);
String answer = game.askForText(q0);
if(a0.equals(answer))
Answer
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Player {
private String name;
private int score, x, y;
//private static Image img =
Toolkit.getDefaultToolkit().getImage("MisterX.jpg");
private BufferedImage img;
public Player(String name){
this.name = name;
try {
img = ImageIO.read(new
File("MisterX.jpg"));
} catch (IOException e) {}
}
public void paint(Graphics2D g2){
g2.drawImage(img, x, y, null);
g2.setColor(new Color(255, 210, 0));
Font font = new Font("Arial",
Font.PLAIN, 18);
FontMetrics metrics = g2.getFontMetrics(font);
int nameWidth = metrics.stringWidth(name);
g2.setFont(font);
g2.drawString(name, x +
(img.getWidth(null)-nameWidth)/2, y + img.getHeight(null)-5);
g2.setFont(new Font("Arial", Font.BOLD,
22));
g2.setColor(new Color(150, 255, 255));
g2.drawString("$" + score, x+10, y +
img.getHeight(null)+55);
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
public void incrementScore(){
score+=100;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public BufferedImage getImg() {
return img;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public void setImg(BufferedImage img) {
this.img = img;
}
}
public class Main { //This is your main class (executable
class)
static Game game;
//This is a global variable (can be accessed everywhere in this class)
public static void main(String[] args) {
game = new
Game(); //This statement resets the game
//REQ1:
Modify the value of the two variables q0 and a0 to a real question and answer.
String q0 =
"Where is the biggest city in Canada by population?";
String a0 =
"Toronto";
//REQ2:
Create 4 more String variables, q1, a1, q2, and a2, for two more questions and
answers.
String q1
= "What is the official language in Argentina? ";
String a1
= "Spanish";
String q2 =
"What is the postal code of UBCO";
String a2 =
"VIV 1V7";
//REQ3:
Declare a variable name.
// Ask the user about player0's name (using
game.askForText(message)). Store the user input in the variable name. Add
player to the game (using game.addPlayer(playerName)).
// Repeat the same thing for the other two
players.
String name1 = game.askForText("What is the
first player's name ");
game.addPlayer(name1);
String name2 = game.askForText("What is the
second player's name ");
game.addPlayer(name2);
String name3 = game.askForText("What is the
third player's name ");
game.addPlayer(name3);
game.setCurrentPlayer(0);
//REQ4: Ask
player0 question q0 (using game.askForText(message)). read the answer into a
String variable.
// If player's input is equal to a0, then call
game.correct(), otherwise call game.incorrect()
String answer1 = game.askForText(q0);
if(a0.equals(answer1))
game.correct();
else
game.incorrect();
game.setCurrentPlayer(1);
//REQ5: Ask
player1 question q1 (using game.askForText(message)). read the answer into a
String variable.
// If player's input is equal to a1, then call
game.correct(), otherwise call game.incorrect()
String answer2 = game.askForText(q1);
if(a1.equals(answer2))
game.correct();
else
game.incorrect();
game.setCurrentPlayer(2);
//REQ6: Ask
player2 question q2 (using game.askForText(message)). Read the answer into a
String variable.
// If player's input is equal to a2, then call
game.correct(), otherwise call game.incorrect()
String answer3 = game.askForText(q2);
if(a2.equals(answer3))
game.correct();
else
game.incorrect();
System.exit(1); //This statement terminates the program
}
}
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class GameFrame extends JFrame{
private Game game;
public GameFrame(Game game, String title, int
width, int height) {
this.game = game;
//attributes
setSize(width, height);
setTitle(title);
setUndecorated(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
//create and add objects
add(new GamePanel());
}
private class GamePanel extends JPanel{
BufferedImage myImage;
public GamePanel() {
//setBackground(Color.BLACK);
try {
myImage = ImageIO.read(new
File("background.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void paint(Graphics g) {
super.paint(g);
g.drawImage(myImage, 0, 0, this);
game.paint((Graphics2D)g);
}
}
}
//background.jpg
//MisterX.jpg
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.util.ArrayList;
public class Game {
public static final int WIDTH = 800, HEIGHT = 500,
MAX_PLAYERS = 3, PLAYER_Y = 50;
protected ArrayList<Player> players = new
ArrayList<Player>(MAX_PLAYERS);
private GameFrame frame = new GameFrame(this,
"COSC 111 Jeopardy", WIDTH, HEIGHT);
private BDialog dialog = new BDialog(frame);
private Player currentPlayer;
private Color responseColor = Color.white;
public Game(){
frame.setLocationRelativeTo(null);
dialog.setLocationRelativeTo(frame);
dialog.setSize(WIDTH-10, 100);
dialog.setLocation(frame.getX()+5,
frame.getY() + HEIGHT - 105);
frame.setVisible(true);
}
public void print(String msg){
frame.repaint();
dialog.showMessageDialog(msg);
}
public String askForText(String msg){
frame.repaint();
String
response = dialog.showInputDialog(msg);
return
(response==null || response.length()==0)? "" : response.trim();
}
public int askForInt(String msg, int min, int
max){
msg +=
"(" + min + " to " + max + ")";
boolean
found = false, msgModified = false;
int num =
0;
while(!found){
try{
num =
Integer.parseInt(askForText(msg));
if(num<min || num>max)
throw
new Exception();
found =
true;
}catch(Exception e){
if(!msgModified) msg = "Invlid input. " + msg;
msgModified = true;
}
}
return num;
}
public void addPlayer(String name){
Player
player = new Player(name);
int
playerWidth = player.getImg().getWidth();
int distanceBetweenPlayers
= (WIDTH - MAX_PLAYERS * playerWidth) / (MAX_PLAYERS + 1);
int x =
(players.size()+1) *
distanceBetweenPlayers + players.size() * playerWidth;
player.setX(x);
player.setY(PLAYER_Y);
players.add(player);
frame.repaint();
}
public void clearPlayers(){
players.clear();
}
public void paint(Graphics2D g2){
//draw
players
for (int i
= 0; i < players.size(); i++)
players.get(i).paint(g2);
//draw
frame around selected player
if(currentPlayer != null){
int px =
currentPlayer.getX()-4;
int py =
currentPlayer.getY()-4;
int pw =
currentPlayer.getImg().getWidth()+8;
int ph =
currentPlayer.getImg().getHeight()+8;
g2.setStroke(new BasicStroke(8));
g2.setColor(responseColor);
g2.drawRect(px, py, pw, ph);
}
//who is
turn it is
if(currentPlayer != null){
g2.setColor(Color.yellow);
String
name = currentPlayer.getName() +
"'s turn";
Font font
= new Font("Arial", Font.BOLD, 28);
g2.setFont(font);
FontMetrics metrics = g2.getFontMetrics(font);
int
txtWidth = metrics.stringWidth(name);
g2.drawString(name, (WIDTH-txtWidth)/2, 35);
}
}
public void setCurrentPlayer(int pl) {
currentPlayer = players.get(pl);
responseColor
= new Color(255, 160, 255);
}
public void correct() {
responseColor = Color.green;
frame.repaint();
if(currentPlayer != null)
currentPlayer.incrementScore();
print("Correct (press Enter to
continue).");
}
public void incorrect() {
responseColor = Color.red;
frame.repaint();
print("Sorry, that is incorrect answer
(press Enter to continue).");
}
}
import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class BDialog extends JDialog {
private
JButton btnAnswer = new JButton("Answer");
private
JButton btnExit = new JButton("Exit");
private
JTextField txtAnswer = new JTextField(10);
private
JLabel lblMsg = new JLabel("This is a message");
private
String result;
public
BDialog(JFrame frame) {
super(frame, true);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setUndecorated(true);
setLayout(new GridLayout(2, 1));
getContentPane().setBackground(Color.black);
//set
font and color
Font
font = new Font("Arial", Font.BOLD, 20);
lblMsg.setFont(font);
lblMsg.setForeground(Color.CYAN);
txtAnswer.setFont(font);
btnAnswer.setFont(font);
btnExit.setFont(font);
JPanel tmpPanel = new JPanel();
//tmpPanel.setBackground(Color.black);
tmpPanel.setOpaque(false);
tmpPanel.add(lblMsg);
add(tmpPanel);
tmpPanel = new JPanel();
//tmpPanel.setBackground(Color.black);
tmpPanel.setOpaque(false);
tmpPanel.add(txtAnswer);
tmpPanel.add(btnAnswer);
tmpPanel.add(btnExit);
add(tmpPanel);
//pack();
MyHandler handler = new MyHandler();
btnAnswer.addActionListener(handler);
txtAnswer.addActionListener(handler);
btnExit.addActionListener(handler);
}
public String showInputDialog(String msg){
lblMsg.setText(msg);
setVisible(true);
return result;
}
public void showMessageDialog(String msg){
lblMsg.setText(msg);
setVisible(true);
}
private class MyHandler implements
ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnExit){
if(JOptionPane.showConfirmDialog(null,
"Really want to exit?","Confirmation",
JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
System.exit(0);
}else{
result = txtAnswer.getText();
txtAnswer.setText("");
setVisible(false);
}
}
}
}