java 实现贪吃蛇小游戏

在贪吃蛇游戏中,贪吃蛇的移动可以看作是一个先进先出的队列(从蛇尾的角度看),因此我们在C语言实现贪吃蛇小游戏一文中使用了循环链接表作为队来存储蛇身节点,在 python实现贪吃蛇小游戏一文中,使用列表来存储蛇身节点,在 java 语言里,也可以使用向量来实现和 链表、列表类似的功能。游戏效果如下(gif):

java 实现贪吃蛇小游戏_第1张图片

 完整实现代码:

package lee;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class Snakey extends JFrame{
	
	private JFrame jf = new JFrame("Snakey");
	private MyCanvas drawArea = new MyCanvas();
	private int Side=30;//方形网格边长
	private int Row;//行数
	private int Column;//列数
	private int[][] RoadBlock;
	private Timer timer;//定时器
	private int fps=300;//定时器周期
	private int pos_x=0;
	private int pos_y=0;
	private int direct=0;
	private Vector V=new Vector(2,1);
	private Vector F=new Vector(1);
	private int score=0;
	
	Random rd=new Random();
	//Image bird =Toolkit.getDefaultToolkit().getImage("C:\\Users\\Kansa\\Pictures\\Saved Pictures\\red_bird.jpg");
	public Snakey() {
		super("Snakey");
		this.Row=15;
		this.Column=20;
		this.RoadBlock=new int[Column][Row];
		init();
	}
	public Snakey(int Row,int Column) {
		super("Snakey");
		this.Row=Row;
		this.Column=Column;
		this.RoadBlock=new int[Column][Row];
		init();
	}
	private class WindowCloser extends WindowAdapter{
		public void windowClosing(WindowEvent we) {
			timer.stop();
			System.exit(0);
		}
	}
	public void init() {
		Move move;
		int Wide=Side*Column;
		int High=Side*Row;
		int[] point=new int[2];
		point[0]=rd.nextInt(Column);
		point[1]=rd.nextInt(Row);
		RoadBlock[point[0]][point[1]]=1;
		V.add(point);//随机一个蛇身
		move=new Move();
		int[] food=new int[2];
		food[0]=rd.nextInt(Column);
		food[1]=rd.nextInt(Row);
		if(V.size()
		{
			switch(direct)
			{
				case 1:pos_y--;move.move_up();break;
				case 2:pos_y++;move.move_down();break;
				case 3:pos_x--;move.move_left();break;
				case 4:pos_x++;move.move_right();break;
			}
			if(pos_x>=0 && pos_x=0 && pos_y

 

你可能感兴趣的:(Java/web)