欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java編寫簡易貪吃蛇游戲

 更新時(shí)間:2020年05月18日 16:07:26   作者:小伙子渴望力量么  
這篇文章主要為大家詳細(xì)介紹了java編寫簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java編寫的貪吃蛇源碼,供大家參考,具體內(nèi)容如下

程序共包含以下兩個(gè)文件:

文件:ShellWin.java

import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.*;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class ShellWin extends JPanel implements Runnable{ //實(shí)現(xiàn)了鍵盤與鼠標(biāo)兩個(gè)接口
 int direction;
 int length;
 int score=0;
 boolean control=false;
 int[] xs=new int[400];    //蛇的個(gè)數(shù),xy,坐標(biāo)控制
 int[] ys=new int[400];
 int douX;int douY;
 Thread thread;
 public ShellWin()
 {
   setPreferredSize(new Dimension(600, 600));
  setLocation(100, 100);
  setBackground(Color.GREEN);
  thread=new Thread(this);     //為這個(gè)類添加一個(gè)線程
  create_snake();
  create_bean();
 }
 public void paintComponent(Graphics g)   //繪制
 {
  super.paintComponent(g);     //Jpanel內(nèi)的方法,起到清屏的作用
  g.drawString("分?jǐn)?shù):"+score, 50, 50);
  g.drawRect(0,0, 600, 600);
  show_snake(g);
  show_bean(g);
 }
 //能不能吃豆,能不能死
 void die()
 {
  JOptionPane.showMessageDialog(null, "game over", "游戲結(jié)束", JOptionPane.ERROR_MESSAGE);
 }
 void eat()
 {
  length++;
  this.score+=100;
  create_bean();
 }
 boolean out_bounds()
 {
  if(xs[0]==-10||xs[0]==600||ys[0]==-10||ys[0]==600)   //出界即死
  {
   return true;
  }
  return false;
 }
 void change_direction(int new_direction)      //控制方向
 {
  if(direction%2!=new_direction%2||direction==0)    // 2 4 3 1 上下左右
  {
   direction=new_direction;
  }
 }
 boolean eat_self()
 {
  for (int i = 1; i < length; i++) {
   if(xs[0]==xs[i]&&ys[0]==ys[i])
   {
    return true;
   }
  }
  return false;
 }
 boolean can_eat()
 {
  if(xs[0]==douX&&ys[0]==douY)
  {
   return true;
  }
  return false;
 }
 void create_snake()
 {
  direction=0;length=5;
  for (int i = 0; i < length; i++) {
   xs[i]=400;
   ys[i]=400+10*i;
  }
 }
 void create_bean()
 {
  douX=10*(int)(Math.random()*60);
  douY=10*(int)(Math.random()*60);
  for (int i = 0; i < length; i++) {
   if(xs[i]==douX&&ys[i]==douY)
   {
    create_bean();
    return;
   }
  }
 }
 void show_bean(Graphics g)     //仍然得要寫入到paintComponent方法內(nèi)
 {
  g.setColor(Color.RED);
  g.fillOval(douX, douY, 10, 10);
 }
 void crawl()
 {
   if(direction!=0)
  for (int i = length-1; i >0; i--) { // 2 4 3 1 上下左右
   xs[i]=xs[i-1];    //后一個(gè)替代前一個(gè) 4=3;
   ys[i]=ys[i-1];
  }
  switch (direction) {
  case 1:
   xs[0]=xs[0]+10;
   break;
  case 2:
   ys[0]=ys[0]-10;
   break;
  case 3:
   xs[0]=xs[0]-10;
   break;
  case 4:
   ys[0]=ys[0]+10;
   break;
  default:
   break;
  }
 }
 void show_snake(Graphics g)
 {
  for (int i = 0; i < length; i++) {
   g.setColor(Color.BLUE);
   if(i==0){
    g.drawOval(xs[i], ys[i], 10, 10);
    continue;
   }
   g.drawRect(xs[i], ys[i], 10, 10);   //蛇的長度與大小
  }
 }
 @Override
 public void run() {
  while(control)
  {
   try {    
    if(can_eat())
    {
     eat();
    }
    if(out_bounds())
    {
     die();
     return;
    }
    if(eat_self())
    {
     die();
     return;
    }
    crawl();
    Thread.sleep(200);
    repaint();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
class panel extends JPanel implements ActionListener,KeyListener{
  JButton startGame=new JButton("開始");
  JButton stopGame=new JButton("停止");
  Box box1;     //盒式布局
  panel(){
   setLayout(new FlowLayout());
    box1=Box.createHorizontalBox();
    box1.add(startGame);
    box1.add(Box.createHorizontalStrut(2));
    box1.add(stopGame);
    setSize(800,800);
    setBackground(Color.black);
   addKeyListener(this);     //為ShellWin 對(duì)象注冊一個(gè)偵聽器
   startGame.addActionListener(this);  //為開始按鈕添加偵聽器,this指代的是Actionistener這個(gè)類所創(chuàng)建的對(duì)象
   stopGame.addActionListener(this);  //為結(jié)束按鈕添加偵聽器,this指代的是Actionistener這個(gè)類所創(chuàng)建的對(duì)象
  }
  @Override
  public void actionPerformed(ActionEvent e) {
   if(e.getSource()==startGame)
   {
    this.requestFocus();  //將光標(biāo)添加到該控件中
    control=true;
    thread.start();    //線程開始
    //***********************************
    this.repaint(100,100, 600, 600);   
   }
   if(e.getSource()==stopGame)
   {
    this.requestFocus();  //將光標(biāo)添加到該控件中
    control=false;    //線程結(jié)束   
   }
  }
  @Override
  public void keyPressed(KeyEvent e) {
   switch (e.getKeyCode()) {
   case KeyEvent.VK_UP:
    change_direction(2);
    break;
   case KeyEvent.VK_DOWN:
    if(direction!=0)
    change_direction(4);
    break;
   case KeyEvent.VK_LEFT:
    change_direction(3);
    break;
   case KeyEvent.VK_RIGHT:
    change_direction(1);
    break;
   default:
    break;
   }
  }
  @Override
  public void keyReleased(KeyEvent e) {
   // TODO Auto-generated method stub
    
  }
  @Override
  public void keyTyped(KeyEvent e) {
   // TODO Auto-generated method stub
  }
  
 }
}

文件:ShellMain.java

import javax.swing.Box;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class ShellMain extends JFrame {
 ShellWin win=new ShellWin();
  ShellWin.panel pan=win.new panel();
  Box box,box2;
 ShellMain(){
   box2=Box.createHorizontalBox();
   box2.add(win);
   box=Box.createVerticalBox();
   box.add(pan.box1);
   box.add(Box.createVerticalStrut(8));
   box.add(box2);
  pan.add(box);
  setTitle("貪吃蛇");
  setSize(800,800);
  setVisible(true);
  setLayout(null);
  add(pan);
  setLocation(0,0);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 public static void main(String[] args) {
   new ShellMain();
 }
}

更多精彩游戲,請(qǐng)參考專題《java經(jīng)典小游戲》

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)

    這篇文章主要介紹了java 在file的尾部添加數(shù)據(jù)的兩種方法總結(jié)的相關(guān)資料,這里提供了兩種在file尾部添加數(shù)據(jù)的方法,希望能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟記錄

    SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟記錄

    MinIO是一個(gè)基于Apache License v2.0開源協(xié)議的對(duì)象存儲(chǔ)服務(wù),它兼容亞馬遜S3云存儲(chǔ)服務(wù)接口,非常適合于存儲(chǔ)大容量非結(jié)構(gòu)化的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Minio實(shí)現(xiàn)上傳文件的完整步驟,需要的朋友可以參考下
    2022-05-05
  • java封裝及四種權(quán)限修飾符詳解

    java封裝及四種權(quán)限修飾符詳解

    這篇文章主要介紹了java封裝及四種權(quán)限修飾符詳解,對(duì)屬性進(jìn)行封裝,使用戶不能直接輸入數(shù)據(jù),我們需要避免用戶再使用"對(duì)象.屬性"的方式對(duì)屬性進(jìn)行賦值
    2022-08-08
  • 非常全面的IReport的使用教程

    非常全面的IReport的使用教程

    iReport 是為JasperReports Library和JasperReports Server設(shè)計(jì)的報(bào)表可視化設(shè)計(jì)器。本教程給大家詳細(xì)介紹IReport的使用解析,感興趣的朋友一起看看吧
    2021-10-10
  • Java中的PowerMock使用實(shí)踐

    Java中的PowerMock使用實(shí)踐

    這篇文章主要介紹了Java中的PowerMock使用實(shí)踐,@PrepareForTest和@RunWith是成對(duì)出現(xiàn)的,一般@RunWith(PowerMockRunner.class),@PrepareForTest的值是引用的靜態(tài)方法或私有方法的類,需要的朋友可以參考下
    2023-12-12
  • 如何基于Springboot完成新增員工功能并設(shè)置全局異常處理器

    如何基于Springboot完成新增員工功能并設(shè)置全局異常處理器

    最近工作中遇到了做一個(gè)管理員工信息的功能,下面這篇文章主要給大家介紹了關(guān)于如何基于Springboot完成新增員工功能并設(shè)置全局異常處理器的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • SparkSQl簡介及運(yùn)行原理

    SparkSQl簡介及運(yùn)行原理

    Spark SQL就是將SQL轉(zhuǎn)換成一個(gè)任務(wù),提交到集群上運(yùn)行,類似于Hive的執(zhí)行方式。今天通過本文給大家分享SparkSQl簡介及運(yùn)行原理,感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • SpringMVC的詳細(xì)架構(gòu)你了解嘛

    SpringMVC的詳細(xì)架構(gòu)你了解嘛

    這篇文章主要為大家介紹了SpringMVC的詳細(xì)架構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • java通過jacob實(shí)現(xiàn)office在線預(yù)覽功能

    java通過jacob實(shí)現(xiàn)office在線預(yù)覽功能

    這篇文章主要為大家詳細(xì)介紹了java通過jacob實(shí)現(xiàn)office在線預(yù)覽功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java自定義封裝StringUtils常用工具類

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

    這篇文章主要為大家詳細(xì)介紹了java自定義封裝StringUtils常用工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03

最新評(píng)論