Snake.javaimport java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Snake implements KeyListener{
int theLengthOfSnake;
int hdirection,sdirection;
int headx ,heady;
int snailx ,snaily;
static int[][] s = new int [16][16];
static Drawpanel drawpanel = new Drawpanel();
static int record = 1;
int[] x = {4,4,4,hdirection};
public Snake(){
headx = 3;
heady = 0;
snailx = 1;
snaily = 0;
s[0][1] = s[0][2] = s[0][3] = 1;
theLengthOfSnake = 3;
hdirection = 4;
sdirection = 4;
}
public static void main(String[] args){
Snake snake = new Snake();
JFrame frame = new JFrame("snake");
frame.getContentPane().add(BorderLayout.CENTER,drawpanel);
frame.setVisible(true);
frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(snake);
while(true){
snake.move();
}
}
public void move(){
switch(hdirection){
case 1:heady = heady-1;break;//将对应位置设为1
case 2:headx = headx-1;break;
case 3:heady = heady+1;break;
case 4:headx = headx+1;break;
}
switch(sdirection){
case 1:snaily = snaily-1;break;
case 2:snailx = snailx-1;break;
case 3:snaily = snaily+1;break;
case 4:snailx = snailx+1;break;
}
setTheSnail();
try{
Thread.sleep(500);
}catch(Exception e){}
drawpanel.getdata(record,snailx,snaily,headx,heady);
drawpanel.repaint();
record++;
}
public void setTheSnail(){
for(int i=0;i<3;i++){
x[i] = x[i+1];
}
x[3] = hdirection;
sdirection = x[0];
}
//写一个测试是否失败的类;
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
} @Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
} @Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
}
}//碰到蛋时,尾部的move不会产生,数组头部加一个与原位置相同的数;drawpanel.javaimport javax.swing.*;
import java.awt.*;public class Drawpanel extends JPanel{
int x,m,n,i,j;
public void getdata(int x,int m,int n,int i,int j){
this.x = x;
this.m = m;
this.n = n;
this.i = i;
this.j = j;
}
public void paintComponent(Graphics g){
while(x <= 3){
g.setColor(Color.white);
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.setColor(Color.black);
g.fillRect(160,0,120,40);
}
g.setColor(Color.black);
g.fillRect(i*40,j*40,40,40);
g.setColor(Color.white);
g.fillRect(m*40,n*40,40,40);
}
}
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Snake implements KeyListener{
int theLengthOfSnake;
int hdirection,sdirection;
int headx ,heady;
int snailx ,snaily;
static int[][] s = new int [16][16];
static Drawpanel drawpanel = new Drawpanel();
static int record = 1;
int[] x = {4,4,4,hdirection};
public Snake(){
headx = 3;
heady = 0;
snailx = 1;
snaily = 0;
s[0][1] = s[0][2] = s[0][3] = 1;
theLengthOfSnake = 3;
hdirection = 4;
sdirection = 4;
}
public static void main(String[] args){
Snake snake = new Snake();
JFrame frame = new JFrame("snake");
frame.getContentPane().add(BorderLayout.CENTER,drawpanel);
frame.setVisible(true);
frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(snake);
while(true){
snake.move();
}
}
public void move(){
switch(hdirection){
case 1:heady = heady-1;break;//将对应位置设为1
case 2:headx = headx-1;break;
case 3:heady = heady+1;break;
case 4:headx = headx+1;break;
}
switch(sdirection){
case 1:snaily = snaily-1;break;
case 2:snailx = snailx-1;break;
case 3:snaily = snaily+1;break;
case 4:snailx = snailx+1;break;
}
setTheSnail();
try{
Thread.sleep(500);
}catch(Exception e){}
drawpanel.getdata(record,snailx,snaily,headx,heady);
drawpanel.repaint();
record++;
}
public void setTheSnail(){
for(int i=0;i<3;i++){
x[i] = x[i+1];
}
x[3] = hdirection;
sdirection = x[0];
}
//写一个测试是否失败的类;
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
} @Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
} @Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;
case KeyEvent.VK_LEFT:hdirection = 2;
case KeyEvent.VK_DOWN:hdirection = 3;
case KeyEvent.VK_RIGHT:hdirection = 4;
}
}
}//碰到蛋时,尾部的move不会产生,数组头部加一个与原位置相同的数;drawpanel.javaimport javax.swing.*;
import java.awt.*;public class Drawpanel extends JPanel{
int x,m,n,i,j;
public void getdata(int x,int m,int n,int i,int j){
this.x = x;
this.m = m;
this.n = n;
this.i = i;
this.j = j;
}
public void paintComponent(Graphics g){
while(x <= 3){
g.setColor(Color.white);
g.fillRect(0,0,this.getWidth(),this.getHeight());
g.setColor(Color.black);
g.fillRect(160,0,120,40);
}
g.setColor(Color.black);
g.fillRect(i*40,j*40,40,40);
g.setColor(Color.white);
g.fillRect(m*40,n*40,40,40);
}
}
public class Snake implements KeyListener, Runnable{ //加一个线程借口//实现线程借口的方法
public void run() {
while(true){
move();//就是说这个线程是持续处理蛇移动的
}
}原来死循环调用move方法的地方换成
Thread t = new Thread(this);
t.start();可能会有些异常处理的问题。你先试试吧
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class Snake implements KeyListener{
int theLengthOfSnake;
int hdirection,sdirection;
int headx ,heady;
int snailx ,snaily;
static int[][] s = new int [16][16];
static Drawpanel drawpanel = new Drawpanel();
static int record = 1;
int[] x = {4,4,4,hdirection};
public Snake(){
headx = 3;
heady = 0;
snailx = 1;
snaily = 0;
s[0][1] = s[0][2] = s[0][3] = 1;
theLengthOfSnake = 3;
hdirection = 4;
sdirection = 4;
}
public static void main(String[] args){
Snake snake = new Snake();
JFrame frame = new JFrame("snake");
frame.getContentPane().add(BorderLayout.CENTER,drawpanel);
frame.setVisible(true);
frame.setSize(600,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addKeyListener(snake);
while(true){
snake.move();
}
}
public void move(){
switch(hdirection){
case 1:heady = heady-1;break;//将对应位置设为1
case 2:headx = headx-1;break;
case 3:heady = heady+1;break;
case 4:headx = headx+1;break;
}
switch(sdirection){
case 1:snaily = snaily-1;break;
case 2:snailx = snailx-1;break;
case 3:snaily = snaily+1;break;
case 4:snailx = snailx+1;break;
}
setTheSnail();
try{
Thread.sleep(500);
}catch(Exception e){}
drawpanel.getdata(record,snailx,snaily,headx,heady);
drawpanel.repaint();
record++;
}
public void setTheSnail(){
for(int i=0;i<3;i++){
x[i] = x[i+1];
}
x[3] = hdirection;
sdirection = x[0];
}
//写一个测试是否失败的类;
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;break;//case后面没有加break
case KeyEvent.VK_LEFT:hdirection = 2;break;
case KeyEvent.VK_DOWN:hdirection = 3;break;
case KeyEvent.VK_RIGHT:hdirection = 4;break;
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;break;
case KeyEvent.VK_LEFT:hdirection = 2;break;
case KeyEvent.VK_DOWN:hdirection = 3;break;
case KeyEvent.VK_RIGHT:hdirection = 4;break;
}
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
switch(e.getKeyCode()){
case KeyEvent.VK_UP:hdirection = 1;break;
case KeyEvent.VK_LEFT:hdirection = 2;break;
case KeyEvent.VK_DOWN:hdirection = 3;break;
case KeyEvent.VK_RIGHT:hdirection = 4;break;
}
}
}//碰到蛋时,尾部的move不会产生,数组头部加一个与原位置相同的数;