簡易版“推箱子”遊戲

hjy_java_發表於2020-11-16

簡易版“推箱子”遊戲


此專案適合java初學者練習,需要用到二維陣列,迴圈語句,判斷語句等。

package game;

import java.util.Random;
import java.util.Scanner;

public class txz {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		Random r = new Random();
		//定義一個二維陣列表示地圖:十行十列
		int [][]a=new int[10][10];
		//箱子的隨機座標,箱子初始化不能在邊緣。
		int xh=r.nextInt(8)+1;
		int xl=r.nextInt(8)+1;
		//人的隨機座標
		int rh=r.nextInt(10);
		int rl=r.nextInt(10);
//		終點的隨機座標
		int zh=r.nextInt(10);
		int zl=r.nextInt(10);
//		用一個數字代表:箱子:3       人:1     終點:2
		a[xh][xl]=3;
		a[rh][rl]=1;
		a[zh][zl]=2;
		//迴圈次數不確定用while迴圈
		while(true) {
			//保證人走過終點後,終點還在
				a[zh][zl]=2;
			//將定義好的‘地圖’列印出來
			//箱子:■      人:▲     終點:●
			for(int i=0;i<a.length;i++) {
				for(int j=0;j<a[i].length;j++) {
					
					switch(a[i][j]){
					case 3://要推動的箱子
						System.out.print("■");
						break;
					case 1://人
						System.out.print("▲");
						break;
					case 2://終點
						System.out.print("●");
						break;
					default://空白
						System.out.print("□");
					}
				}
				System.out.println();
			}
			/*當終點的橫座標和縱座標等於箱子的橫座標和縱座標時
			,成功將箱子推向終點,迴圈結束*/
			if(xh==zh&&xl==zl) {

				System.out.println("恭喜你成功把箱子推到終點");
				break;
			}
			System.out.println("輸入w、s、a、d分別代表人向上、下、左、右移動");
			//接收使用者操作資訊
			String s=sc.next();
			switch(s) {
			case "w":
				if(rh>0) {//人的橫座標大於0才能向上移動
				//遇到箱子是
					if(rl==xl&&rh==xh+1) {//人在箱子下方時,才可以向上推箱子
						if(xh>0) {
							xh--;//箱子上移
							a[xh][xl]=3;//箱子圖形也跟著上移
							a[rh][rl]=0;//人原來的座標變空白
							rh--;//人上移
							a[rh][rl]=1;//人圖形也要上移
						}
						//沒遇到箱子時
					}else {
					a[rh][rl]=0;//人原來的座標變空白
					rh--;//人上移
					a[rh][rl]=1;//人圖形也要上移
					}
				
				}
				break;
				//下面操作和向上移動同理,如有疑問私信或評論,我看到會回覆的~
			case "s":
				if(rh<9) {
					if(rl==xl&&rh==xh-1) {
						if(xh<9){
							
							xh++;
							a[xh][xl]=3;
							a[rh][rl]=0;
							rh++;
							a[rh][rl]=1;
						}
					}else {
					a[rh][rl]=0;
					rh++;
					a[rh][rl]=1;
					}
					
				}
				break;
			case "a":
				if(rl>0) {
					if(rh==xh&&rl==xl+1) {
						if(xl>0) {
							
							xl--;
							a[xh][xl]=3;
							a[rh][rl]=0;
							rl--;
							a[rh][rl]=1;
						}
					}else {
					a[rh][rl]=0;
					rl--;
					a[rh][rl]=1;
					}
				}
				break;
			case "d":
				if(rl<9) {
					if(rh==xh&&rl==xl-1) {
						if(xl<9) {
							
							xl++;
							a[xh][xl]=3;
							a[rh][rl]=0;
							rl++;
							a[rh][rl]=1;
						}
					}else {
					a[rh][rl]=0;
					rl++;
					a[rh][rl]=1;
					}
				}
				break;
				default://提示使用者輸入錯誤操作按鈕
					System.out.println("會不會玩?");
					break;
			
			}

		}

	}

}


相關文章