最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的示例代碼

 更新時(shí)間:2022年07月21日 16:31:17   作者:陳橘又青  
本文主要介紹了Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

 大家好,今天嘗試用swing技術(shù)寫(xiě)一個(gè)貪吃蛇大作戰(zhàn)小游戲,供大家參考。

 效果展示

效果展示

一、游戲界面

二、得分情況

 項(xiàng)目介紹

項(xiàng)目背景

“貪吃蛇大作戰(zhàn)”游戲是一個(gè)經(jīng)典的游戲,它因操作簡(jiǎn)單、娛樂(lè)性強(qiáng),自從計(jì)算機(jī)實(shí)現(xiàn)以來(lái),深受廣大電腦玩家的喜愛(ài),本項(xiàng)目基于Java技術(shù),開(kāi)發(fā)了一個(gè) 操作簡(jiǎn)單、界面美觀、功能較齊全 的“貪吃蛇”游戲。通過(guò)本游戲的開(kāi)發(fā),達(dá)到學(xué)習(xí)Java技術(shù)和熟悉軟件開(kāi)發(fā)流程的目的。

總體需求

 本系統(tǒng)主要是完成貪吃蛇游戲的基本操作,用戶可自己練習(xí)和娛樂(lè)。需要滿足以下幾點(diǎn)要求:

(1)利用方向鍵來(lái)改變蛇的運(yùn)行方向。
(2)空格鍵暫停或繼續(xù)游戲,并在隨機(jī)的地方產(chǎn)生食物。
(3)吃到食物就變成新的蛇體(蛇身長(zhǎng)度變長(zhǎng),游戲繼續(xù))。

實(shí)現(xiàn)過(guò)程

(1)繪制窗體對(duì)象。
(2)靜態(tài)UI設(shè)計(jì)(包括小蛇,食物,游戲區(qū)域和標(biāo)題區(qū)域)。
(3)使用鍵盤(pán)監(jiān)聽(tīng)事件和定時(shí)器實(shí)現(xiàn)小蛇的移動(dòng)。
(4)小蛇與食物碰撞的實(shí)現(xiàn)。
(5)定義變量存放小蛇長(zhǎng)度,遍歷數(shù)組實(shí)現(xiàn)小蛇身體的增加功能。
(6)退出條件:當(dāng)游戲積分到達(dá)指定分?jǐn)?shù),游戲退出。

代碼展示

主類 :Demo類

package Demo;
/**
 * 1.畫(huà)出窗體對(duì)象
 * 
 * 
 * @author 青00-Java
 *
 */
public class Demo0 {
 
}

MyPanel類 構(gòu)造方法

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;
//畫(huà)布類
public class MyPanel extends JPanel implements KeyListener,ActionListener{//繼承
	private static final Component This = null;
//鍵盤(pán)監(jiān)聽(tīng)交互接口
int length;
int score;
int[] snakeX=new int[500];//坐標(biāo)
int[] snakeY=new int[500];
String fx;
boolean ifStart=false;
//定時(shí)器
Timer timer =new Timer(100,this);
int foodx;
int foody;
Random random =new Random();
 
public MyPanel(){
	init();
	//添加監(jiān)聽(tīng)事件
	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){//畫(huà)筆對(duì)象
		 super.paintComponent(g);
		 //繪制頂部的標(biāo)題
		 new ImageIcon("C:/Users/Desktop/img/title2.png").paintIcon(this,g,25,11);//創(chuàng)建對(duì)象
		 //繪制游戲區(qū)域
		 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]);
		 }
		 //游戲的提示語(yǔ)
		 if(ifStart==false){
			 g.setColor(Color.white);
			 g.setFont(new Font("微軟雅黑",Font.BOLD,40));
			 g.drawString("按壓空格鍵繼續(xù)游戲", 550,500);
			 g.drawString("無(wú)盡模式", 650,400);
		 }
		 //畫(huà)出食物的位置
		 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();
}

定時(shí)器執(zhí)行方法

@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("當(dāng)前食物坐標(biāo)("+foodx+",");
				System.out.print(foody+")");
				System.out.println("|||當(dāng)前分?jǐn)?shù):"+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("無(wú)盡版貪吃蛇");
		frame.setSize(1500, 900);
		frame.setLocationRelativeTo(null);//居中顯示
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setResizable(true);
		frame.add(new MyPanel());
		frame.setVisible(true);
	}
 
}

項(xiàng)目結(jié)構(gòu)

本程序用于初學(xué)者學(xué)習(xí),共封裝三個(gè)類,分別是Demo類,MyPanel類,框架Ui類,結(jié)構(gòu)簡(jiǎn)單,所有方法均在MyPanel類中實(shí)現(xiàn)。 

總結(jié)

本游戲的設(shè)計(jì)思路類似于游戲“貪吃蛇大作戰(zhàn)”,程序在一些功能的實(shí)現(xiàn)上還存在許多不足,但該項(xiàng)目的實(shí)現(xiàn)對(duì)Java新手的實(shí)戰(zhàn)能力有很大的提升。

在使用Java編寫(xiě)該項(xiàng)目時(shí)遇到了很多問(wèn)題,在解決問(wèn)題時(shí),可以對(duì)java的面向?qū)ο缶幊逃懈由钊氲睦斫夂驼J(rèn)識(shí)。

本項(xiàng)目在一定程度上還有缺陷,僅用于初學(xué)者學(xué)習(xí),歡迎各位指正。

到此這篇關(guān)于Java實(shí)現(xiàn)貪吃蛇大作戰(zhàn)小游戲的示例代碼的文章就介紹到這了,更多相關(guān)Java 貪吃蛇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決Spring Security中AuthenticationEntryPoint不生效相關(guān)問(wèn)題

    解決Spring Security中AuthenticationEntryPoint不生效相關(guān)問(wèn)題

    這篇文章主要介紹了解決Spring Security中AuthenticationEntryPoint不生效相關(guān)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring Cache整合Redis實(shí)現(xiàn)方法詳解

    Spring Cache整合Redis實(shí)現(xiàn)方法詳解

    這篇文章主要介紹了Spring Cache整合Redis實(shí)現(xiàn)方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • java自定義封裝StringUtils常用工具類

    java自定義封裝StringUtils常用工具類

    這篇文章主要為大家詳細(xì)介紹了java自定義封裝StringUtils常用工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作

    springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作

    這篇文章主要介紹了springboot攔截器過(guò)濾token,并返回結(jié)果及異常處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java 實(shí)現(xiàn)Comparable接口排序,升序、降序、倒敘

    java 實(shí)現(xiàn)Comparable接口排序,升序、降序、倒敘

    這篇文章主要介紹了java 實(shí)現(xiàn)Comparable接口排序,升序、降序、倒敘,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • IDEA中實(shí)現(xiàn)springboot熱部署方式

    IDEA中實(shí)現(xiàn)springboot熱部署方式

    在IDEA中實(shí)現(xiàn)SpringBoot的熱部署可以通過(guò)修改設(shè)置來(lái)完成,首先在設(shè)置中搜索Compiler,并勾選Build project automatically,然后進(jìn)入Advanced Settings,勾選Allow auto-make to start even if developed application is currently running
    2024-09-09
  • 解決阿里云OSS使用URL無(wú)法訪問(wèn)圖片的兩種方法

    解決阿里云OSS使用URL無(wú)法訪問(wèn)圖片的兩種方法

    這篇文章主要介紹了解決阿里云OSS使用URL無(wú)法訪問(wèn)圖片的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • RocketMq深入分析講解兩種削峰方式

    RocketMq深入分析講解兩種削峰方式

    當(dāng)上游調(diào)用下游服務(wù)速率高于下游服務(wù)接口QPS時(shí),那么如果不對(duì)調(diào)用速率進(jìn)行控制,那么會(huì)發(fā)生很多失敗請(qǐng)求,通過(guò)消息隊(duì)列的削峰方法有兩種,這篇文章主要介紹了RocketMq深入分析講解兩種削峰方式
    2023-01-01
  • java讀取PHP接口數(shù)據(jù)的實(shí)現(xiàn)方法

    java讀取PHP接口數(shù)據(jù)的實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇java讀取PHP接口數(shù)據(jù)的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)

    JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法)

    這篇文章主要介紹了JAVA時(shí)間戳-Calendar類使用(包括set,get,add方法),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評(píng)論

汉阴县| 合作市| 康保县| 英吉沙县| 岫岩| 龙口市| 垫江县| 天津市| 布拖县| 巴青县| 景宁| 和田市| 南岸区| 福海县| 柳州市| 道孚县| 东海县| 耿马| 丁青县| 洛隆县| 嘉黎县| 三台县| 义乌市| 广宗县| 太保市| 南投市| 全州县| 蛟河市| 三明市| 乌拉特后旗| 东城区| 新蔡县| 大渡口区| 自治县| 淮南市| 张家川| 中阳县| 定安县| 屏山县| 尚志市| 临洮县|