package com.hit.greedy_snake;
/**
* 功能描述:
*
* @param:
* @return:
* @auther: ziyiguo
* @discription:游戏彩色面板
* @date: 2020-08-09 22:15
*/
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* @Auther: msb-zhaoss
*/
public class GamePanel extends JPanel {
// //paintComponent:方法不需要我们自己去调用,系统线程会去调用,
// //这个方法作用:所有画的动作都在这个方法中执行:
// @Override
// protected void paintComponent(Graphics g) {
// super.paintComponent(g);
// //给面板设置一个背景色:
// this.setBackground(new Color(235, 194, 168));
// //画头部图片:
// Images.headerImg.paintIcon(this,g,10,10);
// //画一个矩形:
// //换一下画笔的颜色:
// g.setColor(new Color(213, 238, 232));
// g.fillRect(10,70,770,685);
// }
//小蛇的长度:
int length;
//定义一个数组,专门存储小蛇的头和身体对应的x轴坐标
int[] snakeX = new int[500];//500小蛇长度
//定义一个数组,专门存储小蛇的头和身体对应的y轴坐标
int[] snakeY = new int[500];//500小蛇长度
//定义一个变量来判断小蛇的方向:
String direction = "R";//默认情况下小蛇是向右的
//定义一个变量判断游戏的状态:是开始的还是结束:
boolean isStart = false;//默认情况下游戏没有开始
//加入一个定时器:
Timer timer;
public GamePanel() {
init();
//让焦点在面板上:
this.setFocusable(true);//获取焦点
//给面板添加一个监听:
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
super.keyPressed(e);
int keyCode = e.getKeyCode();
System.out.println(keyCode);// 在控制台打印上下左右不同按键的数字码
if(keyCode==KeyEvent.VK_SPACE){//证明你按下的是空格键:
isStart = !isStart;// 切换游戏状态
repaint();//重新绘制界面-->底层会去调用:paintComponent方法
}
if(keyCode==KeyEvent.VK_UP){
direction = "U";
}
if(keyCode==KeyEvent.VK_DOWN){
direction = "D";
}
if(keyCode==KeyEvent.VK_LEFT){
direction = "L";
}
if(keyCode==KeyEvent.VK_RIGHT){
direction = "R";
}
}
});
}
//初始化:蛇头与两个蛇身
public void init(){
length = 3;
//初始化蛇头的信息:
snakeX[0] = 200;
snakeY[0] = 375;
//第一节身子的信息:
snakeX[1] = 175;
snakeY[1] = 375;
//第二节身子的信息:
snakeX[2] = 150;
snakeY[2] = 375;
//设置定时器,让定时器每100ms执行一次操作:
timer = new Timer(100, new ActionListener() {
//相当于每100ms执行一下actionPerformed中的动作:
@Override
public void actionPerformed(ActionEvent e) {
//让小蛇动一下:
//如果游戏是开始的情况下,小蛇才会动:
if(isStart==true){
//注意:后一节跟着前一节动:
//先动身子
for(int i=length-1;i>0;i--){
snakeX[i] = snakeX[i-1];
snakeY[i] = snakeY[i-1];
}
//最后动头:
switch (direction){
case "R" :snakeX[0] = snakeX[0]+25;break;
case "L" :snakeX[0] = snakeX[0]-25;break;
case "U" :snakeY[0] = snakeY[0]-25;break;
case "D" :snakeY[0] = snakeY[0]+25;break;
}
//防止小蛇出界:(上下左右都要进行限制)
if(snakeX[0]>750){
snakeX[0] = 25;
}
if(snakeX[0]<25){
snakeX[0] = 750;
}
if(snakeY[0]<100){
snakeY[0] = 725;
}
if(snakeY[0]>725){
snakeY[0] = 100;
}
repaint();
}
}
});
//启动定时器
timer.start();
}
//paintComponent:方法不需要我们自己去调用,系统线程会去调用,
//这个方法作用:所有画的动作都在这个方法中执行:
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
//给面板设置一个背景色:
this.setBackground(new Color(235, 194, 168));
//画头部图片:
Images.headerImg.paintIcon(this,g,10,10);
//画一个矩形:
//换一下画笔的颜色:
g.setColor(new Color(213, 238, 232));
g.fillRect(10,70,770,685);
//根据小蛇的方向来画蛇头:
switch (direction){
case "L" : Images.leftImg.paintIcon(this,g,snakeX[0],snakeY[0]);break;
case "R" : Images.rightImg.paintIcon(this,g,snakeX[0],snakeY[0]);break;
case "U" : Images.upImg.paintIcon(this,g,snakeX[0],snakeY[0]);break;
case "D" : Images.downImg.paintIcon(this,g,snakeX[0],snakeY[0]);break;
}
//画蛇头:
Images.rightImg.paintIcon(this,g,snakeX[0],snakeY[0]);
/*//画第一节身子:
Images.bodyImg.paintIcon(this,g,snakeX[1],snakeY[1]);
//画第二节身子:
Images.bodyImg.paintIcon(this,g,snakeX[2],snakeY[2]);*/
//对蛇身子的画法进行优化,加入循环:
for(int i=1; i<length; i++){
Images.bodyImg.paintIcon(this,g,snakeX[i],snakeY[i]);
}
//当游戏暂停的时候,在面板中画文字:
if( isStart == false) {//游戏是暂停的时候,才绘制文字:
g.setColor(new Color(255, 186, 90));
//设置:字体,加粗,字号
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.drawString("点击空格游戏开始",250,330);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java贪吃蛇小游戏.zip
共13个文件
png:7个
java:3个
gitattributes:1个
需积分: 5 0 下载量 132 浏览量
2024-04-06
17:18:51
上传
评论
收藏 93KB ZIP 举报
温馨提示
java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zip java贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipjava贪吃蛇小游戏.zipja
资源推荐
资源详情
资源评论
收起资源包目录
java贪吃蛇小游戏.zip (13个子文件)
code_20105
.gitattributes 66B
StartGame.java 2KB
Images.java 1KB
GamePanel.java 7KB
.gitignore 7B
images
down.png 2KB
left.png 2KB
food.png 1KB
header.png 77KB
up.png 2KB
right.png 2KB
body.png 1KB
greedy_snake.iml 432B
共 13 条
- 1
资源评论
土豆片片
- 粉丝: 1518
- 资源: 5643
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功