package com.wuzihao.snake;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList;
import java.util.Timer;
import java.util.TimerTask;
public class MainFrame extends JFrame {
private Snake snake;
private Timer timer;
private JPanel jPanel;
private Node food;
public MainFrame() throws HeadlessException {
initFrame();
initGamePanel();
//初始化蛇
initSnake();
//设置定时器,让蛇在定时时间内移动
initTimer();
//初始化食物
initFood();
//设置键盘监听时间
setKeyListener();
}
private void setKeyListener() {
addKeyListener(new KeyAdapter() {
//当键盘按下时,会自动掉此方法
@Override
public void keyPressed(KeyEvent e) {
//键盘中的一个键都有一个编号
switch (e.getKeyCode()){
case KeyEvent.VK_UP: //上键
if(snake.getDirection()!=Direction.DOWN){
snake.setDirection(Direction.UP);
}
break;
case KeyEvent.VK_DOWN: //下键
if(snake.getDirection()!=Direction.UP){
snake.setDirection(Direction.DOWN);
}
break;
case KeyEvent.VK_LEFT: //左键
if(snake.getDirection()!=Direction.RIGHT){
snake.setDirection(Direction.LEFT);
}
break;
case KeyEvent.VK_RIGHT: //右键
if(snake.getDirection()!=Direction.LEFT){
snake.setDirection(Direction.RIGHT);
}
break;
}
}
});
}
//初始化食物
private void initFood() {
food=new Node();
food.random();
}
private void initTimer() {
this.timer = new Timer();
TimerTask timerTask = new TimerTask(){
@Override
public void run() {
snake.move();
//判断蛇头是否和食物重合
Node head = snake.getBody().getFirst();
if(head.getX()==food.getX()&&head.getY()==food.getY()){
snake.eat(food);
food.random();
}
//重新绘制棋盘
jPanel.repaint();
}
};
//每100毫秒,执行一次监听事件
timer.scheduleAtFixedRate(timerTask,0,100);
}
private void initSnake() {
this.snake = new Snake();
}
private void initGamePanel(){
jPanel = new JPanel(){
@Override
public void paint(Graphics g) {
//清空棋盘
g.clearRect(0,0,600,600);
//绘制横线
for (int i = 0; i <= 40; i++) {
g.drawLine(0,i*15,600,i*15);
}
//绘制竖线
for (int i = 0; i <= 40; i++) {
g.drawLine(i*15,0,i*15,600);
}
//绘制蛇
LinkedList<Node> body = snake.getBody();
for (Node node : body) {
g.fillRect(node.getX()*15,node.getY()*15,15,15);
}
//绘制食物
g.fillRect(food.getX()*15,food.getY()*15,15,15);
}
};
this.add(jPanel);
}
private void initFrame(){
this.setSize(615,610);
this.setLocation(250,10);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setBackground(new Color(245, 206, 206));
}
public static void main(String[] args) {
new MainFrame();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
java-swing-implements-snake-master.zip (17个子文件)
java-swing-implements-snake-master
src
com
wuzihao
snake
Node.java 616B
Snake.java 3KB
Direction.java 78B
MainFrame.java 4KB
out
production
snake
com
wuzihao
snake
Direction.class 1KB
MainFrame$1.class 1KB
Snake$1.class 765B
Snake.class 3KB
Node.class 942B
MainFrame$3.class 2KB
MainFrame.class 3KB
MainFrame$2.class 1KB
.idea
uiDesigner.xml 9KB
misc.xml 273B
modules.xml 250B
.gitignore 176B
snake.iml 423B
共 17 条
- 1
资源评论
小码叔
- 粉丝: 5120
- 资源: 5484
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功