📄 twosnake.java
字号:
package TwoPlayer;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class TwoSnake implements KeyListener {
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScoreOne, labelScoreTwo;
TwoSnakeModel snakeModel = null;
final int width = Toolkit.getDefaultToolkit().getScreenSize().width;
final int height = Toolkit.getDefaultToolkit().getScreenSize().height;
final int canvasWidth = width - (width / 4);
final int canvasHeight = height - (height / 4);
final int nodeWidth = 12;
final int nodeHeight = 12;
ImageIcon icon=new ImageIcon("src//Image//img.jpg");
Image img=icon.getImage();
public TwoSnake() {
mainFrame = new JFrame("GreedSnake");
Container cp = mainFrame.getContentPane();
Panel p = new Panel();
p.setLayout(new GridLayout(1, 2));
labelScoreOne = new JLabel("OneScore:");
labelScoreTwo = new JLabel("TwoScore:");
p.add(labelScoreOne);
p.add(labelScoreTwo);
cp.add(p, BorderLayout.NORTH);
paintCanvas = new Canvas();
paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);
paintCanvas.addKeyListener(this);
cp.add(paintCanvas, BorderLayout.CENTER);
JPanel panelButtom = new JPanel();
panelButtom.setLayout(new FlowLayout());
JLabel labelHelp;
labelHelp = new JLabel("改变速度<<黑:+- 蓝:JK>> ");
panelButtom.add(labelHelp);
labelHelp = new JLabel("改变方向<<黑:↑↓←→ 蓝:WSAD>> ");
panelButtom.add(labelHelp);
labelHelp = new JLabel("暂停<<空格>> 重新开始<<回车>>");
panelButtom.add(labelHelp);
cp.add(panelButtom, BorderLayout.SOUTH);
mainFrame.addKeyListener(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setLocation(width / 2 - canvasWidth / 2, height / 2
- canvasHeight / 2);
mainFrame.setVisible(true);
begin();
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (snakeModel.running)
switch (keyCode) {
case KeyEvent.VK_UP:
snakeModel.changeDirectionOne(TwoSnakeModel.UP);
break;
case KeyEvent.VK_W:
snakeModel.changeDirectionTwo(TwoSnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirectionOne(TwoSnakeModel.DOWN);
break;
case KeyEvent.VK_S:
snakeModel.changeDirectionTwo(TwoSnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirectionOne(TwoSnakeModel.LEFT);
break;
case KeyEvent.VK_A:
snakeModel.changeDirectionTwo(TwoSnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirectionOne(TwoSnakeModel.RIGHT);
break;
case KeyEvent.VK_D:
snakeModel.changeDirectionTwo(TwoSnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
snakeModel.speedUpOne();
break;
case KeyEvent.VK_J:
snakeModel.speedUpTwo();
break;
case KeyEvent.VK_SUBTRACT:
snakeModel.speedDownOne();
break;
case KeyEvent.VK_K:
snakeModel.speedDownTwo();
break;
case KeyEvent.VK_SPACE:
snakeModel.changePauseState();
break;
default:
}
if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_ENTER) {
snakeModel.running = false;
begin();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
void repaint() {
Graphics g = paintCanvas.getGraphics();
//draw background
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
// draw the snake
g.setColor(Color.BLACK);
LinkedList llOne = snakeModel.nodeArrayOne;
Iterator itOne = llOne.iterator();
while (itOne.hasNext()) {
Node n = (Node) itOne.next();
drawNode(g, n);
}
g.setColor(Color.blue);
LinkedList llTwo = snakeModel.nodeArrayTwo;
Iterator itTwo = llTwo.iterator();
while (itTwo.hasNext()) {
Node n = (Node) itTwo.next();
drawNode(g, n);
}
// draw the food
g.setColor(Color.RED);
Node n = snakeModel.food;
drawNode(g, n);
updateScore();
}
public void drawNode(Graphics g, Node n) {
/*
* 转化为g2是为了画出的形状不会有粗糙的边
*/
// Graphics2D g2 = (Graphics2D) g;
// RenderingHints rh = g2.getRenderingHints();
// rh.put(RenderingHints.KEY_ANTIALIASING,
// RenderingHints.VALUE_ANTIALIAS_ON);
// g2.setRenderingHints(rh);
// g2.fillOval(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,nodeHeight - 1);
g.drawImage(img,n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,nodeHeight - 1,mainFrame);
}
public void updateScore() {
String one = "Black Score: " + snakeModel.scoreOne;
labelScoreOne.setText(one);
String two = "Blue Score:" + snakeModel.scoreTwo;
labelScoreTwo.setText(two);
}
void begin() {
if (snakeModel == null || !snakeModel.running) {
snakeModel = new TwoSnakeModel(this, canvasWidth / nodeWidth,
canvasHeight / nodeHeight);
snakeModel.threadOne.start();
snakeModel.threadTwo.start();
}
}
public static void main(String[] args) {
TwoSnake gs = new TwoSnake();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -