Java贪吃蛇程序.docx

上传人:b****5 文档编号:6848360 上传时间:2023-01-11 格式:DOCX 页数:12 大小:16.65KB
下载 相关 举报
Java贪吃蛇程序.docx_第1页
第1页 / 共12页
Java贪吃蛇程序.docx_第2页
第2页 / 共12页
Java贪吃蛇程序.docx_第3页
第3页 / 共12页
Java贪吃蛇程序.docx_第4页
第4页 / 共12页
Java贪吃蛇程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Java贪吃蛇程序.docx

《Java贪吃蛇程序.docx》由会员分享,可在线阅读,更多相关《Java贪吃蛇程序.docx(12页珍藏版)》请在冰豆网上搜索。

Java贪吃蛇程序.docx

Java贪吃蛇程序

packagePackage1;

importjava.awt.Graphics;

importjava.awt.Point;

importPackageTool.Global;

publicclassFoodextendsPoint{

publicvoidnewFood(Pointp){

this.setLocation(p);

}

publicbooleanisSnakeEatFood(Snakesnake){

System.out.println("Food'sisSnakeEatFood");

returnthis.equals(snake.getHead());

}

publicvoiddrawMe(Graphicsg){

System.out.println("Food'sdrawMe");

g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE,

Global.CELL_SIZE,Global.CELL_SIZE,true);

}

}

packagePackage1;

importjava.awt.Color;

importjava.awt.Graphics;

importjava.awt.Point;

importjava.util.Random;

importPackageTool.Global;

publicclassGround{

privateint[][]rocks=newint[Global.WIDTH][Global.HEIGHT];

publicGround(){

for(intx=0;x

rocks[x][0]=1;

rocks[x][Global.HEIGHT-1]=1;

}

}

publicbooleanisSnakeEatRock(Snakesnake){

System.out.println("Ground'sisSnakeEatRoce");

for(intx=0;x

for(inty=0;y

if((rocks[x][y]==1)&&(x==snake.getHead().x&&y==snake.getHead().y)){

returntrue;

}

}

}

returnfalse;

}

publicPointgetPoint(){

Randomrandom=newRandom();

intx=0,y=0;

do{

x=random.nextInt(Global.WIDTH);

y=random.nextInt(Global.HEIGHT);

}

while(rocks[x][y]==1);

returnnewPoint(x,y);

}

publicvoiddrawMe(Graphicsg){

System.out.println("Ground'sdrawMe");

for(intx=0;x

for(inty=0;y

if(rocks[x][y]==1){

g.setColor(Color.gray);

g.fill3DRect(x*Global.CELL_SIZE,y*Global.CELL_SIZE,

Global.CELL_SIZE,Global.CELL_SIZE,false);

}

}

}

}

}

packagePackage1;

importjava.awt.Color;

importjava.awt.Graphics;

importjava.awt.Point;

importjava.util.HashSet;

importjava.util.LinkedList;

importjava.util.Set;

importPackageListener.SnakeListener;

importPackageTool.Global;

publicclassSnake{

privateSetlisteners=newHashSet();//监听器组的用法

privateLinkedListbody=newLinkedList();

publicintoldDirection,newDirection;

publicstaticfinalintUP=-1;

publicstaticfinalintDOWN=1;

publicstaticfinalintLEFT=2;

publicstaticfinalintRIGHT=-2;

publicstaticbooleangameover;

privatePointoldTail;

publicbooleanlife=true;

publicSnake(){

init();

}

publicvoidinit(){

intx=Global.HEIGHT/2;

inty=Global.HEIGHT/2;

for(inti=0;i<3;i++){

body.addFirst(newPoint(x--,y));

}

oldDirection=newDirection=LEFT;//新旧方向复制

}

publicvoiddie(){

life=false;

gameover=true;

}

publicvoidmove(){

System.out.println("Snake'smove");

if(!

(oldDirection+newDirection==0)){

oldDirection=newDirection;

}

oldTail=body.removeLast();

intx=body.getFirst().x;

inty=body.getFirst().y;

switch(oldDirection){

caseUP:

y--;

if(y<0){

y=Global.HEIGHT-1;

}

break;

caseDOWN:

y++;

if(y>=Global.HEIGHT){

y=0;

}

break;

caseLEFT:

x--;

if(x<0){

x=Global.WIDTH-1;

}

break;

caseRIGHT:

x++;

if(x>=Global.WIDTH){

x=0;

}

}

PointnewHead=newPoint(x,y);

body.addFirst(newHead);

}

publicvoidchangeDirection(intdirection){

System.out.println("Snake'schangeDirectiion");

newDirection=direction;

}

publicvoideatFood(){

System.out.println("Snake'seatFood");

body.addLast(oldTail);

}

publicbooleanisEatBody(){

System.out.println("Snake'sisEatBody");

for(inti=1;i

if(body.get(i).equals(this.getHead())){

returntrue;

}

}

returnfalse;

}

publicvoiddrawMe(Graphicsg){

System.out.println("Snake'sdrawMe");

g.setColor(Color.BLUE);

for(Pointp:

body){

g.fill3DRect(p.x*Global.CELL_SIZE,p.y*Global.CELL_SIZE,

Global.CELL_SIZE,Global.CELL_SIZE,true);

}

}

publicPointgetHead(){

returnbody.getFirst();

}

privateclassSnakeDriverimplementsRunnable{

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

while(life){

move();

for(SnakeListenerl:

listeners){

l.snakeMoved(Snake.this);

}

try{

Thread.sleep(300);

}catch(InterruptedExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

}

publicvoidstart(){

newThread(newSnakeDriver()).start();

}

publicvoidaddSnakeListener(SnakeListenerl){

if(l!

=null){

this.listeners.add(l);

}

}

}

packagePackage2;

importjava.awt.Color;

importjava.awt.Font;

importjava.awt.Graphics;

importjavax.swing.JPanel;

importPackage1.Food;

importPackage1.Ground;

importPackage1.Snake;

importPackageTool.Global;

publicclassGamePanelextendsJPanel{

privateSnakesnake;

privateFoodfood;

privateGroundground;

publicvoiddisplay(Snakesnake,Foodfood,Groundground){

System.out.println("GamePanel'sdisplay");

this.snake=snake;

this.food=food;

this.ground=ground;

this.repaint();

}

@Override

protectedvoidpaintComponent(Graphicsg){

//TODOAuto-generatedmethodstub

//super.paintComponent(g);

g.setColor(newColor(0xcfcfcf));

g.fillRect(0,0,Global.WIDTH*Global.CELL_SIZE,

Global.HEIGHT*Global.CELL_SIZE);

this.snake.drawMe(g);

this.food.drawMe(g);

this.ground.drawMe(g);

if(Snake.gameover){

g.setColor(Color.BLACK);

g.fillRect(0,0,Global.HEIGHT*Global.CELL_SIZE,

Global.HEIGHT*Global.CELL_SIZE);

g.setColor(Color.YELLOW);

g.setFont(newFont("宋体",Font.BOLD,30));

g.drawString("GAMEOVER",Global.HEIGHT*Global.CELL_SIZE/4,

Global.HEIGHT*Global.CELL_SIZE/2);

}

}

}

packagePackage3;

importjava.awt.Graphics;

importjava.awt.event.KeyAdapter;

importjava.awt.event.KeyEvent;

importPackage1.Food;

importPackage1.Ground;

importPackage1.Snake;

importPackage2.GamePanel;

importPackageListener.SnakeListener;

publicclassControllerextendsKeyAdapterimplementsSnakeListener{

privateSnakesnake;

privateFoodfood;

privateGroundground;

privateGamePanelgamepanel;

publicController(Snakesnake,Foodfood,Groundground,GamePanelgamepanel){

super();

this.snake=snake;

this.food=food;

this.ground=ground;

this.gamepanel=gamepanel;

}

@Override

publicvoidkeyPressed(KeyEvente){

//TODOAuto-generatedmethodstub

//super.keyPressed(e);

switch(e.getKeyCode()){

caseKeyEvent.VK_UP:

snake.changeDirection(Snake.UP);

break;

caseKeyEvent.VK_DOWN:

snake.changeDirection(Snake.DOWN);

break;

caseKeyEvent.VK_LEFT:

snake.changeDirection(Snake.LEFT);

break;

caseKeyEvent.VK_RIGHT:

snake.changeDirection(Snake.RIGHT);

break;

}

}

@Override

publicvoidsnakeMoved(Snakesnake){

gamepanel.display(snake,food,ground);

if(food.isSnakeEatFood(snake)){

snake.eatFood();

food.newFood(ground.getPoint());

}

if(ground.isSnakeEatRock(snake)){

snake.die();

}

if(snake.isEatBody()){

snake.die();

}

}

publicvoidnewGame(){

snake.start();

food.newFood(ground.getPoint());

}

}

packagePackageListener;

importPackage1.Snake;

publicinterfaceSnakeListener{

voidsnakeMoved(Snakesnake);

}

packagePackageTool;

publicclassGlobal{

publicstaticfinalintCELL_SIZE=20;

publicstaticfinalintWIDTH=15;

publicstaticfinalintHEIGHT=15;

}

packageTestPackage;

importjava.awt.BorderLayout;

importjavax.swing.JFrame;

importPackage1.Food;

importPackage1.Ground;

importPackage1.Snake;

importPackage2.GamePanel;

importPackage3.Controller;

importPackageTool.Global;

publicclassGameTest{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Snakesnake=newSnake();

Foodfood=newFood();

Groundground=newGround();

GamePanelgamePanel=newGamePanel();

Controllercontroller=newController(

snake,food,ground,gamePanel);

JFrameframe=newJFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

gamePanel.setSize(Global.WIDTH*Global.CELL_SIZE,

Global.HEIGHT*Global.CELL_SIZE);

frame.setSize(Global.WIDTH*Global.CELL_SIZE+10,

Global.HEIGHT*Global.CELL_SIZE+35);

frame.add(gamePanel,BorderLayout.CENTER);

gamePanel.addKeyListener(controller);

snake.addSnakeListener(controller);

frame.addKeyListener(controller);

frame.setVisible(true);

controller.newGame();

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1