基本信息
源码名称:Java实现贪吃蛇小游戏(附完整源码)
源码大小:0.17M
文件格式:.zip
开发语言:Java
更新时间:2020-08-31
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
基本上实现了贪吃蛇的基本功能。还增加了添加得分记录、通过键盘某按键来控制游戏的停止、重新开始、再来一局等。
public class SnakeFrame extends Frame{ //方格的宽度和长度 public static final int BLOCK_WIDTH = 15 ; public static final int BLOCK_HEIGHT = 15 ; //界面的方格的行数和列数 public static final int ROW = 40; public static final int COL = 40; public static void main(String[] args) { new SnakeFrame().launch(); } public void launch(){ this.setTitle("Snake"); this.setSize(ROW*BLOCK_HEIGHT, COL*BLOCK_WIDTH); this.setLocation(300, 400); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); this.setResizable(false); this.setVisible(true); } }
public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch(key){ case KeyEvent.VK_LEFT : if(head.dir!=Direction.R){ head.dir = Direction.L; } break; case KeyEvent.VK_UP : if(head.dir!=Direction.D){ head.dir = Direction.U; } break; case KeyEvent.VK_RIGHT : if(head.dir!=Direction.L){ head.dir = Direction.R; } break; case KeyEvent.VK_DOWN : if(head.dir!=Direction.U){ head.dir = Direction.D; } break; } } public void move() { addNodeInHead(); deleteNodeInTail(); } private void deleteNodeInTail() { Node node = tail.pre; tail = null; node.next = null; tail = node; } private void addNodeInHead() { Node node = null; switch(head.dir){ case L: node = new Node(head.row,head.col-1,head.dir); break; case U: node = new Node(head.row-1,head.col,head.dir); break; case R: node = new Node(head.row,head.col 1,head.dir); break; case D: node = new Node(head.row 1,head.col,head.dir); break; } node.next = head; head.pre = node; head = node; } //最后,在draw中调用move方法即可 public void draw(Graphics g){ if(head==null){ return ; } move(); for(Node node = head;node!=null;node = node.next){ node.draw(g); } }
public class Egg { //所在的位置 private int row; private int col; //大小 private static final int BLOCK_WIDTH = SnakeFrame.BLOCK_WIDTH; private static final int BLOCK_HEIGHT = SnakeFrame.BLOCK_HEIGHT; private static final Random r = new Random(); private Color color = Color.RED; public Egg(int row, int col) { this.row = row; this.col = col; } public Egg() { this((r.nextInt(SnakeFrame.ROW-2)) 2,(r.nextInt(SnakeFrame.COL-2)) 2); } /* * 改变当前对象的位置,即完成蛋的重现 * */ public void reAppear(){ this.row = (r.nextInt(SnakeFrame.ROW-2)) 2; this.col = (r.nextInt(SnakeFrame.COL-2)) 2; } public void draw(Graphics g){ Color c= g.getColor(); g.setColor(color); g.fillOval(col*BLOCK_WIDTH, row*BLOCK_HEIGHT, BLOCK_WIDTH, BLOCK_HEIGHT); g.setColor(c); //改变下一次的颜色 if(color==Color.RED){ color = Color.BLUE; } else{ color = Color.RED; } } //用于碰撞检测 public Rectangle getRect(){ return new Rectangle(col*BLOCK_WIDTH, row*BLOCK_HEIGHT, BLOCK_WIDTH, BLOCK_HEIGHT); } }