📄 slapshot.java
字号:
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.lang.Math;
public class Slapshot extends Frame implements ActionListener, MouseListener, MouseMotionListener, Runnable
{
Menu menu1;
MenuBar menubar;
MenuItem menuitem0, menuitem1, menuitem2, menuitem3;
Image memoryImage;
Image backGroundImage;
Image[] gifImages = new Image[2];
Graphics memoryGraphics;
Thread thread;
MediaTracker tracker;
Vector<Puck> pucks = new Vector<Puck>();
int yourScore = 0;
int theirScore = 0;
int offsetX = 0;
int offsetY = 0;
int speed = 50;
int maxVelocity = 10;
Label label1, label2;
int retVal = 0;
boolean dragging = false;
boolean stop = true;
boolean runOK = true;
OkCancelDialog textDialog;
public static void main(String[] args)
{
new Slapshot();
}
Slapshot()
{
menubar = new MenuBar();
menu1 = new Menu("File");
menuitem0 = new MenuItem("Start");
menu1.add(menuitem0);
menuitem0.addActionListener(this);
menuitem1 = new MenuItem("End");
menu1.add(menuitem1);
menuitem1.addActionListener(this);
menuitem2 = new MenuItem("Set speed...");
menu1.add(menuitem2);
menuitem2.addActionListener(this);
menuitem3 = new MenuItem("Exit");
menu1.add(menuitem3);
menuitem3.addActionListener(this);
menubar.add(menu1);
setMenuBar(menubar);
addMouseListener(this);
addMouseMotionListener(this);
textDialog = new OkCancelDialog(this,
"Set speed (1-100)", true);
setLayout(null);
label1 = new Label();
label1.setText("0");
label1.setBounds(180, 310, 20, 20);
label1.setVisible(false);
add(label1);
label2 = new Label();
label2.setText("0");
label2.setBounds(400, 310, 20, 20);
label2.setVisible(false);
add(label2);
tracker = new MediaTracker(this);
backGroundImage = Toolkit.getDefaultToolkit().
getImage("rink.gif");
tracker.addImage(backGroundImage, 0);
gifImages[0] = Toolkit.getDefaultToolkit().
getImage("puck.gif");
tracker.addImage(gifImages[0], 0);
gifImages[1] = Toolkit.getDefaultToolkit().
getImage("blocker.gif");
tracker.addImage(gifImages[1], 0);
try {
tracker.waitForID(0);
}catch (InterruptedException e) {
System.out.println(e);
}
setTitle("Slapshot!");
setResizable(false);
setSize(backGroundImage.getWidth(this),
backGroundImage.getHeight(this));
setVisible(true);
memoryImage = createImage(getSize().width, getSize
().height);
memoryGraphics = memoryImage.getGraphics();
thread = new Thread(this);
thread.start();
this.addWindowListener(new WindowAdapter(){
public void windowClosing(
WindowEvent e){
runOK = false;
System.exit(0);
}
}
);
}
public void init()
{
Point position, velocity;
pucks = new Vector<Puck>();
Rectangle edges = new Rectangle(10 + getInsets().left,
getInsets().top, getSize().width - (getInsets().left
+ getInsets().right), getSize().height - (getInsets().top
+ getInsets().bottom));
for (int loopIndex = 0; loopIndex < 12; loopIndex++){
pucks.add(new Puck(gifImages[0],
0, maxVelocity, edges, this));
try {
Thread.sleep(20);
}
catch (Exception exp) {
System.out.println(exp.getMessage());
}
}
pucks.add(new Puck(gifImages[1], 1, maxVelocity, edges,
this));
pucks.add(new Puck(gifImages[1], 2, maxVelocity, edges,
this));
}
public void run()
{
Puck puck;
while (runOK) {
if(!stop){
int numberLeft;
for (int loopIndex = 0; loopIndex < 12; loopIndex++){
puck = (Puck)pucks.elementAt(loopIndex);
if(puck.gone()){
continue;
}
retVal = puck.slide(pucks.elementAt
(13).rectangle, pucks.elementAt
(12).rectangle);
numberLeft = 0;
for (int loopIndex2 = 0; loopIndex2 < 12;
loopIndex2++){
if(!((Puck)pucks.elementAt(loopIndex2))
.gone()){
numberLeft++;
}
}
if(retVal < 0){
if(yourScore + theirScore + numberLeft == 11){
label1.setText(String.valueOf
(++yourScore));
}
}
if(retVal > 0){
if(yourScore + theirScore + numberLeft == 11){
label2.setText(String.valueOf
(++theirScore));
}
}
int struckPuck = -1;
for (int loopIndex3 = 0; loopIndex3 < 13;
loopIndex3++){
Puck testPuck = (Puck)pucks.elementAt
(loopIndex3);
if (puck == testPuck || testPuck.gone()){
continue;
}
if(puck.rectangle.intersects
(testPuck.rectangle)){
struckPuck = loopIndex3;
}
}
if (struckPuck >= 0){
Puck puck1 = (Puck)pucks.elementAt(struckPuck);
Puck puck2 = (Puck)pucks.elementAt(loopIndex);
if(puck2.immovable()){
puck1.velocity.x = -puck1.velocity.x;
retVal = puck1.slide(pucks.elementAt
(13).rectangle, pucks.elementAt
(12).rectangle);
numberLeft = 0;
for (int loopIndex4 = 0; loopIndex4 < 12;
loopIndex4++){
if(!((Puck)pucks.elementAt
(loopIndex4)).gone()){
numberLeft++;
}
}
if(retVal < 0){
if(yourScore + theirScore + numberLeft
== 11){
label1.setText(String.valueOf
(++yourScore));
}
}
if(retVal > 0){
if(yourScore + theirScore + numberLeft
== 11){
label2.setText(String.valueOf
(++theirScore));
}
}
} else if(puck1.immovable()){
puck2.velocity.x = -puck2.velocity.x;
retVal = puck2.slide(pucks.elementAt(13).
rectangle, pucks.elementAt
(12).rectangle);
numberLeft = 0;
for (int loopIndex5 = 0; loopIndex5 < 12;
loopIndex5++){
if(!((Puck)pucks.elementAt
(loopIndex5)).gone()){
numberLeft++;
}
}
if(retVal < 0){
if(yourScore + theirScore + numberLeft
== 11){
label1.setText(String.valueOf
(++yourScore));
}
}
if(retVal > 0){
if(yourScore + theirScore + numberLeft
== 11){
label2.setText(String.valueOf
(++theirScore));
}
}
}
else {
retVal = puck1.slide(pucks.elementAt
(13).rectangle, pucks.elementAt
(12).rectangle);
numberLeft = 0;
for (int loopIndex6 = 0; loopIndex6 < 12;
loopIndex6++){
if(!((Puck)pucks.elementAt(loopIndex6))
.gone()){
numberLeft++;
}
}
if(retVal < 0){
if(yourScore + theirScore + numberLeft
== 11){
label1.setText(String.valueOf
(++yourScore));
}
}
if(retVal > 0){
if(yourScore + theirScore + numberLeft
== 11){
label2.setText(String.valueOf
(++theirScore));
}
}
retVal = puck2.slide(pucks.elementAt
(13).rectangle, pucks.elementAt
(12).rectangle);
numberLeft = 0;
for (int loopIndex7 = 0; loopIndex7 < 12;
loopIndex7++){
if(!((Puck)pucks.elementAt
(loopIndex7)).gone()){
numberLeft++;
}
}
if(retVal < 0){
if(yourScore + theirScore + numberLeft
== 11){
label1.setText(String.valueOf
(++yourScore));
}
}
if(retVal > 0){
if(yourScore + theirScore + numberLeft
== 11){
label2.setText(String.valueOf
(++theirScore));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -