Java经典小游戏——贪吃蛇简单实现(附源码)
一、使用知识
Jframe
GUI
双向链表
线程
二、使用工具
IntelliJ IDEA
jdk 1.8
三、开发过程
3.1素材准备
首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以及一段优雅的音乐。
在这里插入图片描述
3.2 开发过程
3.2.1 创建项目
首先进入idea首页 open一个你想放项目的文件夹
在这里插入图片描述
进入之后右键文件名 new 一个新的Directory——Snake
在这里插入图片描述
把准备好的素材复制到文件中
在这里插入图片描述
继续创建目录 src/Sanke
在这里插入图片描述
选中src Mark Directory as — Souces 把src添加为根目录
在这里插入图片描述
3.2.2 页面设计
创建java Class 文件 Snake - new - java class SnakeName 接下来的时候会对这个SnakeName.java里面的代码不停完善
首先设置窗口格式
package Sanke;
import javax.swing.*;
/**
@author Swyee
**/
public class SnakeGame extends JFrame {SnakeGame(){
this.setBounds(100, 50, 700, 500);//设置窗口大小
this.setLayout(null);//更改layout 以便添加组件
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态
this.setResizable(false);//窗口不可以改变大小
this.setVisible(true);//设置焦点状态为true
}
public static void main(String[] args) {
new SnakeGame();
}
}
在这里插入图片描述
继续创建新的文件 SnakeGrid
package Sanke;
import java.awt.*;
/**
- @author Swyee
**/
public class SnakeGrid extends Panel {
SnakeGrid(){
this.setBounds(0, 0, 700, 400);
this.setBackground(Color.black);设置背景颜色
}
}
将页面引用到SnakeGame.java中
package Sanke;
import javax.swing.*;
/**
- @author Swyee
**/
public class SnakeGame extends JFrame {
SnakeGrid snakeGrid= new SnakeGrid();
SnakeGame(){
this.setBounds(100, 50, 700, 500);//设置窗口大小
this.setLayout(null);//更改layout 以便添加组件
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态
this.setResizable(false);//窗口不可以改变大小
this.add(snakeGrid);
this.setVisible(true);//设置焦点状态为true
}
public static void main(String[] args) {
new SnakeGame();
}
}
运行样式
在这里插入图片描述
设置背景图片 背景音乐
在SnakeGrid.java中增加Music方法 设置画笔 绘图
package Sanke;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
@author Swyee
**/
public class SnakeGrid extends JPanel {
ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址
File f= new File("Snake/music.wav");//音乐文件地址
SnakeGrid(){
this.setBounds(0, 0, 700, 400);
this.setBackground(Color.black);
}/**
- 设置画笔
- @param g
*/
@Override
public void paint(Graphics g) {
super.paint(g);
image.paintIcon(this, g, 0, 0); //设置背景图片
}
//读取音乐文件
void Music(){
try {
URI uri = f.toURI();
URL url = uri.toURL();
AudioClip aau= Applet.newAudioClip(url);
aau.loop();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在SnakeName中调用
package Sanke;
import javax.swing.*;
/**
- @author Swyee
**/
public class SnakeGame extends JFrame {
SnakeGrid snakeGrid= new SnakeGrid();
SnakeGame(){
this.setBounds(100, 50, 700, 500);//设置窗口大小
this.setLayout(null);//更改layout 以便添加组件
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态
this.setResizable(false);//窗口不可以改变大小
this.add(snakeGrid);
//设置焦点
snakeGrid.setFocusable(true);
snakeGrid.requestFocus();
snakeGrid.Music();//调用打开音乐的方法
this.setVisible(true);//设置焦点状态为true
}
public static void main(String[] args) {
new SnakeGame();
}
}
呈现
在这里插入图片描述
3.23 画蛇
蛇的身体将会有双向链表组成,双向链表能记录一个节点的上一个节点和下一个节点。蛇的移动其实就是节点的变化,从而达到一种移动的视觉。
新建java Snake 创建节点
package Sanke;
import java.awt.Graphics;
public class Snake {
public static final int span=20;//间距
public static final String up="u";
public static final String down="d";
public static final String left="l";
public static final String right="r";
class Node{
int row;
int col;
String dir;//方向
Node next;
Node pre;
Node(int row,int col,String dir){
this.row = row;
this.col = col;
this.dir = dir;
}
public void draw(Graphics g) {
g.fillOval(colspan, rowspan, span,span);
}
}
}
画蛇
在snake里面增加draw()方法
/*
把蛇画出来
*/
public void draw(Graphics g) {
g.setColor(Color.yellow);
for(Node n=head;n!=null;n=n.next){
n.draw(g);
g.setColor(Color.green);
}
}
在SnakeGrid.java中创建蛇
Snake snake = new Snake();//创建蛇
1
并在paint中调用snake.draw(g);
/**
* 设置画笔
* @param g
*/
@Override
public void paint(Graphics g) {
super.paint(g);
image.paintIcon(this, g, 0, 0); //设置背景图片
snake.draw(g);
}
控制蛇的移动
在snake中增加键盘调用的方法:
/*
调用键盘的上下左右键
head.dir记录现在操作的是什么按钮,从而更改蛇的状态
向上移送时,下键失效,其他四个方向也是如此判断
*/
public void keyboard(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
if(head.dir.equals(down)){
break;
}
head.dir=up;
break;
case KeyEvent.VK_DOWN:
if(head.dir.equals(up)){
break;
}
head.dir=down;
break;
case KeyEvent.VK_LEFT:
if(head.dir.equals(right)){
break;
}
head.dir=left;
break;
case KeyEvent.VK_RIGHT:
if(head.dir.equals(left)){
break;
}
head.dir=right;
break;
default:
break;
}
}
增加头部的方法
/*
增加头部
不管移动哪个方向都是在相应位置增加一个节点
*/
public void addHead(){
Node node = null;
switch (head.dir){
case "l":
node = new Node(head.row,head.col-1,head.dir);
break;
case "r":
node = new Node(head.row,head.col+1,head.dir);
break;
case "u":
node = new Node(head.row-1,head.col,head.dir);
break;
case "d":
node = new Node(head.row+1,head.col,head.dir);
break;
default:
break;
}
node.next=head;
head.pre=node;
head=node;
}
删除尾部的方法
/*
删除尾部 删除最后一个节点
*/
public void deleteTail(){
tail.pre.next=null;
tail=tail.pre;
}
增加move的方法
/*
增加move方法 一增一减,实现蛇的移动
*/
public void move() {
addHead();
deleteTail();
}
在SnakeGrid中创建一个线程类,用来执行蛇的移动方法
class SnakeThread extends Thread{
@Override
public void run() {
while (true){
try {
Thread.sleep(300);//沉睡300ms 用来控制蛇的移动速度
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();//每次沉睡完之后都执行一下repaint()方法,重新绘画
}
}
print方法中调用remove 在SnakeGrid()创建键盘监听事件:
package Sanke;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
@author Swyee
**/
public class SnakeGrid extends JPanel {
Snake snake = new Snake();//创建蛇
ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址
File f= new File("Snake/music.wav");//音乐文件地址
SnakeThread snakeThread = new SnakeThread();
SnakeGrid(){
this.setBounds(0, 0, 700, 400);
this.setBackground(Color.black);
snakeThread.start();
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
snake.keyboard(e);
}
});
}/**
- 设置画笔
- @param g
*/
@Override
public void paint(Graphics g) {
super.paint(g);
image.paintIcon(this, g, 0, 0); //设置背景图片
snake.move();//蛇移动
snake.draw(g);
}
//读取音乐文件
void Music(){
try {
URI uri = f.toURI();
URL url = uri.toURL();
AudioClip aau= Applet.newAudioClip(url);
aau.loop();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class SnakeThread extends Thread{
@Override
public void run() {
while (true){
try {
Thread.sleep(300);//沉睡300ms 用来控制蛇的移动速度
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();//每次沉睡完之后都执行一下repaint()方法,重新绘画
}
}
}
}
执行main方法可以看到可以通过键盘进行控制移动了
3.24创建蛇的食物
增加食物的实例 以及画食物的方法 反映食物坐标的方法 新建Food.java
package Sanke;
import java.awt.*;
public class Food {
int row;
int col;
Food(){
row = 10;//创建食物的大小
col =10;
}
public void repearShow(){
row = (int)(Math.random()*18);//生成随机数 乘以食物的大小可以得到坐标
col = (int)(Math.random()*32);
}
public void draw(Graphics g) {//把食物画出来
g.setColor(Color.red);
g.fillRect(col*20, row*20, 20, 20);//表示坐标
}
public Rectangle getCoordinates(){
return new Rectangle(col*20,row*20,20,20);//获得食物的坐标
}
}
修改Snake.java 增加判断蛇头位置的方法,修改午无参构造方法,改为有参构造,把food添加进来 修改move方法
package Sanke;
import java.awt.*;
import java.awt.event.KeyEvent;
/**
@author Swyee
/
public class Snake {
public static final int span=20;//间距
public static final String up="u";
public static final String down="d";
public static final String left="l";
public static final String right="r";
Node body;//蛇的身体
Node head;//蛇的头部
Node tail;//蛇的头部
Food food;
Snake(Food food){
body = new Node(5,20,left);
head = body;
tail = body;
this.food=food;
}
class Node{
int row;
int col;
String dir;//方向
Node next;
Node pre;
Node(int row,int col,String dir){
this.row = row;
this.col = col;
this.dir = dir;
}
public void draw(Graphics g) {
g.fillOval(colspan, row*span, span,span);//坐标}
}
/*
把蛇画出来
*/
public void draw(Graphics g) {
g.setColor(Color.yellow);
for(Node n=head;n!=null;n=n.next){
n.draw(g);
g.setColor(Color.green);
}}
/*
调用键盘的上下左右键
head.dir记录现在操作的是什么按钮,从而更改蛇的状态
向上移送时,下键失效,其他四个方向也是如此判断
/
public void keyboard(KeyEvent e) {
switch(e.getKeyCode()){
case KeyEvent.VK_UP:
if(head.dir.equals(down)){
break;
}
head.dir=up;
break;
case KeyEvent.VK_DOWN:
if(head.dir.equals(up)){
break;
}
head.dir=down;
break;
case KeyEvent.VK_LEFT:
if(head.dir.equals(right)){
break;
}
head.dir=left;
break;
case KeyEvent.VK_RIGHT:
if(head.dir.equals(left)){
break;
}
head.dir=right;
break;
default:
break;
}
}
/
增加头部
*/
public void addHead(){
Node node = null;
switch (head.dir){
case "l":
node = new Node(head.row,head.col-1,head.dir);
break;
case "r":
node = new Node(head.row,head.col+1,head.dir);
break;
case "u":
node = new Node(head.row-1,head.col,head.dir);
break;
case "d":
node = new Node(head.row+1,head.col,head.dir);
break;
default:
break;
}
node.next=head;
head.pre=node;
head=node;}
/*
删除尾部
/
public void deleteTail(){
tail.pre.next=null;
tail=tail.pre;
}
/
增加move方法
*/
public void move() {
addHead();
if(this.getSnakeRectangle().intersects(food.getCoordinates())){//当蛇头与食物重合的时候 蛇吃食物 食物刷新,不再删除尾巴,达到一种蛇增长的要求food.repearShow();
}else{
deleteTail();
}
}
public Rectangle getSnakeRectangle(){//获取蛇头的坐标return new Rectangle(head.col*span,head.row*span,span,span);
}
}
在修改snakegrid.java 贪吃蛇的功能就基本实现了
Food food = new Food();
Snake snake = new Snake(food);//创建蛇
ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址
File f= new File("Snake/music.wav");//音乐文件地址
SnakeThread snakeThread = new SnakeThread();
1
2
3
4
5
@Override
public void paint(Graphics g) {
super.paint(g);
image.paintIcon(this, g, 0, 0); //设置背景图片
snake.move();//蛇移动
snake.draw(g);
food.draw(g);
}
3.2.5增加蛇的存活状态
在Snake中增加蛇的存活状态,每一次移动都判断下是否存活,修改SnakeGrid的线程,执行时进行判断是否存活
public void DeadOrLive(){//超出边框范围 蛇头撞到身体 游戏结束
if(head.row<0 || head.row>rows-1 || head.col<0 ||head.col>cols){
islive=false;
}
for(Node n=head.next;n!=null;n=n.next){
if(n.colhead.col && n.rowhead.row){
islive=false;
}
}
}
public void move() {
addHead();
if(this.getSnakeRectangle().intersects(food.getCoordinates())){//当蛇头与食物重合的时候 蛇吃食物 食物刷新,不再删除尾巴,达到一种蛇增长的要求
food.repearShow();
}else{
deleteTail();
}
DeadOrLive();//每移动一步都要判断一下是否存活
}
class SnakeThread extends Thread{
boolean flag = true;
@Override
public void run() {
while (Snake.islive && flag) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (Snake.islive ) {
repaint();
}
}
if (!flag == false) {
JOptionPane.showMessageDialog(SnakeGrid.this, "游戏结束");
}
}
3.2.6 增加按钮
最后的时候,给这个小游戏增加几个按钮,用来实现暂停开始
新建Button.java
package Sanke;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Button extends JPanel{
public static boolean isMove=true;//表示运行状态
SnakeGrid snakeGrid;
Button(SnakeGrid snakeGrid){
this.snakeGrid=snakeGrid;
this.setBounds(0, 400, 700, 100);
JButton jb1 = new JButton("暂停游戏");
JButton jb2 = new JButton("继续游戏");
JButton jb3 = new JButton("重新游戏");
this.add(jb1);
this.add(jb2);
this.add(jb3);
jb1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
isMove=false;
}
});
jb2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
isMove=true;
snakeGrid.setFocusable(true);
snakeGrid.requestFocus();
}
});
jb3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {//重新创建蛇等 重新开始游戏
snakeGrid.snakeThread.stopThread();
Food food = new Food();
snakeGrid.food=food;
snakeGrid.snake=new Snake(food);
Snake.islive=true;
isMove=true;
SnakeGrid.SnakeThread st = snakeGrid.new SnakeThread();
snakeGrid.snakeThread=st;
st.start();
snakeGrid.setFocusable(true);
snakeGrid.requestFocus();
}
});
}
}
再修改SnakeGrid中的thread
package Sanke;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
/**
@author Swyee
**/
public class SnakeGrid extends JPanel {
Food food = new Food();
Snake snake = new Snake(food);//创建蛇
ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址
File f= new File("Snake/music.wav");//音乐文件地址
SnakeThread snakeThread = new SnakeThread();
SnakeGrid(){
this.setBounds(0, 0, 700, 400);
this.setBackground(Color.black);
snakeThread.start();
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
snake.keyboard(e);
}
});
}/**
设置画笔
@param g
*/
@Override
public void paint(Graphics g) {
super.paint(g);
image.paintIcon(this, g, 0, 0); //设置背景图片
snake.move();//蛇移动
snake.draw(g);
food.draw(g);
}
//读取音乐文件
void Music(){
try {
URI uri = f.toURI();
URL url = uri.toURL();
AudioClip aau= Applet.newAudioClip(url);
aau.loop();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class SnakeThread extends Thread{
boolean flag = true;
@Override
public void run() {
while(Snake.islive &&flag){
try {
Thread.sleep(300);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(Snake.islive&& Button.isMove){
repaint();
}}
if(!flag==false){
JOptionPane.showMessageDialog(SnakeGrid.this, "游戏结束");
}
}
public void stopThread(){
flag=false;
}
}
}
在主页面中把按钮添加上去
package Sanke;
import javax.swing.*;
/**
- @author Swyee
**/
public class SnakeGame extends JFrame {
SnakeGrid snakeGrid= new SnakeGrid();
Button button = new Button(snakeGrid);
SnakeGame(){
this.setBounds(100, 50, 700, 500);//设置窗口大小
this.setLayout(null);//更改layout 以便添加组件
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态
this.setResizable(false);//窗口不可以改变大小
this.add(snakeGrid);
this.add(button);
//设置焦点
snakeGrid.setFocusable(true);
snakeGrid.requestFocus();
snakeGrid.Music();//调用打开音乐的方法
this.setVisible(true);//设置焦点状态为true
}
public static void main(String[] args) {
new SnakeGame();
}
}
在这里插入图片描述
到这里这个小游戏就全部做完了,当然也可以在其基础上增加其他功能
也可以把这个小游戏打成jar包的形式进行运行
,将打好的jar包和资源文件放在同一个目录下,即可正常运行访问
四 打jar包
idea打jar包方式:
https://blog.csdn.net/qq_44433261/article/details/107433540
命令行运行jar包方式:
https://blog.csdn.net/qq_44433261/article/details/107433355
源码
最后附上源码链接:
链接: https://pan.baidu.com/s/1iUmSUnvpi_YKUNsPs3ugIQ 提取码: zxsk
Java经典小游戏——贪吃蛇简单实现(附源码)的更多相关文章
- 用Python实现童年小游戏贪吃蛇
贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.
- 第一个windows 小游戏 贪吃蛇
最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...
- JavaScript面向对象编程小游戏---贪吃蛇
1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. 2 这个demo是采用了 ...
- Java小游戏贪吃蛇
package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...
- Java_GUI小游戏--贪吃蛇
贪吃蛇游戏:是一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或 ...
- 用Canvas制作小游戏——贪吃蛇
今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...
- python【控制台】小游戏--贪吃蛇
传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...
- 手把手教学h5小游戏 - 贪吃蛇
简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...
随机推荐
- python-Requests模块的使用
1. Requests简介 Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能,那为什么R ...
- prometheus监控实战--基础
1.简介 prometheus就是监控系统+TSDB(时间序列数据库),通过pull方式从exporter获取时间序列数据,存入本地TSDB,被监控端需安装exporter作为http端点暴露指标数据 ...
- Mac插件太多太乱怎么办?CleanMyMac直接帮你搞定!
电脑应用插件在一定程度上便利了大家的生活,保障了用户的使用安全,比如Flash插件.浏览器翻译插件.银行安全登录插件等等.但是许多的插件并不能定位安装的位置,同时部分插件,大部分时候都是只使用一次的, ...
- guitar pro系列教程(五):Guitar Pro音轨属性之小节的功能
又到了guitar pro系列教程新的一章,本章节小编将采用图文相结合的方式与大家一起来讨论下关于Guitar Pro小节的功能,感兴趣的小伙伴都可以进来看看哦,如下图所示: 我们看到小节这选项栏中分 ...
- Folx好用的下载功能介绍
Folx作为一款使用便捷的Mac系统下载软件,为用户提供了网页链接捕获.种子文件下载.智能标签等功能,而其Folx专业版更为用户提供了智能控制速度.计划下载任务.种子文件搜索下载等更加智能化的功能. ...
- CentOS7.X 下安装MySQL8.0(附文件)
这是64位的安装包.如果需要32位的可以去官网下载哦.步骤一样 1 获取安装资源包 mysql-8.0.18-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.b ...
- Java基础教程——接口
接口 接口只是一种约定.--Anders 接口定义了一种规范--多个类共同的公共行为规范. 对于接口的实现者--规定了必须向外提供哪些服务 对于接口的调用者--规定了可以调用哪些服务,如何调用这些服务 ...
- python - os.sep用法
python是跨平台的.在Windows上,文件的路径分隔符是'\',在Linux上是'/'.为了让代码在不同的平台上都能运行,那么路径应该写'\'还是'/'呢?使用os.sep的话,就不用考虑这个了 ...
- gradle插件版本号和Gradle版本号对应关系
Plugin version Required Gradle version 1.0.0 - 1.1.3 2.2.1 - 2.3 1.2.0 - 1.3.1 2.2.1 - 2.9 1.5.0 2.2 ...
- Error:Execution failed for task ':app:mergeDebugResources'. > Error: Some file crunching failed, see logs for details
android studio中的资源文件命名是不能带有数字的,因为会与R类的资源ID起冲突,所以编译就发生了错误.