`

java写贪吃蛇

阅读更多

代码下载

最近学习了Java的贪吃蛇的制作方法,重新回顾了一下Java的窗口知识,下面就讲一下它的流程吧:

一、首先创建并设置窗口的属性:



 然后设置窗口是显示出来的:



 二、窗口创建完成后就要在窗口加一个画布:



 并添加画布基本属性:



 在main方法中调用



 加入图片装饰

 

三、画布完成后就要设置蛇的初始化状态

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
/**
 * Created by Taoyongpan on 2017/3/23.
 */
public class SnakePanel extends JPanel implements KeyListener,ActionListener{

    ImageIcon body = new ImageIcon("img/body.png");
ImageIcon food = new ImageIcon("img/food.png");
ImageIcon title = new ImageIcon("img/title.jpg");
ImageIcon up = new ImageIcon("img/up.png");
ImageIcon down = new ImageIcon("img/down.png");
ImageIcon left = new ImageIcon("img/left.png");
ImageIcon right = new ImageIcon("img/right.png");
    int[] snakex = new int[750];
    int[] snakey = new int[750];
//随机产生食物
Random random = new Random();
    int foodx = random.nextInt(34)*25+25;
    int foody = random.nextInt(24)*25+75;
//贪吃蛇长度
int len = 3;
//得分
int score = 0;
//贪吃蛇速度
int speed = 0;
//贪吃蛇方向
String fangxiang = "R";//R向右,L向左,U向上,D向下
//默认游戏为不开始
boolean isStarted = false;
//判断游戏是否结束
boolean isFailed = false;
Timer timer = new Timer(100,this);
//重新构造
public SnakePanel(){
        //获得焦点
this.setFocusable(true);
//添加键盘监听
this.addKeyListener(this);
setup();
timer.start();
}

    public void paint(Graphics g){
        //调用paint方法
super.paint(g);
        this.setBackground(Color.WHITE);
title.paintIcon(this,g,25,11);
//画一个方框
g.fillRect(25,75,850,600);
//画蛇头
if(fangxiang.equals("R")){
            right.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("L")){
            left.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("U")){
            up.paintIcon(this,g,snakex[0],snakey[0]);
}else if(fangxiang.equals("D")){
            down.paintIcon(this,g,snakex[0],snakey[0]);
}
        //画蛇身体
for(int i = 1; i < len; i++){
            body.paintIcon(this,g,snakex[i],snakey[i]);
}
        //设置开始的提示语句
if(!isStarted){
            g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.BOLD,30));
g.drawString("Press Space to Start/Stop",300,300);
}
        //设置失败时候的提示语句
if (isFailed){
            g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.BOLD,30));
g.drawString("Game over,Press Space to ReStart",300,300);
}
        //添加食物
food.paintIcon(this,g,foodx,foody);
g.setColor(Color.WHITE);
g.setFont(new Font("arial",Font.PLAIN,20));
g.drawString("Score:"+score,750,30);
g.drawString("Length:"+len,750,50);
}
    //初始化蛇
public void setup(){

        isFailed = false;
isStarted = false;
len = 3;
//默认方向为R
fangxiang = "R";
snakex[0] = 100;
snakey[0] = 100;
snakex[1] = 75;
snakey[1] = 100;
snakex[2] = 50;
snakey[2] = 100;
}

    //在源组件上按下一个键然后释放该键后被调用
@Override
public void keyTyped(KeyEvent e) {

    }
    //在源组件上按下一个键后被调用
@Override
public void keyReleased(KeyEvent e) {

    }

    // 在源组件上释放一个键后被调用
@Override
public void keyPressed(KeyEvent e) {
        int keyCode = e.getKeyCode();
//敲空格键
/**
         * VK_HOME         HomeVK_CONTROL                  控制键
VK_END            EndVK_SHIFT                       shiftVK_PGUP          page upVK_BACK_SPACE             退格键
VK_PGDN          page downVK_CAPS_LOCK              大小写锁定键
VK_UP              上箭头                        VK_NUM_LOCK                小键盘锁定键
VK_DOWN         下箭头                           VK_ENTER                      回车键
VK_LEFT           左箭头                         VK_UNDEFINED                未知键
VK_RIGHT          右箭头                         VK_F1--VK_F12                F1 -- F12
           VK_ESCAPE       EscVK_0 --VK_9                    0 --- 9
           VK_TAB             TabVK_A --VK_Z                    A----Z
         */
if(keyCode == KeyEvent.VK_SPACE){
            if (isFailed)
            {
                setup();
}else {
                isStarted = !isStarted;
}
            repaint();
}else if (keyCode == KeyEvent.VK_UP && fangxiang != "D"){
            fangxiang = "U";
}else if (keyCode == KeyEvent.VK_DOWN&& fangxiang != "U"){
            fangxiang = "D";
}else if (keyCode == KeyEvent.VK_LEFT&& fangxiang != "R"){
            fangxiang = "L";
}else if (keyCode == KeyEvent.VK_RIGHT&& fangxiang != "L"){
            fangxiang = "R";
}
    }

    //就像一个闹钟一样
/**
     * 这是一个事件监听器,可以处理类似单击鼠标时触发的事件
* ActionEvent就是一个事件类,传入的e就是该事件的对象
* @param e
*/
@Override
public void actionPerformed(ActionEvent e) {
        //再定义一个闹钟
timer.start();
//移动数据
if(isStarted&&!isFailed){
            //移动身体
for (int i = len ; i > 0 ; i--){
                snakex[i] = snakex[i-1];
snakey[i] = snakey[i-1];
}
            //移动头
if(fangxiang.equals("R")){
                snakex[0] = snakex[0] + 25;
                if (snakex[0] >850){
                    isFailed = true;
//snakex[0] = 25;
}
            }else if(fangxiang.equals("L")){
                snakex[0] = snakex[0] - 25;
                if (snakex[0] < 25){
                    //snakex[0] = 850;
isFailed = true;
}
            }else if(fangxiang.equals("U")){
                snakey[0] = snakey[0] - 25;
                if (snakey[0] <75 ){
                    //snakey[0] = 650;
isFailed = true;
}
            }else if(fangxiang.equals("D")){
                snakey[0] = snakey[0] + 25;
                if(snakey[0] > 650){
                    //snakey[0] = 75;
isFailed = true;
}
            }
            if(snakex[0] == foodx&&snakey[0] == foody){
                len++;
score++;
foodx = random.nextInt(34)*25+25;
foody = random.nextInt(24)*25+75;
}
            for (int i= 1;i<len;i++){
                if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {
                    isFailed = true;
}
            }
        }
        //repaint()
repaint();
}
}

  • 大小: 19.2 KB
  • 大小: 19.2 KB
  • 大小: 5.1 KB
  • 大小: 1.5 KB
  • 大小: 6.1 KB
  • 大小: 6.1 KB
  • 大小: 20.3 KB
分享到:
评论

相关推荐

    java写贪吃蛇代码

    运用简单的方法写的贪吃蛇,其实像这种小游戏,只要认真,找一些小视频都能学会的,要是你下载了,如果没看懂的话,是可以私密我要视频,

    java写的简单的贪吃蛇含源码

    总之,这个基于Java和Swing的贪吃蛇项目是一个很好的实践案例,不仅展示了基本的游戏编程概念,还提供了一个动手实践Java GUI编程的机会。对于任何想要提升Java编程技能的人来说,都是一个宝贵的学习资源。

    用Java写的贪吃蛇小游戏

    《用Java写的贪吃蛇小游戏》是一款基于Java编程语言开发的简单娱乐项目,旨在帮助具有Java基础知识的学习者提升编程技能并了解游戏开发的基本原理。在Java编程领域,贪吃蛇游戏是一个经典的教学案例,它涵盖了面向...

    java写贪吃蛇游戏及详细注释

    ### Java实现贪吃蛇游戏详解 #### 一、游戏简介 贪吃蛇是一款经典的休闲游戏,在游戏中玩家控制一条蛇去吃地图上的食物,每吃到一个食物蛇身就会变长一段,如果蛇碰到自己的身体或者墙壁则游戏结束。本文将详细介绍...

    java小游戏 贪吃蛇 java小游戏 贪吃蛇

    java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 贪吃蛇java小游戏 ...

    Java实现贪吃蛇小游戏.zip

    Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏 Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏Java实现贪吃蛇小游戏 Java实现贪吃蛇小游戏Java实现贪吃蛇小...

    Java版贪吃蛇游戏.zip

    Java版贪吃蛇游戏.zipJava版贪吃蛇游戏.zipJava版贪吃蛇游戏.zip Java版贪吃蛇游戏.zipJava版贪吃蛇游戏.zipJava版贪吃蛇游戏.zip Java版贪吃蛇游戏.zipJava版贪吃蛇游戏.zipJava版贪吃蛇游戏.zip Java版贪吃蛇游戏....

    用java写的简单贪食蛇游戏

    ### 使用Java编写的简易贪食蛇游戏解析 #### 游戏概述 本篇文章将深入解析一个基于Java语言编写的简易贪食蛇游戏。该程序利用了Java AWT库中的类来构建界面,并通过多线程技术实现了蛇的移动以及与食物的交互。玩家...

    java swing 贪吃蛇游戏.zip

    java swing 贪吃蛇游戏.zipjava swing 贪吃蛇游戏.zipjava swing 贪吃蛇游戏.zip java swing 贪吃蛇游戏.zipjava swing 贪吃蛇游戏.zipjava swing 贪吃蛇游戏.zip java swing 贪吃蛇游戏.zipjava swing 贪吃蛇游戏....

    Java入门贪吃蛇小游戏.zip

    Java入门贪吃蛇小游戏.zipJava入门贪吃蛇小游戏.zipJava入门贪吃蛇小游戏.zip Java入门贪吃蛇小游戏.zipJava入门贪吃蛇小游戏.zipJava入门贪吃蛇小游戏.zip Java入门贪吃蛇小游戏.zipJava入门贪吃蛇小游戏.zipJava...

    java贪吃蛇游戏.zip

    java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏 java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏 java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏java贪吃蛇游戏 java贪吃蛇游戏java贪吃蛇游戏...

    java 贪吃蛇游戏.zip

    java 贪吃蛇游戏.zipjava 贪吃蛇游戏.zipjava 贪吃蛇游戏.zipjava 贪吃蛇游戏.zip java 贪吃蛇游戏.zipjava 贪吃蛇游戏.zipjava 贪吃蛇游戏.zipjava 贪吃蛇游戏.zip java 贪吃蛇游戏.zipjava 贪吃蛇游戏.zipjava ...

    java写的贪吃蛇小游戏,跟着b站up主学的.zip

    java写的贪吃蛇小游戏,跟着b站up主学的.zipjava写的贪吃蛇小游戏,跟着b站up主学的.zip java写的贪吃蛇小游戏,跟着b站up主学的.zipjava写的贪吃蛇小游戏,跟着b站up主学的.zip java写的贪吃蛇小游戏,跟着b站up主...

    java3D贪吃蛇_java3d_attackd7z_java游戏_

    【标题】"java3D贪吃蛇" 是一个基于Java3D技术开发的贪吃蛇游戏,它将经典的2D游戏体验提升到了三维空间。Java3D是Java平台的一个扩展,用于创建和显示复杂的3D图形,使得游戏设计更加生动且具有深度感。 【描述】...

    Java写的贪吃蛇 源代码 结构超简单

    本项目是一个使用Java编写的贪吃蛇游戏,它为初学者提供了一个极好的学习资源,帮助他们理解基本的Java编程概念以及游戏开发的基础。 贪吃蛇游戏是一个经典的计算机程序,它涉及到许多关键的编程概念,包括对象导向...

    Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码Java贪吃蛇源码

    ### Java贪吃蛇源码 #### 1. 基本结构与类继承 - **类名**:`TanChiShe` - **继承自**:`JFrame` - **实现接口**:`ActionListener`, `KeyListener`, `Runnable` `TanChiShe` 类作为游戏的主要载体,它继承自 `...

Global site tag (gtag.js) - Google Analytics