日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java超级简单贪吃蛇_java实现简易贪吃蛇游戏

發(fā)布時(shí)間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java超级简单贪吃蛇_java实现简易贪吃蛇游戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文實(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 body=new ArrayList();

{

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();

}

//碰撞檢測(cè)

attack_check();

//刷新窗體,調(diào)用paint方法

repaint();

}

}

//碰撞檢測(cè)

public void attack_check(){

//撞到身體檢測(cè)

for(int i=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.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é)束

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

總結(jié)

以上是生活随笔為你收集整理的java超级简单贪吃蛇_java实现简易贪吃蛇游戏的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。