1、项目概述
1.1项目目标和主要内容
- 学习图形界面的设计,利用 MFC 应用程序(Java swing 或 QT 框架,或 C#)创建基于对话框的应用程序,添加背景,标题等控件;
- 蛇能进行移动,并且通过键盘按钮进行方向(上下左右)的调控。
- 蛇有界面边界或者无边界的设定,有随机食物可以随机生成,或者墙体阻挡。
- 有分数的判断和记录,可以通过空格开始游戏或者暂停,死亡后也可重新开始。
- 有游戏的介绍和操作帮助,还有音乐。
1.2项目的主要功能
- 贪吃蛇通过键盘移动吃到随机食物导致身体变长,直到撞到边界或者有自己的身体重合导致游戏结束;
2、项目设计
一个类用来放加载的图片:
包括蛇的头部(4),身体,食物,标题
package Msnake;
import javax.swing.*;
import java.net.URL;
public class Data {
//头部的图片
public static URL headerURL = Data.class.getResource("xiao.png");
public static ImageIcon header = new ImageIcon(headerURL);
//蛇的头部:
public static URL upURL = Data.class.getResource("xiaou.png");
public static URL downURL = Data.class.getResource("xiaod.png");
public static URL leftURL = Data.class.getResource("xiaol.png");
public static URL rightURL = Data.class.getResource("xiao.png");
public static ImageIcon up = new ImageIcon(upURL);
public static ImageIcon down = new ImageIcon(downURL);
public static ImageIcon left = new ImageIcon(leftURL);
public static ImageIcon right = new ImageIcon(rightURL);
//蛇的身体
public static URL bodyURL = Data.class.getResource("fashi.png");
public static ImageIcon body = new ImageIcon(bodyURL);
//食物:
public static URL foodURL = Data.class.getResource("fashi.png");
public static ImageIcon food = new ImageIcon(foodURL);
//墙的图片
public static URL wallURL = Data.class.getResource("qiang.png");
public static ImageIcon wall = new ImageIcon(wallURL);
}
一个类实现贪吃蛇具体功能
1·初始化蛇的各部位
2·分配背景,积分器,标题的位置
3·使用时钟(timer)让食物随机出现
4·使用监听机制通过键盘控制蛇的行动
5·让蛇通过吃到食物让身体变长,积分增加,速度加快等
6·让蛇可以穿墙或者接触墙壁死亡
7·让游戏启动音乐
8·制作菜单,帮助游戏理解游戏操作
package Msnake;
import javax.sound.sampled.*;
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.io.File;
import java.io.IOException;
import java.util.Random;
public class GamePanel extends JPanel implements KeyListener, ActionListener {
int length; //蛇的长度
int[] snakeX = new int[600]; //蛇的坐标X
int[] snakeY = new int[500]; //蛇的坐标Y
String fx; //R:右 L:左 U:上 D:下
static boolean isStart = false;