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

java實(shí)現(xiàn)簡易貪吃蛇游戲

 更新時(shí)間:2020年12月30日 18:07:55   作者:啊哈灬  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡易貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了java實(shí)現(xiàn)貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.封裝貪吃蛇身體,抽象出貪吃蛇結(jié)點(diǎn)類Node,結(jié)點(diǎn)用ArrayList存儲(chǔ)

import java.awt.*;

public class Node {
 private int x;
 private int y;

 public Node(int x, int y) {
  this.x = x;
  this.y = y;
 }

 public Node(){
 }

 public int getX() {
  return x;
 }

 public void setX(int x) {
  this.x = x;
 }

 public int getY() {
  return y;
 }

 public void setY(int y) {
  this.y = y;
 }

 public void drawNode(int i, Graphics g){
  if(i==0){//頭繪制成圓
   g.fillOval(this.x,this.y,20-1,20-1);
  }else{//身體繪制成矩形
   g.fillRect(this.x,this.y,20-1,20-1);
  }
 }
}

2.主類

import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class Snake extends Frame implements KeyListener , ActionListener {
 //初始蛇移動(dòng)方向
  String fx="right";
  //碰撞判斷
  boolean is_attack=false;

 private ArrayList<Node> body=new ArrayList<Node>();
 {
  body.add(new Node(160, 60));
  body.add(new Node(140, 60));
  body.add(new Node(120, 60));
  int x=(int)(Math.random()*580);
  int y=(int)(Math.random()*580);
  body.add(new Node(x-x%20,y-y%20));
 }

 /**
  * 貪吃蛇
  * 1、窗體
  * 位置(坐標(biāo)) * 標(biāo)題 * 大小 * 背景顏色 * 窗體的大小不可變 * 可見
  * 2、繪制蛇
  */
 public Snake(){
 //窗體標(biāo)題
  super.setTitle("貪吃蛇游戲");
  //窗體位置
  super.setLocation(100,100);
  //窗體大小
  super.setSize(600,600);
  //背景顏色
  super.setBackground(new Color(252,255, 208));
  //設(shè)置窗體可見
  super.setVisible(true);
  // 窗體大小不可變
  super.setResizable(false);
  //給關(guān)閉按鈕添加事件
  super.addWindowListener(new WindowAdapter() {
   @Override
   public void windowClosing(WindowEvent e) {
    System.exit(0);
   }
  });
  //獲取聚焦
  super.setFocusable(true);
  //添加鍵盤監(jiān)聽
  super.addKeyListener(this);
  start();
 }

 public void start(){
  while(!is_attack){
   try{
    Thread.sleep(200);
   }catch (Exception e){
    e.printStackTrace();
   }
   //碰撞檢測
   attack_check();
   //刷新窗體,調(diào)用paint方法
   repaint();
  }

 }
 //碰撞檢測
 public void attack_check(){
  //撞到身體檢測
  for(int i=1;i<body.size()-1;i++){
   if (body.get(0).getX()==body.get(i).getX()&&body.get(0).getY()==body.get(i).getY()){
    is_attack=true;
   }
  }
  //撞到邊界
  if(body.get(0).getX()==0||body.get(0).getX()==600||body.get(0).getY()==0||body.get(0).getY()==600){
   is_attack=true;
  }
 }
 //移動(dòng)貪吃蛇
 public void move(){
  //吃到食物判斷,頭結(jié)點(diǎn)坐標(biāo)和食物坐標(biāo)相等
  if ((body.get(0).getX()==body.get(body.size()-1).getX())&&(body.get(0).getY()==body.get(body.size()-1).getY())) {
   //出現(xiàn)下一個(gè)食物
   int x=(int)(Math.random() * 580);
   int y=(int)(Math.random() * 580);
   body.get(body.size()-1).setX(x-x%20);
   body.get(body.size()-1).setY(y-y%20);

   //蛇身加一個(gè)結(jié)點(diǎn)
   body.add(body.size()-1,new Node(0,0));
  }
  //移動(dòng)頭尾節(jié)點(diǎn),使貪吃蛇移動(dòng)
  Node node=body.get(0);
  if (fx.equals("up")){
   node=new Node(node.getX(),node.getY()-20);
   //加頭
   body.add(0,node);
   //去尾
   body.remove(body.size()-2);
  }if (fx.equals("down")){
   node=new Node(node.getX(),node.getY()+20);
   //加頭
   body.add(0,node);
   //去尾
   body.remove(body.size()-2);
  }if (fx.equals("right")){
   node=new Node(node.getX()+20,node.getY());
   //加頭
   body.add(0,node);
   //去尾
   body.remove(body.size()-2);
  }if (fx.equals("left")){
   node=new Node(node.getX()-20,node.getY());
   //加頭
   body.add(0,node);
   //去尾
   body.remove(body.size()-2);
  }

 }
 /**
  * 展示窗體|每一次刷新窗體都會(huì)執(zhí)行的方法
  * @param g 畫筆
  */
 @Override
 public void paint(Graphics g) {
  g.setColor(new Color(105, 78,255));
  for(int i=0; i<body.size(); i++){
   body.get(i).drawNode(i,g);
  }
  move();
  //游戲結(jié)束繪制
  if(is_attack){
   g.setColor(new Color(255, 67, 40));
   Font ft = new Font("宋體", Font.PLAIN, 40);
   g.setFont(ft);
   g.drawString("很遺憾,游戲結(jié)束",150,300);
  }
 }


 //事件監(jiān)聽
 @Override
 public void actionPerformed(ActionEvent e) {

 }
 @Override
 public void keyPressed(KeyEvent e) {
  int keyCode=e.getKeyCode();
  if(keyCode==KeyEvent.VK_UP){
   fx="up";
  }if (keyCode==KeyEvent.VK_DOWN){
   fx="down";
  }if (keyCode==KeyEvent.VK_LEFT){
   fx="left";
  }if (keyCode==KeyEvent.VK_RIGHT){
   fx="right";
  }
 }

 @Override
 public void keyTyped(KeyEvent e) {
 }
 @Override
 public void keyReleased(KeyEvent e) {
 }

 /**
  * main方法
  * @param args
  */
 public static void main(String[] args) {
  new Snake();
 }

}

運(yùn)行圖片

游戲結(jié)束

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

相關(guān)文章

  • Nacos+Spring Cloud Gateway動(dòng)態(tài)路由配置實(shí)現(xiàn)步驟

    Nacos+Spring Cloud Gateway動(dòng)態(tài)路由配置實(shí)現(xiàn)步驟

    Nacos最近項(xiàng)目一直在使用,本文通過gateway、nacos-consumer、nacos-provider三個(gè)簡單模塊來展示:Nacos下動(dòng)態(tài)路由配置,,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Mybatis詳解在注解sql時(shí)報(bào)錯(cuò)的解決方法

    Mybatis詳解在注解sql時(shí)報(bào)錯(cuò)的解決方法

    MyBatis-Plus 是一個(gè) Mybatis 增強(qiáng)版工具,在 MyBatis 上擴(kuò)充了其他功能沒有改變其基本功能,為了簡化開發(fā)提交效率而存在,本篇文章帶你看看在注解sql時(shí)所報(bào)出的錯(cuò)誤解決
    2022-03-03
  • spring boot整合mybatis使用c3p0數(shù)據(jù)源連接mysql

    spring boot整合mybatis使用c3p0數(shù)據(jù)源連接mysql

    這篇文章主要為大家詳細(xì)介紹了spring boot整合mybatis使用c3p0數(shù)據(jù)源連接mysql,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 基于RecyclerChart的KLine的繪制Scale詳解

    基于RecyclerChart的KLine的繪制Scale詳解

    這篇文章主要為大家詳細(xì)介紹了基于RecyclerChart實(shí)現(xiàn)KLine繪制Scale的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • java LinkedList的實(shí)例詳解

    java LinkedList的實(shí)例詳解

    這篇文章主要介紹了java LinkedList的實(shí)例詳解的相關(guān)資料,通過本文希望大家能徹底了解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Java gbk轉(zhuǎn)utf-8

    Java gbk轉(zhuǎn)utf-8

    本文主要介紹了Java gbk轉(zhuǎn)utf-8的方法,具有一定的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • Spring boot如何集成kaptcha并生成驗(yàn)證碼

    Spring boot如何集成kaptcha并生成驗(yàn)證碼

    這篇文章主要介紹了Spring boot如何集成kaptcha并生成驗(yàn)證碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java配置DBeaver的詳細(xì)步驟

    Java配置DBeaver的詳細(xì)步驟

    DBeaver是一個(gè)集成的數(shù)據(jù)庫客戶端工具,需要java語言支持,所以安裝之前需要配置JDK環(huán)境,這篇文章主要介紹了Java配置DBeaver的詳細(xì)步驟,需要的朋友可以參考下
    2021-03-03
  • idea新建Springboot項(xiàng)目,設(shè)置默認(rèn)maven和jdk版本方式

    idea新建Springboot項(xiàng)目,設(shè)置默認(rèn)maven和jdk版本方式

    這篇文章主要介紹了idea新建Springboot項(xiàng)目,設(shè)置默認(rèn)maven和jdk版本方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的StringBuilder性能測試

    Java中的StringBuilder性能測試

    這篇文章主要介紹了Java中的StringBuilder性能測試,本文包含測試代碼和測試結(jié)果,最后得出結(jié)論,需要的朋友可以參考下
    2014-09-09

最新評論

县级市| 七台河市| 淳安县| 元阳县| 九江县| 高雄市| 天柱县| 冀州市| 望城县| 名山县| 丁青县| 乌兰察布市| 梨树县| 河南省| 兴山县| 巴东县| 桂林市| 博湖县| 岢岚县| 全椒县| 朝阳县| 嫩江县| 青阳县| 富阳市| 普陀区| 滦平县| 隆化县| 都匀市| 邓州市| 阿鲁科尔沁旗| 吴堡县| 花莲市| 河北区| 沧源| 哈巴河县| 宁夏| 天峻县| 开阳县| 乐安县| 襄垣县| 甘孜县|