java贪吃蛇
SnakeDome5.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Line2D;
import java.util.*;
public class SnakeDemo5 {
private JFrame frame;
private int AppleDisplayFlag = 1;
private int UPFlag = 0;int DownFlag=0;int LeftFlag=0;int RightFlag=0;
private int SnakeHead = 2;
private int AppleIndex = 0;
private int numberOfRow = 20;
private int numberOfBox = numberOfRow * numberOfRow;
private int[] BoxDisplayFlag = new int[numberOfBox];
private Vector snakeBody = new Vector();
int snakeEndBuf = 0;
public static void main(String[] args) {
SnakeDemo5 snake = new SnakeDemo5();
snake.go();
}
private void go(){
frame = new JFrame();
MyDrawPanel myDrawPanel = new MyDrawPanel();
frame.addKeyListener(myDrawPanel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(myDrawPanel);
frame.setSize(300, 300);
frame.setVisible(true);
snakeBody.add(SnakeHead);
snakeBody.add(1);
snakeBody.add(0);
for(int i=0; i<snakeBody.size();i++){
BoxDisplayFlag[(int) snakeBody.get(i)] = 1;
}
AppleIndex = (int) (Math.random()*100);
while(true){
if(DownFlag == 1){
snakeEndBuf = (int) snakeBody.get(snakeBody.size()-1);
for(int i=snakeBody.size()-1; i>0; i--){
snakeBody.set(i, snakeBody.get(i-1));
}
SnakeHead += numberOfRow;
snakeBody.set(0, SnakeHead);
if(AppleIndex == SnakeHead){
AppleIndex = (int) (Math.random()*100);
snakeBody.add(snakeEndBuf);
}
for(int i=0; i<BoxDisplayFlag.length; i++){BoxDisplayFlag[i]=0;}
for(int i=0; i<snakeBody.size(); i++){
BoxDisplayFlag[(int) snakeBody.get(i)]=1;
}
frame.repaint();
}
if(UPFlag == 1){
snakeEndBuf = (int) snakeBody.get(snakeBody.size()-1);
for(int i=snakeBody.size()-1; i>0; i--){
snakeBody.set(i, snakeBody.get(i-1));
}
SnakeHead -= numberOfRow;
snakeBody.set(0, SnakeHead);
if(AppleIndex == SnakeHead){
AppleIndex = (int) (Math.random()*100);
snakeBody.add(snakeEndBuf);
}
for(int i=0; i<BoxDisplayFlag.length; i++){BoxDisplayFlag[i]=0;}
for(int i=0; i<snakeBody.size(); i++){
BoxDisplayFlag[(int) snakeBody.get(i)]=1;
}
frame.repaint();
}
if(LeftFlag == 1){
snakeEndBuf = (int) snakeBody.get(snakeBody.size()-1);
for(int i=snakeBody.size()-1; i>0; i--){
snakeBody.set(i, snakeBody.get(i-1));
}
SnakeHead -= 1;
snakeBody.set(0, SnakeHead);
if(AppleIndex == SnakeHead){
AppleIndex = (int) (Math.random()*100);
snakeBody.add(snakeEndBuf);
}
for(int i=0; i<BoxDisplayFlag.length; i++){BoxDisplayFlag[i]=0;}
for(int i=0; i<snakeBody.size(); i++){
BoxDisplayFlag[(int) snakeBody.get(i)]=1;
}
frame.repaint();
}
if(RightFlag == 1){
snakeEndBuf = (int) snakeBody.get(snakeBody.size()-1);
for(int i=snakeBody.size()-1; i>0; i--){
snakeBody.set(i, snakeBody.get(i-1));
}
SnakeHead += 1;
snakeBody.set(0, SnakeHead);
if(AppleIndex == SnakeHead){
AppleIndex = (int) (Math.random()*100);
snakeBody.add(snakeEndBuf);
}
for(int i=0; i<BoxDisplayFlag.length; i++){BoxDisplayFlag[i]=0;}
for(int i=0; i<snakeBody.size(); i++){
BoxDisplayFlag[(int) snakeBody.get(i)]=1;
}
frame.repaint();
}
try{
Thread.sleep(100);
}catch (Exception ex){};
}
}
class MyDrawPanel extends JPanel implements KeyListener {
double width = 0, height = 0;
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
double leftX = 0, topY = 0;
for(int i=0; i<numberOfRow; i++){
width = (double) getWidth()/numberOfRow;
height = (double) getHeight()/numberOfRow;
g2.draw(new Line2D.Double(leftX+i*width, topY, leftX+i*width,numberOfRow*height));
g2.draw(new Line2D.Double(leftX, topY+i*height,numberOfRow*width, topY+i*height));
}
for(int i=0; i<numberOfBox; i++){
if(BoxDisplayFlag[i] == 1){
width = (double) getWidth()/numberOfRow;
height = (double) getHeight()/numberOfRow;
topY =(double)(i / (numberOfRow)) * (double) getHeight() / numberOfRow;
leftX =(double)(i % (numberOfRow)) * (double) getWidth() / numberOfRow;
g2.fillRect((int)leftX,(int)topY,(int)width,(int)height);
}
}
if(AppleDisplayFlag == 1){
double topY_apple=0, leftX_apple=0;
width = (double) getWidth()/numberOfRow;
height = (double) getHeight()/numberOfRow;
topY_apple =(double)(AppleIndex / (numberOfRow)) * (double) getHeight() / numberOfRow;
leftX_apple =(double)(AppleIndex % (numberOfRow)) * (double) getWidth() / numberOfRow;
g2.fillRect((int)leftX_apple,(int)topY_apple,(int)width,(int)height);
System.out.println(AppleIndex);
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:
UPFlag =1;
DownFlag = 0;
LeftFlag = 0;
RightFlag = 0;
break;
case KeyEvent.VK_DOWN:
UPFlag =0;
DownFlag = 1;
LeftFlag = 0;
RightFlag = 0;
break;
case KeyEvent.VK_LEFT:
UPFlag =0;
DownFlag = 0;
LeftFlag = 1;
RightFlag = 0;
break;
case KeyEvent.VK_RIGHT:
UPFlag =0;
DownFlag = 0;
LeftFlag = 0;
RightFlag = 1;
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
}