313游戏网 手游攻略 新游动态 java实现推箱子游戏课程设计,推箱子java项目报告

java实现推箱子游戏课程设计,推箱子java项目报告

时间:2024-03-12 03:27:01 来源:头条 浏览:0

这是完整的代码:

公共枚举游戏状态{

玩,

已完成

}

公共类映射{

私有最终int[][] 数据。

私有int 玩家X;

私有int 玩家Y;

公共地图(int [] []数据){

this.data=数据;

for (int i=0; i getHeight(); i++) {

for (int j=0; j getWidth(); j++) {

如果(isPlayer(j,i)){

玩家X=j;

玩家Y=i;

}

}

}

}

公共int getWidth() {

返回数据[0].长度;

}

公共int getHeight() {

返回数据的长度。

}

公共布尔isPlayer(int x, int y) {

返回数据[y][x]==Game.PLAYER;

}

公共布尔isBox(int x, int y) {

返回数据[y][x]==Game.BOX || 数据[y][x]==Game.BOX_ON_GOAL;

}

公共布尔isWall(int x, int y) {

返回数据[y][x]==Game.WALL;

}

公共布尔isGoal(int x, int y) {

返回数据[y][x]==Game.GOAL || 数据[y][x]==Game.BOX_ON_GOAL;

}

公共布尔移动(int dx,int dy){

int newX=玩家X + dx;

int newY=玩家Y + dy;

int newBoxX=newX + dx;

int newBoxY=newY + dy;

if (isBox(newX, newY)) {

if (isWall(newBoxX, newBoxY) || isBox(newBoxX, newBoxY)) {

返回假。

}

数据[newBoxY][newBoxX]=数据[newY][newX]==Game.BOX Game.BOX : Game.BOX_ON_GOAL;

}

data[玩家Y][玩家X]=isGoal(玩家X, 玩家Y) Game.GOAL : Game.SPACE;

玩家X=新X;

玩家Y=新Y;

data[玩家Y][玩家X]=isGoal(玩家X, 玩家Y) Game.PLAYER_ON_GOAL : Game.PLAYER;

返回真。

}

公共int getPlayerX() {

返回玩家X。

}

公共int getPlayerY() {

返回玩家Y。

}

公共布尔isCompleted() {

for (int i=0; i getHeight(); i++) {

for (int j=0; j getWidth(); j++) {

if (isBox(j, i) !isGoal(j, i)) {

返回假。

}

}

}

返回真。

}

}

公开课游戏{

公共静态最终整数WALL=1;

公共静态最终整数SPACE=0;

公共静态最终整数PLAYER=2;

公共静态最终整数框=3;

公共静态最终int 目标=4;

公共静态最终int PLAYER_ON_GOAL=5;

公共静态最终整数BOX_ON_GOAL=6;

私人最终地图地图。

私有GameState 游戏状态;

公共游戏(int [] []数据){

地图=新地图(数据);

游戏状态=游戏状态. 正在玩;

}

公共无效移动(int dx,int dy){

if (map.move(dx, dy)) {

if (map.isCompleted()) {

游戏状态=游戏状态.COMPLETED;

否则{gameState=GameState.PLAYING;

}

}

}

公共int[][] getData() {

int[][] data=new int[map.getHeight()][map.getWidth()];

for (int i=0; i map.getHeight(); i++) {

for (int j=0; j map.getWidth(); j++) {

if (map.isWall(j, i)) {

数据[i][j]=墙;

否则if (map.isGoal(j, i)) {

if (map.isPlayer(j, i)) {

数据[i][j]=PLAYER_ON_GOAL;

否则if (map.isBox(j, i)) {

数据[i][j]=box_on_goal;

} 除此之外{

数据[i][j]=目标;

}

否则if (map.isPlayer(j, i)) {

数据[i][j]=玩家;

否则if (map.isBox(j, i)) {

数据[i][j]=框;

} 除此之外{

数据[i][j]=空间;

}

}

}

返回数据。

}

公共GameState getGameState() {

返回游戏状态。

}

}

公共类主{ 公共静态无效主(字符串[] args) { int[][] 数据={ {1, 1, 1, 1, 1}, {1, 0, 0, 0, 1}, {1, 0, 3, 4, 1}, {1, 0, 0, 0, 1}, {1, 1, 1, 1, 1}, }; 游戏game=新游戏(数据); 扫描仪扫描仪=新扫描仪( System.in); while (game.getGameState()==GameState.PLAYING) { int[][] mapData=game.getData(); for (int[] row : mapData) { for (int cell : row) {开关(单元格){ case Game.WALL: System.out.print('#');break;case Game.SPACE: System.out.print('');break;case Game.PLAYER: System.out.print('@ '); Break; case Game.BOX: System.out.print('$'); Break; case Game.GOAL: System.out.print('.'); Break; case Game.PLAYER_ON_GOAL: System.out.print(' +'); Break; case Game.BOX_ON_GOAL: System.out.print('*'); Break; } } System.out.println(); } System.out.print('输入move: '); 字符串输入=扫描仪.nextLine(); int dx=0; int dy=0; switch (输入) { case 'w': dy=-1; Break; case 'a': dx=-1; Break; case 's': dy=1;break;case 'd': dx=1;break; } game.move(dx, dy); } if (game.getGameState()==GameState.COMPLETED) { System.out.println('恭喜谢谢你,你赢了!'); } } }

以下是实现Java 推盒游戏的简单步骤。

创建一个地图类Map来表示游戏地图,具有以下属性和方法: map: 2D数组,用于存储地图数据playerX,playerY: 玩家坐标目标isWall(int x, int y): 判断指定坐标是否是墙isBox(int x, int y): 判断指定给定坐标是否有a box isGoal(int x, int y): 确定给定坐标是否是目标点isCompleted(): 确定游戏是否完成move(int dx, int dy): 创建一个玩家和一个游戏类Game。它包含以下属性和方法: ): 构造函数接受二维数组作为参数,用于初始化游戏地图run(): 是游戏执行方法,包含游戏的主要逻辑。创建一个主类Main,打开其中的Game类,并调用其run方法来启动游戏。实现Map类的构造函数,将二维数组转换为地图数据。公共地图(int [] []数据){

this.map=new int[data.length][data[0].length];

for (int i=0; i data.length; i++) {

for (int j=0; j data[i].length; j++) {

地图[i][j]=数据[i][j];

if (数据[i][j]==玩家) {

玩家X=j;

玩家Y=i;

} else if (data[i][j]==BOX) {

boxList.add(new int[]{j, i});

} else if (数据[i][j]==目标) {

目标X=j;

目标Y=i;

}

}

}

}

5、实现Map类的isWall方法,判断给定的坐标是否是墙。

公共布尔isWall(int x, int y) {

返回地图[y][x]==墙;

}

6. 实现Map类的isBox方法,检查指定坐标处是否存在盒子。

公共布尔isBox(int x, int y) {

for (int[] box : boxList) {

if (box[0]==x box[1]==y) {

返回真。

}

}

返回假。

}

7、实现Map类的isGoal方法,判断指定坐标是否为目标点。

公共布尔isGoal(int x, int y) {

返回地图[y][x]==目标;

}

8. 实现Map类的isCompleted方法来判断游戏是否完成。

公共布尔isCompleted() {

for (int[] box : boxList) {

if (!isGoal(box[0], box[1])) {

返回假。

}

}

返回真。

}

9. 实现Map类的move方法,移动玩家和盒子,并返回移动是否成功。

公共布尔移动(int dx,int dy){

int newPlayerX=玩家X + dx;

int newPlayerY=玩家Y + dy;

int newBoxX=-1;

int newBoxY=-1;

for (int[] box : boxList) {

if (box[0]==newPlayerX box[1]==newPlayerY) {

newBoxX=框[0] + dx;

newBoxY=框[1] + dy;

if (isWall(newBoxX, newBoxY) || isBox(newBoxX, newBoxY)) {

返回假。

}

框[0]=新框X;

box[1]=新框Y;

}

}

if (isWall(newPlayerX, newPlayerY) || isBox(newPlayerX, newPlayerY)) {

返回假。

}

玩家X=新玩家X;

玩家Y=新玩家Y;

返回真。

}

10. 实现Game类的构造函数,接受二维数组作为参数,并初始化游戏地图。

公共游戏(int [] []数据){

这张地图

=新地图(数据);

}

11. 实现Game类的move方法并调用地图的move方法来移动玩家和盒子并更新游戏状态。 java public void move(int dx, int dy) { if (map.move(dx, dy)) { if (map.isCompleted()) { gameState=GameState.COMPLETED; } else { gameState=GameState.PLAYING; } } }

12. 实现Game类的getMap方法,返回游戏地图: java public Map getMap() { return map; }

13、实现Game类的getGameState方法,返回游戏状态: java public GameState getGameState() { return gameState; }

14. 实现Main类来运行游戏。首先我们读取游戏地图数据,然后创建游戏对象并进入游戏循环。

公共类主要{

公共静态无效主(字符串[] args){

int[][] 数据={

{墙,墙,墙,墙,墙,墙,墙},

{墙,玩家,空间,盒子,空间,空间,墙},

{墙,空间,墙,墙,盒子,空间,墙},

{墙,空间,盒子,球门,墙,空间,墙},

{墙,墙,墙,墙,墙,墙,墙}

};

游戏game=新游戏(数据);

扫描仪扫描仪=新扫描仪(System.in);

while (game.getGameState()==GameState.PLAYING) {

MapMap=game.getMap();

for (int i=0; i map.getHeight(); i++) {

for (int j=0; j map.getWidth(); j++) {

if (map.getPlayerX()==j map.getPlayerY()==i) {

System.out.print('@');

否则if (map.isBox(j, i)) {

System.out.print('$');

否则if (map.isGoal(j, i)) {

System.out.print('.');

否则if (map.isWall(j, i)) {

System.out.print('#');

} 除此之外{

System.out.print(' ');

}

}

System.out.println();

}

System.out.print('输入move:');

字符串输入=scanner.nextLine();

int dx=0;

整数dy=0;

if (input.equalsIgnoreCase('w')) {

dy=-1;

else if (input.equalsIgnoreCase('s')) {

dy=1;

否则if (input.equalsIgnoreCase('a')) {

dx=-1;

否则if (input.equalsIgnoreCase('d')) {

dx=1;

}

游戏.移动(dx,dy);

}

if (game.getGameState()==GameState.COMPLETED) {

System.out.println('恭喜!您已通关游戏!');

} 除此之外{

System.out.println('游戏结束!');

}

}

}

运行游戏并尝试移动玩家和盒子直到游戏结束。

标题:java实现推箱子游戏课程设计,推箱子java项目报告
链接:https://www.313yx.com//news/xydt/147257.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
杀戮传世:四大凶器VS三大魔兵

大家好,当时风靡一时的传奇世界之所以如此火爆,与它的PK机制是分不开的。由于绝大多数球员都是大个子的比赛,所

2024-03-12
问道加点:新手攻略

问道手游是一款受欢迎的游戏,许多新手在开始玩时都会有困惑,比如在加点方面。玩家在加点时,需要注意一些细节,以

2024-03-12
造梦西游3boss爆率:用造三的角色造四的法宝玩是什么体验#游戏

再续天庭八戒上次不是打了通天令牌,今天打造金戒,前提我要先去打造一个玲珑玉。按照惯例先去爬塔刷一波灵魂,爬

2024-03-12
仙境幻想隐藏任务:!

哈喽,大家好,今天给大家带来的是即将上线的全新仙境传说手游, 作为一款基于经典PC游戏《仙境传说》改编的手机

2024-03-12