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 Snake extends JPanel implements KeyListener,ActionListener {
//导入图片
ImageIcon title = new ImageIcon("title.jpg");
ImageIcon body = new ImageIcon("body.png");
ImageIcon uphead = new ImageIcon("up.png");
ImageIcon downhead = new ImageIcon("down.png");
ImageIcon lefthead = new ImageIcon("left.png");
ImageIcon righthead = new ImageIcon("right.png");
ImageIcon food = new ImageIcon("food.png");
//定义初始分数
int score = 0;
//定义蛇长度和坐标位置
int len;
int [] snakex = new int[750];
int [] snakey = new int [750];
String way = "R"; //定义方向:U向上、D向下、L向左、R向右
boolean isStarted = false; //定义开始键盘
boolean isFalse = false; //定义游戏开始结束
Timer time = new Timer(200,this); //定义时钟
int foodx;
int foody;
Random random = new Random(); //生成随机数
public Snake(){
initSnake();
this.setFocusable(true); //获取焦点:获取键盘监听事件
this.addKeyListener(this); //自身进行监听
time.start();
}
public void paintComponent(Graphics g){
super.paintComponent(g);
this.setBackground(Color.WHITE);
//设置画板大小位置
title.paintIcon(this,g,25,11);
g.fillRect(25,75,850,600);
//分数显示位置
g.setColor(Color.white);
g.setFont(new Font("arial",Font.BOLD,20));
g.drawString("score: "+score,700,50);
//初始化蛇位置
food.paintIcon(this,g,foodx,foody);
//判断蛇头方向变化
if(way == "U"){
uphead.paintIcon(this,g,snakex[0],snakey[0]);
}else if (way == "D") {
downhead.paintIcon(this,g,snakex[0],snakey[0]);
}else if (way == "L") {
lefthead.paintIcon(this,g,snakex[0],snakey[0]);
}else if (way == "R") {
righthead.paintIcon(this,g,snakex[0],snakey[0]);
}
//游戏中蛇长度变化
for(int i=0;i<len;i++){
body.paintIcon(this,g,snakex[i],snakey[i]);
}
//设置开始标志
if(isStarted == false){
g.setColor(Color.white);
g.setFont(new Font("arial",Font.BOLD,40));
g.drawString("Pleas Space TO Start",280,300);
}
//设置结束标志
if(isFalse == true){
g.setColor(Color.RED);
g.setFont(new Font("arial",Font.BOLD,40));
g.drawString("Game Over !!!",280,300);
}
//吃食物:判断食物的坐标与蛇头的坐标是否相等
if(snakex[0]==foodx&&snakey[0]==foody){
len++; //蛇身体长度+1
score++; //分数+1
//再次随机生成食物坐标
foodx = 25 +25*random.nextInt(34);
foody = 75 +25*random.nextInt(24);
}
}
//初始化蛇的类
public void initSnake(){
//初始化蛇长度
len = 3;
//初始化蛇头坐标
snakex[0]=100;
snakey[0]=100;
//初始化蛇身坐标
snakex[1]=75;
snakey[1]=100;
snakex[2]=50;
snakey[2]=100;
//初始化食物坐标
foodx = 25 +25*random.nextInt(34);
foody = 75 +25*random.nextInt(24);
//初始化蛇方向:向右
way = "R";
//重置分数
score = 0;
}
@Override //键盘敲了
public void keyTyped(KeyEvent e) {
}
@Override //键敲到底了
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode(); //获取键盘按键位置
if(keyCode == KeyEvent.VK_SPACE){ //如果按键=空格键
//如果失败则重新初始化
if(isFalse){
isFalse = false;
initSnake();
} else {
isStarted = !isStarted;
}
repaint(); //重写
}
//键盘控制蛇方向
if(keyCode == KeyEvent.VK_UP){
way="U";
} else if (keyCode == KeyEvent.VK_DOWN) {
way="D";
} else if (keyCode == KeyEvent.VK_LEFT) {
way="L";
} else if (keyCode == KeyEvent.VK_RIGHT) {
way="R";
}
}
@Override //键起来了
public void keyReleased(KeyEvent e) {
}
@Override
public void actionPerformed(ActionEvent e) {
//按空格键开始游戏
if(isStarted && !isFalse){
//蛇身体往前移动
for(int i =len-1;i>0;i--){
snakex[i]=snakex[i-1];
snakey[i]=snakey[i-1];
}
//键盘控制蛇穿墙
if(way=="U"){
//蛇头往上移
snakey[0]=snakey[0]-25;
//穿墙行为:当蛇到达上边界后则从上边界穿回来
if(snakey[0]==50){
snakey[0]=650;
}
} else if (way=="D") {
//蛇头往下移
snakey[0]=snakey[0]+25;
//穿墙行为:当蛇到达下边界后则从上边界穿回来
if(snakey[0]==675){
snakey[0]=75;
}
} else if (way=="L") {
//蛇头往左移
snakex[0]=snakex[0]-25;
//穿墙行为:当蛇到达左边界后则从右边界穿回来
if(snakex[0]==0){
snakex[0]=850;
}
} else if (way=="R") {
//蛇头往右移
snakex[0]=snakex[0]+25;
//穿墙行为:当蛇到达右边界后则从左边界穿回来
if(snakex[0]==875){
snakex[0]=25;
}
}
//判断游戏失败:蛇头与蛇身坐标相等
for (int i = 1; i < len; i++) {
if (snakex[0] == snakex[i] && snakey[0] == snakey[i]) {
isFalse = true;
}
}
repaint(); //重画
}
time.start();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Java 贪吃蛇小游戏是一个经典的游戏,玩家需要控制一条蛇在屏幕上移动,吃掉食物并避免碰到自己的身体。以下是该游戏的简要描述: 游戏目标: 玩家的目标是通过控制蛇的移动,让它吃掉尽可能多的食物,从而获得更高的分数。蛇每次吃掉一个食物,它的长度会增加,难度也会逐渐增加。 游戏规则: 蛇的移动:玩家可以使用键盘的方向键来控制蛇的移动方向。蛇会根据玩家的输入进行相应的移动。 食物:食物会在随机位置出现,蛇吃到食物后,分数会增加,并且蛇的长度会增加。 撞蛇:如果蛇撞到自己的身体,游戏结束,玩家需要重新开始。 游戏得分:玩家可以通过吃食物获得分数,并且蛇的长度越长,得分数值越高。 游戏流程: 初始化:游戏首先初始化屏幕、蛇、食物等元素。 游戏循环:游戏进入一个循环,每次循环代表一个游戏帧。在每个帧中,游戏会处理用户的输入、更新蛇的位置、检测碰撞等。 渲染:根据当前的游戏状态,游戏会在屏幕上绘制蛇、食物和其他必要的元素。 结束条件:当蛇撞到自己的身体时,游戏结束。玩家可以重新开始或退出游戏。 技术细节: 图形库:可以使用 Java 的图形库来创建游戏的用户界面。 分数:需要跟踪玩家的分数
资源推荐
资源详情
资源评论
收起资源包目录
简易版贪吃蛇.zip (23个子文件)
untitled1MySnakeGame
title.jpg 20KB
down.png 20KB
pom.xml 661B
src
test
java
main
resources
META-INF
MANIFEST.MF 48B
java
Snake.java 6KB
MainSnake.java 392B
out
artifacts
untitled1MySnakeGame_jar
untitled1MySnakeGame.jar 4KB
.idea
jarRepositories.xml 864B
artifacts
untitled1MySnakeGame_jar.xml 362B
workspace.xml 3KB
misc.xml 539B
compiler.xml 553B
.gitignore 184B
encodings.xml 267B
left.png 20KB
target
classes
Snake.class 5KB
MainSnake.class 721B
META-INF
MANIFEST.MF 48B
generated-sources
annotations
food.png 20KB
up.png 20KB
right.png 20KB
.gitignore 490B
body.png 22KB
共 23 条
- 1
资源评论
WuDreamer.
- 粉丝: 486
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功