1、双人贪吃蛇java编程思路
本项目仅供学习,侵删。
引言:
双人贪吃蛇是一个简单但有趣的多人游戏,通常由两个玩家各自控制一条蛇,目标是吃掉屏幕上的食物并避免撞到自己或对方,同时尽量让对方先撞到自己。贪吃蛇是java学习的常用案例,通过学习代码,掌握java图形界面AWT和Swing等相关知识。本项目源于【狂神说Java】GUI编程入门到游戏实战,B站搜UP主:遇见狂神说,即可看见教程 。
双人贪吃蛇设计思路:
(1)游戏玩法:
游戏界面:设计一个足够大的游戏区域,可以是网格形式,每个格子可以放置蛇的身体或食物。
玩家控制:每个玩家控制一条蛇,可以使用键盘的箭头键或其他方式来控制蛇的移动方向。如玩家1方向控制为WASD(英文输入法状态),玩家2方向控制为↑ ← ↓→ 。数字1、2、3、4、5可改变小蛇移动速度。
蛇的表示:每条蛇可以用一系列的小图形来表示,每个小图形代表蛇身体的一个部分。
(2)游戏逻辑
蛇的移动:根据定时器定时重画更新蛇的位置。蛇的身体部分跟随蛇头移动,最后一个部分消失,模拟蛇的移动。
食物的生成:随机在游戏区域内生成食物,当被任一玩家的蛇头触碰时,食物被“吃掉”,蛇的长度增加,并且可以再次生成新的食物。
碰撞检测:
撞墙:蛇头如果移动到游戏区域外,游戏结束。
撞自己:蛇头如果移动到自己身体的其他部分,游戏结束。
撞对方:如果一条蛇撞到另一条蛇,游戏结束。
游戏结束条件:任一玩家的蛇撞到墙、自己或撞到对方蛇时,游戏结束。
2、Data数据类
Data数据类负责存储游戏界面图片信息以及蛇的图片信息。
package com.hua.snake;
import javax.swing.*;
import java.net.URL;
//资源路径更改为自己资源的路径
public class Data {
//食物
public static URL foodUrl = Data.class.getResource("/statics/food.png");
public static ImageIcon food = new ImageIcon(foodUrl);
//头部图片
public static URL headerUrl = Data.class.getResource("/statics/header.png");
public static ImageIcon header = new ImageIcon(headerUrl);
//侧边信息栏
public static URL msgUrl = Data.class.getResource("/statics/msg.png");
public static ImageIcon msg = new ImageIcon(msgUrl);
//玩家1头部:上下左右
public static URL upUrl1 = Data.class.getResource("/statics/play1/up.png");
public static URL downUrl1 = Data.class.getResource("/statics/play1/down.png");
public static URL leftUrl1 = Data.class.getResource("/statics/play1/left.png");
public static URL rightUrl1 = Data.class.getResource("/statics/play1/right.png");
public static ImageIcon up1 = new ImageIcon(upUrl1);
public static ImageIcon down1 = new ImageIcon(downUrl1);
public static ImageIcon left1 = new ImageIcon(leftUrl1);
public static ImageIcon right1 = new ImageIcon(rightUrl1);
//玩家1身体
public static URL bodyUrl1 = Data.class.getResource("/statics/play1/body.png");
public static ImageIcon body1 = new ImageIcon(bodyUrl1);
//玩家2头部:上下左右
public static URL upUrl2 = Data.class.getResource("/statics/play2/up.png");
public static URL downUrl2 = Data.class.getResource("/statics/play2/down.png");
public static URL leftUrl2 = Data.class.getResource("/statics/play2/left.png");
public static URL rightUrl2 = Data.class.getResource("/statics/play2/right.png");
public static ImageIcon up2 = new ImageIcon(upUrl2);
public static ImageIcon down2 = new ImageIcon(downUrl2);
public static ImageIcon left2 = new ImageIcon(leftUrl2);
public static ImageIcon right2 = new ImageIcon(rightUrl2);
//玩家2身体
public static URL bodyUrl2 = Data.class.getResource("/statics/play2/body.png");
public static ImageIcon body2 = new ImageIcon(bodyUrl2);
}
3、StartGame主方法开启
游戏启动类,游戏主方法。
package com.hua.snake;
import javax.swing.*;
public class StartGame extends JFrame {
public static void main(String[] args) {
//新建一个窗口
JFrame frame = new JFrame("Java双人贪吃蛇小游戏");
frame.setBounds(200,50,1100,720); // 设置窗口的位置和大小
frame.setResizable(false); //窗口大小不可调整,即固定窗口大小
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭事件,游戏可以关闭
frame.add(new GamePanel());
frame.setVisible(true); //将窗口展示出来
}
}
4、Player类
玩家类,包含玩家小蛇属性,以及小蛇初始化和小蛇移动方法。
package com.hua.snake;
import javax.swing.*;
import java.util.Random;
public class Player {
//定义蛇的数据结构
int lenth; //蛇的长度
int[] snakeX = new int[600]; //蛇的坐标x
int[] snakeY = new int[500]; //蛇的坐标y
String fx; //蛇的方向 : R:右 L:左 U:上 D:下
ImageIcon up, down, left, right, body; //蛇图像信息
boolean isFail; //判断玩家是否失败
int score; //游戏分数!
Random random = new Random();
//初始化蛇ImageIcon 四种
public void imageSnake(int imageSna) {
switch (imageSna