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

Java+swing實現(xiàn)經典貪吃蛇游戲

 更新時間:2022年01月27日 10:08:51   作者:小虛竹and掘金  
貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,有PC和手機等多平臺版本。既簡單又耐玩。本文將通過java的swing來實現(xiàn)這一游戲,需要的可以參考一下

前言

貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,有PC和手機等多平臺版本。既簡單又耐玩。該游戲通過控制蛇頭方向吃東西,從而使得蛇變得越來越長。

本程序是通過java的swing來實現(xiàn)《貪吃蛇大作戰(zhàn)》這款游戲。

主要需求

1、通過上下左右控制蛇的方向,尋找吃的東西,每吃一口就能得到一定的積分,蛇的身體會變長

2、蛇頭碰到自己的身體,則算失敗

主要設計

1、設置swing的窗體大小

2、隨機初始化蛇的位置和食物的位置,且食物不能落在蛇的身體上。

4、添加鍵盤監(jiān)聽器,監(jiān)聽上下左右的方向鍵,來控制蛇的上下左右運動

5、蛇運行時,頭向前走一步,增加一個頭部節(jié)點,去掉尾部節(jié)點。

6、蛇吃了一個食物后,蛇的尾部節(jié)點添加一個節(jié)點,食物消失。

7、食物每次被蛇吃掉后,要隨機再次生成一個新的食物節(jié)點。

8、有個計數(shù)器,統(tǒng)計蛇的長度和積分,吃一個食物,蛇的長度+1,積分+10

9、通過按空格開始/暫停游戲

功能截圖

代碼實現(xiàn)

啟動類

?
public class StartGame {
?
    public static void main(String[] args) {
        JFrame jf=new JFrame("貪吃蛇大作戰(zhàn)");
        jf.setBounds(100, 100, 905, 720);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        jf.add(new GamePanel());
        jf.setVisible(true);
    }
?
}

游戲核心類

public class GamePanel extends JPanel implements KeyListener,ActionListener{
	//蛇的數(shù)據結構
	static int i=0;
	int length;
	int[] snakex=new int[600];
	int[] snakey=new int[600];
	String fx;
	boolean isStart=false;
	boolean isfail=false;
	int lx,ly;//吃食物后多出來一個的坐標
	//目標的數(shù)據結構
	int foodx,foody;
	//隨機數(shù)
	Random random =new Random();
	//計時器
	Timer timer=new Timer(100, this);
	
	int score;
	
	public GamePanel(){
		init();
		//添加鍵盤監(jiān)聽器
		this.addKeyListener(this);
		//必須設置可以獲得焦點才能監(jiān)聽到鍵盤事件
		this.setFocusable(true);
		timer.start();
	}
	public void init(){
		score=0;
		length=3;
		snakex[0]=100;snakey[0]=100;
		snakex[1]=75;snakey[1]=100;
		snakex[2]=50;snakey[2]=100;
		fx="R";
		foodx=25+25*random.nextInt(850/25);
		foody=75+25*random.nextInt(600/25);
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);//清屏,這樣不會閃爍
		this.setBackground(Color.white);
		Data.headicno.paintIcon(this, g, 25, 11);
		g.setColor(new Color(104,197,107));
		g.fillRect(25, 75, 850, 600);
		//蛇頭的繪制
		if(fx.equals("U")){
			Data.upicno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("D")){
			Data.downicno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("L")){
			Data.lefticno.paintIcon(this, g, snakex[0], snakey[0]);
		}else if(fx.equals("R")){
			Data.righticno.paintIcon(this, g, snakex[0], snakey[0]);
		}
		//蛇身體繪制
		for(int i=1;i<length;++i){
			Data.bodyicno.paintIcon(this, g, snakex[i], snakey[i]);
		}
		//食物的繪制
		Data.foodicon.paintIcon(this, g, foodx, foody);
		//暫停開始狀態(tài)的繪制
		if(isStart==false){
			g.setFont(new Font("微軟雅黑",Font.BOLD,40));
			g.setColor(Color.WHITE);
			g.drawString("按空格開始/暫停游戲", 275, 350);
		}
		//失敗情況的繪制
		if(isfail==true){
			g.setFont(new Font("微軟雅黑",Font.BOLD,40));
			g.setColor(Color.red);
			g.drawString("失敗!按空格重新開始", 275, 350);
		}
		//積分的繪制
		g.setColor(Color.PINK);
		g.setFont(new Font("微軟雅黑", Font.ITALIC, 15));
		g.drawString("長度: "+length, 800, 30);
		g.drawString("積分: "+score, 800, 55);
	}
	//實現(xiàn)鍵盤監(jiān)聽的接口方法
	@Override
	public void keyPressed(KeyEvent e) {
		int keycode=e.getKeyCode();
		//空格鍵暫?;蛘咧亻_
		if(keycode==KeyEvent.VK_SPACE){
			if(isfail==true){
				System.out.println(1);
				init();
				isfail=false;
			}
			else{
				System.out.println(2);
				isStart=!isStart;
				repaint();
			}
		}
		//上下左右
		if(keycode==KeyEvent.VK_UP){
			fx="U";
		}else if(keycode==KeyEvent.VK_DOWN){
			fx="D";
			//System.out.println("down");
		}else if(keycode==KeyEvent.VK_LEFT){
			fx="L";
		}else if(keycode==KeyEvent.VK_RIGHT){
			fx="R";
		}
	}
	@Override
	public void keyReleased(KeyEvent e) {}
	@Override
	public void keyTyped(KeyEvent e){}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(isStart==true&&isfail==false){
			
			//身體移動
			lx=snakex[length-1];
			ly=snakey[length-1];
			for(int i=length-1;i>0;--i){
				snakex[i]=snakex[i-1];
				snakey[i]=snakey[i-1];
			}
			//頭移動
			if(fx=="U"){
				snakey[0]-=25;
				if(snakey[0]<75)snakey[0]=650;
			}else if(fx=="D"){
				snakey[0]+=25;
				if(snakey[0]>650)snakey[0]=75;
			}else if(fx=="L"){
				snakex[0]-=25;
				if(snakex[0]<25)snakex[0]=850;
			}else if(fx=="R"){
				snakex[0]+=25;
				if(snakex[0]>850)snakex[0]=25;
			}
			//失敗判定
			for(int i=1;i<length;++i){
				if(snakex[i]==snakex[0]&&snakey[i]==snakey[0]){
					isfail=true;
				}
			}
			//吃食物
			if(snakex[0]==foodx&&snakey[0]==foody){
				length++;
				score+=10;
				snakex[length-1]=lx;
				snakey[length-1]=ly;
				foodx=25+25*random.nextInt(850/25);
				foody=75+25*random.nextInt(600/25);
			}
			repaint();
		}
		
	}
	
}

總結

通過此次的《貪吃蛇大作戰(zhàn)》游戲實現(xiàn),讓我對swing的相關知識有了進一步的了解,對java這門語言也有了比以前更深刻的認識。

java的一些基本語法,比如數(shù)據類型、運算符、程序流程控制和數(shù)組等,理解更加透徹。java最核心的核心就是面向對象思想,對于這一個概念,終于悟到了一些。

以上就是Java+swing實現(xiàn)經典貪吃蛇游戲的詳細內容,更多關于Java swing貪吃蛇的資料請關注腳本之家其它相關文章!

相關文章

  • 手擼一個 spring-boot-starter的全過程

    手擼一個 spring-boot-starter的全過程

    這篇文章主要介紹了手擼一個 spring-boot-starter的全過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Dubbo服務校驗參數(shù)的解決方案

    Dubbo服務校驗參數(shù)的解決方案

    這篇文章主要介紹了Dubbo服務如何優(yōu)雅的校驗參數(shù),Dubbo框架本身是支持參數(shù)校驗的,同時也是基于JSR303去實現(xiàn)的,今天通過示例代碼介紹下詳細實現(xiàn)過程,需要的朋友可以參考下
    2022-03-03
  • List集合對象中按照不同屬性大小排序的實例

    List集合對象中按照不同屬性大小排序的實例

    下面小編就為大家?guī)硪黄狶ist集合對象中按照不同屬性大小排序的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Collection stream使用示例詳解

    Collection stream使用示例詳解

    這篇文章主要介紹了Collection stream使用示例,stream流幾乎可以完成對集合的任意操作,映射、去重、分組、排序、過濾等
    2022-12-12
  • SpringCloudAlibaba Nacos開啟鑒權解決跳過登錄頁面問題

    SpringCloudAlibaba Nacos開啟鑒權解決跳過登錄頁面問題

    對于Nacos,如果需要開啟權限控制,可以在 Nacos 控制臺上進行配置,本文主要介紹了SpringCloudAlibaba Nacos開啟鑒權解決跳過登錄頁面問題,感興趣的可以了解一下
    2023-10-10
  • linux部署出現(xiàn)java文件操作報錯:java.io.FileNotFoundException解決辦法

    linux部署出現(xiàn)java文件操作報錯:java.io.FileNotFoundException解決辦法

    這篇文章主要g介紹了linux部署出現(xiàn)java文件操作報錯:java.io.FileNotFoundException解決的相關資料,這個錯誤通常表示你的Spring Boot應用程序無法找到指定的文本文件,需要的朋友可以參考下
    2023-12-12
  • Java基礎之類型封裝器示例

    Java基礎之類型封裝器示例

    這篇文章主要介紹了Java基礎之類型封裝器,結合實例形式分析了java類型封裝相關原理與操作技巧,需要的朋友可以參考下
    2019-08-08
  • Spring中的@ComponentScan注解使用詳解

    Spring中的@ComponentScan注解使用詳解

    這篇文章主要介紹了Spring中的@ComponentScan注解使用詳解,@ComponentScan 注解的作用就是根據指定的掃描路徑,把路徑中符合掃描規(guī)則的類裝配到 Spring 容器中,需要的朋友可以參考下
    2024-01-01
  • 使用Java實現(xiàn)百萬Excel數(shù)據導出

    使用Java實現(xiàn)百萬Excel數(shù)據導出

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)百萬Excel數(shù)據導出,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-03-03
  • Web三大組件之Filter,Listener和Servlet詳解

    Web三大組件之Filter,Listener和Servlet詳解

    這篇文章主要為大家詳細介紹了Web三大組件之Filter,Listener和Servlet,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論

定兴县| 龙泉市| 昌邑市| 保亭| 连山| 遂川县| 三门峡市| 贵港市| 忻州市| 洛扎县| 万盛区| 宁南县| 永安市| 外汇| 蒲城县| 郑州市| 阿尔山市| 奉新县| 合阳县| 榆中县| 灵山县| 建平县| 渭源县| 邓州市| 金昌市| 武乡县| 贵德县| 长春市| 卫辉市| 安图县| 建水县| 霸州市| 巴林左旗| 讷河市| 洮南市| 武穴市| 长寿区| 汽车| 资兴市| 丰镇市| 巴彦淖尔市|