> Java > java지도 시간 > 본문

Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법

PHPz
풀어 주다: 2023-05-19 14:52:14
앞으로
2612명이 탐색했습니다.

효과 표시

Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법

효과 표시

1. 게임 인터페이스

Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법

2. 점수

Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법

프로젝트 소개

프로젝트 배경

"Glutty 게임 "Snake Battle"은 A입니다. 이 프로젝트는 Java 기술을 기반으로 하며 간단한 조작, 아름다운 인터페이스 및 완벽한 기능을 갖춘 "스네이크" 게임을 개발했습니다. "게임. 이 게임은 Java 기술을 배우고 소프트웨어 개발 프로세스를 이해하는 데 도움을 주기 위해 개발되었습니다.

전체 요구 사항

이 시스템은 주로 스네이크 게임의 기본 작업을 완료하는 데 사용되며 사용자는 스스로 연습하고 즐길 수 있습니다. 다음 요구 사항이 충족되어야 합니다.

(1) 방향 키를 사용하여 뱀의 실행 방향을 변경합니다.
(2) 스페이스 바는 게임을 일시 중지하거나 재개하고 임의의 장소에 음식을 생성합니다.
(3) 음식을 먹은 후 새로운 뱀 몸으로 변합니다(뱀 몸의 길이가 길어지며 게임이 계속됩니다).

구현 과정

(1) 폼 객체를 그립니다.
(2) 정적 UI 디자인(뱀, 음식, 게임 영역 및 타이틀 영역 포함).
(3) 키보드 청취 이벤트와 타이머를 사용하여 뱀의 움직임을 구현합니다.
(4) 작은 뱀과 음식의 충돌 구현.
(5) 뱀의 길이를 저장할 변수를 정의하고, 배열을 순회하여 뱀의 몸통을 늘리는 기능을 구현합니다.
(6) 종료 조건: 게임 포인트가 지정된 점수에 도달하면 게임이 종료됩니다.

코드 표시

메인 클래스: 데모 클래스

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
		
	}
}
로그인 후 복사

Framework 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);
	}
 
}
로그인 후 복사

프로젝트 구조

Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법

위 내용은 Java로 Snake War 미니 게임을 구현하는 코드를 작성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!