文档章节

基于Java的贪吃蛇小游戏

中小小小坤
 中小小小坤
发布于 2017/03/27 16:46
字数 391
阅读 90
收藏 1

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Snack extends JFrame {
    int arr[][]=new int[20][20];
    boolean isStart=true;
    int headx=8;
    int heady=8;
    int tailx=6;
    int taily=8;
    int direction=0;//蛇头方向
    int up=1,down=2,left=3,right=4;//移动方向
    int foodx=0;
    int foody=0;
    int tail=0;//蛇尾方向
    
    public Snack(){
        setSize(500,500);
        setTitle("贪吃蛇");
        setVisible(true);//显示窗口
        setLayout(null);
        setResizable(false);//禁止改变窗体大小
        setLocationRelativeTo(null);//居中显示
        setDefaultCloseOperation(EXIT_ON_CLOSE);//设置默认关闭按钮
        direction=right;//设置默认移动方向
        for(int i=6;i<8;i++){
            arr[i][heady]=right;
        }
        makeFood();//获取食物
        addKeyListener(new KeyListener() {
            public void keyTyped(KeyEvent e) {}
            public void keyReleased(KeyEvent e) {}
            public void keyPressed(KeyEvent e) {
                int keyCode=e.getKeyCode();//获取按键
                if(isStart){
                    switch(keyCode){
                    case KeyEvent.VK_UP:
                        if(direction != down){
                            direction=up;
                        }
                        break;
                    case KeyEvent.VK_DOWN:
                        if(direction != up){
                            direction=down;
                        }
                        break;
                    case KeyEvent.VK_LEFT:
                        if(direction != right){
                            direction=left;
                        }
                        break;
                    case KeyEvent.VK_RIGHT:
                        if(direction != left){
                            direction=right;
                        }
                        break;
                    }
                }
            }
        });
        while(isStart){
            arr[headx][heady]=direction;
            switch(direction){
            case 1:
                heady--;
                break;
            case 2:
                heady++;
                break;
            case 3:
                headx--;
                break;
            case 4:
                headx++;
                break;
            }
            if(headx>19 || headx<0 || heady>19 || heady<0 || arr[headx][heady] != 0){
                isStart=false;
                break;
            }
            arr[headx][heady]=direction;
            try{
                Thread.sleep(500);
            }catch(Exception e){
                
            }
            if(headx==foodx && heady==foody){
                makeFood();
            }else{
                tail=arr[tailx][taily];
                arr[tailx][taily]=0;
                switch(tail){
                case 1:
                    taily--;
                    break;
                case 2:
                    taily++;
                    break;
                case 3:
                    tailx--;
                    break;
                case 4:
                    tailx++;
                    break;
                }
            }
            repaint();
        }
        if(!isStart){
            JOptionPane.showMessageDialog(null, "Game Over !");
        }
    }
    
    public void makeFood(){
        Random ran=new Random();
        foodx=ran.nextInt(19)+1;
        foody=ran.nextInt(19)+1;
        if(arr[foodx][foody] != 0){
            makeFood();
        }
    }
    
    public void paint(Graphics g){//绘制图形
        g.setColor(Color.LIGHT_GRAY);
        g.fill3DRect(0, 0,500,500,true);
        g.setColor(Color.BLUE);//设置颜色为蓝色
        for(int i=0;i<20;i++){
            for(int j=0;j<20;j++){
                if(arr[i][j] != 0){
                    g.fillRect(i*25,j*25, 24, 24);
                }
            }
        }
        g.setColor(Color.RED);
        g.fillRect(foodx*25, foody*25, 24,24);
    }
    
    public static void main(String[] args) {
        Snack s=new Snack();
    }

}
 

© 著作权归作者所有

中小小小坤
粉丝 0
博文 2
码字总数 404
作品 0
私信 提问
手机吞吃蛇游戏的设计与开发

 J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、www.21cnlunwen.com ...

hyh00001
2010/03/29
198
0
完全用链表实现的贪吃蛇

1.链表设计 同事突然说想实现一个贪吃蛇,这使我想起了几年前实现的一个很糟糕的贪吃蛇程序,代码可以在《 一个java写的贪吃蛇程序》里面找到。如今,突然想再实现一个贪吃蛇,不过这次绝对不...

晨曦之光
2012/04/10
305
0
java写的贪吃蛇只能显示蛇的一个节点

本人作为一个java初学者写了一个贪吃蛇的小游戏,蛇只能显示一个节点,无论我如何改变蛇身的长度都是只能显示一个节点。貌似是所有的节点都重合在一起了,求大神帮忙解决。以下是部分代码截图...

上帝之泪
2013/08/31
127
2
贪吃蛇系列之三——在窗口上绘制出简单的方形

有了游戏的窗口了,接下来我们就开始在游戏的窗口中绘制出一些图形,由于我们做的是贪吃蛇嘛,就画一个方形吧,下面还是直接看代码: /** 绘制界面的方法 */@Overridepublic void paint(Gra...

多利的猫粮
2012/12/19
1K
4
贪吃蛇系列之二——游戏窗口的建立

下面,我们废话不多说,就开始我们的贪吃蛇小项目。首先,我们打开我们的Eclipse,孤狼用的呢是比较新的版本,Eclipse 4.2.0的,没有Eclipse工具的朋友呢,可以到Eclipse的官方网站http://ww...

多利的猫粮
2012/12/19
1K
7

没有更多内容

加载失败,请刷新页面

加载更多

mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
49分钟前
4
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
今天
4
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
今天
2
0
Flutter 系列之Dart语言概述

Dart语言与其他语言究竟有什么不同呢?在已有的编程语言经验的基础上,我们该如何快速上手呢?本篇文章从编程语言中最重要的组成部分,也就是基础语法与类型变量出发,一起来学习Dart吧 一、...

過愙
今天
2
0
rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部