代码
package javaapplication46;/**
*
* @author Administrator
*/
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class Main
{
public static void main(String[] args)
{
Win w=new Win();//这里没问题
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w.show();
}
}
class Win extends JFrame implements ActionListener
{
Mypanel panel;
public Win()
{
setTitle("Game");
setSize(400,400);
setLocation(200,200); JButton b=new JButton("开始游戏");
JPanel j=new JPanel();
panel=new Mypanel();
j.add(b);
j.add(new JLabel("点击开始后开始"));
add(panel,BorderLayout.CENTER);
add(j,BorderLayout.NORTH);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
panel.thread.start();
}
}
class Mypanel extends JPanel implements KeyListener,Runnable
{
int x=100,y=100,dir=0,num=0,flag=1;
Thread thread;
Rectangle2D[] snake=new Rectangle2D[10];
Rectangle2D[] food=new Rectangle2D[10];
public Mypanel()
{
setLayout(null);
addKeyListener(this);
setFocusable(true);
thread=new Thread(this);
for(int i=1;i<10;i++)
snake[i]=new Rectangle2D.Double();
snake[0]=new Rectangle2D.Double(100,100,10,10);
for(int i=0;i<10;i++)
food[i]=new Rectangle2D.Double(i*40+5,i*20+5,10,10);
setBackground(Color.WHITE);
}
public void run()
{
while(true)
{
if(dir==0)
{
try{
snake[0].setFrame(x,y=y+5,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==1)
{
try{
snake[0].setFrame(x,y=y-5,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==2)
{
try{
snake[0].setFrame(x=x-5,y,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==3)
{
try{
snake[0].setFrame(x=x+5,y,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
for(int i=(num<10?num:9);i>0;i--)
snake[i].setFrame(snake[i-1].getX(),snake[i-1].getY(),10,10);
if(num==10)
{ flag=0;
repaint();
break;
}
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<=(num<10?num:9);i++)
g2.draw(snake[i]);
g2.setPaint(Color.BLUE);
g2.fill(snake[0]);
g2.setPaint(Color.GREEN);
for(int i=1;i<=(num<10?num:9);i++)
g2.fill(snake[i]);
g2.setPaint(Color.BLACK);
if(num<10)
{g2.draw(food[num]);
g2.fill(food[num]);
}
if(flag==0)
{g.drawString("~~~恭喜你:吃完了~~~",150,100);}
}
public void keyPressed(KeyEvent e)
{
int k=e.getKeyCode();
if(k==KeyEvent.VK_DOWN){dir=0;}
if(k==KeyEvent.VK_UP){dir=1;}
if(k==KeyEvent.VK_LEFT){dir=2;}
if(k==KeyEvent.VK_RIGHT){dir=3;}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}
但是
package javaapplication47;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
/**
*
* @author Administrator
*/
public class Snaker { /**
* @param args the command line arguments
*/
public static void main(String[] args) {
Myframe frame;
frame=new Myframe();//这里怎么说静态方法不能引用非静态的this,上面和这里有什么不同??
// TODO code application logic here
}
class Myframe extends JFrame {
public Myframe(){
super("贪吃蛇游戏");
setLayout(new BorderLayout());
JButton button=new JButton("开始游戏");
JLabel label=new JLabel("点击开始,开始游戏");
JPanel j=new JPanel();
JPanel panel=new JPanel();
j.add(button);
j.add(label);
add(j,BorderLayout.NORTH);
add(panel,BorderLayout.CENTER);
}
}}
package javaapplication46;/**
*
* @author Administrator
*/
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
public class Main
{
public static void main(String[] args)
{
Win w=new Win();//这里没问题
w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w.show();
}
}
class Win extends JFrame implements ActionListener
{
Mypanel panel;
public Win()
{
setTitle("Game");
setSize(400,400);
setLocation(200,200); JButton b=new JButton("开始游戏");
JPanel j=new JPanel();
panel=new Mypanel();
j.add(b);
j.add(new JLabel("点击开始后开始"));
add(panel,BorderLayout.CENTER);
add(j,BorderLayout.NORTH);
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
panel.thread.start();
}
}
class Mypanel extends JPanel implements KeyListener,Runnable
{
int x=100,y=100,dir=0,num=0,flag=1;
Thread thread;
Rectangle2D[] snake=new Rectangle2D[10];
Rectangle2D[] food=new Rectangle2D[10];
public Mypanel()
{
setLayout(null);
addKeyListener(this);
setFocusable(true);
thread=new Thread(this);
for(int i=1;i<10;i++)
snake[i]=new Rectangle2D.Double();
snake[0]=new Rectangle2D.Double(100,100,10,10);
for(int i=0;i<10;i++)
food[i]=new Rectangle2D.Double(i*40+5,i*20+5,10,10);
setBackground(Color.WHITE);
}
public void run()
{
while(true)
{
if(dir==0)
{
try{
snake[0].setFrame(x,y=y+5,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==1)
{
try{
snake[0].setFrame(x,y=y-5,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==2)
{
try{
snake[0].setFrame(x=x-5,y,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
else if(dir==3)
{
try{
snake[0].setFrame(x=x+5,y,10,10);
repaint();
if(x==food[num].getX()&&y==food[num].getY())
{
num++;
}
Thread.sleep(100);}
catch(Exception e){}
}
for(int i=(num<10?num:9);i>0;i--)
snake[i].setFrame(snake[i-1].getX(),snake[i-1].getY(),10,10);
if(num==10)
{ flag=0;
repaint();
break;
}
}
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
for(int i=0;i<=(num<10?num:9);i++)
g2.draw(snake[i]);
g2.setPaint(Color.BLUE);
g2.fill(snake[0]);
g2.setPaint(Color.GREEN);
for(int i=1;i<=(num<10?num:9);i++)
g2.fill(snake[i]);
g2.setPaint(Color.BLACK);
if(num<10)
{g2.draw(food[num]);
g2.fill(food[num]);
}
if(flag==0)
{g.drawString("~~~恭喜你:吃完了~~~",150,100);}
}
public void keyPressed(KeyEvent e)
{
int k=e.getKeyCode();
if(k==KeyEvent.VK_DOWN){dir=0;}
if(k==KeyEvent.VK_UP){dir=1;}
if(k==KeyEvent.VK_LEFT){dir=2;}
if(k==KeyEvent.VK_RIGHT){dir=3;}
}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
}
但是
package javaapplication47;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
/**
*
* @author Administrator
*/
public class Snaker { /**
* @param args the command line arguments
*/
public static void main(String[] args) {
Myframe frame;
frame=new Myframe();//这里怎么说静态方法不能引用非静态的this,上面和这里有什么不同??
// TODO code application logic here
}
class Myframe extends JFrame {
public Myframe(){
super("贪吃蛇游戏");
setLayout(new BorderLayout());
JButton button=new JButton("开始游戏");
JLabel label=new JLabel("点击开始,开始游戏");
JPanel j=new JPanel();
JPanel panel=new JPanel();
j.add(button);
j.add(label);
add(j,BorderLayout.NORTH);
add(panel,BorderLayout.CENTER);
}
}}
Win w=new Win();//这里没问题
Myframe frame;
frame=new Myframe();//这里怎么说静态方法不能引用非静态的this,上面和这里有什么不同??谢谢。希望有人回答。。等一下午了。。
不知道我这样说你明白了没!