控制台的小游戏推箱子

"这是一个使用Java编写的推箱子游戏程序。程序通过二维数组模拟地图,随机生成人物、箱子和终点的位置,并允许用户通过键盘输入"W"、"S"、"A"、"D"来控制人物移动。当人物成功将箱子推到终点时,游戏结束并显示通关信息。程序包含地图的打印、人物和箱子的移动判断等核心逻辑。"
摘要由CSDN通过智能技术生成
package day10;

import java.util.Random;
import java.util.Scanner;
/**
 * 用一个二维数组代表地图。二维数组中0代表空,1代表人,2代表箱子,3代表终点,
 * 用随机器分别生成箱子,人,终点的坐标。
 * 从键盘中输入"w","s","a","d",分别代表上下左右移动的操作,每操作一次打印一次地图。
 * 
 *
 */
public class TXZ {
	//在控制台打印地图。0-□ 代表空,1-●代 表人,2-■ 代表箱子,3-▲ 代表终点。
	public static void showMap(int[][] map) {
		for (int i = 0; i < map.length; i++) {
			for (int j = 0; j < map[i].length; j++) {
				if (map[i][j] == 0) {
					System.out.print("□ ");
				} else if (map[i][j] == 1) {
					System.out.print("● ");
				} else if (map[i][j] == 2) {
					System.out.print("■ ");
				} else {
					System.out.print("▲ ");
				}
			}
			System.out.println();
		}
	}
	public static void main(String[] args) {
		//初始化一张地图
		Scanner sc = new Scanner(System.in);//扫描仪
		Random r = new Random();//随机器
		int[][] map = new int[10][10];//生成一个二维数组(地图)

		int personX = r.nextInt(10);//随机生成人的横坐标
		int personY = r.nextInt(10);//随机生成人的纵坐标

		int chestX = r.nextInt(8) + 1;//随机生成箱子的横坐标
		int chestY = r.nextInt(8) + 1;//随机生成箱子的横坐标

		int targetX = r.nextInt(10);//随机生成终点的横坐标
		int targetY = r.nextInt(10);//随机生成终点的横坐标
		map[targetY][targetX] = 3;//将终点的纵坐标赋值为3
		
		System.out.println("提示:w为向上移动,s为向下移动,a为向左移动,d为向右移动。请移动");
		while (true) {
			map[personY][personX] = 1;//将人的纵坐标赋值为1
			map[chestY][chestX] = 2;//将箱子的纵坐标赋值为2
			
			//判断箱子的坐标是否等于终点的坐标,如果满足跳出循环,游戏结束
			if (map[chestY][chestX] == map[targetY][targetX]) {
				map[chestY][chestX] = 3;//将箱子的值设为3
				System.out.println("恭喜通关");
				showMap(map);//打印地图
				break;
			}
			showMap(map);//打印地图
			System.out.println("提示:w为向上移动,s为向下移动,a为向左移动,d为向右移动。请移动");
			String move = sc.next();//输入要移动的方向
			
//			向上一种移动的操作,其余三个方向类似。
			if (move.equals("w")) {
				
				//判断人的纵坐标是否大于0,大于零才能向上移动(防止人移动越界)
				if (personY > 0) {
					
					//判断1.人的横坐标受否等于人的纵坐标且人要在终点的下面(这个判断是不能让终点被人吃掉),如果满足不进行任何的操作
					//判断2.箱子的纵坐标为0且人的横坐标和箱子的横坐标相等(防止人把箱子推出界外),如果满足不进行任何的操作
					if (personX == targetX && personY == targetY + 1||chestY==0&&chestX==personX) {

					} else {
						//推箱子和人移动的操作
						//如果箱子在人的上方,箱子纵坐标见减一
						if (personX == chestX && personY == chestY + 1) {
							chestY--;
						}
						map[personY][personX] = 0;//人的坐标归为0
						personY--;//箱子纵坐标见减一
					}
				}
			} else if (move.equals("s")) {
				if (personY < 9) {
					if (personX == targetX && personY == targetY - 1||chestY==9&&chestX==personX) {

					} else {
						if (personX == chestX && personY == chestY - 1) {
							chestY++;
						}
						map[personY][personX] = 0;
						personY++;
					}
				}

			} else if (move.equals("a")) {
				if (personX > 0) {
					if (personY == targetY && personX == targetX + 1||chestX==0&&chestY==personY) {

					}else {
						if (personY == chestY && personX == chestX + 1) {
							chestX--;
						}
						map[personY][personX] = 0;
						personX--;
					}
				}

			} else if (move.equals("d")) {
				if (personX < 9) {
					if (personY == targetY && personX == targetX - 1||chestX==9&&chestY==personY) {

					}else {
						if (personY == chestY && personX == chestX - 1) {
							chestX++;
						}
						map[personY][personX] = 0;
						personX++;
					}
				}
			} else {
				System.out.println("输入错误");
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值