📄 gamepanel.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
class GamePanel extends Panel implements Runnable,KeyListener{
Snake snake;
MainFrame frame;
Detu dp;
SetPanel sp=new SetPanel(frame);
Images im1=new Images();
int foods ;
int length;
int fnsuint;
int jafnsu;
int swsuint;
int sudu;
Point currentFood;
int xBound,yBound;
Thread t;
int drict;
Sound sound3=new Sound("1.WAV");
Label screen[][];
Panel imPanel=new Panel();
Label fnsuLabel=new Label("得分:");
Label fnsu=new Label("0");
Label swsuLabel=new Label("吃食物个数:");
Label swsu=new Label("0");
Panel fn=new Panel();
JPanel eu=new JPanel();
class Images extends Panel{
Image t;
Toolkit tool;
Images(){
tool=this.getToolkit();
t=tool.getImage("5.jpg");
}
public void paint(Graphics g){
g.drawImage(t,0,0,this);
}
}
GamePanel(MainFrame frame){
this.frame=frame;
xBound =58;
yBound = 47;
this.setBackground(Color.cyan);
screen =new Label[yBound][xBound];
eu.setBackground(Color.gray);
this.setLayout(null);
eu.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.green,1),"游戏区"));
eu.setLayout(new GridLayout(yBound,xBound,1,1));
add(im1);
for(int i=0;i<yBound;i++){
for(int j=0;j<xBound;j++){
screen[i][j] = new Label();
eu.add(screen[i][j]);
}
}
add(fnsuLabel);
fnsuLabel.setBounds(70,10,100,40);
add(fnsu);
fnsu.setBounds(170,10,50,40);
add(swsuLabel);
swsuLabel.setBounds(250,10,100,40);
add(swsu);
swsu.setBounds(350,10,30,40);
eu.setBounds(10,50,424,356);
add(eu);
this.setVisible(true);
this.addKeyListener(this);
}
public void init(){
for(int i=0;i<yBound;i++){
for(int j=0;j<xBound;j++){
screen[i][j].setBackground(Color.green);
}
}
}
public void start(MainFrame frame){
swsuint=0;
init();
drict = 0;
length=frame.length;
sudu=frame.sudu;
foods=frame.foods;
fnsuint=0;
jafnsu=frame.jafnsu;
snake=new Snake(this);
dp=new Detu(this);
fnsu.setText("0");
swsu.setText("0");
if(frame.detu==1){
dp.detu_1();
}
else if(frame.detu==2){
dp.detu_2();
}
createFood();
display();
if(t!=null) {
t.stop();
}
t=new Thread(this);
t.start();
}
public boolean eatFood(){
foods--;
sound3.play();
fnsuint+=jafnsu;
swsuint++;
fnsu.setText(""+fnsuint);
swsu.setText(""+swsuint);
if(foods==0){
frame.card.show(frame,"v");
return true;
}
else{
createFood();
return false;
}
}
public void createFood(){
int x,y;
Point b,c;
boolean a;
do{
a= false ;
x =(int)(Math.random()*xBound);
y =(int)(Math.random()*yBound);
currentFood =new Point(x,y);
for(int j=0;j<snake.size();j++){
c=(Point)snake.elementAt(j);
if(c.equals(currentFood)) a=true;
}
for(int i=0;i<dp.size();i++){
b=(Point)dp.elementAt(i);
if(b.equals(currentFood)) a=true;
}
}while(a);
screen[currentFood.y][currentFood.x].setBackground(Color.orange);
}
public void display(){
Point p;
screen[ snake.head.y][ snake.head.x].setBackground(Color.red);
if(snake.end!=null)
screen[ snake.end.y][ snake.end.x].setBackground(Color.green);
}
public void run(){
int drict;
while(true){
drict=this.drict;
if(!snake.move(drict)){
frame.card.show(frame,"f");
return ;
}
if(snake.head.equals(this.currentFood))
if(eatFood()) {display();return ;}
display();
try{
Thread.sleep(sudu);
}catch(Exception e){}
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case 37:
if(drict!=0) drict=2;break;
case 38:
if(drict!=1) drict=3;break;
case 39:
if(drict!=2) drict=0;break;
case 40:
if(drict!=3) drict=1;break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -