📄 onesnake.java
字号:
package OnePlayer;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class OneSnake implements KeyListener {
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;
OneSnakeModel 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 = 10;
final int nodeHeight = 10;
ImageIcon icon=new ImageIcon("src//Image//img.jpg");
Image img=icon.getImage();
public OneSnake() {
mainFrame = new JFrame("GreedSnake");
Container cp = mainFrame.getContentPane();
labelScore = new JLabel("Score:");
cp.add(labelScore, 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("改变速度<< + - >> ");
panelButtom.add(labelHelp);
labelHelp = new JLabel("改变方向<< ↑ ↓ ← → >> ");
panelButtom.add(labelHelp);
labelHelp = new JLabel("暂停<<空格>> 重新开始<<回车>>");
panelButtom.add(labelHelp, BorderLayout.SOUTH);
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.changeDirection(OneSnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(OneSnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(OneSnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(OneSnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
snakeModel.speedUp();
break;
case KeyEvent.VK_SUBTRACT:
snakeModel.speedDown();
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
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();
/*
* 背景颜色
*/
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
/*
* 画出蛇身
*/
g.setColor(Color.black);
LinkedList na = snakeModel.nodeArray;
for (Iterator iterator = na.iterator(); iterator.hasNext();) {
Node n = (Node) iterator.next();
// if((Node)(na.get(na.size()-2))==n)
// g.setColor(Color.CYAN);
// else
// g.setColor(Color.black);
drawNode(g, n);
}
/*
* 画出食物
*/
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 s = "Score: " + snakeModel.score;
labelScore.setText(s);
}
void begin() {
if (snakeModel == null || !snakeModel.running) {
snakeModel = new OneSnakeModel(this, canvasWidth / nodeWidth,
canvasHeight / nodeHeight);
(new Thread(snakeModel)).start();
}
}
public static void main(String[] args) {
OneSnake gs = new OneSnake();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -