首页 > 文章列表 > 如何使用Java实现贪吃蛇大作战小游戏

如何使用Java实现贪吃蛇大作战小游戏

java
210 2023-04-24

Java实现贪吃蛇大作战小游戏的代码怎么写

 效果展示

效果展示

一、游戏界面

二、得分情况

 项目介绍

项目背景

“贪吃蛇大作战”游戏是一个经典的游戏,它因操作简单、娱乐性强,自从计算机实现以来,深受广大电脑玩家的喜爱,本项目基于Java技术,开发了一个 操作简单、界面美观、功能较齐全 的“贪吃蛇”游戏。通过本游戏的开发,达到学习Java技术和熟悉软件开发流程的目的。

总体需求

 本系统主要是完成贪吃蛇游戏的基本操作,用户可自己练习和娱乐。需要满足以下几点要求:

(1)利用方向键来改变蛇的运行方向。

(2)空格键暂停或继续游戏,并在随机的地方产生食物。

(3)吃到食物就变成新的蛇体(蛇身长度变长,游戏继续)。

实现过程

(1)绘制窗体对象。

(2)静态UI设计(包括小蛇,食物,游戏区域和标题区域)。

(3)使用键盘监听事件和定时器实现小蛇的移动。

(4)小蛇与食物碰撞的实现。

(5)定义变量存放小蛇长度,遍历数组实现小蛇身体的增加功能。

(6)退出条件:当游戏积分到达指定分数,游戏退出。

代码展示

主类 :Demo类

package Demo;

/**

 * 1.画出窗体对象

 * 

 * 

 * @author 青00-Java

 *

 */

public class Demo0 {

 

}

MyPanel类 构造方法

package Demo;

 

import java.awt.Color;

import java.awt.Component;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.util.Random;

 

import javax.swing.ImageIcon;

import javax.swing.JPanel;

import javax.swing.Timer;

//画布类

public class MyPanel extends JPanel implements KeyListener,ActionListener{//继承

	private static final Component This = null;

//键盘监听交互接口

int length;

int score;

int[] snakeX=new int[500];//坐标

int[] snakeY=new int[500];

String fx;

boolean ifStart=false;

//定时器

Timer timer =new Timer(100,this);

int foodx;

int foody;

Random random =new Random();

 

public MyPanel(){

	init();

	//添加监听事件

	this.setFocusable(true);

	this.addKeyListener(this);

	score=0;

}

初始化方法

public void init(){

	length=3;

	fx="r";

	//初始化小蛇的位置

	snakeX[0]=100;

	snakeY[0]=150;

	snakeX[1]=75;

	snakeY[1]=150;

	snakeX[2]=50;

	snakeY[2]=150;

	foodx=25+25*random.nextInt(57);

	foody=125+25*random.nextInt(27);

	System.out.println(foodx);

	System.out.println(foody);

	timer.start();

}

绘制方法

	@Override

	 protected void paintComponent(Graphics g){//画笔对象

		 super.paintComponent(g);

		 //绘制顶部的标题

		 new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//创建对象

		 //绘制游戏区域

		 g.fillRect(25, 125, 1450, 700);

		 //绘制小蛇

		 //蛇头

		 new ImageIcon("C:/Users/Desktop/img/l.png").paintIcon(this, g, snakeX[0], snakeY[0]);

			 

		 //蛇身

		 for(int i=1;i<length;i++){

			 new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(This, g, snakeX[i], snakeY[i]);

		 }

		 //游戏的提示语

		 if(ifStart==false){

			 g.setColor(Color.white);

			 g.setFont(new Font("微软雅黑",Font.BOLD,40));

			 g.drawString("按压空格键继续游戏", 550,500);

			 g.drawString("无尽模式", 650,400);

		 }

		 //画出食物的位置

		 new ImageIcon("C:/Users/Desktop/img/body.png").paintIcon(this, g, foodx, foody);

	}

	

	@Override//按压

	public void keyPressed(KeyEvent e) {

		int keyCode=e.getKeyCode();

		if(keyCode==KeyEvent.VK_SPACE){

			ifStart=!ifStart;

		}

		if(ifStart==true){

			if(keyCode==KeyEvent.VK_LEFT&&fx!="r"){

				fx="l";

			}else if(keyCode==KeyEvent.VK_RIGHT&&fx!="l"){

				fx="r";

			}else if(keyCode==KeyEvent.VK_UP&&fx!="d"){

				fx="u";

			}else if(keyCode==KeyEvent.VK_DOWN&&fx!="u"){

				fx="d";

			}

	}

		repaint();

}

定时器执行方法

@Override

	public void actionPerformed(ActionEvent e) {

		//改变蛇的位置

		if(ifStart==true){

			for(int i=length-1;i>0;i--){

				snakeX[i]=snakeX[i-1];

				snakeY[i]=snakeY[i-1];

			}

			if(fx.equals("l")){

				snakeX[0]=snakeX[0]-25;

			    if(snakeX[0]<25){

					snakeX[0]=1450;

				}

			}else if(fx.equals("r")){

				snakeX[0]=snakeX[0]+25;

				if(snakeX[0]>1450){

					snakeX[0]=25;

				}

			}else if(fx.equals("u")){

				snakeY[0]=snakeY[0]-25;

				if(snakeY[0]<120){

					snakeY[0]=800;

				}

			}else if(fx.equals("d")){

				snakeY[0]=snakeY[0]+25;

				if(snakeY[0]>800){

					snakeY[0]=120;

				}

			}

			//判断是否吃了食物

			if(snakeX[0]==foodx&&snakeY[0]==foody){

				length++;

				score++;

				if(score==100){

					ifStart=!ifStart;

				}

				foodx=25+25*random.nextInt(57);

				foody=125+25*random.nextInt(27);

				System.out.print("当前食物坐标("+foodx+",");

				System.out.print(foody+")");

				System.out.println("|||当前分数:"+score+" ");

			}

			repaint();

		}

		timer.start();

	}

	

	@Override

	public void keyReleased(KeyEvent arg0) {

		// TODO Auto-generated method stub

		

	}

	@Override

	public void keyTyped(KeyEvent arg0) {

		// TODO Auto-generated method stub

		

	}

}

框架Ui类

package Demo;

 

import javax.swing.JFrame;

 

public class Ui {

 

	public static void main(String[] args){

		JFrame frame=new JFrame("无尽版贪吃蛇");

		frame.setSize(1500, 900);

		frame.setLocationRelativeTo(null);//居中显示

		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		frame.setResizable(true);

		frame.add(new MyPanel());

		frame.setVisible(true);

	}

 

}

项目结构