好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

基于Java实现简单贪吃蛇游戏

本文实例为大家分享了Java实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下

贪吃蛇小游戏制作方法

首先需要的准备有:

1、掌握Java基础知识,即Java SE
2、了解一定的GUI知识
3、自定义的贪吃蛇图片(可以在网上找到)

如果以上三点都没有,也不要紧,完全可以看我之前的博文来进行学习!!!!

学习贪吃蛇的目的

一:了解GUI 对前端的知识进行了解
二:了解监听器的作用 熟练掌握监听器(重点)
三:为枯燥乏味的学习提高兴趣(大重点!!)

贪吃蛇小游戏运行效果

设计思路:

由GameStart的启动方法 main方法,Date存储外部数据,GamePanel进行画出贪吃蛇并监听输入

GamePanel:

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 ; public class GamePanel extends JPanel implements KeyListener , ActionListener { int lenth ; int [] snakeX = new int [ 600 ]; // 蛇的坐标X int [] snakeY = new int [ 600 ]; // 蛇的坐标Y String fx ; // 操控上下左右 boolean isStart = false ; Timer timer = new Timer ( 100 , this ); // 定义一个食物 int foodx ; int foody ; Random random = new Random (); // 添加一个死亡判断 boolean isFail = false ; boolean isPass = false ; //游戏是否通关 // 积分系统 int score ;   // 构造器 public GamePanel (){ init (); // 获取键盘监听事件 this . setFocusable ( true ); this . addKeyListener ( this ); timer . start (); // 让时间动起来 } // 初始化游戏 public void init (){ lenth = 3 ; snakeX [ 0 ] = 100 ; snakeY [ 0 ] = 100 ; // 头部坐标 snakeX [ 1 ] = 75 ; snakeY [ 1 ] = 100 ; // 第一个身体坐标 snakeX [ 2 ] = 50 ; snakeY [ 2 ] = 100 ; // 第二个身体坐标 fx = "R" ; foodx = 25 + 25 * random . nextInt ( 34 ); foody = 75 + 25 * random . nextInt ( 24 ); score = 0 ; } // 画板 画出界面和蛇 // Graphics : 画笔   @Override protected void paintComponent ( Graphics g ) { super . paintComponent ( g ); //清屏 this . setBackground ( Color . BLUE ); //设置背景的颜色   //绘制头部的广告栏 Date . header . paintIcon ( this , g , 25 , 11 );   //绘制游戏区域 g . fillRect ( 25 , 75 , 850 , 600 ); // 画一条静态的小蛇 if ( fx . equals ( "R" )){ Date . right . paintIcon ( this , g , snakeX [ 0 ], snakeY [ 0 ]); } else if ( fx . equals ( "L" )){ Date . left . paintIcon ( this , g , snakeX [ 0 ], snakeY [ 0 ]); } else if ( fx . equals ( "U" )){ Date . up . paintIcon ( this , g , snakeX [ 0 ], snakeY [ 0 ]); } else if ( fx . equals ( "D" )){ Date . down . paintIcon ( this , g , snakeX [ 0 ], snakeY [ 0 ]); } for ( int i = 1 ; i < lenth ; i ++) { Date . body . paintIcon ( this , g , snakeX [ i ], snakeY [ i ]); // 蛇的身体长度通过了lenth控制 }   // 画食物 Date . food . paintIcon ( this , g , foodx , foody ); // 画积分 g . setColor ( Color . WHITE ); g . setFont ( new Font ( "微软雅黑" , Font . BOLD , 18 )); // 设置字体 g . drawString ( "您的积分是:" + score , 700 , 50 ); g . drawString ( "您的长度是:" + lenth , 700 , 35 ); // 游戏提示:是否开始 if ( isStart == false ){ // 画一个文字String g . setColor ( Color . WHITE ); // 设置画笔颜色 g . setFont ( new Font ( "微软雅黑" , Font . BOLD , 40 )); // 设置字体 g . drawString ( "摁下空格开始游戏" , 300 , 300 ); } // 失败提醒 if ( isFail ){ g . setColor ( Color . RED ); g . setFont ( new Font ( "微软雅黑" , Font . BOLD , 40 )); g . drawString ( "摁下空格开始游戏" , 200 , 300 ); } if ( isPass ) { g . setColor ( Color . YELLOW ); g . setFont ( new Font ( "微软雅黑" , Font . BOLD , 40 )); //设置字体 g . drawString ( "游戏通关!" , 350 , 300 ); } } // 接收键盘的输入:监听 @Override public void keyPressed ( KeyEvent e ) { //键盘摁下 未释放 // 获取输入哪个键 int keyCode = e . getKeyCode ();   if ( keyCode == KeyEvent . VK_SPACE ){ // 如果摁下空格键 则改变启动或暂停状态 if ( isFail ){ // 失败 游戏重新开始 isFail = false ; init (); // 重新初始化游戏 } else { isStart = ! isStart ; } repaint (); //刷新界面 } // 键盘控制走向 if ( keyCode == KeyEvent . VK_LEFT ){ fx = "L" ; } else if ( keyCode == KeyEvent . VK_UP ){ fx = "U" ; } else if ( keyCode == KeyEvent . VK_DOWN ){ fx = "D" ; } else if ( keyCode == KeyEvent . VK_RIGHT ){ fx = "R" ; } } // 定时器 :监听时间流动 执行定时操作 @Override public void actionPerformed ( ActionEvent e ) { //随着分数增加,蛇的运动速度加快,难度增大,并判断是否已通关 int delay = 100 - score / 5 ; timer . setDelay ( delay ); if ( delay <= 20 ) { isPass = true ; repaint (); } // 如果游戏开始状态 并且游戏没有结束 if ( isStart && isFail == false ){ // 右移 for ( int i = lenth - 1 ; i > 0 ; i --) { snakeX [ i ] = snakeX [ i - 1 ]; snakeY [ i ] = snakeY [ i - 1 ]; } // 通过控制方向 让头部移动 if ( fx . equals ( "R" )){ snakeX [ 0 ] = snakeX [ 0 ] + 25 ; if ( snakeX [ 0 ]> 850 ){ isFail = true ; } } else if ( fx . equals ( "L" )) { snakeX [ 0 ] = snakeX [ 0 ] - 25 ; if ( snakeX [ 0 ] < 25 ) { isFail = true ;} } else if ( fx . equals ( "U" )) { snakeY [ 0 ] = snakeY [ 0 ] - 25 ; if ( snakeY [ 0 ] < 75 ) { isFail = true ; } } else if ( fx . equals ( "D" )) { snakeY [ 0 ] = snakeY [ 0 ] + 25 ; if ( snakeY [ 0 ] > 650 ) { isFail = true ; } }   // 如果小蛇的头于食物坐标重合 if ( snakeX [ 0 ]== foodx && snakeY [ 0 ]== foody ){ // 长度加一 lenth ++; snakeX [ lenth - 1 ] = foodx - 1 ; snakeY [ lenth - 1 ] = foody - 1 ; score = score + 10 ; // 重新生成食物 foodx = 25 + 25 * random . nextInt ( 34 ); foody = 75 + 25 * random . nextInt ( 24 ); } // 结束判断 for ( int i = 1 ; i < lenth ; i ++) { if ( snakeX [ 0 ]== snakeX [ i ]&& snakeY [ 0 ]== snakeY [ i ]){ isFail = true ; break ; } } // 刷新界面 repaint (); } timer . start (); //让时间动起来 }   //------------------------------------------------------以下不用: @Override public void keyTyped ( KeyEvent e ) { // 键盘摁下 弹起   } @Override public void keyReleased ( KeyEvent e ) { // 释放某个键   } }

其中的图片可以更换成自己喜欢的贪吃蛇,并且可以通过改变参数使贪吃蛇加快移动速度,当完成了贪吃蛇小游戏后 ,还能温习学到的Java知识。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/qq_51555533/article/details/115670754

查看更多关于基于Java实现简单贪吃蛇游戏的详细内容...

  阅读:19次