Създадох игра на Craps, която е игра, базирана на зарове. Създадох моята логика на играта, но се опитвам да внедря GUI. Създадох моите зарове и компонент за зарове и за двата зара. Ако добавя моите зарове към рамката един по един, и двете работят, но щом се опитам да добавя и двете към рамката едновременно и стартирам моята игра Craps, рамката е празна.
Код на CrapsGame:
package crapsgame;
import java.awt.FlowLayout;
import javax.swing.*;
public class CrapsGameTester
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
JFrame frame = new JFrame("Craps-Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
final int FRAME_WIDTH = 400;
final int FRAME_HEIGHT = 600;
frame.setSize(FRAME_HEIGHT, FRAME_WIDTH);
CrapsGame game = new CrapsGame();
JPanel panel = new JPanel(new FlowLayout());
frame.add(panel);
Dice1Component dice1 = new Dice1Component(6);
Dice2Component dice2 = new Dice2Component(6);
panel.add(dice1);
panel.add(dice2);
String message = game.doFirstRoll();
System.out.println(message);
while(!game.isOver())
{
message = game.rollAgain();
System.out.println(message);
}
if(game.isWon())
System.out.println("You win, big man!");
else
System.out.println("Loser ...");
frame.setVisible(true);
}
}
Код на Dice1:
package crapsgame;
import java.awt.*;
public class Dice1
{
int sides;
int xCoord = 150;
int yCoord = 130;
public Dice1(int s)
{
sides = s;
}
/**
*
* @param g2 Graphics2D object used by draw method
*/
public void draw(Graphics2D g2)
{
g2.setColor(Color.BLACK);
g2.fillRect(xCoord, yCoord, 100, 100);
g2.setColor(Color.WHITE);
switch (sides)
{
case 1:
g2.fillOval(xCoord + 40, yCoord + 40, 20, 20);
break;
case 2:
g2.fillOval(xCoord + 15, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 65, 20, 20);
break;
case 3:
g2.fillOval(xCoord + 15, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 40, yCoord + 40, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 65, 20, 20);
break;
case 4:
g2.fillOval(xCoord + 15, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 15, yCoord + 65, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 65, 20, 20);
break;
case 5:
g2.fillOval(xCoord + 15, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 15, yCoord + 65, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 15, 20, 20);
g2.fillOval(xCoord + 65, yCoord + 65, 20, 20);
g2.fillOval(xCoord + 40, yCoord + 40, 20, 20);
break;
case 6:
g2.fillOval(xCoord + 20, yCoord + 20, 20, 20);
g2.fillOval(xCoord + 20, yCoord + 45, 20, 20);
g2.fillOval(xCoord + 20, yCoord + 70, 20, 20);
g2.fillOval(xCoord + 60, yCoord + 20, 20, 20);
g2.fillOval(xCoord + 60, yCoord + 45, 20, 20);
g2.fillOval(xCoord + 60, yCoord + 70, 20, 20);
break;
}
}
}
Код на Dice1Component:
package crapsgame;
import java.awt.*;
import javax.swing.*;
public class Dice1Component extends JComponent
{
private int sides;
public Dice1Component(int s)
{
sides = s;
}
public void setSide(int s)
{
sides = s;
}
@Override
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Dice1 dice1 = new Dice1(sides);
dice1.draw(g2);
}
}
Четох, че за да добавите повече от един компонент към рамка, трябва да използвате JPanel, но това също не изглежда да работи за мен.
paintComponent
. Запазете го като член на класа. Имайте двама членове на класа, по един за всеки зар. Можете да имате сетер за всеки зар. Ако планирате да имате много зарове, тогава може би можете да създадетеMap
зарове и да получите достъп до всеки от тях чрез ключ. Но като цяло бих използвал само една чертожна повърхност. - person Paul Samsotha   schedule 02.11.2014Просто го направи:
Ако използвате
- person Hovercraft Full Of Eels   schedule 02.11.2014UIWebView
вместоWKWebView
, направете следното: