java jpanel添加图片_用Java如何敲出贪吃蛇小游戏

d39e6cfe73c460a8051a5b4371796386.png

好的想要敲出贪吃蛇小游戏,当然我们要准备一台电脑,然后找一个会敲代码的人,再在电脑上装上编程用的软件,最后再这样,再那样就好了,最后点下运行就可以了。是不是很简单呢?赶紧打开电脑试一下吧!!

c2b0f5a952d59f96e4dcfaf79eac3dd3.png

好了,不皮了,开始正式教学,首先打开电脑,打开编程软件,然后可看仔细了!!!

贪吃蛇游戏的设计步骤:

Part 1:

  设计游戏图纸

  画出900*700的白色窗口

  在窗口上添加画布

  在画布上添加标题

  在画布上添加黑色游戏区

Part 2:

  放置静态的蛇:一个头、两个身体

  加上开始提示:按空格键开始游戏

  让蛇动起来:监听Timer事件,平移数据

  实现游戏暂停

  实现转向功能

Part 3:

 添加食物

  吃掉食物

  添加死亡条件

  实现“重新开始”功能

  添加分数和长度

游戏图纸如下:

0798f64416d53e2b6bd7cb02a33a0ba9.png

蛇及游戏框的素材如下:

038aa46c975d4de39c28c468aa681f11.png

b73b0f33ba0b0d2d5663c6f88ae0cbd4.png

740d71a4760e4375aeb2d8ae3fe851c6.png

5225b15b393afc96c895f8436c5ed7c4.png

7a85809126f4f951277de068f83618d2.png

d80b56e9cdb0eae89460c6c8d519ca3f.png

f303e38870e3b0719331d85fb51afac3.png

Snake主类:

 1 package snake;  
 2  
 3 import javax.swing.JFrame;  
 4 import javax.swing.JPanel;  
 5  
 6 public class Snake {  
 7  
 8 public static void main(String[] args) {  
 9 
 10         JFrame frame = new JFrame(); // 创建一个游戏界面的框架 
 11         frame.setBounds(10, 10, 900, 720); // 设置框架的大小 
 12         frame.setResizable(false); // 设置框架大小为不能改变 
 13 // 点击关闭按钮 关闭游戏界面 
 14         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 15 
 16         SnakePanel panel = new SnakePanel();  //添加画布 
 17         frame.add(panel); // 刚添加时画布是空的看不到 
 18 
 19         frame.setVisible(true); // 允许显示游戏界面 
 20     } 
 21 
 22 }

SnakePanel类:

  1 package snake;   
  2   
  3 import java.awt.Color;   
  4 import java.awt.Font;   
  5 import java.awt.Graphics;   
  6 import java.awt.event.ActionEvent;   
  7 import java.awt.event.ActionListener;   
  8 import java.awt.event.KeyEvent;   
  9 import java.awt.event.KeyListener;  
  10 import java.util.Random;  
  11  
  12 import javax.swing.ImageIcon;  
  13 import javax.swing.JPanel;  
  14 import javax.swing.Timer;  
  15  
  16 public class SnakePanel extends JPanel implements KeyListener,ActionListener{  
  17  
  18 // 定义七个图片变量,代表七张图片  
  19     ImageIcon up = new ImageIcon("up.png"); // 向上的蛇头  
  20     ImageIcon down = new ImageIcon("down.png"); // 向下的蛇头  
  21     ImageIcon left = new ImageIcon("left.png"); // 向左的蛇头  
  22     ImageIcon right = new ImageIcon("right.png"); // 向右的蛇头  
  23     ImageIcon food = new ImageIcon("food.png");  // 食物  
  24     ImageIcon body = new ImageIcon("body.png");  // 蛇的身体  
  25     ImageIcon title = new ImageIcon("title.jpg"); // 游戏界面的主题  
  26  
  27 // 蛇的每一部分  
  28 int[] snakex = new int [750];  
  29 int[] snakey = new int [750];  
  30  
  31 // 随机生成食物  
  32     Random rand = new Random();  
  33 int foodx = rand.nextInt(34)*25+25; //此处的数值根据自己设计的游戏界面的大小来确定  
  34 int foody = rand.nextInt(24)*25+75;  
  35  
  36 // 设置游戏的默认属性  
  37 int len = 3;  
  38 int score = 0;  
  39     String direction = "R"; // U上 D下 L左 R右  
  40  
  41 boolean isStarted = false; // 判断游戏是否开始  
  42 boolean isFailed = false; // 判断游戏是否结束  
  43  
  44     Timer timer = new Timer(100,this); // 每100毫秒调用一次ActionPerformed  
  45  
  46  
  47 public SnakePanel() { // 建造画布的构造函数  
  48 this.setFocusable(true);  // 获取焦点  
  49 this.addKeyListener(this); // 监听键盘事件  
  50         setup();  
  51         timer.start();  
  52     }  
  53  
  54 public void paint(Graphics g) { // Graphics 画笔  
  55  
  56 this.setBackground(Color.BLACK); // 设置画布背景颜色 
  57         title.paintIcon(this, g, 25, 11);// 放置主题图片
  58         g.fillRect(25, 75, 850, 650); // 用画笔设置游戏方框
  59
  60 // 画蛇头(注意判断蛇头的方向)
  61 if (direction.equals("R")) 
  62             right.paintIcon(this, g, snakex[0], snakey[0]);
  63 else if (direction.equals("L")) 
  64             left.paintIcon(this, g, snakex[0], snakey[0]); 
  65 else if (direction.equals("U")) 
  66             up.paintIcon(this, g, snakex[0], snakey[0]);
  67 else if (direction.equals("D")) 
  68             down.paintIcon(this, g, snakex[0], snakey[0]);
  69
  70 // 画蛇的身体
  71 for(int i = 1; i < len; i ++)
  72             body.paintIcon(this, g, snakex[i], snakey[i]);
  73
  74 // 判断如果游戏没开始显示。。。
  75 if (!isStarted){
  76             g.setColor(Color.WHITE);
  77             g.setFont(new Font("arial",Font.BOLD, 30));
  78             g.drawString("Press Space to start / pause", 200, 300);
  79         }
  80
  81 // 判断如果游戏结束显示。。。
  82 if (isFailed){
  83             g.setColor(Color.WHITE);
  84             g.setFont(new Font("arial",Font.BOLD, 30));
  85             g.drawString("Game Over ! Press space to restart", 200, 300);
  86         }
  87
  88 // 显示食物
  89         food.paintIcon(this, g, foodx, foody);
  90
  91 // 设置分数和蛇的长度
  92         g.setColor(Color.WHITE);
  93         g.setFont(new Font("arial",Font.PLAIN,15));
  94         g.drawString("Score : "+score, 650, 37);
  95         g.drawString("Len :"+len, 650, 57);
  96     }
  97
  98 public void setup() { // 游戏初始化
  99         isStarted = false;
 100         isFailed = false;
 101         len = 3;
 102         score = 0;
 103         snakex[0] = 100; snakex[1] = 75; snakex[2] = 50;
 104         snakey[0] = 100; snakey[1] = 100; snakey[2] = 100;
 105     }
 106
 107     @Override
 108 public void keyPressed(KeyEvent e) {
 109
 110 //实现键盘响应
 111 int KeyCode = e.getKeyCode();
 112 if (KeyCode == KeyEvent.VK_SPACE){ // 敲击空格现实/消除提示信息
 113 if (isFailed){
 114 //                isStarted = false;  // 可以将这两行放入setup中
 115 //                isFailed = false;
 116                 setup();
 117             }else
 118                 isStarted = !isStarted;
 119         } else if (KeyCode ==  KeyEvent.VK_UP && direction != "D")
 120                 direction = "U";
 121 else if (KeyCode ==  KeyEvent.VK_DOWN && direction != "U" )
 122                 direction = "D";
 123 else if (KeyCode ==  KeyEvent.VK_RIGHT && direction != "L")
 124                 direction = "R";
 125 else if (KeyCode ==  KeyEvent.VK_LEFT && direction != "R")
 126                 direction = "L";
 127     }
 128
 129     @Override
 130 public void actionPerformed(ActionEvent e) {
 131 // 1. 再定义一个闹钟
 132         timer.start();
 133
 134 // 2. 移动数据
 135 if (isStarted && !isFailed){
 136 // 移动身体
 137 for (int i = len; i>0; i--){
 138             snakex[i] = snakex[i-1];
 139             snakey[i] = snakey[i-1];
 140         }
 141 // 移动头
 142 if (direction.equals("R")){
 143             snakex[0] = snakex[0] + 25;
 144 if(snakex[0] > 850) snakex[0] = 25;
 145             }else if (direction.equals("L")){
 146                 snakex[0] = snakex[0] - 25;
 147 if(snakex[0] < 25) snakex[0] = 850;
 148             }else if (direction.equals("U")){
 149                 snakey[0] = snakey[0] - 25;
 150 if (snakey[0] < 75) snakey[0] = 650;
 151             }else if (direction.equals("D")){
 152                 snakey[0] = snakey[0] + 25;
 153 if (snakey[0] > 650) snakey[0] = 75;
 154             }
 155
 156 if (snakex[0] == foodx && snakey[0] == foody){  // 吃食物
 157                     len ++;
 158                     score ++;
 159                     foodx = rand.nextInt(34)*25+25;
 160                     foody = rand.nextInt(24)*25+75;
 161             }
 162
 163 for (int i = 1; i < len; i ++){  // 如果蛇头碰到自己的身体游戏结束
 164 if (snakex[0] == snakex[i] && snakey[0] == snakey[i]){
 165                     isFailed = true;
 166                 }
 167             }
 168
 169         }
 170 // 3. repaint()
 171             repaint();
 172     }
 173
 174     @Override 
 175 public void keyTyped(KeyEvent e) {
 176
 177     }
 178
 179     @Override
 180 public void keyReleased(KeyEvent e) {
 181
 182     }
 183 }

游戏效果如下:

21a0142cabaf957f1a2a88f4ac5d7aaf.png

9a4b218937eda37ef42e530a73a395d5.png

acff1335d196f2f2d72909391d130458.png

okok,聪明如我的你是不是已经敲出来了!什么?以上资料还不够详细??没事,小编还准备了视频版的资料,点击下面石墨链接领取!!先到先得!!!聪明的人已经领到了,你还在犹豫什么??!!

石墨文档​shimo.im

以上文章部分来自网络,如有侵权,请联系删除

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 IDEA 中使用 Java贪吃蛇小游戏添加背景图片,可以使用 Swing 或 JavaFX 来实现。以下是使用 Swing 的示例: 1. 导入背景图片:将背景图片文件放入项目的资源文件夹中,通常是 "src/main/resources" 目录。 2. 编写代码:在贪吃蛇游戏的主类或游戏界面类中,添加设置背景图片的代码。以下是一个简单的示例: ```java import javax.swing.*; import java.awt.*; public class SnakeGame extends JFrame { public SnakeGame() { // 设置窗口标题 setTitle("贪吃蛇游戏"); // 设置窗口大小 setSize(800, 600); // 设置窗口关闭按钮操作 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗口布局为绝对布局 setLayout(null); // 加载背景图片 ImageIcon backgroundImage = new ImageIcon("src/main/resources/background_image.jpg"); Image image = backgroundImage.getImage(); // 创建画布并设置背景图片 JPanel panel = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image, 0, 0, getWidth(), getHeight(), this); } }; // 设置画布位置和大小 panel.setBounds(0, 0, getWidth(), getHeight()); // 将画布添加到窗口中 add(panel); // 显示窗口 setVisible(true); } public static void main(String[] args) { new SnakeGame(); } } ``` 以上示例使用了 Swing 的 JFrame 和 JPanel 来创建窗口和画布,并通过设置画布的背景图片实现了背景效果。 请注意,具体的实现方式可能因你使用的游戏框架、图形库以及项目结构而有所不同,上述示例仅供参考。你可以根据自己的需求选择其他图形库或方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值